@tinyrack/issuary-server 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emails/components/email-layout.d.ts +8 -0
- package/dist/emails/components/email-layout.d.ts.map +1 -0
- package/dist/emails/components/email-layout.js +6 -0
- package/dist/emails/components/email-layout.js.map +1 -0
- package/dist/emails/i18n/en.json +26 -0
- package/dist/emails/i18n/index.d.ts +3 -0
- package/dist/emails/i18n/index.d.ts.map +1 -0
- package/dist/emails/i18n/index.js +12 -0
- package/dist/emails/i18n/index.js.map +1 -0
- package/dist/emails/i18n/ja.json +26 -0
- package/dist/emails/i18n/ko.json +26 -0
- package/dist/emails/render.d.ts +12 -0
- package/dist/emails/render.d.ts.map +1 -0
- package/dist/emails/render.js +22 -0
- package/dist/emails/render.js.map +1 -0
- package/dist/emails/templates/password-reset.d.ts +10 -0
- package/dist/emails/templates/password-reset.d.ts.map +1 -0
- package/dist/emails/templates/password-reset.js +10 -0
- package/dist/emails/templates/password-reset.js.map +1 -0
- package/dist/emails/templates/verification.d.ts +10 -0
- package/dist/emails/templates/verification.d.ts.map +1 -0
- package/dist/emails/templates/verification.js +10 -0
- package/dist/emails/templates/verification.js.map +1 -0
- package/dist/entities/background-job.entity.d.ts +111 -0
- package/dist/entities/background-job.entity.d.ts.map +1 -0
- package/dist/entities/background-job.entity.js +53 -0
- package/dist/entities/background-job.entity.js.map +1 -0
- package/dist/entities/base.entity.d.ts +23 -0
- package/dist/entities/base.entity.d.ts.map +1 -0
- package/dist/entities/base.entity.js +17 -0
- package/dist/entities/base.entity.js.map +1 -0
- package/dist/entities/bootstrap-state.entity.d.ts +40 -0
- package/dist/entities/bootstrap-state.entity.d.ts.map +1 -0
- package/dist/entities/bootstrap-state.entity.js +13 -0
- package/dist/entities/bootstrap-state.entity.js.map +1 -0
- package/dist/entities/email-verification.entity.d.ts +96 -0
- package/dist/entities/email-verification.entity.d.ts.map +1 -0
- package/dist/entities/email-verification.entity.js +42 -0
- package/dist/entities/email-verification.entity.js.map +1 -0
- package/dist/entities/jwt-key.entity.d.ts +256 -0
- package/dist/entities/jwt-key.entity.d.ts.map +1 -0
- package/dist/entities/jwt-key.entity.js +125 -0
- package/dist/entities/jwt-key.entity.js.map +1 -0
- package/dist/entities/oauth-client.entity.d.ts +1778 -0
- package/dist/entities/oauth-client.entity.d.ts.map +1 -0
- package/dist/entities/oauth-client.entity.js +82 -0
- package/dist/entities/oauth-client.entity.js.map +1 -0
- package/dist/entities/oauth-code.entity.d.ts +1799 -0
- package/dist/entities/oauth-code.entity.d.ts.map +1 -0
- package/dist/entities/oauth-code.entity.js +79 -0
- package/dist/entities/oauth-code.entity.js.map +1 -0
- package/dist/entities/oauth-device-code.entity.d.ts +1779 -0
- package/dist/entities/oauth-device-code.entity.d.ts.map +1 -0
- package/dist/entities/oauth-device-code.entity.js +73 -0
- package/dist/entities/oauth-device-code.entity.js.map +1 -0
- package/dist/entities/password-reset.entity.d.ts +96 -0
- package/dist/entities/password-reset.entity.d.ts.map +1 -0
- package/dist/entities/password-reset.entity.js +39 -0
- package/dist/entities/password-reset.entity.js.map +1 -0
- package/dist/entities/pending-oauth-registration.entity.d.ts +116 -0
- package/dist/entities/pending-oauth-registration.entity.d.ts.map +1 -0
- package/dist/entities/pending-oauth-registration.entity.js +67 -0
- package/dist/entities/pending-oauth-registration.entity.js.map +1 -0
- package/dist/entities/revoked-token.entity.d.ts +1796 -0
- package/dist/entities/revoked-token.entity.d.ts.map +1 -0
- package/dist/entities/revoked-token.entity.js +69 -0
- package/dist/entities/revoked-token.entity.js.map +1 -0
- package/dist/entities/scheduler-job.entity.d.ts +134 -0
- package/dist/entities/scheduler-job.entity.d.ts.map +1 -0
- package/dist/entities/scheduler-job.entity.js +56 -0
- package/dist/entities/scheduler-job.entity.js.map +1 -0
- package/dist/entities/terms-content.entity.d.ts +834 -0
- package/dist/entities/terms-content.entity.d.ts.map +1 -0
- package/dist/entities/terms-content.entity.js +46 -0
- package/dist/entities/terms-content.entity.js.map +1 -0
- package/dist/entities/terms.entity.d.ts +827 -0
- package/dist/entities/terms.entity.d.ts.map +1 -0
- package/dist/entities/terms.entity.js +42 -0
- package/dist/entities/terms.entity.js.map +1 -0
- package/dist/entities/user-consent.entity.d.ts +1792 -0
- package/dist/entities/user-consent.entity.d.ts.map +1 -0
- package/dist/entities/user-consent.entity.js +66 -0
- package/dist/entities/user-consent.entity.js.map +1 -0
- package/dist/entities/user-oauth.entity.d.ts +81 -0
- package/dist/entities/user-oauth.entity.d.ts.map +1 -0
- package/dist/entities/user-oauth.entity.js +46 -0
- package/dist/entities/user-oauth.entity.js.map +1 -0
- package/dist/entities/user-passkey.entity.d.ts +151 -0
- package/dist/entities/user-passkey.entity.d.ts.map +1 -0
- package/dist/entities/user-passkey.entity.js +64 -0
- package/dist/entities/user-passkey.entity.js.map +1 -0
- package/dist/entities/user-terms-consent.entity.d.ts +834 -0
- package/dist/entities/user-terms-consent.entity.d.ts.map +1 -0
- package/dist/entities/user-terms-consent.entity.js +62 -0
- package/dist/entities/user-terms-consent.entity.js.map +1 -0
- package/dist/entities/user-totp-recovery-code.entity.d.ts +545 -0
- package/dist/entities/user-totp-recovery-code.entity.d.ts.map +1 -0
- package/dist/entities/user-totp-recovery-code.entity.js +34 -0
- package/dist/entities/user-totp-recovery-code.entity.js.map +1 -0
- package/dist/entities/user-totp.entity.d.ts +545 -0
- package/dist/entities/user-totp.entity.d.ts.map +1 -0
- package/dist/entities/user-totp.entity.js +38 -0
- package/dist/entities/user-totp.entity.js.map +1 -0
- package/dist/entities/user.entity.d.ts +551 -0
- package/dist/entities/user.entity.d.ts.map +1 -0
- package/dist/entities/user.entity.js +70 -0
- package/dist/entities/user.entity.js.map +1 -0
- package/dist/entrypoints/app.d.ts +1802 -0
- package/dist/entrypoints/app.d.ts.map +1 -0
- package/dist/entrypoints/app.js +164 -0
- package/dist/entrypoints/app.js.map +1 -0
- package/dist/entrypoints/config/index.d.ts +2 -0
- package/dist/entrypoints/config/index.d.ts.map +1 -0
- package/dist/entrypoints/config/index.js +2 -0
- package/dist/entrypoints/config/index.js.map +1 -0
- package/dist/entrypoints/database/postgres/cli.d.ts +4 -0
- package/dist/entrypoints/database/postgres/cli.d.ts.map +1 -0
- package/dist/entrypoints/database/postgres/cli.js +20 -0
- package/dist/entrypoints/database/postgres/cli.js.map +1 -0
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts +865 -0
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -0
- package/dist/entrypoints/database/postgres/compiled-functions.js +10817 -0
- package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -0
- package/dist/entrypoints/database/postgres/postgres.d.ts +14 -0
- package/dist/entrypoints/database/postgres/postgres.d.ts.map +1 -0
- package/dist/entrypoints/database/postgres/postgres.js +36 -0
- package/dist/entrypoints/database/postgres/postgres.js.map +1 -0
- package/dist/entrypoints/database/sqlite/cli.d.ts +4 -0
- package/dist/entrypoints/database/sqlite/cli.d.ts.map +1 -0
- package/dist/entrypoints/database/sqlite/cli.js +14 -0
- package/dist/entrypoints/database/sqlite/cli.js.map +1 -0
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +865 -0
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -0
- package/dist/entrypoints/database/sqlite/compiled-functions.js +10817 -0
- package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -0
- package/dist/entrypoints/database/sqlite/sqlite.d.ts +10 -0
- package/dist/entrypoints/database/sqlite/sqlite.d.ts.map +1 -0
- package/dist/entrypoints/database/sqlite/sqlite.js +36 -0
- package/dist/entrypoints/database/sqlite/sqlite.js.map +1 -0
- package/dist/entrypoints/frontend/index.d.ts +4 -0
- package/dist/entrypoints/frontend/index.d.ts.map +1 -0
- package/dist/entrypoints/frontend/index.js +2 -0
- package/dist/entrypoints/frontend/index.js.map +1 -0
- package/dist/entrypoints/frontend/proxy.d.ts +2 -0
- package/dist/entrypoints/frontend/proxy.d.ts.map +1 -0
- package/dist/entrypoints/frontend/proxy.js +2 -0
- package/dist/entrypoints/frontend/proxy.js.map +1 -0
- package/dist/entrypoints/frontend/static.d.ts +2 -0
- package/dist/entrypoints/frontend/static.d.ts.map +1 -0
- package/dist/entrypoints/frontend/static.js +2 -0
- package/dist/entrypoints/frontend/static.js.map +1 -0
- package/dist/entrypoints/identity-providers/apple.d.ts +15 -0
- package/dist/entrypoints/identity-providers/apple.d.ts.map +1 -0
- package/dist/entrypoints/identity-providers/apple.js +24 -0
- package/dist/entrypoints/identity-providers/apple.js.map +1 -0
- package/dist/entrypoints/identity-providers/generic-oauth.d.ts +27 -0
- package/dist/entrypoints/identity-providers/generic-oauth.d.ts.map +1 -0
- package/dist/entrypoints/identity-providers/generic-oauth.js +22 -0
- package/dist/entrypoints/identity-providers/generic-oauth.js.map +1 -0
- package/dist/entrypoints/identity-providers/github.d.ts +13 -0
- package/dist/entrypoints/identity-providers/github.d.ts.map +1 -0
- package/dist/entrypoints/identity-providers/github.js +24 -0
- package/dist/entrypoints/identity-providers/github.js.map +1 -0
- package/dist/entrypoints/identity-providers/google.d.ts +13 -0
- package/dist/entrypoints/identity-providers/google.d.ts.map +1 -0
- package/dist/entrypoints/identity-providers/google.js +24 -0
- package/dist/entrypoints/identity-providers/google.js.map +1 -0
- package/dist/entrypoints/index.d.ts +3 -0
- package/dist/entrypoints/index.d.ts.map +1 -0
- package/dist/entrypoints/index.js +3 -0
- package/dist/entrypoints/index.js.map +1 -0
- package/dist/entrypoints/mail/nodemailer.d.ts +11 -0
- package/dist/entrypoints/mail/nodemailer.d.ts.map +1 -0
- package/dist/entrypoints/mail/nodemailer.js +30 -0
- package/dist/entrypoints/mail/nodemailer.js.map +1 -0
- package/dist/entrypoints/scheduler/cron.d.ts +3 -0
- package/dist/entrypoints/scheduler/cron.d.ts.map +1 -0
- package/dist/entrypoints/scheduler/cron.js +34 -0
- package/dist/entrypoints/scheduler/cron.js.map +1 -0
- package/dist/entrypoints/scheduler/croner.d.ts +6 -0
- package/dist/entrypoints/scheduler/croner.d.ts.map +1 -0
- package/dist/entrypoints/scheduler/croner.js +42 -0
- package/dist/entrypoints/scheduler/croner.js.map +1 -0
- package/dist/entrypoints/scheduler/database.d.ts +38 -0
- package/dist/entrypoints/scheduler/database.d.ts.map +1 -0
- package/dist/entrypoints/scheduler/database.js +444 -0
- package/dist/entrypoints/scheduler/database.js.map +1 -0
- package/dist/entrypoints/scheduler/distributed-runner.d.ts +134 -0
- package/dist/entrypoints/scheduler/distributed-runner.d.ts.map +1 -0
- package/dist/entrypoints/scheduler/distributed-runner.js +327 -0
- package/dist/entrypoints/scheduler/distributed-runner.js.map +1 -0
- package/dist/entrypoints/services.d.ts +3 -0
- package/dist/entrypoints/services.d.ts.map +1 -0
- package/dist/entrypoints/services.js +2 -0
- package/dist/entrypoints/services.js.map +1 -0
- package/dist/lib/app-env.d.ts +17 -0
- package/dist/lib/app-env.d.ts.map +1 -0
- package/dist/lib/app-env.js +2 -0
- package/dist/lib/app-env.js.map +1 -0
- package/dist/lib/base64url.d.ts +33 -0
- package/dist/lib/base64url.d.ts.map +1 -0
- package/dist/lib/base64url.js +93 -0
- package/dist/lib/base64url.js.map +1 -0
- package/dist/lib/config/account-deletion.d.ts +11 -0
- package/dist/lib/config/account-deletion.d.ts.map +1 -0
- package/dist/lib/config/account-deletion.js +16 -0
- package/dist/lib/config/account-deletion.js.map +1 -0
- 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 +194 -0
- package/dist/lib/config/auth.d.ts.map +1 -0
- package/dist/lib/config/auth.js +216 -0
- package/dist/lib/config/auth.js.map +1 -0
- package/dist/lib/config/branding.d.ts +14 -0
- package/dist/lib/config/branding.d.ts.map +1 -0
- package/dist/lib/config/branding.js +37 -0
- package/dist/lib/config/branding.js.map +1 -0
- package/dist/lib/config/cleanup.d.ts +59 -0
- package/dist/lib/config/cleanup.d.ts.map +1 -0
- package/dist/lib/config/cleanup.js +119 -0
- package/dist/lib/config/cleanup.js.map +1 -0
- package/dist/lib/config/client.d.ts +74 -0
- package/dist/lib/config/client.d.ts.map +1 -0
- package/dist/lib/config/client.js +195 -0
- package/dist/lib/config/client.js.map +1 -0
- package/dist/lib/config/database.d.ts +8 -0
- package/dist/lib/config/database.d.ts.map +1 -0
- package/dist/lib/config/database.js +8 -0
- package/dist/lib/config/database.js.map +1 -0
- package/dist/lib/config/email.d.ts +17 -0
- package/dist/lib/config/email.d.ts.map +1 -0
- package/dist/lib/config/email.js +7 -0
- package/dist/lib/config/email.js.map +1 -0
- package/dist/lib/config/frontend.d.ts +12 -0
- package/dist/lib/config/frontend.d.ts.map +1 -0
- package/dist/lib/config/frontend.js +7 -0
- package/dist/lib/config/frontend.js.map +1 -0
- package/dist/lib/config/i18n.d.ts +31 -0
- package/dist/lib/config/i18n.d.ts.map +1 -0
- package/dist/lib/config/i18n.js +23 -0
- package/dist/lib/config/i18n.js.map +1 -0
- package/dist/lib/config/identity-providers.d.ts +70 -0
- package/dist/lib/config/identity-providers.d.ts.map +1 -0
- package/dist/lib/config/identity-providers.js +88 -0
- package/dist/lib/config/identity-providers.js.map +1 -0
- package/dist/lib/config/index.d.ts +43 -0
- package/dist/lib/config/index.d.ts.map +1 -0
- package/dist/lib/config/index.js +22 -0
- package/dist/lib/config/index.js.map +1 -0
- package/dist/lib/config/logging.d.ts +52 -0
- package/dist/lib/config/logging.d.ts.map +1 -0
- package/dist/lib/config/logging.js +41 -0
- package/dist/lib/config/logging.js.map +1 -0
- package/dist/lib/config/openapi.d.ts +15 -0
- package/dist/lib/config/openapi.d.ts.map +1 -0
- package/dist/lib/config/openapi.js +28 -0
- package/dist/lib/config/openapi.js.map +1 -0
- package/dist/lib/config/registration.d.ts +15 -0
- package/dist/lib/config/registration.d.ts.map +1 -0
- package/dist/lib/config/registration.js +24 -0
- package/dist/lib/config/registration.js.map +1 -0
- package/dist/lib/config/resolved.d.ts +249 -0
- package/dist/lib/config/resolved.d.ts.map +1 -0
- package/dist/lib/config/resolved.js +47 -0
- package/dist/lib/config/resolved.js.map +1 -0
- package/dist/lib/config/scheduler.d.ts +52 -0
- package/dist/lib/config/scheduler.d.ts.map +1 -0
- package/dist/lib/config/scheduler.js +20 -0
- package/dist/lib/config/scheduler.js.map +1 -0
- package/dist/lib/config/security.d.ts +11 -0
- package/dist/lib/config/security.d.ts.map +1 -0
- package/dist/lib/config/security.js +65 -0
- package/dist/lib/config/security.js.map +1 -0
- package/dist/lib/config/server.d.ts +13 -0
- package/dist/lib/config/server.d.ts.map +1 -0
- package/dist/lib/config/server.js +57 -0
- package/dist/lib/config/server.js.map +1 -0
- package/dist/lib/config/terms.d.ts +47 -0
- package/dist/lib/config/terms.d.ts.map +1 -0
- package/dist/lib/config/terms.js +71 -0
- package/dist/lib/config/terms.js.map +1 -0
- package/dist/lib/config/tokens.d.ts +32 -0
- package/dist/lib/config/tokens.d.ts.map +1 -0
- package/dist/lib/config/tokens.js +47 -0
- package/dist/lib/config/tokens.js.map +1 -0
- package/dist/lib/config/url-policy.d.ts +4 -0
- package/dist/lib/config/url-policy.d.ts.map +1 -0
- package/dist/lib/config/url-policy.js +38 -0
- package/dist/lib/config/url-policy.js.map +1 -0
- package/dist/lib/config/user.d.ts +22 -0
- package/dist/lib/config/user.d.ts.map +1 -0
- package/dist/lib/config/user.js +22 -0
- package/dist/lib/config/user.js.map +1 -0
- package/dist/lib/crypto.d.ts +106 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +263 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/database/entities.d.ts +10 -0
- package/dist/lib/database/entities.d.ts.map +1 -0
- package/dist/lib/database/entities.js +51 -0
- package/dist/lib/database/entities.js.map +1 -0
- package/dist/lib/duration.d.ts +44 -0
- package/dist/lib/duration.d.ts.map +1 -0
- package/dist/lib/duration.js +103 -0
- package/dist/lib/duration.js.map +1 -0
- package/dist/lib/email-pattern.d.ts +16 -0
- package/dist/lib/email-pattern.d.ts.map +1 -0
- package/dist/lib/email-pattern.js +41 -0
- package/dist/lib/email-pattern.js.map +1 -0
- package/dist/lib/escape-html.d.ts +7 -0
- package/dist/lib/escape-html.d.ts.map +1 -0
- package/dist/lib/escape-html.js +14 -0
- package/dist/lib/escape-html.js.map +1 -0
- package/dist/lib/frontend/proxy.d.ts +24 -0
- package/dist/lib/frontend/proxy.d.ts.map +1 -0
- package/dist/lib/frontend/proxy.js +38 -0
- package/dist/lib/frontend/proxy.js.map +1 -0
- package/dist/lib/frontend/static.d.ts +21 -0
- package/dist/lib/frontend/static.d.ts.map +1 -0
- package/dist/lib/frontend/static.js +108 -0
- package/dist/lib/frontend/static.js.map +1 -0
- package/dist/lib/interpolate-html.d.ts +34 -0
- package/dist/lib/interpolate-html.d.ts.map +1 -0
- package/dist/lib/interpolate-html.js +61 -0
- package/dist/lib/interpolate-html.js.map +1 -0
- package/dist/lib/ip-utils.d.ts +61 -0
- package/dist/lib/ip-utils.d.ts.map +1 -0
- package/dist/lib/ip-utils.js +213 -0
- package/dist/lib/ip-utils.js.map +1 -0
- package/dist/lib/locale.d.ts +57 -0
- package/dist/lib/locale.d.ts.map +1 -0
- package/dist/lib/locale.js +25 -0
- package/dist/lib/locale.js.map +1 -0
- package/dist/lib/logger.d.ts +14 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +41 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/openapi.d.ts +35 -0
- package/dist/lib/openapi.d.ts.map +1 -0
- package/dist/lib/openapi.js +33 -0
- package/dist/lib/openapi.js.map +1 -0
- package/dist/lib/password-policy.d.ts +39 -0
- package/dist/lib/password-policy.d.ts.map +1 -0
- package/dist/lib/password-policy.js +51 -0
- package/dist/lib/password-policy.js.map +1 -0
- package/dist/lib/pkce.d.ts +26 -0
- package/dist/lib/pkce.d.ts.map +1 -0
- package/dist/lib/pkce.js +59 -0
- package/dist/lib/pkce.js.map +1 -0
- package/dist/lib/scopes.d.ts +10 -0
- package/dist/lib/scopes.d.ts.map +1 -0
- package/dist/lib/scopes.js +38 -0
- package/dist/lib/scopes.js.map +1 -0
- package/dist/lib/swagger-tags.d.ts +16 -0
- package/dist/lib/swagger-tags.d.ts.map +1 -0
- package/dist/lib/swagger-tags.js +16 -0
- package/dist/lib/swagger-tags.js.map +1 -0
- package/dist/middleware/auth.d.ts +67 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +149 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/csrf.d.ts +2 -0
- package/dist/middleware/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf.js +51 -0
- package/dist/middleware/csrf.js.map +1 -0
- package/dist/middleware/logger.d.ts +18 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +38 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/mikro-orm.d.ts +3 -0
- package/dist/middleware/mikro-orm.d.ts.map +1 -0
- package/dist/middleware/mikro-orm.js +11 -0
- package/dist/middleware/mikro-orm.js.map +1 -0
- package/dist/middleware/services.d.ts +8 -0
- package/dist/middleware/services.d.ts.map +1 -0
- package/dist/middleware/services.js +8 -0
- package/dist/middleware/services.js.map +1 -0
- package/dist/middleware/session.d.ts +107 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +185 -0
- package/dist/middleware/session.js.map +1 -0
- package/dist/middleware/trusted-proxy-guard.d.ts +7 -0
- package/dist/middleware/trusted-proxy-guard.d.ts.map +1 -0
- package/dist/middleware/trusted-proxy-guard.js +34 -0
- package/dist/middleware/trusted-proxy-guard.js.map +1 -0
- package/dist/migrations/postgres/Migration20260509171036_initial.d.ts +5 -0
- package/dist/migrations/postgres/Migration20260509171036_initial.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260509171036_initial.js +246 -0
- package/dist/migrations/postgres/Migration20260509171036_initial.js.map +1 -0
- package/dist/migrations/postgres/Migration20260512120000_add_scheduler_jobs.d.ts +5 -0
- package/dist/migrations/postgres/Migration20260512120000_add_scheduler_jobs.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260512120000_add_scheduler_jobs.js +15 -0
- package/dist/migrations/postgres/Migration20260512120000_add_scheduler_jobs.js.map +1 -0
- package/dist/migrations/postgres/Migration20260619075007.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260619075007.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260619075007.js +86 -0
- package/dist/migrations/postgres/Migration20260619075007.js.map +1 -0
- package/dist/migrations/postgres/Migration20260619191600_unique_oauth_client_client_id.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260619191600_unique_oauth_client_client_id.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260619191600_unique_oauth_client_client_id.js +12 -0
- package/dist/migrations/postgres/Migration20260619191600_unique_oauth_client_client_id.js.map +1 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.js +11 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.js.map +1 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.js +11 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.js.map +1 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.js +14 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.js.map +1 -0
- package/dist/migrations/postgres/Migration20260626103000_allow_revoked_token_without_user.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260626103000_allow_revoked_token_without_user.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260626103000_allow_revoked_token_without_user.js +10 -0
- package/dist/migrations/postgres/Migration20260626103000_allow_revoked_token_without_user.js.map +1 -0
- package/dist/migrations/postgres/index.d.ts +3 -0
- package/dist/migrations/postgres/index.d.ts.map +1 -0
- package/dist/migrations/postgres/index.js +19 -0
- package/dist/migrations/postgres/index.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260509171226_initial.d.ts +5 -0
- package/dist/migrations/sqlite/Migration20260509171226_initial.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260509171226_initial.js +62 -0
- package/dist/migrations/sqlite/Migration20260509171226_initial.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260512120000_add_scheduler_jobs.d.ts +5 -0
- package/dist/migrations/sqlite/Migration20260512120000_add_scheduler_jobs.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260512120000_add_scheduler_jobs.js +13 -0
- package/dist/migrations/sqlite/Migration20260512120000_add_scheduler_jobs.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260619075330.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260619075330.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260619075330.js +57 -0
- package/dist/migrations/sqlite/Migration20260619075330.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260619191600_unique_oauth_client_client_id.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260619191600_unique_oauth_client_client_id.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260619191600_unique_oauth_client_client_id.js +12 -0
- package/dist/migrations/sqlite/Migration20260619191600_unique_oauth_client_client_id.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.js +10 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.js +10 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.js +12 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260626103000_allow_revoked_token_without_user.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260626103000_allow_revoked_token_without_user.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260626103000_allow_revoked_token_without_user.js +28 -0
- package/dist/migrations/sqlite/Migration20260626103000_allow_revoked_token_without_user.js.map +1 -0
- package/dist/migrations/sqlite/index.d.ts +3 -0
- package/dist/migrations/sqlite/index.d.ts.map +1 -0
- package/dist/migrations/sqlite/index.js +19 -0
- package/dist/migrations/sqlite/index.js.map +1 -0
- package/dist/repositories/background-job.repository.d.ts +5 -0
- package/dist/repositories/background-job.repository.d.ts.map +1 -0
- package/dist/repositories/background-job.repository.js +4 -0
- package/dist/repositories/background-job.repository.js.map +1 -0
- package/dist/repositories/email-verification.repository.d.ts +18 -0
- package/dist/repositories/email-verification.repository.d.ts.map +1 -0
- package/dist/repositories/email-verification.repository.js +47 -0
- package/dist/repositories/email-verification.repository.js.map +1 -0
- package/dist/repositories/jwt-key.repository.d.ts +49 -0
- package/dist/repositories/jwt-key.repository.d.ts.map +1 -0
- package/dist/repositories/jwt-key.repository.js +72 -0
- package/dist/repositories/jwt-key.repository.js.map +1 -0
- package/dist/repositories/oauth-client.repository.d.ts +5 -0
- package/dist/repositories/oauth-client.repository.d.ts.map +1 -0
- package/dist/repositories/oauth-client.repository.js +4 -0
- package/dist/repositories/oauth-client.repository.js.map +1 -0
- package/dist/repositories/oauth-code.repository.d.ts +24 -0
- package/dist/repositories/oauth-code.repository.d.ts.map +1 -0
- package/dist/repositories/oauth-code.repository.js +47 -0
- package/dist/repositories/oauth-code.repository.js.map +1 -0
- package/dist/repositories/oauth-device-code.repository.d.ts +29 -0
- package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -0
- package/dist/repositories/oauth-device-code.repository.js +110 -0
- package/dist/repositories/oauth-device-code.repository.js.map +1 -0
- package/dist/repositories/password-reset.repository.d.ts +19 -0
- package/dist/repositories/password-reset.repository.d.ts.map +1 -0
- package/dist/repositories/password-reset.repository.js +53 -0
- package/dist/repositories/password-reset.repository.js.map +1 -0
- package/dist/repositories/pending-oauth-registration.repository.d.ts +38 -0
- package/dist/repositories/pending-oauth-registration.repository.d.ts.map +1 -0
- package/dist/repositories/pending-oauth-registration.repository.js +50 -0
- package/dist/repositories/pending-oauth-registration.repository.js.map +1 -0
- package/dist/repositories/revoked-token.repository.d.ts +52 -0
- package/dist/repositories/revoked-token.repository.d.ts.map +1 -0
- package/dist/repositories/revoked-token.repository.js +86 -0
- package/dist/repositories/revoked-token.repository.js.map +1 -0
- package/dist/repositories/scheduler-job.repository.d.ts +5 -0
- package/dist/repositories/scheduler-job.repository.d.ts.map +1 -0
- package/dist/repositories/scheduler-job.repository.js +4 -0
- package/dist/repositories/scheduler-job.repository.js.map +1 -0
- package/dist/repositories/terms-content.repository.d.ts +5 -0
- package/dist/repositories/terms-content.repository.d.ts.map +1 -0
- package/dist/repositories/terms-content.repository.js +4 -0
- package/dist/repositories/terms-content.repository.js.map +1 -0
- package/dist/repositories/terms.repository.d.ts +9 -0
- package/dist/repositories/terms.repository.d.ts.map +1 -0
- package/dist/repositories/terms.repository.js +12 -0
- package/dist/repositories/terms.repository.js.map +1 -0
- package/dist/repositories/user-consent.repository.d.ts +22 -0
- package/dist/repositories/user-consent.repository.d.ts.map +1 -0
- package/dist/repositories/user-consent.repository.js +51 -0
- package/dist/repositories/user-consent.repository.js.map +1 -0
- package/dist/repositories/user-oauth.repository.d.ts +68 -0
- package/dist/repositories/user-oauth.repository.d.ts.map +1 -0
- package/dist/repositories/user-oauth.repository.js +94 -0
- package/dist/repositories/user-oauth.repository.js.map +1 -0
- package/dist/repositories/user-passkey.repository.d.ts +193 -0
- package/dist/repositories/user-passkey.repository.d.ts.map +1 -0
- package/dist/repositories/user-passkey.repository.js +61 -0
- package/dist/repositories/user-passkey.repository.js.map +1 -0
- package/dist/repositories/user-terms-consent.repository.d.ts +38 -0
- package/dist/repositories/user-terms-consent.repository.d.ts.map +1 -0
- package/dist/repositories/user-terms-consent.repository.js +71 -0
- package/dist/repositories/user-terms-consent.repository.js.map +1 -0
- package/dist/repositories/user-totp-recovery-code.repository.d.ts +388 -0
- package/dist/repositories/user-totp-recovery-code.repository.d.ts.map +1 -0
- package/dist/repositories/user-totp-recovery-code.repository.js +41 -0
- package/dist/repositories/user-totp-recovery-code.repository.js.map +1 -0
- package/dist/repositories/user-totp.repository.d.ts +582 -0
- package/dist/repositories/user-totp.repository.d.ts.map +1 -0
- package/dist/repositories/user-totp.repository.js +56 -0
- package/dist/repositories/user-totp.repository.js.map +1 -0
- package/dist/repositories/user.repository.d.ts +34 -0
- package/dist/repositories/user.repository.d.ts.map +1 -0
- package/dist/repositories/user.repository.js +74 -0
- package/dist/repositories/user.repository.js.map +1 -0
- package/dist/routes/.well-known/index.d.ts +39 -0
- package/dist/routes/.well-known/index.d.ts.map +1 -0
- package/dist/routes/.well-known/index.js +4 -0
- package/dist/routes/.well-known/index.js.map +1 -0
- package/dist/routes/.well-known/openid-configuration/get.d.ts +46 -0
- package/dist/routes/.well-known/openid-configuration/get.d.ts.map +1 -0
- package/dist/routes/.well-known/openid-configuration/get.js +19 -0
- package/dist/routes/.well-known/openid-configuration/get.js.map +1 -0
- 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/2fa/methods/get.d.ts +14 -0
- package/dist/routes/api/auth/2fa/methods/get.d.ts.map +1 -0
- package/dist/routes/api/auth/2fa/methods/get.js +50 -0
- package/dist/routes/api/auth/2fa/methods/get.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 +49 -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 +32 -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/resend/post.d.ts +22 -0
- package/dist/routes/api/auth/email/resend/post.d.ts.map +1 -0
- package/dist/routes/api/auth/email/resend/post.js +64 -0
- package/dist/routes/api/auth/email/resend/post.js.map +1 -0
- package/dist/routes/api/auth/email/verify/post.d.ts +30 -0
- package/dist/routes/api/auth/email/verify/post.d.ts.map +1 -0
- package/dist/routes/api/auth/email/verify/post.js +55 -0
- package/dist/routes/api/auth/email/verify/post.js.map +1 -0
- package/dist/routes/api/auth/index.d.ts +372 -0
- package/dist/routes/api/auth/index.d.ts.map +1 -0
- package/dist/routes/api/auth/index.js +33 -0
- package/dist/routes/api/auth/index.js.map +1 -0
- package/dist/routes/api/auth/login/post.d.ts +31 -0
- package/dist/routes/api/auth/login/post.d.ts.map +1 -0
- package/dist/routes/api/auth/login/post.js +75 -0
- package/dist/routes/api/auth/login/post.js.map +1 -0
- package/dist/routes/api/auth/logout/post.d.ts +14 -0
- package/dist/routes/api/auth/logout/post.d.ts.map +1 -0
- package/dist/routes/api/auth/logout/post.js +21 -0
- package/dist/routes/api/auth/logout/post.js.map +1 -0
- package/dist/routes/api/auth/passkey/options/post.d.ts +31 -0
- package/dist/routes/api/auth/passkey/options/post.d.ts.map +1 -0
- package/dist/routes/api/auth/passkey/options/post.js +43 -0
- package/dist/routes/api/auth/passkey/options/post.js.map +1 -0
- package/dist/routes/api/auth/passkey/verify/post.d.ts +42 -0
- package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -0
- package/dist/routes/api/auth/passkey/verify/post.js +75 -0
- package/dist/routes/api/auth/passkey/verify/post.js.map +1 -0
- package/dist/routes/api/auth/password/forgot/post.d.ts +22 -0
- package/dist/routes/api/auth/password/forgot/post.d.ts.map +1 -0
- package/dist/routes/api/auth/password/forgot/post.js +72 -0
- package/dist/routes/api/auth/password/forgot/post.js.map +1 -0
- package/dist/routes/api/auth/password/reset/post.d.ts +19 -0
- package/dist/routes/api/auth/password/reset/post.d.ts.map +1 -0
- package/dist/routes/api/auth/password/reset/post.js +62 -0
- package/dist/routes/api/auth/password/reset/post.js.map +1 -0
- package/dist/routes/api/auth/register/post.d.ts +40 -0
- package/dist/routes/api/auth/register/post.d.ts.map +1 -0
- package/dist/routes/api/auth/register/post.js +95 -0
- package/dist/routes/api/auth/register/post.js.map +1 -0
- package/dist/routes/api/auth/totp/recovery/verify/post.d.ts +37 -0
- package/dist/routes/api/auth/totp/recovery/verify/post.d.ts.map +1 -0
- package/dist/routes/api/auth/totp/recovery/verify/post.js +68 -0
- package/dist/routes/api/auth/totp/recovery/verify/post.js.map +1 -0
- package/dist/routes/api/auth/totp/verify/post.d.ts +30 -0
- package/dist/routes/api/auth/totp/verify/post.d.ts.map +1 -0
- package/dist/routes/api/auth/totp/verify/post.js +59 -0
- package/dist/routes/api/auth/totp/verify/post.js.map +1 -0
- package/dist/routes/api/config/get.d.ts +76 -0
- package/dist/routes/api/config/get.d.ts.map +1 -0
- package/dist/routes/api/config/get.js +84 -0
- package/dist/routes/api/config/get.js.map +1 -0
- package/dist/routes/api/config/index.d.ts +76 -0
- package/dist/routes/api/config/index.d.ts.map +1 -0
- package/dist/routes/api/config/index.js +4 -0
- package/dist/routes/api/config/index.js.map +1 -0
- package/dist/routes/api/consent/get.d.ts +37 -0
- package/dist/routes/api/consent/get.d.ts.map +1 -0
- package/dist/routes/api/consent/get.js +73 -0
- package/dist/routes/api/consent/get.js.map +1 -0
- package/dist/routes/api/consent/index.d.ts +65 -0
- package/dist/routes/api/consent/index.d.ts.map +1 -0
- package/dist/routes/api/consent/index.js +7 -0
- package/dist/routes/api/consent/index.js.map +1 -0
- package/dist/routes/api/consent/post.d.ts +44 -0
- package/dist/routes/api/consent/post.d.ts.map +1 -0
- package/dist/routes/api/consent/post.js +286 -0
- package/dist/routes/api/consent/post.js.map +1 -0
- package/dist/routes/api/docs/get.d.ts +17 -0
- package/dist/routes/api/docs/get.d.ts.map +1 -0
- package/dist/routes/api/docs/get.js +19 -0
- package/dist/routes/api/docs/get.js.map +1 -0
- package/dist/routes/api/docs/index.d.ts +12 -0
- package/dist/routes/api/docs/index.d.ts.map +1 -0
- package/dist/routes/api/docs/index.js +4 -0
- package/dist/routes/api/docs/index.js.map +1 -0
- package/dist/routes/api/health/get.d.ts +36 -0
- package/dist/routes/api/health/get.d.ts.map +1 -0
- package/dist/routes/api/health/get.js +64 -0
- package/dist/routes/api/health/get.js.map +1 -0
- package/dist/routes/api/health/index.d.ts +66 -0
- package/dist/routes/api/health/index.d.ts.map +1 -0
- package/dist/routes/api/health/index.js +9 -0
- package/dist/routes/api/health/index.js.map +1 -0
- package/dist/routes/api/health/live/get.d.ts +20 -0
- package/dist/routes/api/health/live/get.d.ts.map +1 -0
- package/dist/routes/api/health/live/get.js +28 -0
- package/dist/routes/api/health/live/get.js.map +1 -0
- package/dist/routes/api/health/ready/get.d.ts +35 -0
- package/dist/routes/api/health/ready/get.d.ts.map +1 -0
- package/dist/routes/api/health/ready/get.js +60 -0
- package/dist/routes/api/health/ready/get.js.map +1 -0
- package/dist/routes/api/index.d.ts +1286 -0
- package/dist/routes/api/index.d.ts.map +1 -0
- package/dist/routes/api/index.js +21 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/oauth/_provider/authorize/get.d.ts +21 -0
- package/dist/routes/api/oauth/_provider/authorize/get.d.ts.map +1 -0
- package/dist/routes/api/oauth/_provider/authorize/get.js +72 -0
- package/dist/routes/api/oauth/_provider/authorize/get.js.map +1 -0
- package/dist/routes/api/oauth/_provider/callback/get.d.ts +42 -0
- package/dist/routes/api/oauth/_provider/callback/get.d.ts.map +1 -0
- package/dist/routes/api/oauth/_provider/callback/get.js +146 -0
- package/dist/routes/api/oauth/_provider/callback/get.js.map +1 -0
- package/dist/routes/api/oauth/_provider/callback/post.d.ts +42 -0
- package/dist/routes/api/oauth/_provider/callback/post.d.ts.map +1 -0
- package/dist/routes/api/oauth/_provider/callback/post.js +178 -0
- package/dist/routes/api/oauth/_provider/callback/post.js.map +1 -0
- package/dist/routes/api/oauth/_provider/delete.d.ts +18 -0
- package/dist/routes/api/oauth/_provider/delete.d.ts.map +1 -0
- package/dist/routes/api/oauth/_provider/delete.js +62 -0
- package/dist/routes/api/oauth/_provider/delete.js.map +1 -0
- package/dist/routes/api/oauth/authorization-context/get.d.ts +38 -0
- package/dist/routes/api/oauth/authorization-context/get.d.ts.map +1 -0
- package/dist/routes/api/oauth/authorization-context/get.js +70 -0
- package/dist/routes/api/oauth/authorization-context/get.js.map +1 -0
- package/dist/routes/api/oauth/index.d.ts +142 -0
- package/dist/routes/api/oauth/index.d.ts.map +1 -0
- package/dist/routes/api/oauth/index.js +13 -0
- package/dist/routes/api/oauth/index.js.map +1 -0
- package/dist/routes/api/terms/consent/post.d.ts +29 -0
- package/dist/routes/api/terms/consent/post.d.ts.map +1 -0
- package/dist/routes/api/terms/consent/post.js +111 -0
- package/dist/routes/api/terms/consent/post.js.map +1 -0
- package/dist/routes/api/terms/get.d.ts +40 -0
- package/dist/routes/api/terms/get.d.ts.map +1 -0
- package/dist/routes/api/terms/get.js +53 -0
- package/dist/routes/api/terms/get.js.map +1 -0
- package/dist/routes/api/terms/index.d.ts +55 -0
- package/dist/routes/api/terms/index.d.ts.map +1 -0
- package/dist/routes/api/terms/index.js +7 -0
- package/dist/routes/api/terms/index.js.map +1 -0
- package/dist/routes/api/user/delete.d.ts +21 -0
- package/dist/routes/api/user/delete.d.ts.map +1 -0
- package/dist/routes/api/user/delete.js +89 -0
- package/dist/routes/api/user/delete.js.map +1 -0
- package/dist/routes/api/user/index.d.ts +337 -0
- package/dist/routes/api/user/index.d.ts.map +1 -0
- package/dist/routes/api/user/index.js +35 -0
- package/dist/routes/api/user/index.js.map +1 -0
- package/dist/routes/api/user/oauth-accounts/get.d.ts +23 -0
- package/dist/routes/api/user/oauth-accounts/get.d.ts.map +1 -0
- package/dist/routes/api/user/oauth-accounts/get.js +58 -0
- package/dist/routes/api/user/oauth-accounts/get.js.map +1 -0
- package/dist/routes/api/user/passkeys/_id/delete.d.ts +18 -0
- package/dist/routes/api/user/passkeys/_id/delete.d.ts.map +1 -0
- package/dist/routes/api/user/passkeys/_id/delete.js +87 -0
- package/dist/routes/api/user/passkeys/_id/delete.js.map +1 -0
- package/dist/routes/api/user/passkeys/_id/patch.d.ts +22 -0
- package/dist/routes/api/user/passkeys/_id/patch.d.ts.map +1 -0
- package/dist/routes/api/user/passkeys/_id/patch.js +64 -0
- package/dist/routes/api/user/passkeys/_id/patch.js.map +1 -0
- package/dist/routes/api/user/passkeys/get.d.ts +21 -0
- package/dist/routes/api/user/passkeys/get.d.ts.map +1 -0
- package/dist/routes/api/user/passkeys/get.js +52 -0
- package/dist/routes/api/user/passkeys/get.js.map +1 -0
- package/dist/routes/api/user/passkeys/register/options/post.d.ts +55 -0
- package/dist/routes/api/user/passkeys/register/options/post.d.ts.map +1 -0
- package/dist/routes/api/user/passkeys/register/options/post.js +74 -0
- package/dist/routes/api/user/passkeys/register/options/post.js.map +1 -0
- package/dist/routes/api/user/passkeys/register/verify/post.d.ts +51 -0
- package/dist/routes/api/user/passkeys/register/verify/post.d.ts.map +1 -0
- package/dist/routes/api/user/passkeys/register/verify/post.js +95 -0
- package/dist/routes/api/user/passkeys/register/verify/post.js.map +1 -0
- package/dist/routes/api/user/password/delete.d.ts +23 -0
- package/dist/routes/api/user/password/delete.d.ts.map +1 -0
- package/dist/routes/api/user/password/delete.js +78 -0
- package/dist/routes/api/user/password/delete.js.map +1 -0
- package/dist/routes/api/user/password/post.d.ts +23 -0
- package/dist/routes/api/user/password/post.d.ts.map +1 -0
- package/dist/routes/api/user/password/post.js +81 -0
- package/dist/routes/api/user/password/post.js.map +1 -0
- package/dist/routes/api/user/password/put.d.ts +24 -0
- package/dist/routes/api/user/password/put.d.ts.map +1 -0
- package/dist/routes/api/user/password/put.js +74 -0
- package/dist/routes/api/user/password/put.js.map +1 -0
- package/dist/routes/api/user/session/get.d.ts +33 -0
- package/dist/routes/api/user/session/get.d.ts.map +1 -0
- package/dist/routes/api/user/session/get.js +36 -0
- package/dist/routes/api/user/session/get.js.map +1 -0
- package/dist/routes/api/user/totp/confirm/post.d.ts +33 -0
- package/dist/routes/api/user/totp/confirm/post.d.ts.map +1 -0
- package/dist/routes/api/user/totp/confirm/post.js +73 -0
- package/dist/routes/api/user/totp/confirm/post.js.map +1 -0
- package/dist/routes/api/user/totp/delete.d.ts +23 -0
- package/dist/routes/api/user/totp/delete.d.ts.map +1 -0
- package/dist/routes/api/user/totp/delete.js +74 -0
- package/dist/routes/api/user/totp/delete.js.map +1 -0
- package/dist/routes/api/user/totp/recovery/regenerate/post.d.ts +18 -0
- package/dist/routes/api/user/totp/recovery/regenerate/post.d.ts.map +1 -0
- package/dist/routes/api/user/totp/recovery/regenerate/post.js +54 -0
- package/dist/routes/api/user/totp/recovery/regenerate/post.js.map +1 -0
- package/dist/routes/api/user/totp/setup/post.d.ts +22 -0
- package/dist/routes/api/user/totp/setup/post.d.ts.map +1 -0
- package/dist/routes/api/user/totp/setup/post.js +82 -0
- package/dist/routes/api/user/totp/setup/post.js.map +1 -0
- package/dist/routes/api/user/totp/verify/post.d.ts +23 -0
- package/dist/routes/api/user/totp/verify/post.d.ts.map +1 -0
- package/dist/routes/api/user/totp/verify/post.js +71 -0
- package/dist/routes/api/user/totp/verify/post.js.map +1 -0
- package/dist/routes/index.d.ts +1591 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +9 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/oauth/.well-known/jwks/get.d.ts +24 -0
- package/dist/routes/oauth/.well-known/jwks/get.d.ts.map +1 -0
- package/dist/routes/oauth/.well-known/jwks/get.js +41 -0
- package/dist/routes/oauth/.well-known/jwks/get.js.map +1 -0
- package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts +68 -0
- package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts.map +1 -0
- package/dist/routes/oauth/.well-known/openid-configuration/get.js +193 -0
- package/dist/routes/oauth/.well-known/openid-configuration/get.js.map +1 -0
- package/dist/routes/oauth/authorize/get.d.ts +34 -0
- package/dist/routes/oauth/authorize/get.d.ts.map +1 -0
- package/dist/routes/oauth/authorize/get.js +179 -0
- package/dist/routes/oauth/authorize/get.js.map +1 -0
- package/dist/routes/oauth/client-auth.d.ts +10 -0
- package/dist/routes/oauth/client-auth.d.ts.map +1 -0
- package/dist/routes/oauth/client-auth.js +57 -0
- package/dist/routes/oauth/client-auth.js.map +1 -0
- package/dist/routes/oauth/cors.d.ts +9 -0
- package/dist/routes/oauth/cors.d.ts.map +1 -0
- package/dist/routes/oauth/cors.js +55 -0
- package/dist/routes/oauth/cors.js.map +1 -0
- package/dist/routes/oauth/device/get-post.d.ts +29 -0
- package/dist/routes/oauth/device/get-post.d.ts.map +1 -0
- package/dist/routes/oauth/device/get-post.js +73 -0
- package/dist/routes/oauth/device/get-post.js.map +1 -0
- package/dist/routes/oauth/device-authorization/post.d.ts +25 -0
- package/dist/routes/oauth/device-authorization/post.d.ts.map +1 -0
- package/dist/routes/oauth/device-authorization/post.js +89 -0
- package/dist/routes/oauth/device-authorization/post.js.map +1 -0
- package/dist/routes/oauth/end-session/get.d.ts +34 -0
- package/dist/routes/oauth/end-session/get.d.ts.map +1 -0
- package/dist/routes/oauth/end-session/get.js +83 -0
- package/dist/routes/oauth/end-session/get.js.map +1 -0
- package/dist/routes/oauth/index.d.ts +272 -0
- package/dist/routes/oauth/index.d.ts.map +1 -0
- package/dist/routes/oauth/index.js +25 -0
- package/dist/routes/oauth/index.js.map +1 -0
- package/dist/routes/oauth/introspect/post.d.ts +29 -0
- package/dist/routes/oauth/introspect/post.d.ts.map +1 -0
- package/dist/routes/oauth/introspect/post.js +104 -0
- package/dist/routes/oauth/introspect/post.js.map +1 -0
- package/dist/routes/oauth/revoke/post.d.ts +22 -0
- package/dist/routes/oauth/revoke/post.d.ts.map +1 -0
- package/dist/routes/oauth/revoke/post.js +104 -0
- package/dist/routes/oauth/revoke/post.js.map +1 -0
- package/dist/routes/oauth/token/post.d.ts +31 -0
- package/dist/routes/oauth/token/post.d.ts.map +1 -0
- package/dist/routes/oauth/token/post.js +171 -0
- package/dist/routes/oauth/token/post.js.map +1 -0
- package/dist/routes/oauth/userinfo/get.d.ts +35 -0
- package/dist/routes/oauth/userinfo/get.d.ts.map +1 -0
- package/dist/routes/oauth/userinfo/get.js +94 -0
- package/dist/routes/oauth/userinfo/get.js.map +1 -0
- package/dist/schemas/error.d.ts +2354 -0
- package/dist/schemas/error.d.ts.map +1 -0
- package/dist/schemas/error.js +174 -0
- package/dist/schemas/error.js.map +1 -0
- package/dist/schemas/field.d.ts +92 -0
- package/dist/schemas/field.d.ts.map +1 -0
- package/dist/schemas/field.js +183 -0
- package/dist/schemas/field.js.map +1 -0
- package/dist/schemas/header.d.ts +7 -0
- package/dist/schemas/header.d.ts.map +1 -0
- package/dist/schemas/header.js +11 -0
- package/dist/schemas/header.js.map +1 -0
- package/dist/schemas/oauth.d.ts +26 -0
- package/dist/schemas/oauth.d.ts.map +1 -0
- package/dist/schemas/oauth.js +51 -0
- package/dist/schemas/oauth.js.map +1 -0
- package/dist/schemas/provider.d.ts +7 -0
- package/dist/schemas/provider.d.ts.map +1 -0
- package/dist/schemas/provider.js +31 -0
- package/dist/schemas/provider.js.map +1 -0
- package/dist/schemas/response.d.ts +678 -0
- package/dist/schemas/response.d.ts.map +1 -0
- package/dist/schemas/response.js +642 -0
- package/dist/schemas/response.js.map +1 -0
- package/dist/schemas/terms.d.ts +93 -0
- package/dist/schemas/terms.d.ts.map +1 -0
- package/dist/schemas/terms.js +109 -0
- package/dist/schemas/terms.js.map +1 -0
- package/dist/seeders/config.seeder.d.ts +23 -0
- package/dist/seeders/config.seeder.d.ts.map +1 -0
- package/dist/seeders/config.seeder.js +258 -0
- package/dist/seeders/config.seeder.js.map +1 -0
- package/dist/services/account-selection.service.d.ts +52 -0
- package/dist/services/account-selection.service.d.ts.map +1 -0
- package/dist/services/account-selection.service.js +120 -0
- package/dist/services/account-selection.service.js.map +1 -0
- package/dist/services/cleanup.service.d.ts +166 -0
- package/dist/services/cleanup.service.d.ts.map +1 -0
- package/dist/services/cleanup.service.js +605 -0
- package/dist/services/cleanup.service.js.map +1 -0
- package/dist/services/container.d.ts +229 -0
- package/dist/services/container.d.ts.map +1 -0
- package/dist/services/container.js +82 -0
- package/dist/services/container.js.map +1 -0
- package/dist/services/email.service.d.ts +69 -0
- package/dist/services/email.service.d.ts.map +1 -0
- package/dist/services/email.service.js +164 -0
- package/dist/services/email.service.js.map +1 -0
- package/dist/services/jwt.service.d.ts +331 -0
- package/dist/services/jwt.service.d.ts.map +1 -0
- package/dist/services/jwt.service.js +571 -0
- package/dist/services/jwt.service.js.map +1 -0
- package/dist/services/mikro.service.d.ts +49 -0
- package/dist/services/mikro.service.d.ts.map +1 -0
- package/dist/services/mikro.service.js +77 -0
- package/dist/services/mikro.service.js.map +1 -0
- package/dist/services/oauth-authorize.service.d.ts +144 -0
- package/dist/services/oauth-authorize.service.d.ts.map +1 -0
- package/dist/services/oauth-authorize.service.js +808 -0
- package/dist/services/oauth-authorize.service.js.map +1 -0
- package/dist/services/oauth-client.service.d.ts +44 -0
- package/dist/services/oauth-client.service.d.ts.map +1 -0
- package/dist/services/oauth-client.service.js +128 -0
- package/dist/services/oauth-client.service.js.map +1 -0
- package/dist/services/oauth-connect.service.d.ts +180 -0
- package/dist/services/oauth-connect.service.d.ts.map +1 -0
- package/dist/services/oauth-connect.service.js +730 -0
- package/dist/services/oauth-connect.service.js.map +1 -0
- package/dist/services/oauth-token.service.d.ts +180 -0
- package/dist/services/oauth-token.service.d.ts.map +1 -0
- package/dist/services/oauth-token.service.js +565 -0
- package/dist/services/oauth-token.service.js.map +1 -0
- package/dist/services/passkey.service.d.ts +73 -0
- package/dist/services/passkey.service.d.ts.map +1 -0
- package/dist/services/passkey.service.js +207 -0
- package/dist/services/passkey.service.js.map +1 -0
- package/dist/services/password-auth.service.d.ts +24 -0
- package/dist/services/password-auth.service.d.ts.map +1 -0
- package/dist/services/password-auth.service.js +87 -0
- package/dist/services/password-auth.service.js.map +1 -0
- package/dist/services/password-reset.service.d.ts +31 -0
- package/dist/services/password-reset.service.d.ts.map +1 -0
- package/dist/services/password-reset.service.js +54 -0
- package/dist/services/password-reset.service.js.map +1 -0
- package/dist/services/scheduler.service.d.ts +20 -0
- package/dist/services/scheduler.service.d.ts.map +1 -0
- package/dist/services/scheduler.service.js +85 -0
- package/dist/services/scheduler.service.js.map +1 -0
- package/dist/services/security.service.d.ts +17 -0
- package/dist/services/security.service.d.ts.map +1 -0
- package/dist/services/security.service.js +84 -0
- package/dist/services/security.service.js.map +1 -0
- package/dist/services/terms.service.d.ts +131 -0
- package/dist/services/terms.service.d.ts.map +1 -0
- package/dist/services/terms.service.js +210 -0
- package/dist/services/terms.service.js.map +1 -0
- package/dist/services/totp.service.d.ts +86 -0
- package/dist/services/totp.service.d.ts.map +1 -0
- package/dist/services/totp.service.js +244 -0
- package/dist/services/totp.service.js.map +1 -0
- package/dist/services/user-consent.service.d.ts +35 -0
- package/dist/services/user-consent.service.d.ts.map +1 -0
- package/dist/services/user-consent.service.js +45 -0
- package/dist/services/user-consent.service.js.map +1 -0
- package/dist/services/user.service.d.ts +87 -0
- package/dist/services/user.service.d.ts.map +1 -0
- package/dist/services/user.service.js +280 -0
- package/dist/services/user.service.js.map +1 -0
- package/package.json +249 -0
- package/public/assets/2fa-B5vLgDXQ.js +2 -0
- package/public/assets/2fa-B5vLgDXQ.js.map +1 -0
- package/public/assets/2fa-BqsM_D-X.js +2 -0
- package/public/assets/2fa-BqsM_D-X.js.map +1 -0
- package/public/assets/2fa-C5vUVgr_.js +2 -0
- package/public/assets/2fa-C5vUVgr_.js.map +1 -0
- package/public/assets/2fa-CCOTIHDZ.js +2 -0
- package/public/assets/2fa-CCOTIHDZ.js.map +1 -0
- package/public/assets/DialogHandle-BmtK2pRn.js +2 -0
- package/public/assets/DialogHandle-BmtK2pRn.js.map +1 -0
- package/public/assets/FieldItemContext-BeNfhOsU.js +2 -0
- package/public/assets/FieldItemContext-BeNfhOsU.js.map +1 -0
- package/public/assets/admin-BPijkLw-.js +2 -0
- package/public/assets/admin-BPijkLw-.js.map +1 -0
- package/public/assets/admin-users-DvPbw1Vq.js +2 -0
- package/public/assets/admin-users-DvPbw1Vq.js.map +1 -0
- package/public/assets/alert-leqyvHOp.js +2 -0
- package/public/assets/alert-leqyvHOp.js.map +1 -0
- package/public/assets/auth-choice-row-BCGjuedo.js +2 -0
- package/public/assets/auth-choice-row-BCGjuedo.js.map +1 -0
- package/public/assets/auth-field-DD8kvl--.js +2 -0
- package/public/assets/auth-field-DD8kvl--.js.map +1 -0
- package/public/assets/auth-footer-Cz5ivsDc.js +2 -0
- package/public/assets/auth-footer-Cz5ivsDc.js.map +1 -0
- package/public/assets/auth-layout-VtpryDof.js +2 -0
- package/public/assets/auth-layout-VtpryDof.js.map +1 -0
- package/public/assets/auth-page-header-CIn2E4zI.js +2 -0
- package/public/assets/auth-page-header-CIn2E4zI.js.map +1 -0
- package/public/assets/authorization-context-banner-SOuBHWIb.js +2 -0
- package/public/assets/authorization-context-banner-SOuBHWIb.js.map +1 -0
- package/public/assets/avatar-BEQjf2x6.js +2 -0
- package/public/assets/avatar-BEQjf2x6.js.map +1 -0
- package/public/assets/badge-CsOfUji0.js +2 -0
- package/public/assets/badge-CsOfUji0.js.map +1 -0
- package/public/assets/checkbox-gdHnSFQ-.js +2 -0
- package/public/assets/checkbox-gdHnSFQ-.js.map +1 -0
- package/public/assets/chevron-right-CN0jUyV0.js +2 -0
- package/public/assets/chevron-right-CN0jUyV0.js.map +1 -0
- package/public/assets/circle-check-6QTLhwM_.js +2 -0
- package/public/assets/circle-check-6QTLhwM_.js.map +1 -0
- package/public/assets/config-DTQCUlfZ.js +2 -0
- package/public/assets/config-DTQCUlfZ.js.map +1 -0
- package/public/assets/consent-BqqFDdsr.js +2 -0
- package/public/assets/consent-BqqFDdsr.js.map +1 -0
- package/public/assets/consent-CfRbz2R7.js +2 -0
- package/public/assets/consent-CfRbz2R7.js.map +1 -0
- package/public/assets/createLucideIcon-BPpAIXR_.js +2 -0
- package/public/assets/createLucideIcon-BPpAIXR_.js.map +1 -0
- package/public/assets/email-C5vUVgr_.js +2 -0
- package/public/assets/email-C5vUVgr_.js.map +1 -0
- package/public/assets/email-CKKakxPJ.js +2 -0
- package/public/assets/email-CKKakxPJ.js.map +1 -0
- package/public/assets/error-BMXxpgfR.js +2 -0
- package/public/assets/error-BMXxpgfR.js.map +1 -0
- package/public/assets/field-Cn4H1CUj.js +3 -0
- package/public/assets/field-Cn4H1CUj.js.map +1 -0
- package/public/assets/fingerprint-pattern-DP62Vk8x.js +2 -0
- package/public/assets/fingerprint-pattern-DP62Vk8x.js.map +1 -0
- package/public/assets/forgot-C5vUVgr_.js +2 -0
- package/public/assets/forgot-C5vUVgr_.js.map +1 -0
- package/public/assets/forgot-rO9sByfV.js +2 -0
- package/public/assets/forgot-rO9sByfV.js.map +1 -0
- package/public/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
- package/public/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
- package/public/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
- package/public/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
- package/public/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/public/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/public/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
- package/public/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
- package/public/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
- package/public/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
- package/public/assets/ibm-plex-sans-cyrillic-ext-wght-normal-d45eAU9y.woff2 +0 -0
- package/public/assets/ibm-plex-sans-cyrillic-wght-normal-BAAhND-U.woff2 +0 -0
- package/public/assets/ibm-plex-sans-greek-wght-normal-CmyJS8uq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-10-400-normal-BLMYXIZq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-10-400-normal-DJrewyrW.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-10-600-normal-B5S02aip.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-10-600-normal-DP69BzJV.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-10-700-normal-9JfFFKCo.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-10-700-normal-Blnt0RhT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-100-400-normal-4_aXP0Hy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-100-400-normal-DsMZ2scz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-100-600-normal-Bolb9iqL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-100-600-normal-nIl-leH5.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-100-700-normal-Bkd0xED8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-100-700-normal-CvaNbDMd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-101-400-normal-DoWmZlZj.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-101-400-normal-y2nxydha.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-101-600-normal-BKchJvlk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-101-600-normal-BrpHYkNm.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-101-700-normal-CVueR0Vp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-101-700-normal-DJ1MIwHY.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-102-400-normal-BQfFShQ1.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-102-400-normal-Ca0txE7W.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-102-600-normal-B1Puw4D2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-102-600-normal-CUZjz5v8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-102-700-normal-BkK1TRsE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-102-700-normal-ZVcO00Fl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-103-400-normal-DHwmA74W.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-103-400-normal-DNs9Omj-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-103-600-normal-BW8Frffd.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-103-600-normal-tN_-CKym.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-103-700-normal-CXAkQppa.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-103-700-normal-DNgJaILb.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-104-400-normal-BmhZQdzl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-104-400-normal-CuKiid_t.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-104-600-normal-2KjU-YTd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-104-600-normal-Duw986jf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-104-700-normal-CYzW5SnO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-104-700-normal-Vn6i4czv.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-105-400-normal-BBf-_m9N.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-105-400-normal-CHWaGU9J.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-105-600-normal-CmUdXGK4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-105-600-normal-Eel3dN7e.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-105-700-normal-Cv9j40LU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-105-700-normal-DWwtLgxy.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-106-400-normal-CGlLvzZs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-106-400-normal-foxE5hHG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-106-600-normal-B1bzLzbH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-106-600-normal-tHp1RYGF.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-106-700-normal-BtC5W1lQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-106-700-normal-DuUOTgvs.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-107-400-normal-2yW6cSNP.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-107-400-normal-Dh4QR9Sa.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-107-600-normal-3L-o-gNc.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-107-600-normal-JAonwJOj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-107-700-normal-BPH5rI6C.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-107-700-normal-Cr7-iFW7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-108-400-normal-BKXuaz7L.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-108-400-normal-CMeK7Yoj.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-108-600-normal-9ormcCnp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-108-600-normal-CIZc2z7F.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-108-700-normal-BQqq_N37.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-108-700-normal-DKrl9gDv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-109-400-normal-BYkYsUMr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-109-400-normal-DLZ5N3wZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-109-600-normal-DgvmKVfh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-109-600-normal-J_8d2uPX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-109-700-normal-BKzoJI_l.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-109-700-normal-CgGmrF-h.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-11-400-normal-C0WskPfy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-11-400-normal-D4F8GONb.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-11-600-normal-HVxl9urI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-11-600-normal-U3d7dgox.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-11-700-normal-B_TMqNrG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-11-700-normal-DUhgBhd7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-110-400-normal-BiGMHdAV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-110-400-normal-CWciHSky.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-110-600-normal-BXI508QN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-110-600-normal-C3nYbUvy.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-110-700-normal-A9EL87rF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-110-700-normal-DjakDWxK.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-111-400-normal-36IKJEvJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-111-400-normal-DwkaZ2wL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-111-600-normal-B0FD3VdV.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-111-600-normal-DjZCOVOv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-111-700-normal-B2j03kCB.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-111-700-normal-Dv5sal4h.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-112-400-normal-DD55zx92.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-112-400-normal-DpWOC24h.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-112-600-normal-BkM4GSUi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-112-600-normal-C2q6NvAJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-112-700-normal-Ci_Zf1oH.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-112-700-normal-Fyn9YqrR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-113-400-normal-C-SwPUxy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-113-400-normal-ngLrg9Ph.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-113-600-normal-FVXa1K7W.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-113-600-normal-pSsmDa5a.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-113-700-normal-CmNR_-6d.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-113-700-normal-kzCap4I7.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-114-400-normal-D64L80iO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-114-400-normal-DkNQ39Bm.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-114-600-normal-CfAYQkvR.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-114-600-normal-DradD0b_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-114-700-normal-CXZm0WJV.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-114-700-normal-DSXuAVj8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-115-400-normal-BA3oFlL7.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-115-400-normal-DGp_yQCO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-115-600-normal-5l6N5_Bf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-115-600-normal-Bf5qTwLg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-115-700-normal-CCrS9Tpv.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-115-700-normal-DhiQdU1x.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-116-400-normal-BidJdmrW.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-116-400-normal-DcXtXIIt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-116-600-normal-Bwb7m1tn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-116-600-normal-DShPLUNp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-116-700-normal-C1DXoU6t.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-116-700-normal-C2BwbuD6.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-117-400-normal-Bq_d-uLr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-117-400-normal-hyG31T85.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-117-600-normal-CEeS0kan.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-117-600-normal-DJWr9iDJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-117-700-normal-C1ei5J70.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-117-700-normal-zPjtn9S1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-118-400-normal-DFkHFeXA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-118-400-normal-TSsLEGdp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-118-600-normal-Cvx3jb5D.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-118-600-normal-o_AOMkHJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-118-700-normal-BRNin0K2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-118-700-normal-DGkqcNAf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-119-400-normal-BUYaH2_l.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-119-400-normal-aBgyJQOx.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-119-600-normal-55p1b1wa.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-119-600-normal-BTu0jZJ-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-119-700-normal-3JOc_eI7.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-119-700-normal-BjmfPyZf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-12-400-normal-BmG4MYox.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-12-400-normal-quRUVnCJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-12-600-normal-B-m8VoGm.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-12-600-normal-CxDfRaaH.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-12-700-normal-C3oRnDW6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-12-700-normal-Dv1Y6qdB.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-13-400-normal-DBDHqw4h.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-13-400-normal-QmPj_vZd.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-13-600-normal-CedQxG0H.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-13-600-normal-CgJUuraA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-13-700-normal-DNIRDidW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-13-700-normal-DolJGsV8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-14-400-normal-CP-jldkl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-14-400-normal-DPGCrf4O.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-14-600-normal-36G4flWw.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-14-600-normal-aLRf_2tU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-14-700-normal-CzLCWhzW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-14-700-normal-IrHxc9AN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-15-400-normal-D_ILNbWZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-15-400-normal-DhL4usAp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-15-600-normal-CCiDkvZ0.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-15-600-normal-Cm8uzUfS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-15-700-normal-CH_tD5KV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-15-700-normal-qiD6EjpF.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-16-400-normal-CPpcNs7A.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-16-400-normal-DJJG1Tuz.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-16-600-normal-DN27F9tO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-16-600-normal-DZNod9fx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-16-700-normal-5x97iT4C.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-16-700-normal-Cjf1zCyl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-17-400-normal-Cz201O_t.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-17-400-normal-Xd0EQnSI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-17-600-normal-Dlo-tSr-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-17-600-normal-GFEV0OtD.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-17-700-normal-CxMAaJ8J.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-17-700-normal-pN8BDQje.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-18-400-normal-BiRcNUnW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-18-400-normal-DcRwXlcA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-18-600-normal-DjoWpWpr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-18-600-normal-ZWO03fli.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-18-700-normal-BRP-puz3.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-18-700-normal-C9acO00v.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-19-400-normal-BGI-mgYq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-19-400-normal-CAilAALt.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-19-600-normal-DjYSyktj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-19-600-normal-ce3oirTN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-19-700-normal-D-Zw0iJQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-19-700-normal-DDYMc675.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-20-400-normal-2E5UN6VC.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-20-400-normal-BQfFM2B0.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-20-600-normal-CYRAtz-I.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-20-600-normal-DwptQupD.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-20-700-normal-80GIv_X2.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-20-700-normal-Ca_HRr3E.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-21-400-normal-BFnRtDEF.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-21-400-normal-Zr4ScQUF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-21-600-normal-BA-omFPG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-21-600-normal-CVckMbS4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-21-700-normal-BPImLHVa.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-21-700-normal-CytBm2Nt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-22-400-normal-IznGQDkP.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-22-400-normal-qTFopCxn.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-22-600-normal-BWt9cZAr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-22-600-normal-DuqSwCFh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-22-700-normal--3UpG_YA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-22-700-normal-DnloFB68.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-23-400-normal-Bdkhc9Iw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-23-400-normal-BtixcB0-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-23-600-normal-Dq8e8WbN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-23-600-normal-O2srJ8a2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-23-700-normal-C-Wvz07b.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-23-700-normal-QWySKNit.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-24-400-normal-B3OOo0lL.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-24-400-normal-McxyvMnV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-24-600-normal-A46asPGd.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-24-600-normal-CTyo1FsZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-24-700-normal-Ira2Rc5z.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-24-700-normal-dhK6LPCU.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-25-400-normal-BFxbWz5n.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-25-400-normal-DFuJhyl7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-25-600-normal-B2RU3Dvp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-25-600-normal-DJ9_bhYp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-25-700-normal-6YS9BiKL.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-25-700-normal-CpbQwqpL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-26-400-normal-DNzE_dbG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-26-400-normal-D_cpF5EA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-26-600-normal-ByYIbTSk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-26-600-normal-Dblu0l-8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-26-700-normal-B-a8fp43.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-26-700-normal-oM62RKsO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-27-400-normal-CG_CPqz1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-27-400-normal-c2jdwsOE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-27-600-normal-3axrvVxa.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-27-600-normal-CffTHcnn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-27-700-normal-CFbifBY3.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-27-700-normal-MrPgyLwW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-28-400-normal-C5RxoJ3V.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-28-400-normal-DXIBRRx0.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-28-600-normal-BHA5xHG-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-28-600-normal-t8w8Pigz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-28-700-normal-CfJC1veY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-28-700-normal-DuTXC6M7.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-29-400-normal-4EOJmPpr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-29-400-normal-DPDbHGRJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-29-600-normal-Ca71NnU-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-29-600-normal-jeFY9Hf_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-29-700-normal-C11KYH68.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-29-700-normal-CzNKW3WB.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-3-400-normal-BpFIRrIG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-3-400-normal-CSnRHPqi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-3-600-normal-C7pAJQf3.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-3-600-normal-SFbjSSXG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-3-700-normal-57H5kXpk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-3-700-normal-BrLJmDFd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-30-400-normal-CE7Y9E5I.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-30-400-normal-CkxUuY_J.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-30-600-normal-B2Z1u9V0.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-30-600-normal-BNiX9WYe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-30-700-normal-BEFP-jPj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-30-700-normal-BarKnue-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-31-400-normal-CaOERqUu.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-31-400-normal-DQ8k7O-z.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-31-600-normal-ChsH3Xz1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-31-600-normal-DfrgvMVe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-31-700-normal-9QmoGV7n.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-31-700-normal-uPx24aJ3.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-32-400-normal-DCgv6PbD.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-32-400-normal-oBOpBx6K.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-32-600-normal-BVvFPwh-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-32-600-normal-C6iWVt4P.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-32-700-normal-BrzljjIv.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-32-700-normal-Ck00YIbi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-33-400-normal-7syfOPuJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-33-400-normal-CRgD0sTN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-33-600-normal-6C8BpThh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-33-600-normal-Di883cZY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-33-700-normal-BocR-vpi.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-33-700-normal-CQH8I4uz.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-34-400-normal-CW90qVjA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-34-400-normal-DteAo9_1.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-34-600-normal-BBai0ku9.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-34-600-normal-BUBreiOx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-34-700-normal-BQMQzFvO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-34-700-normal-BYKYx0HK.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-35-400-normal-_GHhCQ5l.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-35-400-normal-oyHCgG2o.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-35-600-normal-B3Re-brg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-35-600-normal-DSSj8dPk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-35-700-normal-BoDC0KzR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-35-700-normal-CvQah7db.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-36-400-normal-BizbVEtQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-36-400-normal-D7gQSpeq.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-36-600-normal-BiBUOoTN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-36-600-normal-CVgRkKvZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-36-700-normal-Cx600hZn.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-36-700-normal-Dxydenfw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-37-400-normal-B-iV2FCz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-37-400-normal-CrxhJitf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-37-600-normal-56davMJK.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-37-600-normal-BMpyr2ZA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-37-700-normal-Cr4qQ6-_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-37-700-normal-D6fQD8s2.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-38-400-normal-D1Vp2bgS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-38-400-normal-DH9qOlQO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-38-600-normal-BtzFMeyM.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-38-600-normal-DgBl-sfZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-38-700-normal-BnkgwyNC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-38-700-normal-DrLlCQdP.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-39-400-normal-D5wsbWuV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-39-400-normal-Dk7rkHeG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-39-600-normal-CGMVkPUQ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-39-600-normal-D_kp1-X0.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-39-700-normal-ADsZ937l.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-39-700-normal-tkFC4Fme.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-4-400-normal-mGIBpTDA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-4-600-normal-ItZEXAoj.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-4-700-normal-B2Sn8ODt.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-40-400-normal-DRF-ZkFr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-40-400-normal-Dye9yGvg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-40-600-normal-DD0bpqGF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-40-600-normal-DSxToWDI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-40-700-normal-D9qdrR16.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-40-700-normal-DJ9uBiDw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-41-400-normal-BqAaxgfH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-41-400-normal-CsmxKILz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-41-600-normal-BQOZ4bZi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-41-600-normal-Jx8Bp44x.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-41-700-normal-BGJMzr3_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-41-700-normal-UuW3VIUX.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-42-400-normal-Bwv1VfH1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-42-400-normal-Dl6WfOX3.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-42-600-normal-Bpb5tt9_.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-42-600-normal-DIFsJkow.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-42-700-normal-BSSeJztI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-42-700-normal-DSVZ1AdV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-43-400-normal-BWVo0zWK.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-43-400-normal-d-ngL4VK.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-43-600-normal-BQhDNXpW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-43-600-normal-BcvVxmDS.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-43-700-normal-BzUW0Dn4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-43-700-normal-DKxEyxqG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-44-400-normal-C6WuUhoa.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-44-400-normal-Dpw9oVkY.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-44-600-normal-BAOsDDVH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-44-600-normal-Bt-5iAy-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-44-700-normal-CKy2WdQj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-44-700-normal-DWwfiF2R.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-45-400-normal-B9Y_v3iL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-45-400-normal-Cw08yPg4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-45-600-normal-C3VBxVTw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-45-600-normal-CPG32_M5.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-45-700-normal-B2EBYgsw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-45-700-normal-CBBnYnrG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-46-400-normal-Bo2fKdUV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-46-400-normal-Dya4Xg3C.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-46-600-normal-BZxPnU9z.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-46-600-normal-BwyRFFoW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-46-700-normal-BWHZA6Va.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-46-700-normal-DGQdaffJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-47-400-normal-BaRCXue3.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-47-400-normal-DWeXBY63.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-47-600-normal-BJMJyZ3V.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-47-600-normal-CyutRTf1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-47-700-normal-N6twIXlf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-47-700-normal-_dAzPdKJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-48-400-normal-JS-IrZBF.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-48-400-normal-ezIou-vd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-48-600-normal-BKUm06v8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-48-600-normal-SLeRHHzg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-48-700-normal-B5gMlKVs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-48-700-normal-DQ5H61GM.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-49-400-normal-BGMyUOoF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-49-400-normal-CpOmgEj1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-49-600-normal-DASryXO5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-49-600-normal-DyDLcZM_.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-49-700-normal-C2pGRKdb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-49-700-normal-dsyop0xt.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-5-400-normal-CUIc6NHY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-5-400-normal-D2dVMMqj.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-5-600-normal-7tGyeWfE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-5-600-normal-LSwIbfT4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-5-700-normal-4pOvaKVD.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-5-700-normal-BdZNxX81.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-50-400-normal-DDJncqjC.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-50-400-normal-DU9yuSzL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-50-600-normal-KlXN5ii8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-50-600-normal-bZ0wMfTu.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-50-700-normal-C3Bon6kP.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-50-700-normal-CKBR3dTc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-52-400-normal-B6ntzhez.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-52-400-normal-DxvfHPiZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-52-600-normal-CxAqcrGJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-52-600-normal-ofakrDYw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-52-700-normal-Bfs6gmfs.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-52-700-normal-D9sJhzsn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-53-400-normal-BNzLW3gK.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-53-400-normal-arm4ZLbG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-53-600-normal-BYo95wdR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-53-600-normal-CTWAZiwT.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-53-700-normal-7icOh9fn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-53-700-normal-CXC3RG0Y.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-55-400-normal-CXMVQbir.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-55-400-normal-CgSa9olG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-55-600-normal-5IjjJd2s.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-55-600-normal-Dp8k-UQr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-55-700-normal-eDLHHM6r.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-55-700-normal-ecLDx596.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-56-400-normal-BImwtP9C.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-56-400-normal-BikO35BJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-56-600-normal-DsSHHMYs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-56-600-normal-fFxOmumy.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-56-700-normal-Dg77fDuG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-56-700-normal-DiUSRVIQ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-58-400-normal-Iyqdz6U_.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-58-400-normal-jeWDsIkS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-58-600-normal-Bma8ReWy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-58-600-normal-D3LkCFqf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-58-700-normal-BgsgXhin.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-58-700-normal-DQNvf_Pi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-59-400-normal-CkeNzekL.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-59-400-normal-D7J9HacT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-59-600-normal-B0Hs_yqp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-59-600-normal-y8o2u47q.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-59-700-normal-BEPxXZmH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-59-700-normal-CqOqqrqQ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-6-400-normal-CK1rBi2w.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-6-400-normal-DQz22aVW.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-6-600-normal-Bgp388lR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-6-600-normal-DZtAE4NN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-6-700-normal-BFaRWvXD.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-6-700-normal-UVZzLgo1.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-60-400-normal-Bc0pWfYQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-60-400-normal-DU4X4cgu.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-60-600-normal-D22FGjEf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-60-600-normal-DGaJXlcP.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-60-700-normal-B4sph3s0.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-60-700-normal-DBfqpTpp.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-61-400-normal-BTqxO8KS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-61-400-normal-BZ_Lvmfb.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-61-600-normal-BkIPCguy.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-61-600-normal-D_Q2U_HY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-61-700-normal-BkfJ-_O-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-61-700-normal-CwN3DFq1.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-62-400-normal-CRZQtL4e.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-62-400-normal-DSLFRuBi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-62-600-normal-CAFV2WS-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-62-600-normal-DRBwH2wC.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-62-700-normal-D9oj9FbO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-62-700-normal-gTii6YIK.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-63-400-normal-BCOcqFvH.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-63-400-normal-NWeXooWt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-63-600-normal-Dwsde-Vo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-63-600-normal-rFqEK_Cq.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-63-700-normal-B4li38vl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-63-700-normal-DYsI6Aeh.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-64-400-normal-DjS9hHaA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-64-400-normal-DplHNRWf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-64-600-normal-8FGNeBVO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-64-600-normal-BE-tQzc4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-64-700-normal-X_3qL3eD.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-64-700-normal-_sOvmSPU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-65-400-normal-BIWHDE_t.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-65-400-normal-DNiOFlC5.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-65-600-normal-8ErTTni6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-65-600-normal-Ckksq6Um.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-65-700-normal-9c1B3ugf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-65-700-normal-C2SAUond.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-66-400-normal-BfKrnenI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-66-400-normal-CNxVmlv6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-66-600-normal-hyHZDzzP.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-66-600-normal-nq1zdTbH.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-66-700-normal-Ctdcjw58.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-66-700-normal-D_FuIz1A.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-67-400-normal-D3j6dBx3.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-67-400-normal-lzlrdx0G.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-67-600-normal-6KKBCWxa.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-67-600-normal-DgWoOUUg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-67-700-normal-B3QY7F5h.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-67-700-normal-Bk31nBaz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-68-400-normal-BpRgjvkz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-68-400-normal-CfTKk1Ti.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-68-600-normal-BlYm4TE_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-68-600-normal-DiY9dfka.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-68-700-normal-C6ZrhK66.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-68-700-normal-Cb_onqwe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-69-400-normal-ClpMq853.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-69-400-normal-DIRwnaAC.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-69-600-normal-Bsq_ALiN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-69-600-normal-D5M2jRxh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-69-700-normal-D25giLXx.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-69-700-normal-DJ24ly1p.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-7-400-normal-BlNTLUxk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-7-400-normal-Ce6XQT-X.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-7-600-normal-BIimYJ8p.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-7-600-normal-u7RE7Vcl.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-7-700-normal-BxRQ3DPg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-7-700-normal-DK5zmmDo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-70-400-normal-BQZWkZap.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-70-400-normal-BvYVJLC-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-70-600-normal-COjhVT5P.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-70-600-normal-D_nkzVDi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-70-700-normal-BJsNk892.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-70-700-normal-D0rsZ7c1.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-71-400-normal-BF8CoFgI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-71-400-normal-HbsCI6VV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-71-600-normal-CfPjA3xh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-71-600-normal-ChBeHVSC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-71-700-normal-B88Gnili.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-71-700-normal-D9HVw03N.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-72-400-normal-BKinYB31.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-72-400-normal-D3NTG_Qr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-72-600-normal-BpU6wBwH.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-72-600-normal-rfJ4c39Q.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-72-700-normal-DClz9Dhe.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-72-700-normal-DnfTuI4o.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-73-400-normal-B9cHSeQ5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-73-400-normal-HVPdCDZ0.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-73-600-normal-BL0EAwDJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-73-600-normal-CoMSI1sj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-73-700-normal-5BseSrpV.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-73-700-normal-DW-mflD2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-74-400-normal-BM6YwLsn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-74-400-normal-BTWjvuog.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-74-600-normal-CxFvTzoC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-74-600-normal-D51sy90d.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-74-700-normal-Bp0aGueO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-74-700-normal-CQdRArtb.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-75-400-normal-DX0jfUHx.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-75-400-normal-DrNdqo4y.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-75-600-normal-DvAVPJPm.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-75-600-normal-DzUkgy6d.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-75-700-normal-BUGpoCPv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-75-700-normal-CbVTJJOJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-76-400-normal-BtXAriso.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-76-400-normal-DvZrEIB3.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-76-600-normal-Bkns-GmL.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-76-600-normal-XH04BMqX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-76-700-normal-BfaxMcpg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-76-700-normal-DC5DjlVx.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-77-400-normal-C8x5jxqc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-77-400-normal-DIwXWqjG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-77-600-normal-Dst0n_2I.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-77-600-normal-TveJi30r.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-77-700-normal-BXcw4A5K.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-77-700-normal-C5mt5pwb.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-78-400-normal-DUw4O9kJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-78-400-normal-DdAHar7U.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-78-600-normal-CdDbCMo5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-78-600-normal-WSGX5G5j.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-78-700-normal-BX4TFa2_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-78-700-normal-DQFNc6DE.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-79-400-normal-CHV4cTl6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-79-400-normal-DKXEv0-8.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-79-600-normal-BwemUgt7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-79-600-normal-jqoE6MSf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-79-700-normal-C7dv3Yp1.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-79-700-normal-Dc8--5xr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-8-400-normal-SmEnIkYa.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-8-400-normal-tFiGs3IA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-8-600-normal-BXRUM-0I.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-8-600-normal-G3AQr80e.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-8-700-normal-BJ-eyJFM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-8-700-normal-D8XNQCXr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-80-400-normal-B1EBYabM.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-80-400-normal-boMeGYwE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-80-600-normal-5_89urOt.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-80-600-normal-Cn0IXtFE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-80-700-normal-BOd0bDGO.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-80-700-normal-C26YuVxL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-81-400-normal-BRtTCfUk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-81-400-normal-D32P0Vtu.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-81-600-normal-BrNo5bPi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-81-600-normal-ic2OowiW.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-81-700-normal-CVYiHbL6.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-81-700-normal-u-vEkTpG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-82-400-normal-BQWp4BEz.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-82-400-normal-DDpDjsGx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-82-600-normal-DajH-4xp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-82-600-normal-icuQ__PU.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-82-700-normal-ClV-zSDt.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-82-700-normal-CnyrRvpH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-83-400-normal-Bw_rXMEi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-83-400-normal-yc2U6i4H.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-83-600-normal-C2uell5V.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-83-600-normal-DsLbRz3E.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-83-700-normal-2GacE3N5.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-83-700-normal-EpYP79Ha.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-84-400-normal-C14BeeRx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-84-400-normal-C_JCm1wG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-84-600-normal-CCq3cWfr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-84-600-normal-CNKfBGzf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-84-700-normal-DvPwdAi9.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-84-700-normal-bReT13VI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-85-400-normal-CxNRCaXC.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-85-400-normal-DIfXns4-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-85-600-normal-8jj6aRvF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-85-600-normal-DlyOX1Qf.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-85-700-normal-D8sN10Nm.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-85-700-normal-og8bjehs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-86-400-normal-Bb5ShdOk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-86-400-normal-Dwyie3Iv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-86-600-normal-CdiZE1rm.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-86-600-normal-sZuKvaH0.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-86-700-normal-BTXGcZ1f.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-86-700-normal-BfB1Adps.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-87-400-normal-9iA5aW6B.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-87-400-normal-BlQLoLxo.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-87-600-normal-CuP_sqvk.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-87-600-normal-DJDdt009.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-87-700-normal-T5FoFJ7Z.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-87-700-normal-ZAIr8xfv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-88-400-normal-47Y8c3gi.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-88-400-normal-Ce6Hc4-O.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-88-600-normal-C0xzysV4.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-88-600-normal-R7ba6CXY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-88-700-normal-BhgGw4mN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-88-700-normal-DqgQgYzO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-89-400-normal-BQ1quosg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-89-400-normal-DWWwgYkQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-89-600-normal-C2tA-5LU.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-89-600-normal-DhA0Dlsd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-89-700-normal-BhPAGixe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-89-700-normal-Q4Ct26U-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-9-400-normal--2P0gMaE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-9-400-normal-DOuCM5BV.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-9-600-normal-BWVUGdkT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-9-600-normal-DKQ7A1j0.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-9-700-normal-CeF5ynVi.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-9-700-normal-U3Fi3Xkr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-90-400-normal-CfqeE6EG.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-90-400-normal-D_k1n-D_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-90-600-normal-Bwsph-Eg.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-90-600-normal-DhhMI-5X.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-90-700-normal-B0dGlL2-.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-90-700-normal-C8Hbz-dX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-91-400-normal-Ciy4dQcd.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-91-400-normal-Dqn0gBBY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-91-600-normal-CMZZHiYs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-91-600-normal-D3h_qbuq.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-91-700-normal-B1DETJv2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-91-700-normal-M5nVKp2A.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-92-400-normal-BfkGgwSg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-92-400-normal-DoNv6QKI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-92-600-normal-9-dsEf5V.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-92-600-normal-cJ6s0u50.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-92-700-normal-ByHPz9kn.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-92-700-normal-D6FBL1WO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-93-400-normal-B6WlHkvJ.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-93-400-normal-CXc_m19k.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-93-600-normal-BSK1xVrb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-93-600-normal-OQ8utWzT.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-93-700-normal-B6i_9_xV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-93-700-normal-C0PiAt94.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-94-400-normal-B4bajS3c.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-94-400-normal-FBGzvyjM.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-94-600-normal-Cl_ZMZu8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-94-600-normal-pqZtpQem.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-94-700-normal-BhojjqGx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-94-700-normal-DWNWPMXr.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-95-400-normal-BaY9CSq2.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-95-400-normal-DPH1GVj3.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-95-600-normal-BcydLyYe.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-95-600-normal-DqzXikSS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-95-700-normal-0cKlfajM.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-95-700-normal-BNFDc8MW.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-96-400-normal-CXuQ_R0S.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-96-400-normal-OCME7gOK.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-96-600-normal-BgkVLddD.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-96-600-normal-GzZNxGhs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-96-700-normal-Qh65nqz2.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-96-700-normal-a40eS-gV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-97-400-normal-4k_rP24C.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-97-400-normal-CP6Nx25U.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-97-600-normal-CIqUzk_a.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-97-600-normal-DCSYk_Yh.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-97-700-normal-DnbCIk-O.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-97-700-normal-zgPUJYJw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-98-400-normal-B515X6p6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-98-400-normal-Cf7sm02w.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-98-600-normal-DugMp3FI.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-98-600-normal-pBxafNws.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-98-700-normal-7KdM18gu.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-98-700-normal-CMi4ZY-h.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-99-400-normal-BcrT9Fgn.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-99-400-normal-DmQyl23y.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-99-600-normal-CeMMRcA6.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-99-600-normal-DnK7T1fc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-99-700-normal-CINNKEoN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-99-700-normal-sDTGjBrk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-400-normal-B9g1Ctqd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-400-normal-DJG00D-p.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-600-normal-B4enfOPB.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-600-normal-DCQl7zAm.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-700-normal-CqLTajqw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-cyrillic-700-normal-hKVirjqK.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-400-normal-CDdMl-oX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-400-normal-D5LEXcjN.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-600-normal-DmCaZeJ-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-600-normal-Ds_Fb90o.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-700-normal-8D2N3nxA.woff +0 -0
- package/public/assets/ibm-plex-sans-jp-latin-700-normal-BTYOjzj6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-0-400-normal-COdVePwF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-0-400-normal-DEF_oZFa.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-0-600-normal-DLXpb0hq.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-0-600-normal-DuzcAQdo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-0-700-normal-BKXIEbM-.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-0-700-normal-C-cy4WQL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-10-400-normal-BOnpTeYv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-10-400-normal-CRn7_mZz.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-10-600-normal-BAjKvcG-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-10-600-normal-DIq7Gv9V.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-10-700-normal-CO8B564V.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-10-700-normal-CYiGY1Yb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-100-400-normal-3DeNbFry.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-100-400-normal-BQdwTqgb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-100-600-normal-CcI0wmDd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-100-600-normal-ZYmKSXu1.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-100-700-normal-BzrrxQTg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-100-700-normal-CMsSAe0_.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-101-400-normal-CwhtzdGH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-101-400-normal-DQN8MKOE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-101-600-normal-Cf7HWvBM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-101-600-normal-DOUVV8ig.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-101-700-normal-CByVAW_A.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-101-700-normal-VIPXB5Il.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-102-400-normal-BC0mCFX2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-102-400-normal-DHfan8x-.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-102-600-normal-BIIL4Btv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-102-600-normal-CN8RaHGd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-102-700-normal-BMMLfFhV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-102-700-normal-DmfLM_GL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-103-400-normal-BQNnzD7b.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-103-400-normal-CYHfi_5o.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-103-600-normal-8oNp3a_g.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-103-600-normal-BKXxr4Vf.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-103-700-normal-BcdoKDVA.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-103-700-normal-Dxy_7wWe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-104-400-normal-BrHR60F5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-104-400-normal-kn3L8mkz.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-104-600-normal-DHHBh9NH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-104-600-normal-DbfrFOKo.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-104-700-normal-BBQprcoA.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-104-700-normal-DIYBHFGo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-105-400-normal-BY6JiZG_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-105-400-normal-D20hKn8x.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-105-600-normal-Bdo6QjXy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-105-600-normal-DU6215sy.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-105-700-normal-CNeD7cKc.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-105-700-normal-D4WgQZhf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-106-400-normal-CKM4EqLH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-106-400-normal-DRimGseV.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-106-600-normal-CIkK4pwL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-106-600-normal-o84Tuavw.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-106-700-normal-DKK03KYp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-106-700-normal-Sq9FhKgR.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-107-400-normal-9_m442uC.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-107-400-normal-DFBsPAhk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-107-600-normal-Bj6Oga3u.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-107-600-normal-IB6GFZTf.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-107-700-normal-BPp3kOId.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-107-700-normal-CXE0S75n.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-108-400-normal-D7nsD7Wm.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-108-400-normal-DbmD_Owd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-108-600-normal-C5FnASlc.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-108-600-normal-Cz9v4gjx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-108-700-normal-BeBTa0LV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-108-700-normal-DblVcY4a.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-109-400-normal-Ch-uxywT.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-109-400-normal-ChZ2CLi-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-109-600-normal-BkGpNJKI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-109-600-normal-CG9-PeCF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-109-700-normal-CZW29fAQ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-109-700-normal-CkMuXuOj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-11-400-normal-CN_UQa3U.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-11-400-normal-DY57wkwV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-11-600-normal-BUarw7E5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-11-600-normal-Ds-mjTNk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-11-700-normal-BntN_kys.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-11-700-normal-DoPFrHSK.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-110-400-normal-D259vsJ_.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-110-400-normal-DvUF8GMi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-110-600-normal-CisRgCMg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-110-600-normal-ReaqIn5m.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-110-700-normal-BIiZFSUQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-110-700-normal-BylngM58.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-111-400-normal-BqppHOeA.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-111-400-normal-DaCXFUcH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-111-600-normal-2DkYfPPb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-111-600-normal-DN6cN55_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-111-700-normal-DjiLTpOV.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-111-700-normal-zUtSBhiX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-112-400-normal-B8TcbMdb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-112-400-normal-BJLUyYDo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-112-600-normal-lS3UdozO.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-112-600-normal-nFX-cMXi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-112-700-normal-DYzxzB3U.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-112-700-normal-NT-G-2lC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-113-400-normal-CEDRAc_f.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-113-400-normal-DlThbTsi.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-113-600-normal-C_RUWM8I.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-113-600-normal-Dhfyy0ky.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-113-700-normal-CdI89zbS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-113-700-normal-DRor3NKv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-114-400-normal-5bMSGSar.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-114-400-normal-Bpqw4_PX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-114-600-normal-BKj6RBZ7.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-114-600-normal-CjRp-Iz4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-114-700-normal-BXC27J9C.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-114-700-normal-JtZooioR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-115-400-normal-6-qa9Uj4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-115-400-normal-CM7tVCiU.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-115-600-normal-CokKDsRY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-115-600-normal-c6nUiZEv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-115-700-normal-BCRYVYbj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-115-700-normal-C4o110v7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-116-400-normal-BCjvaIwI.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-116-400-normal-CPQAppG5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-116-600-normal-2NuQXMn5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-116-600-normal-pwYieqoq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-116-700-normal-DTiOP-RD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-116-700-normal-J2K8ygE7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-117-400-normal-Bqi1rgUh.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-117-400-normal-CAkrqKEd.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-117-600-normal-BUVowAmE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-117-600-normal-CVV1AoIy.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-117-700-normal-B_WqVFu8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-117-700-normal-C-GRhBDF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-118-400-normal-BvkVX0xm.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-118-400-normal-CPvF_U24.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-118-600-normal-BKNr8HaE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-118-600-normal-SYUuQfwq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-118-700-normal-6t-D5P6M.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-118-700-normal-Cwb_HiV8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-119-400-normal-BVAYXEqw.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-119-400-normal-CF0EWuft.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-119-600-normal-CSej5QVJ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-119-600-normal-CWNURXbv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-119-700-normal-DqmD0X2I.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-119-700-normal-DvZpuW9q.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-12-400-normal-AF35YmmH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-12-400-normal-J5xWG5gS.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-12-600-normal-Ba8rnT7_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-12-600-normal-Cdi7mG90.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-12-700-normal-4ZbirUQU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-12-700-normal-Coj3Y2Vv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-13-400-normal-CpXdOOTc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-13-400-normal-eM8eMXyQ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-13-600-normal-DXBEl0OU.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-13-600-normal-ON8tPSnT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-13-700-normal-Bbz7lyAG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-13-700-normal-DfbGPVVb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-14-400-normal-C-oyfrUa.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-14-400-normal-DPe2AXol.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-14-600-normal-BEKBLOkr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-14-600-normal-BZRywIXe.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-14-700-normal-DChZSEXi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-14-700-normal-JLAmA7_6.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-15-400-normal-CBiEIaz5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-15-400-normal-D-mZ9inR.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-15-600-normal-CAapLUyl.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-15-600-normal-Dl-orC8M.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-15-700-normal-JEDfv4vZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-15-700-normal-xL2psWlD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-16-400-normal-CKSk9toV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-16-400-normal-DNGmaJIL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-16-600-normal-DDZagcz1.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-16-600-normal-DloGa7SL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-16-700-normal-Bv7EAOP1.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-16-700-normal-CCA2fInu.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-17-400-normal-BDhrvRnL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-17-400-normal-BOjgDpon.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-17-600-normal-BeTmwP_K.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-17-600-normal-uD_8VqjX.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-17-700-normal-C-NBohiT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-17-700-normal-sVUIRMKd.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-18-400-normal-BTtbRNyU.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-18-400-normal-Bs1zlN0G.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-18-600-normal-3CkcYQgr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-18-600-normal-C0tjZHt0.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-18-700-normal-DjrHhANL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-18-700-normal-UPAurMge.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-19-400-normal-CCVU2G9b.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-19-400-normal-dcW_ilWW.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-19-600-normal-DcS6irVl.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-19-600-normal-w0hsbhoe.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-19-700-normal-CazBSycC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-19-700-normal-CvRuq6Vw.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-2-400-normal-CnxhIj-f.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-2-400-normal-ZCEqhetZ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-2-600-normal-BBWiOGe2.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-2-600-normal-i3phtpOA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-2-700-normal-DO0ByKpJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-2-700-normal-Dei1Gj2q.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-20-400-normal-2BRpmgCV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-20-400-normal-B2cWSh78.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-20-600-normal-CKeHRgKb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-20-600-normal-CXFU6tjk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-20-700-normal-CTtpPuSd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-20-700-normal-N5V03xjS.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-21-400-normal-Cv3FeIij.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-21-400-normal-Dml5TFym.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-21-600-normal-CJHvMuEH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-21-600-normal-ChXV0eBj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-21-700-normal-BR1fDv7I.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-21-700-normal-kWux5vbT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-22-400-normal-3CnvMMD7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-22-400-normal-TNl1bUeL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-22-600-normal-B4PQFGba.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-22-600-normal-bBSJai_o.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-22-700-normal-BAbSphgc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-22-700-normal-HHyMEHBJ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-23-400-normal-CUhld-kf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-23-400-normal-DTBYTMn7.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-23-600-normal-CR-CWSvQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-23-600-normal-Cq5mpPr_.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-23-700-normal-D-oyN10X.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-23-700-normal-DQNF9HpE.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-24-400-normal-BCEQWDh5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-24-400-normal-DDVUYQLq.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-24-600-normal-DL0LF1av.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-24-600-normal-DyaIQrhK.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-24-700-normal-B0AxqRZO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-24-700-normal-Inz-d5-8.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-25-400-normal-C5hUXC4y.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-25-400-normal-CSCHltyB.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-25-600-normal-ClJ2q6nT.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-25-600-normal-CpgWTSx7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-25-700-normal-BSArHqh9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-25-700-normal-BVRIUm2S.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-26-400-normal-BDNWBg-b.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-26-400-normal-BnV7FV79.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-26-600-normal-BQpAkNz5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-26-600-normal-bxA4bluv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-26-700-normal-95lB4fwA.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-26-700-normal-VgtqRBM7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-27-400-normal-B5ZhKYLO.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-27-400-normal-Dy5-YEOY.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-27-600-normal-C07c5If1.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-27-600-normal-C6bVD75P.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-27-700-normal-_7qWVHie.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-27-700-normal-h3oxUHXv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-28-400-normal-Bwghrgjh.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-28-400-normal-DNnelfuN.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-28-600-normal-BBQsSgWd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-28-600-normal-BeDPvyp8.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-28-700-normal-Cjg_wNSB.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-28-700-normal-DY_bvrHQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-29-400-normal-Dj7VksMf.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-29-400-normal-gP3qcvie.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-29-600-normal-B0Nsm10J.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-29-600-normal-Dn9kzegM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-29-700-normal-BaagHPlF.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-29-700-normal-sM5sErEE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-3-400-normal-01r-uCGK.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-3-400-normal-MpgNCYqt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-3-600-normal-CuyoBBEp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-3-600-normal-OOnXi3dj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-3-700-normal-GjYjPFRF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-3-700-normal-Vr7CPe4d.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-30-400-normal-4H84KBjL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-30-400-normal-D9W6fT0U.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-30-600-normal-CHYuKtvD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-30-600-normal-DAX8ENIb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-30-700-normal-DvDs5GHe.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-30-700-normal-kGpxnFlG.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-31-400-normal-BnpH2dyr.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-31-400-normal-DhPplA2S.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-31-600-normal-BDIwmQD2.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-31-600-normal-DWFfqfVJ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-31-700-normal-BEM3LLr5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-31-700-normal-BH_9UzMR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-32-400-normal-BkNndOiq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-32-400-normal-GRBsq_TQ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-32-600-normal-Dc31ixSD.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-32-600-normal-qBGKeeZh.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-32-700-normal-CKh4-8lS.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-32-700-normal-SEF2IUu4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-33-400-normal-BEJcB5Pj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-33-400-normal-DOnua0XC.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-33-600-normal-Dk43PWfK.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-33-600-normal-_9rnVtrt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-33-700-normal-BkaB_Reu.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-33-700-normal-DbnutdYp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-34-400-normal-BFI-kcuc.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-34-400-normal-b_F-aCuz.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-34-600-normal-BwgNjnnm.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-34-600-normal-Dkhx4lxu.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-34-700-normal-UpohLQJI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-34-700-normal-Yul5WPNb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-35-400-normal-CHpiv9C7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-35-400-normal-D8XpW-jV.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-35-600-normal-CD4ArYzM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-35-600-normal-M066d6gr.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-35-700-normal-DV4atPPn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-35-700-normal-hjVn7kub.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-36-400-normal-BT6SwwtR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-36-400-normal-Cd-eoA5H.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-36-600-normal-DsGroCqE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-36-600-normal-kFFPHZH9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-36-700-normal-CO6mIiJi.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-36-700-normal-DfKrXTUN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-37-400-normal-BiWBJPQ7.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-37-400-normal-Bj7jp-Iz.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-37-600-normal-CnPg-4RZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-37-600-normal-Cvgtdz7H.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-37-700-normal-BtF0jwlF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-37-700-normal-C4IDZ9L-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-38-400-normal-B4UIE9Zj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-38-400-normal-CLr3K58D.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-38-600-normal-Dln3mVPi.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-38-600-normal-Uy8tuoQH.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-38-700-normal-DClAUGO7.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-38-700-normal-DHBmduQt.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-39-400-normal-BzR2eDWi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-39-400-normal-WTG9_11D.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-39-600-normal-DHmemGdc.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-39-600-normal-DxNgVy70.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-39-700-normal-B7V6NyLX.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-39-700-normal-CijZ21_m.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-4-400-normal-1GfpLFeR.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-4-400-normal-BSOJFi3M.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-4-600-normal-BGAcZoa5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-4-600-normal-DP-OzMv8.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-4-700-normal-BTl2LovL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-4-700-normal-PLU2uOG6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-40-400-normal-BJCaISym.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-40-400-normal-DxlOKNb6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-40-600-normal-D79iYZbh.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-40-600-normal-DyMFY3yG.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-40-700-normal-BOSqPgLZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-40-700-normal-Bs7eQneK.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-41-400-normal-Ce6_8B6O.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-41-400-normal-THO3jy3s.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-41-600-normal-Ck2K5Ulf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-41-600-normal-Df3Wep6L.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-41-700-normal-B-9pR0B0.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-41-700-normal-vrmrQol7.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-42-400-normal-Cgyyi6Mk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-42-400-normal-mWRC9cE4.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-42-600-normal-BIw3yp_o.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-42-600-normal-CgHlrSUg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-42-700-normal-CE4g_Vnr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-42-700-normal-OHitFFYG.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-43-400-normal-DofKP3XM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-43-400-normal-rklqUmDh.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-43-600-normal-BPJjrS1c.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-43-600-normal-Dl6BB-Lj.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-43-700-normal-B4zrRhmq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-43-700-normal-Vq2Xt21W.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-44-400-normal-BPQ_BGOm.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-44-400-normal-BvoXxhh-.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-44-600-normal-B1scqjS5.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-44-600-normal-B1vhjtxY.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-44-700-normal-CdiYya7N.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-44-700-normal-CizxTCTp.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-45-400-normal-BN1x-JCl.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-45-400-normal-DMKz6H_F.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-45-600-normal-D74kcLg1.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-45-600-normal-DNXvxDIf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-45-700-normal-BdAAndOM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-45-700-normal-DeYHlTSC.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-46-400-normal-K8yMYku4.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-46-400-normal-Z0YZvJMA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-46-600-normal-CfEBl86K.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-46-600-normal-Yu7W5Ur_.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-46-700-normal-C2i6qX8o.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-46-700-normal-Ck28wpb6.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-47-400-normal-BHD-6hCF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-47-400-normal-DapCxPvn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-47-600-normal-CxMB4f1K.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-47-600-normal-tmv6xC_z.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-47-700-normal-ByTiuiZy.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-47-700-normal-C_LnNwcx.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-48-400-normal-5VJWa5C8.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-48-400-normal-CBCdCJJN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-48-600-normal-DAbbVYEi.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-48-600-normal-QEQJ2vNg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-48-700-normal-D9NnIF6F.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-48-700-normal-gCAr-9Ui.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-49-400-normal-BENNdZwd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-49-400-normal-DrUErJVA.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-49-600-normal-B9kwAyIi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-49-600-normal-DHvPm2NF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-49-700-normal-C7LprN_f.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-49-700-normal-C80RxHso.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-5-400-normal-B1Nb7Dqt.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-5-400-normal-BBWPbJ8R.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-5-600-normal-BV1Q-ya9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-5-600-normal-vSSmYEgt.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-5-700-normal-88k3u19j.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-5-700-normal-Bm4AIB4W.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-50-400-normal-DSyr09Pi.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-50-400-normal-wVEmJJbn.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-50-600-normal-CNwgbPME.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-50-600-normal-DwlyYo3O.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-50-700-normal-BpuC-Ja2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-50-700-normal-DJ4qrNjm.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-51-400-normal-CI8zKOiq.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-51-400-normal-Nb_ATV55.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-51-600-normal-D1q9iZG9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-51-600-normal-DCKOx3do.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-51-700-normal-CDxcnlps.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-51-700-normal-CrbVhrAy.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-52-400-normal-DgbfUacv.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-52-400-normal-Dqrwgacb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-52-600-normal-DpEHO2lx.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-52-600-normal-HtoGXJPD.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-52-700-normal-6UeGb2y_.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-52-700-normal-Cj2MbqkN.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-53-400-normal-BPlmQmyN.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-53-400-normal-uFBOSatZ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-53-600-normal-3e73VLox.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-53-600-normal-CHFWjDbo.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-53-700-normal-BtF7lJZ6.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-53-700-normal-D1_BFs6r.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-54-400-normal-B_JBM8HP.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-54-400-normal-DShvO3nx.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-54-600-normal-CIir-_6C.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-54-600-normal-HSAnxCQg.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-54-700-normal-DOcpS_k9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-54-700-normal-DR_NIHG9.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-55-400-normal-BIBVbLNo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-55-400-normal-DACpgdpL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-55-600-normal-ByArDHHI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-55-600-normal-CNKcN-Ig.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-55-700-normal-9BGvVFJG.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-55-700-normal-DCUUt7cX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-56-400-normal-D6a133Nk.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-56-400-normal-E_0UP4jm.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-56-600-normal-DScuu4Uu.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-56-600-normal-hzikha37.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-56-700-normal-BCQXFjgs.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-56-700-normal-CfjdYZM4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-57-400-normal-CBQftTJt.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-57-400-normal-F8LL-J5_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-57-600-normal-BR6Du0PQ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-57-600-normal-CQ1redVd.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-57-700-normal-DQEJ1-LS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-57-700-normal-FH-ttKed.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-58-400-normal-DqIzdKrV.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-58-400-normal-i71EDyfV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-58-600-normal-Bpgq8MX2.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-58-600-normal-Bqgrv0lo.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-58-700-normal-Bj2HnGEw.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-58-700-normal-DYsLBu1T.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-59-400-normal-B-8F2Uet.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-59-400-normal-BHAiqXEM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-59-600-normal-B-CGe3sL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-59-600-normal-BuQf4YmM.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-59-700-normal-BZ9z_FHx.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-59-700-normal-CWSgjf9c.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-6-400-normal-AY_mybA2.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-6-400-normal-CTPxjOYB.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-6-600-normal-CdfPYwdk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-6-600-normal-oGadQOpD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-6-700-normal-DLe2ZT_Q.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-6-700-normal-bXRUCZKE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-60-400-normal-CEDE9rS0.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-60-400-normal-z5dDoQx9.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-60-600-normal-Bl94dFYa.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-60-600-normal-OLqttnKu.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-60-700-normal-CYME5EXY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-60-700-normal-I1XysYDt.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-61-400-normal-Ci1tC2DE.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-61-400-normal-DnyFjM_B.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-61-600-normal-BZxjTCO5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-61-600-normal-ChG7s6jj.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-61-700-normal-Bi5bgOa-.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-61-700-normal-CCHPFSSV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-62-400-normal-BIF8JT4K.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-62-400-normal-BMQQOADr.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-62-600-normal-BwPZY4No.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-62-600-normal-CCy9m1Yi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-62-700-normal-CUKZrRn4.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-62-700-normal-PUE26tsV.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-63-400-normal-Bi-DePsy.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-63-400-normal-DbEg4X6i.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-63-600-normal-B_hznMYb.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-63-600-normal-DXp5U46T.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-63-700-normal-CdRKaRR8.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-63-700-normal-d_p4qgBI.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-64-400-normal-BoOvEFVR.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-64-400-normal-DhttFBeF.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-64-600-normal-DdDi5wpQ.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-64-600-normal-DnHS-nmP.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-64-700-normal-DvcYr3Tg.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-64-700-normal-Z-oKOpcu.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-65-600-normal-CuB_ApqX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-65-700-normal-OQGIHpUr.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-7-400-normal-CDkAi-IU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-7-400-normal-VZ_YUdPy.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-7-600-normal-CeGVp1rD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-7-600-normal-Dh7JSXz4.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-7-700-normal-C-GGubNS.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-7-700-normal-DkDnzNv2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-8-400-normal-BmMhoS32.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-8-400-normal-Ci0W5IWz.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-8-600-normal-B0rxBWNc.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-8-600-normal-BJjl00Le.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-8-700-normal-5jYiHHRz.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-8-700-normal-BEKQdV0c.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-9-400-normal-CeBwsqAD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-9-400-normal-DJinq116.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-9-600-normal-DWoOSbq5.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-9-600-normal-DraA-1Zl.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-9-700-normal-BkZ1vv2G.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-9-700-normal-CymJjnAS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-93-400-normal-5J6UR9CM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-93-400-normal-Cdi-IBra.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-93-600-normal-4KzAAJzD.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-93-600-normal-C3ObUrek.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-93-700-normal-BEo_xrjH.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-93-700-normal-DYlKYBEL.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-94-400-normal-CLS33fqM.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-94-400-normal-CsJn1kPf.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-94-600-normal-BqkCATJS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-94-600-normal-DGs8D_d9.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-94-700-normal-BcAowvjY.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-94-700-normal-Rande0GP.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-96-400-normal-DqxPcneT.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-96-400-normal-m9r3xH18.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-96-600-normal-E6j9XpvP.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-96-600-normal-qnNrW3Df.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-96-700-normal-D_kcIWRN.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-96-700-normal-DafuQoH3.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-97-400-normal-DOlHHts_.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-97-400-normal-TWLDWHgL.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-97-600-normal-CHxkMEAU.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-97-600-normal-CXVo40nf.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-97-700-normal-BdFpzIjS.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-97-700-normal-C5vPlSUB.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-98-400-normal-CyxDRXqs.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-98-400-normal-D-_zohjb.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-98-600-normal-CizO16Ew.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-98-600-normal-D-SBD5Hk.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-98-700-normal-BArUuixv.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-98-700-normal-O_rp84MR.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-99-400-normal-COuj214s.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-99-600-normal-j_ccRvHi.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-99-700-normal-BGCe6SPX.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-400-normal-7kwLL-e3.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-400-normal-Bc7vhvxM.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-600-normal-n-2PV5Ut.woff2 +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-600-normal-yks4z4wu.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-700-normal-Bj41MRxQ.woff +0 -0
- package/public/assets/ibm-plex-sans-kr-latin-700-normal-CIbXnLaA.woff2 +0 -0
- package/public/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
- package/public/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
- package/public/assets/ibm-plex-sans-vietnamese-wght-normal-Dg1JeJN0.woff2 +0 -0
- package/public/assets/index-CS23Ozt6.js +11 -0
- package/public/assets/index-CS23Ozt6.js.map +1 -0
- package/public/assets/index-DZyHRhbQ.css +2 -0
- package/public/assets/initial-avatar-CtuDUz_W.js +2 -0
- package/public/assets/initial-avatar-CtuDUz_W.js.map +1 -0
- package/public/assets/input-CzQki7k6.js +2 -0
- package/public/assets/input-CzQki7k6.js.map +1 -0
- package/public/assets/key-round-CdvHb8vT.js +2 -0
- package/public/assets/key-round-CdvHb8vT.js.map +1 -0
- package/public/assets/labeled-separator-CV7nb0XW.js +2 -0
- package/public/assets/labeled-separator-CV7nb0XW.js.map +1 -0
- package/public/assets/link-C-WdTj3F.js +2 -0
- package/public/assets/link-C-WdTj3F.js.map +1 -0
- package/public/assets/lock-7NRyvXBS.js +2 -0
- package/public/assets/lock-7NRyvXBS.js.map +1 -0
- package/public/assets/login-C5vUVgr_.js +2 -0
- package/public/assets/login-C5vUVgr_.js.map +1 -0
- package/public/assets/login-nukebli4.js +2 -0
- package/public/assets/login-nukebli4.js.map +1 -0
- package/public/assets/logout-B5T52P8u.js +2 -0
- package/public/assets/logout-B5T52P8u.js.map +1 -0
- package/public/assets/mail-D0B_1Dzd.js +2 -0
- package/public/assets/mail-D0B_1Dzd.js.map +1 -0
- package/public/assets/modal-BDQFucjz.js +2 -0
- package/public/assets/modal-BDQFucjz.js.map +1 -0
- package/public/assets/mutationOptions-DyYFUbyn.js +2 -0
- package/public/assets/mutationOptions-DyYFUbyn.js.map +1 -0
- package/public/assets/passkey-BE9JvJOP.js +2 -0
- package/public/assets/passkey-BE9JvJOP.js.map +1 -0
- package/public/assets/passkey-C5vUVgr_.js +2 -0
- package/public/assets/passkey-C5vUVgr_.js.map +1 -0
- package/public/assets/passkey-CynCz1Dt.js +2 -0
- package/public/assets/passkey-CynCz1Dt.js.map +1 -0
- package/public/assets/passkey-J1qnYp9A.js +2 -0
- package/public/assets/passkey-J1qnYp9A.js.map +1 -0
- package/public/assets/passkey-error-ZqqPQUta.js +2 -0
- package/public/assets/passkey-error-ZqqPQUta.js.map +1 -0
- package/public/assets/password-C5vUVgr_.js +2 -0
- package/public/assets/password-C5vUVgr_.js.map +1 -0
- package/public/assets/password-RkUttbhD.js +2 -0
- package/public/assets/password-RkUttbhD.js.map +1 -0
- package/public/assets/password-reset-sU5KkBKi.js +2 -0
- package/public/assets/password-reset-sU5KkBKi.js.map +1 -0
- package/public/assets/password-strength-BeSOu_Ga.js +2 -0
- package/public/assets/password-strength-BeSOu_Ga.js.map +1 -0
- package/public/assets/pin-input-Cc-VkrQ3.js +2 -0
- package/public/assets/pin-input-Cc-VkrQ3.js.map +1 -0
- package/public/assets/plus-DSBBSrgj.js +2 -0
- package/public/assets/plus-DSBBSrgj.js.map +1 -0
- package/public/assets/profile-B5NaJfeS.js +2 -0
- package/public/assets/profile-B5NaJfeS.js.map +1 -0
- package/public/assets/profile-BcjsVYOx.js +2 -0
- package/public/assets/profile-BcjsVYOx.js.map +1 -0
- package/public/assets/promise-OpBtq8tG.js +2 -0
- package/public/assets/promise-OpBtq8tG.js.map +1 -0
- package/public/assets/provider-logos-u1YURWQr.js +2 -0
- package/public/assets/provider-logos-u1YURWQr.js.map +1 -0
- package/public/assets/recovery-PnUATiUi.js +2 -0
- package/public/assets/recovery-PnUATiUi.js.map +1 -0
- package/public/assets/register-C5vUVgr_.js +2 -0
- package/public/assets/register-C5vUVgr_.js.map +1 -0
- package/public/assets/register-DQXhru0_.js +2 -0
- package/public/assets/register-DQXhru0_.js.map +1 -0
- package/public/assets/reset-C5vUVgr_.js +2 -0
- package/public/assets/reset-C5vUVgr_.js.map +1 -0
- package/public/assets/reset-CQgIa3yf.js +2 -0
- package/public/assets/reset-CQgIa3yf.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-C5vUVgr_.js +2 -0
- package/public/assets/select-C5vUVgr_.js.map +1 -0
- package/public/assets/select-DqZynXSt.js +2 -0
- package/public/assets/select-DqZynXSt.js.map +1 -0
- package/public/assets/separator-B0Bvh1he.js +2 -0
- package/public/assets/separator-B0Bvh1he.js.map +1 -0
- package/public/assets/shell-header-bar-CjG5qvPg.js +2 -0
- package/public/assets/shell-header-bar-CjG5qvPg.js.map +1 -0
- package/public/assets/shield-check-D_p8H0ni.js +2 -0
- package/public/assets/shield-check-D_p8H0ni.js.map +1 -0
- package/public/assets/standard-schema-e8gtSzGE.js +2 -0
- package/public/assets/standard-schema-e8gtSzGE.js.map +1 -0
- package/public/assets/terms-B5NaJfeS.js +2 -0
- package/public/assets/terms-B5NaJfeS.js.map +1 -0
- package/public/assets/terms-BHDAgn-H.js +2 -0
- package/public/assets/terms-BHDAgn-H.js.map +1 -0
- package/public/assets/terms-checkbox-list-6jteUTIZ.js +2 -0
- package/public/assets/terms-checkbox-list-6jteUTIZ.js.map +1 -0
- package/public/assets/totp-BNZ904Zm.js +2 -0
- package/public/assets/totp-BNZ904Zm.js.map +1 -0
- package/public/assets/totp-CJtfVNEq.js +2 -0
- package/public/assets/totp-CJtfVNEq.js.map +1 -0
- package/public/assets/totp-ECvOUcFx.js +2 -0
- package/public/assets/totp-ECvOUcFx.js.map +1 -0
- package/public/assets/trash-2-DZdKBLvC.js +2 -0
- package/public/assets/trash-2-DZdKBLvC.js.map +1 -0
- package/public/assets/triangle-alert-CqNn0kPs.js +2 -0
- package/public/assets/triangle-alert-CqNn0kPs.js.map +1 -0
- package/public/assets/use-totp-setup-BbS3XcZA.js +3 -0
- package/public/assets/use-totp-setup-BbS3XcZA.js.map +1 -0
- package/public/assets/useAriaLabelledBy-ByuMi3Ry.js +2 -0
- package/public/assets/useAriaLabelledBy-ByuMi3Ry.js.map +1 -0
- package/public/assets/useMutation-BWZ0G4Td.js +2 -0
- package/public/assets/useMutation-BWZ0G4Td.js.map +1 -0
- package/public/assets/useQuery-Ckxjmvtl.js +2 -0
- package/public/assets/useQuery-Ckxjmvtl.js.map +1 -0
- package/public/assets/users-CmFxrCQT.js +2 -0
- package/public/assets/users-CmFxrCQT.js.map +1 -0
- package/public/assets/valueToPercent-LgbY_prH.js +2 -0
- package/public/assets/valueToPercent-LgbY_prH.js.map +1 -0
- package/public/assets/zod-C87S6Tec.js +66 -0
- package/public/assets/zod-C87S6Tec.js.map +1 -0
- package/public/index.html +31 -0
- package/public/vite.svg +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-DTQCUlfZ.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","\"use\"","useLayoutEffect","deepEqual","trimPathRight","useStore","useStore","deepEqual","useStore","_formatErrorMessage","createInstance","EMPTY","platform","platform.env.jsdom","platform.os.android","platform.env.jsdom","clamp","getComputedStyle","getComputedStyle","selectors","isFocusVisible","platform.screenReader.voiceOver","platform.engine.webkit","ownerWindow","isFocusVisible","_formatErrorMessage","getComputedStyle","REVERSE_CANCEL_THRESHOLD","MIN_DRAG_THRESHOLD","ownerWindow","computePosition","flip","offset","shift","clamp","limitShift","size","offset","offset$1","shift","shift$1","flip","flip$1","size","size$1","limitShift","limitShift$1","useLayoutEffect","usePosition","clamp","shift","floatingShift","ownerWindow","_formatErrorMessage","useToastManager","createToastManager","Toast.Action","Toast.Arrow","Toast.Close","Toast.Content","Toast.Description","Toast.createToastManager","Toast.useToastManager","Toast.Portal","Toast.Positioner","Toast.Provider","Toast.Root","Toast.Title","Toast.Viewport","createProxy"],"sources":["../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/utils.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/thenable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/removable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/query.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/queryOptions.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.17_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.14/node_modules/@tanstack/router-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.14/node_modules/@tanstack/router-core/dist/esm/invariant.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.14/node_modules/@tanstack/router-core/dist/esm/path.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.14/node_modules/@tanstack/router-core/dist/esm/link.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.17_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.17_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.17_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/@tanstack+react-router@1.170.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/matchContext.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/@tanstack+react-router@1.170.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useMatch.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useSearch.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.17_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/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/providers/focus-modality/focus-modality-provider.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/internal/component-part.js","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/useOnMount.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/provider/ToastProviderContext.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/fastHooks.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/store/useStore.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/store/Store.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/store/ReactStore.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/mergeCleanups.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/addEventListener.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/useAnimationFrame.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/useTimeout.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/generateId.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/utils/resolvePromiseOptions.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/platform/shared.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/platform/os.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/platform/engine.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/platform/screen-reader.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/platform/env.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/shadowDom.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/element.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/event.mjs","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/store.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/provider/ToastProvider.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/visuallyHidden.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/FocusGuard.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/viewport/ToastViewport.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/inertValue.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/root/ToastRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/stateAttributesMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/resolveRef.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/useAnimationsFinished.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/constants.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/scrollable.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/clamp.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/getElementAtPoint.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/useSwipeDismiss.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/root/ToastRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/content/ToastContent.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/useId.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/utils/isRenderableNode.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/utils/useToastLabelPart.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/description/ToastDescription.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/title/ToastTitle.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/close/ToastClose.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/action/ToastAction.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/reason-parts.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/FloatingPortalLite.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/portal/ToastPortal.mjs","../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/useValueAsRef.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs","../../../../node_modules/.pnpm/@floating-ui+core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/.pnpm/@floating-ui+dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.9_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/hooks/useFloatingRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/hideMiddleware.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/useAnchorPositioning.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/positioner/ToastPositionerContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/popupStateMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/utils/usePositioner.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/positioner/ToastPositioner.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/arrow/ToastArrow.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/useToastManager.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/toast/createToastManager.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-action.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-arrow.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-close.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-content.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-description.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-manager.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-portal.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-positioner.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-provider.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-root.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-title.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/toast-viewport.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/toast/index.js","../../../../node_modules/.pnpm/i18next@26.3.4_typescript@5.9.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","../../../frontend/src/hooks/use-theme.ts","../../../../node_modules/.pnpm/hono@4.12.28/node_modules/hono/dist/utils/cookie.js","../../../../node_modules/.pnpm/hono@4.12.28/node_modules/hono/dist/client/utils.js","../../../../node_modules/.pnpm/hono@4.12.28/node_modules/hono/dist/client/client.js","../../../frontend/src/libs/api.ts","../../../frontend/src/queries/keys.ts","../../../frontend/src/queries/config.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","// 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* Re-encode characters that are unsafe in URL paths.\n* Includes ASCII control characters (0x00-0x1F, 0x7F) and a subset of the\n* WHATWG URL \"path percent-encode set\" (\", <, >, `, {, }).\n*\n* Space (0x20) is intentionally excluded — decodeURI decodes %20 to space\n* and the router stores decoded spaces in location.pathname. The existing\n* encodePathLikeUrl already handles re-encoding spaces for outgoing URLs.\n*\n* These characters are decoded by decodeURI but must remain percent-encoded\n* in paths to match how upstream layers (CDNs, edge middleware, browsers)\n* interpret the URL, preventing infinite redirect loops and path mismatches.\n*/\nconst PATH_UNSAFE_RE = /[\\x00-\\x1f\\x7f\"<>`{}]/g;\nfunction sanitizePathSegment(segment) {\n\treturn segment.replace(PATH_UNSAFE_RE, (ch) => \"%\" + ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, \"0\"));\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","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/matchContext.tsx\nvar matchContext = React$1.createContext(void 0);\nvar dummyMatchContext = React$1.createContext(void 0);\n//#endregion\nexport { dummyMatchContext, matchContext };\n\n//# sourceMappingURL=matchContext.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","\"use client\";\nimport { dummyMatchContext, matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { invariant, replaceEqualDeep } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { useStore } from \"@tanstack/react-store\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/useMatch.tsx\nvar dummyStore = {\n\tget() {},\n\tsubscribe() {\n\t\treturn { unsubscribe() {} };\n\t}\n};\nfunction useStructuralSharing(opts, router) {\n\tconst previousResult = React$1.useRef();\n\treturn (slice) => {\n\t\tconst selected = opts?.select ? opts.select(slice) : slice;\n\t\tif (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);\n\t\treturn selected;\n\t};\n}\n/**\n* Read and select the nearest or targeted route match.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchHook\n*/\nfunction useMatch(opts) {\n\tconst router = useRouter();\n\tconst nearestMatchId = React$1.useContext(opts.from ? dummyMatchContext : matchContext);\n\tconst matchStore = opts.from ? router.stores.getRouteMatchStore(opts.from) : router.stores.matchStores.get(nearestMatchId);\n\tif (isServer ?? router.isServer) {\n\t\tconst match = matchStore?.get();\n\t\tif (!match) {\n\t\t\tif (opts.shouldThrow ?? true) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\treturn opts.select ? opts.select(match) : match;\n\t}\n\tconst selector = useStructuralSharing(opts, router);\n\tconst matchSelection = useStore(matchStore ?? dummyStore, (match) => match ? selector(match) : dummyStore);\n\tif (matchSelection !== dummyStore) return matchSelection;\n\tif (opts.shouldThrow ?? true) {\n\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\tinvariant();\n\t}\n}\n//#endregion\nexport { useMatch, useStructuralSharing };\n\n//# sourceMappingURL=useMatch.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useSearch.tsx\n/**\n* Read and select the current route's search parameters with type-safety.\n*\n* Options:\n* - `from`/`strict`: Control which route's search is read and how strictly it's typed\n* - `select`: Map the search object to a derived value for render optimization\n* - `structuralSharing`: Enable structural sharing for stable references\n* - `shouldThrow`: Throw when the route is not found (strict contexts)\n*\n* @returns The search object (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useSearchHook\n*/\nfunction useSearch(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tstrict: opts.strict,\n\t\tshouldThrow: opts.shouldThrow,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tselect: (match) => {\n\t\t\treturn opts.select ? opts.select(match.search) : match.search;\n\t\t}\n\t});\n}\n//#endregion\nexport { useSearch };\n\n//# sourceMappingURL=useSearch.js.map","/**\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","\"use client\";\nimport { useEffect } from \"react\";\n//#region src/providers/focus-modality/focus-modality-provider.tsx\nconst TINYRACK_FOCUS_MODALITY_ATTRIBUTE = \"data-tr-focus-modality\";\nconst trackers = /* @__PURE__ */ new WeakMap();\n/**\n* Tracks whether the focus a control currently holds arrived by pointer or by\n* keyboard, and publishes it on the document element for CSS to read.\n*\n* `:focus-visible` cannot answer this on its own. The selector is defined to\n* always match a text-editable element no matter how focus arrived, so a plain\n* mouse click paints the same ring as a Tab press. WCAG only asks for a visible\n* *keyboard* focus indicator, so the ring is suppressed for pointer focus and\n* the modality has to be tracked here.\n*\n* The modality is sampled at `focusin`, not at key time. Typing into a field\n* that was clicked must not pop a ring in mid-sentence, and sampling on focus\n* acquisition is also what lets the keyboard heuristic below stay permissive.\n*/\nfunction setupTinyrackFocusModality(documentObject = document) {\n\tconst existing = trackers.get(documentObject);\n\tif (existing) {\n\t\texisting.count += 1;\n\t\treturn () => releaseTinyrackFocusModality(documentObject);\n\t}\n\tconst root = documentObject.documentElement;\n\tlet keyboardModality = true;\n\tconst handleKeyDown = (event) => {\n\t\tif (event.metaKey || event.altKey || event.ctrlKey) return;\n\t\tkeyboardModality = true;\n\t};\n\tconst handlePointerDown = () => {\n\t\tkeyboardModality = false;\n\t};\n\tconst handleFocusIn = () => {\n\t\troot.setAttribute(TINYRACK_FOCUS_MODALITY_ATTRIBUTE, keyboardModality ? \"keyboard\" : \"pointer\");\n\t};\n\tconst handleWindowBlur = () => {\n\t\tkeyboardModality = true;\n\t};\n\tconst options = {\n\t\tcapture: true,\n\t\tpassive: true\n\t};\n\tconst view = documentObject.defaultView;\n\tdocumentObject.addEventListener(\"keydown\", handleKeyDown, options);\n\tdocumentObject.addEventListener(\"pointerdown\", handlePointerDown, options);\n\tdocumentObject.addEventListener(\"mousedown\", handlePointerDown, options);\n\tdocumentObject.addEventListener(\"touchstart\", handlePointerDown, options);\n\tdocumentObject.addEventListener(\"focusin\", handleFocusIn, options);\n\tview?.addEventListener(\"blur\", handleWindowBlur);\n\tconst teardown = () => {\n\t\tdocumentObject.removeEventListener(\"keydown\", handleKeyDown, options);\n\t\tdocumentObject.removeEventListener(\"pointerdown\", handlePointerDown, options);\n\t\tdocumentObject.removeEventListener(\"mousedown\", handlePointerDown, options);\n\t\tdocumentObject.removeEventListener(\"touchstart\", handlePointerDown, options);\n\t\tdocumentObject.removeEventListener(\"focusin\", handleFocusIn, options);\n\t\tview?.removeEventListener(\"blur\", handleWindowBlur);\n\t\troot.removeAttribute(TINYRACK_FOCUS_MODALITY_ATTRIBUTE);\n\t};\n\ttrackers.set(documentObject, {\n\t\tcount: 1,\n\t\tteardown\n\t});\n\treturn () => releaseTinyrackFocusModality(documentObject);\n}\nfunction releaseTinyrackFocusModality(documentObject) {\n\tconst state = trackers.get(documentObject);\n\tif (!state) return;\n\tstate.count -= 1;\n\tif (state.count > 0) return;\n\ttrackers.delete(documentObject);\n\tstate.teardown();\n}\nfunction getTinyrackFocusModality(documentObject = document) {\n\tconst value = documentObject.documentElement.getAttribute(TINYRACK_FOCUS_MODALITY_ATTRIBUTE);\n\treturn value === \"keyboard\" || value === \"pointer\" ? value : void 0;\n}\n/**\n* Installs the tracker for as long as the calling component is mounted. Every\n* control whose focus emphasis depends on the modality calls this, and the\n* refcount keeps a single set of listeners per document.\n*/\nfunction useTinyrackFocusModality() {\n\tuseEffect(() => setupTinyrackFocusModality(), []);\n}\n/**\n* Optional for consumers of the React components, which install the tracker\n* themselves. Useful when only the CSS is used, or when the tracker should run\n* before the first control mounts.\n*/\nfunction TRFocusModalityProvider({ children }) {\n\tuseTinyrackFocusModality();\n\treturn children;\n}\n//#endregion\nexport { TINYRACK_FOCUS_MODALITY_ATTRIBUTE, TRFocusModalityProvider, getTinyrackFocusModality, setupTinyrackFocusModality, useTinyrackFocusModality };\n\n//# sourceMappingURL=focus-modality-provider.js.map","import { useTinyrackFocusModality } from \"../providers/focus-modality/focus-modality-provider.js\";\nimport { mergeComponentClassName } from \"./component-class-name.js\";\nimport { createElement } from \"react\";\n//#region src/internal/component-part.tsx\nfunction createComponentPart(Component, baseClassName, { tracksFocusModality = false } = {}) {\n\tfunction renderComponent(props) {\n\t\tif (baseClassName === void 0) return createElement(Component, props);\n\t\tconst { className, ...componentProps } = props;\n\t\treturn createElement(Component, {\n\t\t\t...componentProps,\n\t\t\tclassName: mergeComponentClassName(baseClassName, className)\n\t\t});\n\t}\n\tif (!tracksFocusModality) return function TinyrackComponent(props) {\n\t\treturn renderComponent(props);\n\t};\n\treturn function TinyrackComponent(props) {\n\t\tuseTinyrackFocusModality();\n\t\treturn renderComponent(props);\n\t};\n}\n//#endregion\nexport { createComponentPart };\n\n//# sourceMappingURL=component-part.js.map","'use client';\n\nimport * as React from 'react';\nimport { EMPTY_ARRAY } from \"./empty.mjs\";\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport function useOnMount(fn) {\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- no need to put `fn` in the dependency array\n /* eslint-disable react-hooks/exhaustive-deps */\n React.useEffect(fn, EMPTY_ARRAY);\n /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ToastContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ToastContext.displayName = \"ToastContext\";\nexport function useToastProviderContext() {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: useToastManager must be used within <Toast.Provider>.' : _formatErrorMessage(73));\n }\n return context;\n}","import * as React from 'react';\nimport { useRefWithInit } from \"./useRefWithInit.mjs\";\nconst hooks = [];\nlet currentInstance = undefined;\nexport function getInstance() {\n return currentInstance;\n}\nexport function setInstance(instance) {\n currentInstance = instance;\n}\nexport function register(hook) {\n hooks.push(hook);\n}\n\n/**\n * Wraps a component function to enable performance optimizations for internal hooks.\n *\n * **Performance Optimization:**\n * Components wrapped with `fastComponent` have access to a shared \"instance\" context that enables\n * specialized hook implementations to batch operations and reduce overhead. The wrapper creates a\n * stable instance object that persists across renders, sets it as the current context, calls\n * registered hooks before and after rendering, then clears the context. The primary benefit is\n * with `useStore`, where multiple store subscriptions within the same component are collapsed into\n * a single `useSyncExternalStore` subscription per store, significantly reducing re-render overhead.\n * This optimization is only active on React 19+; on earlier versions `useStore` falls back to a\n * separate subscription per call.\n *\n * **Requirements:**\n * - The component function should follow standard React component patterns\n * - `useStore` calls must keep a stable order and count across renders, as batched hooks are\n * matched by call index\n * - Do not rely on the instance context outside of specialized hooks\n *\n * @param fn - The component function to wrap\n * @returns A wrapped component with the same signature as the input function\n *\n * @example\n * ```tsx\n * // Wrapping a component to enable optimized useStore batching\n * export const TooltipRoot = fastComponent(function TooltipRoot(props) {\n * // These useStore calls share a single subscription\n * const open = useStore(store, (state) => state.open);\n * const disabled = useStore(store, (state) => state.disabled);\n * const value = useStore(store, (state) => state.value);\n * // ...\n * });\n * ```\n */\nexport function fastComponent(fn) {\n const FastComponent = (props, forwardedRef) => {\n const instance = useRefWithInit(createInstance).current;\n let result;\n try {\n currentInstance = instance;\n for (const hook of hooks) {\n hook.before(instance);\n }\n result = fn(props, forwardedRef);\n for (const hook of hooks) {\n hook.after(instance);\n }\n instance.didInitialize = true;\n } finally {\n currentInstance = undefined;\n }\n return result;\n };\n FastComponent.displayName = fn.displayName || fn.name;\n return FastComponent;\n}\n\n/**\n * Wraps a component function with ref forwarding to enable performance optimizations for internal hooks.\n *\n * This is a convenience wrapper that combines `fastComponent` with `React.forwardRef`, enabling\n * both performance optimizations and proper ref forwarding. See `fastComponent` for details on\n * the performance benefits.\n *\n * @param fn - The component function that accepts props and a forwarded ref\n * @returns A wrapped component with ref forwarding enabled\n *\n * @example\n * ```tsx\n * // Wrapping a component with ref forwarding and optimized hooks\n * export const TooltipTrigger = fastComponentRef(function TooltipTrigger(\n * props,\n * forwardedRef\n * ) {\n * const store = useContext(TooltipContext);\n * const open = useStore(store, (state) => state.open);\n * // ... component logic with ref\n * return <button ref={forwardedRef} {...props} />;\n * });\n * ```\n */\nexport function fastComponentRef(fn) {\n return /*#__PURE__*/React.forwardRef(fastComponent(fn));\n}\nfunction createInstance() {\n return {\n didInitialize: false\n };\n}","import * as React from 'react';\n/* We need to import the shim because React 17 does not support the `useSyncExternalStore` API.\n * More info: https://github.com/mui/mui-x/issues/18303#issuecomment-2958392341 */\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { isReactVersionAtLeast } from \"../reactVersion.mjs\";\nimport { register, getInstance } from \"../fastHooks.mjs\";\n/* Some tests fail in R18 with the raw useSyncExternalStore. It may be possible to make it work\n * but for now we only enable it for R19+. */\nconst canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);\nconst useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;\nexport function useStore(store, selector, a1, a2, a3) {\n return useStoreImplementation(store, selector, a1, a2, a3);\n}\nfunction useStoreR19(store, selector, a1, a2, a3) {\n const getSelection = React.useCallback(() => selector(store.getSnapshot(), a1, a2, a3), [store, selector, a1, a2, a3]);\n return useSyncExternalStore(store.subscribe, getSelection, getSelection);\n}\nregister({\n before(instance) {\n instance.syncIndex = 0;\n if (!instance.didInitialize) {\n instance.syncTick = 1;\n instance.syncHooks = [];\n instance.didChangeStore = true;\n instance.getSnapshot = () => {\n let didChange = false;\n for (let i = 0; i < instance.syncHooks.length; i += 1) {\n const hook = instance.syncHooks[i];\n const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);\n if (!Object.is(hook.value, value)) {\n didChange = true;\n hook.value = value;\n }\n }\n if (didChange) {\n instance.syncTick += 1;\n }\n return instance.syncTick;\n };\n }\n },\n after(instance) {\n if (instance.syncHooks.length > 0) {\n if (instance.didChangeStore) {\n instance.didChangeStore = false;\n instance.subscribe = onStoreChange => {\n const stores = new Set();\n for (const hook of instance.syncHooks) {\n stores.add(hook.store);\n }\n const unsubscribes = [];\n for (const store of stores) {\n unsubscribes.push(store.subscribe(onStoreChange));\n }\n return () => {\n for (const unsubscribe of unsubscribes) {\n unsubscribe();\n }\n };\n };\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useSyncExternalStore(instance.subscribe, instance.getSnapshot, instance.getSnapshot);\n }\n }\n});\nfunction useStoreFast(store, selector, a1, a2, a3) {\n const instance = getInstance();\n if (!instance) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStoreR19(store, selector, a1, a2, a3);\n }\n const index = instance.syncIndex;\n instance.syncIndex += 1;\n let hook;\n if (!instance.didInitialize) {\n hook = {\n store,\n selector,\n a1,\n a2,\n a3,\n value: selector(store.getSnapshot(), a1, a2, a3)\n };\n instance.syncHooks.push(hook);\n } else {\n hook = instance.syncHooks[index];\n if (hook.store !== store || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {\n if (hook.store !== store) {\n instance.didChangeStore = true;\n }\n hook.store = store;\n hook.selector = selector;\n hook.a1 = a1;\n hook.a2 = a2;\n hook.a3 = a3;\n hook.value = selector(store.getSnapshot(), a1, a2, a3);\n }\n }\n return hook.value;\n}\nfunction useStoreLegacy(store, selector, a1, a2, a3) {\n return useSyncExternalStoreWithSelector(store.subscribe, store.getSnapshot, store.getSnapshot, state => selector(state, a1, a2, a3));\n}","import { useStore } from \"./useStore.mjs\";\n/**\n * A data store implementation that allows subscribing to state changes and updating the state.\n * It uses an observer pattern to notify subscribers when the state changes.\n */\nexport class Store {\n /**\n * The current state of the store.\n * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.\n * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState).\n * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.\n *\n * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.\n */\n\n // Internal state to handle recursive `setState()` calls\n\n constructor(state) {\n this.state = state;\n this.listeners = new Set();\n this.updateTick = 0;\n }\n\n /**\n * Registers a listener that will be called whenever the store's state changes.\n *\n * @param fn The listener function to be called on state changes.\n * @returns A function to unsubscribe the listener.\n */\n subscribe = fn => {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n };\n\n /**\n * Returns the current state of the store.\n */\n getSnapshot = () => {\n return this.state;\n };\n\n /**\n * Updates the entire store's state and notifies all registered listeners.\n *\n * @param newState The new state to set for the store.\n */\n setState(newState) {\n if (this.state === newState) {\n return;\n }\n this.state = newState;\n this.updateTick += 1;\n const currentTick = this.updateTick;\n for (const listener of this.listeners) {\n if (currentTick !== this.updateTick) {\n // If the tick has changed, a recursive `setState` call has been made,\n // and it has already notified all listeners.\n return;\n }\n listener(newState);\n }\n }\n\n /**\n * Merges the provided changes into the current state and notifies listeners if there are changes.\n *\n * @param changes An object containing the changes to apply to the current state.\n */\n update(changes) {\n for (const key in changes) {\n if (!Object.is(this.state[key], changes[key])) {\n this.setState({\n ...this.state,\n ...changes\n });\n return;\n }\n }\n }\n\n /**\n * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.\n *\n * @param key The key in the store's state to update.\n * @param value The new value to set for the specified key.\n */\n set(key, value) {\n if (!Object.is(this.state[key], value)) {\n this.setState({\n ...this.state,\n [key]: value\n });\n }\n }\n\n /**\n * Gives the state a new reference and updates all registered listeners.\n */\n notifyAll() {\n const newState = {\n ...this.state\n };\n this.setState(newState);\n }\n use(selector, a1, a2, a3) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStore(this, selector, a1, a2, a3);\n }\n}","/* False positives - ESLint thinks we're calling a hook from a class component. */\n/* eslint-disable react-hooks/rules-of-hooks */\n'use client';\n\nimport * as React from 'react';\nimport { Store } from \"./Store.mjs\";\nimport { useStore } from \"./useStore.mjs\";\nimport { useStableCallback } from \"../useStableCallback.mjs\";\nimport { useIsoLayoutEffect } from \"../useIsoLayoutEffect.mjs\";\nimport { NOOP } from \"../empty.mjs\";\n\n/**\n * A Store that supports controlled state keys, non-reactive values and provides utility methods for React.\n */\nexport class ReactStore extends Store {\n /**\n * Creates a new ReactStore instance.\n *\n * @param state Initial state of the store.\n * @param context Non-reactive context values.\n * @param selectors Optional selectors for use with `useState`.\n */\n constructor(state, context = {}, selectors) {\n super(state);\n this.context = context;\n this.selectors = selectors;\n }\n\n /**\n * Non-reactive values such as refs, callbacks, etc.\n */\n\n /**\n * Synchronizes a single external value into the store.\n *\n * Note that the while the value in `state` is updated immediately, the value returned\n * by `useState` is updated before the next render (similarly to React's `useState`).\n */\n useSyncedValue(key, value) {\n React.useDebugValue(key);\n // eslint-disable-next-line consistent-this\n const store = this;\n useIsoLayoutEffect(() => {\n if (store.state[key] !== value) {\n store.set(key, value);\n }\n }, [store, key, value]);\n }\n\n /**\n * Synchronizes a single external value into the store and\n * cleans it up (sets to `undefined`) on unmount.\n *\n * Note that the while the value in `state` is updated immediately, the value returned\n * by `useState` is updated before the next render (similarly to React's `useState`).\n */\n useSyncedValueWithCleanup(key, value) {\n // eslint-disable-next-line consistent-this\n const store = this;\n useIsoLayoutEffect(() => {\n if (store.state[key] !== value) {\n store.set(key, value);\n }\n return () => {\n store.set(key, undefined);\n };\n }, [store, key, value]);\n }\n\n /**\n * Synchronizes multiple external values into the store.\n *\n * Note that the while the values in `state` are updated immediately, the values returned\n * by `useState` are updated before the next render (similarly to React's `useState`).\n */\n useSyncedValues(statePart) {\n // eslint-disable-next-line consistent-this\n const store = this;\n if (process.env.NODE_ENV !== 'production') {\n // Check that an object with the same shape is passed on every render\n React.useDebugValue(statePart, p => Object.keys(p));\n const keys = React.useRef(Object.keys(statePart)).current;\n const nextKeys = Object.keys(statePart);\n if (keys.length !== nextKeys.length || keys.some((key, index) => key !== nextKeys[index])) {\n console.error('ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.');\n }\n }\n const dependencies = Object.values(statePart);\n useIsoLayoutEffect(() => {\n store.update(statePart);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store, ...dependencies]);\n }\n\n /**\n * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`\n * is non-undefined, the store's state at `key` is updated to match `controlled`.\n */\n useControlledProp(key, controlled) {\n React.useDebugValue(key);\n // eslint-disable-next-line consistent-this\n const store = this;\n const isControlled = controlled !== undefined;\n useIsoLayoutEffect(() => {\n if (isControlled && !Object.is(store.state[key], controlled)) {\n // Set the internal state to match the controlled value.\n store.setState({\n ...store.state,\n [key]: controlled\n });\n }\n }, [store, key, controlled, isControlled]);\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n const cache = this.controlledValues ??= new Map();\n if (!cache.has(key)) {\n cache.set(key, isControlled);\n }\n const previouslyControlled = cache.get(key);\n if (previouslyControlled !== undefined && previouslyControlled !== isControlled) {\n console.error(`A component is changing the ${isControlled ? '' : 'un'}controlled state of ${key.toString()} to be ${isControlled ? 'un' : ''}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`);\n }\n }\n }\n\n /** Gets the current value from the store using a selector with the provided key.\n *\n * @param key Key of the selector to use.\n */\n\n select(key, a1, a2, a3) {\n const selector = this.selectors[key];\n return selector(this.state, a1, a2, a3);\n }\n\n /**\n * Returns a value from the store's state using a selector function.\n * Used to subscribe to specific parts of the state.\n * This methods causes a rerender whenever the selected state changes.\n *\n * @param key Key of the selector to use.\n */\n\n useState(key, a1, a2, a3) {\n React.useDebugValue(key);\n return useStore(this, this.selectors[key], a1, a2, a3);\n }\n\n /**\n * Wraps a function with `useStableCallback` to ensure it has a stable reference\n * and assigns it to the context.\n *\n * @param key Key of the event callback. Must be a function in the context.\n * @param fn Function to assign.\n */\n useContextCallback(key, fn) {\n React.useDebugValue(key);\n const stableFunction = useStableCallback(fn ?? NOOP);\n this.context[key] = stableFunction;\n }\n\n /**\n * Returns a stable setter function for a specific key in the store's state.\n * It's commonly used to pass as a ref callback to React elements.\n *\n * @param key Key of the state to set.\n */\n useStateSetter(key) {\n const ref = React.useRef(undefined);\n if (ref.current === undefined) {\n ref.current = value => {\n this.set(key, value);\n };\n }\n return ref.current;\n }\n\n /**\n * Observes changes derived from the store's selectors and calls the listener when the selected value changes.\n *\n * @param key Key of the selector to observe.\n * @param listener Listener function called when the selector result changes.\n */\n\n observe(selector, listener) {\n let selectFn;\n if (typeof selector === 'function') {\n selectFn = selector;\n } else {\n selectFn = this.selectors[selector];\n }\n let prevValue = selectFn(this.state);\n listener(prevValue, prevValue, this);\n return this.subscribe(nextState => {\n const nextValue = selectFn(nextState);\n if (!Object.is(prevValue, nextValue)) {\n const oldValue = prevValue;\n prevValue = nextValue;\n listener(nextValue, oldValue, this);\n }\n });\n }\n}","/**\n * Combines multiple cleanup functions into a single cleanup function.\n */\nexport function mergeCleanups(...cleanups) {\n return () => {\n for (let i = 0; i < cleanups.length; i += 1) {\n const cleanup = cleanups[i];\n if (cleanup) {\n cleanup();\n }\n }\n };\n}","/**\n * Adds an event listener and returns a cleanup function to remove it.\n */\n\nexport function addEventListener(target, type, listener, options) {\n target.addEventListener(type, listener, options);\n return () => {\n target.removeEventListener(type, listener, options);\n };\n}","'use client';\n\nimport { useRefWithInit } from \"./useRefWithInit.mjs\";\nimport { useOnMount } from \"./useOnMount.mjs\";\n/** Unlike `setTimeout`, rAF doesn't guarantee a positive integer return value, so we can't have\n * a monomorphic `uint` type with `0` meaning empty.\n * See warning note at:\n * https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame#return_value */\nconst EMPTY = null;\nlet LAST_RAF = globalThis.requestAnimationFrame;\nclass Scheduler {\n /* This implementation uses an array as a backing data-structure for frame callbacks.\n * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it\n * never calls the native `cancelAnimationFrame` if there are no frames left. This can\n * be much more efficient if there is a call pattern that alterns as\n * \"request-cancel-request-cancel-…\".\n * But in the case of \"request-request-…-cancel-cancel-…\", it leaves the final animation\n * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */\n\n callbacks = [];\n callbacksCount = 0;\n nextId = 1;\n startId = 1;\n isScheduled = false;\n tick = timestamp => {\n this.isScheduled = false;\n const currentCallbacks = this.callbacks;\n const currentCallbacksCount = this.callbacksCount;\n\n // Update these before iterating, callbacks could call `requestAnimationFrame` again.\n this.callbacks = [];\n this.callbacksCount = 0;\n this.startId = this.nextId;\n if (currentCallbacksCount > 0) {\n for (let i = 0; i < currentCallbacks.length; i += 1) {\n currentCallbacks[i]?.(timestamp);\n }\n }\n };\n request(fn) {\n const id = this.nextId;\n this.nextId += 1;\n this.callbacks.push(fn);\n this.callbacksCount += 1;\n\n /* In a test environment with fake timers, a fake `requestAnimationFrame` can be called\n * but there's no guarantee that the animation frame will actually run before the fake\n * timers are teared, which leaves `isScheduled` set, but won't run our `tick()`. */\n const didRAFChange = process.env.NODE_ENV !== 'production' && LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);\n if (!this.isScheduled || didRAFChange) {\n requestAnimationFrame(this.tick);\n this.isScheduled = true;\n }\n return id;\n }\n cancel(id) {\n const index = id - this.startId;\n if (index < 0 || index >= this.callbacks.length) {\n return;\n }\n this.callbacks[index] = null;\n this.callbacksCount -= 1;\n }\n}\nlet scheduler = new Scheduler();\n\n/**\n * Replaces the shared scheduler and drops all pending animation frame callbacks.\n *\n * For test environments only. The scheduler is process-global, so a callback scheduled in one test\n * but never run (e.g. requested under fake timers that were torn down before the frame fired) would\n * otherwise survive into a later test and run there against stale state. Call between tests to drop\n * such leftovers.\n */\nexport function resetAnimationFrameScheduler() {\n const previous = scheduler;\n scheduler = new Scheduler();\n // Continue the id sequence so `cancel()` calls from `AnimationFrame` instances created before the\n // reset cannot cancel callbacks scheduled after it.\n scheduler.nextId = previous.nextId;\n scheduler.startId = previous.nextId;\n // A frame requested before the reset may still be pending and holds the previous scheduler's\n // `tick`; empty its queue in place so that frame runs nothing when it eventually fires.\n previous.callbacks = [];\n previous.callbacksCount = 0;\n}\nexport class AnimationFrame {\n static create() {\n return new AnimationFrame();\n }\n static request(fn) {\n return scheduler.request(fn);\n }\n static cancel(id) {\n return scheduler.cancel(id);\n }\n currentId = EMPTY;\n\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n request(fn) {\n this.cancel();\n this.currentId = scheduler.request(() => {\n this.currentId = EMPTY;\n fn();\n });\n }\n cancel = () => {\n if (this.currentId !== EMPTY) {\n scheduler.cancel(this.currentId);\n this.currentId = EMPTY;\n }\n };\n disposeEffect = () => {\n return this.cancel;\n };\n}\n\n/**\n * A `requestAnimationFrame` with automatic cleanup and guard.\n */\nexport function useAnimationFrame() {\n const timeout = useRefWithInit(AnimationFrame.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","'use client';\n\nimport { useRefWithInit } from \"./useRefWithInit.mjs\";\nimport { useOnMount } from \"./useOnMount.mjs\";\nconst EMPTY = 0;\nexport class Timeout {\n static create() {\n return new Timeout();\n }\n currentId = EMPTY;\n\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(() => {\n this.currentId = EMPTY;\n fn();\n }, delay); /* Node.js types are enabled in development */\n }\n isStarted() {\n return this.currentId !== EMPTY;\n }\n clear = () => {\n if (this.currentId !== EMPTY) {\n clearTimeout(this.currentId);\n this.currentId = EMPTY;\n }\n };\n disposeEffect = () => {\n return this.clear;\n };\n}\n\n/**\n * A `setTimeout` with automatic cleanup and guard.\n */\nexport function useTimeout() {\n const timeout = useRefWithInit(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","let counter = 0;\nexport function generateId(prefix) {\n counter += 1;\n return `${prefix}-${Math.random().toString(36).slice(2, 6)}-${counter}`;\n}","export function resolvePromiseOptions(options, result) {\n if (typeof options === 'string') {\n return {\n description: options\n };\n }\n if (typeof options === 'function') {\n const resolvedOptions = options(result);\n return typeof resolvedOptions === 'string' ? {\n description: resolvedOptions\n } : resolvedOptions;\n }\n return options;\n}","/**\n * Reads `navigator.userAgent` / `navigator.platform` (legacy but universally\n * supported) into a normalized shape. In development, prefers the modern\n * `navigator.userAgentData` API on Chromium to avoid DevTools warnings about\n * the deprecated reads; that branch is dead-code-eliminated in production\n * builds to keep the bundle small.\n *\n * Returns empty/zero values when `navigator` is undefined (SSR), so every\n * derived flag safely evaluates to `false`.\n */\nfunction readRawData() {\n if (typeof navigator === 'undefined') {\n return {\n userAgent: '',\n platform: '',\n maxTouchPoints: 0\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return {\n userAgent: uaData.brands.map(({\n brand,\n version\n }) => `${brand}/${version}`).join(' '),\n platform: uaData.platform ?? navigator.platform ?? '',\n maxTouchPoints: navigator.maxTouchPoints ?? 0\n };\n }\n }\n return {\n userAgent: navigator.userAgent,\n platform: navigator.platform ?? '',\n maxTouchPoints: navigator.maxTouchPoints ?? 0\n };\n}\nconst {\n userAgent,\n platform,\n maxTouchPoints\n} = readRawData();\nexport const lowerUserAgent = userAgent.toLowerCase();\nexport const lowerPlatform = platform.toLowerCase();\nexport { maxTouchPoints };","import { lowerUserAgent, lowerPlatform, maxTouchPoints } from \"./shared.mjs\";\n\n// iPadOS 13+ reports `MacIntel` for `navigator.platform`; disambiguated via\n// `maxTouchPoints` so iPad is classified as iOS, not macOS.\n// https://github.com/mui/base-ui/issues/1309\n/** iPhone, iPad (including iPadOS 13+ reporting as macOS), iPod. */\nexport const ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === 'macintel' && maxTouchPoints > 1;\n\n/** Android phones, tablets, and embedded Android browsers. */\nconst ANDROID_STRING = 'android';\nexport const android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING);\n\n/** macOS desktop. Excludes iPadOS, which reports as `MacIntel`. */\nexport const mac = !ios && lowerPlatform.startsWith('mac');\n\n/** Windows desktop. */\nexport const windows = lowerPlatform.startsWith('win');\n\n/** Linux desktop (including Chrome OS). */\nexport const linux = !android && /^(linux|chrome os)/.test(lowerPlatform);\n\n/** Any Apple OS (`mac || ios`). */\nexport const apple = mac || ios;","import { lowerUserAgent } from \"./shared.mjs\";\n\n// WebKit (Safari, all iOS browsers, GNOME Web). Distinguished from Blink by\n// the legacy `-webkit-backdrop-filter` name — Blink forked from WebKit in 2013\n// and only ships the unprefixed `backdrop-filter`.\n/** WebKit: Safari, all iOS browsers, GNOME Web. Excludes Blink. */\nexport const webkit = typeof CSS !== 'undefined' && !!CSS.supports?.('-webkit-backdrop-filter:none');\n\n// Anchored to `!webkit` so engines are mutually exclusive by construction.\n// Firefox-on-iOS uses WebKit (its UA marker is `FxiOS/`, not `Firefox/`); the\n// `!webkit` prefix also defends against future iOS-browser UA changes that\n// might inject `Firefox` into a WebKit-based UA.\n/** Gecko: Firefox. */\nexport const gecko = !webkit && lowerUserAgent.includes('firefox');\n\n// All Chromium-based browsers ship `Chrome/` or `Chromium/` in their UA — both\n// share the `chrom` prefix, so a single substring check covers Chrome, Edge,\n// Opera, Brave, etc. Chrome-on-iOS uses `CriOS/` and stays WebKit. The positive\n// UA check also makes this SSR-safe — an empty UA matches nothing.\n/** Blink: Chrome, Edge, Opera, Brave, and other Chromium-based browsers. */\nexport const blink = !webkit && lowerUserAgent.includes('chrom');","import { apple } from \"./os.mjs\";\n\n// Whether a screen reader is *actually* running cannot be detected. These flags\n// identify platforms where a specific screen reader could be active. VoiceOver\n// is the system screen reader on Apple platforms and works with every browser\n// there, so the flag is purely an OS check; engine-specific quirks (e.g. the\n// NSAccessibility virtual-cursor focus path) should be gated at the call site.\n/**\n * The user *may* be using VoiceOver — actual activation is not detectable.\n * True on any Apple platform (macOS, iOS, iPadOS).\n */\nexport const voiceOver = apple;","import { lowerUserAgent } from \"./shared.mjs\";\n\n/** Running in jsdom or HappyDOM (used by unit tests). */\nexport const jsdom = /jsdom|happydom/.test(lowerUserAgent);","export const FOCUSABLE_ATTRIBUTE = 'data-base-ui-focusable';\nexport const ACTIVE_KEY = 'active';\nexport const SELECTED_KEY = 'selected';\nexport const TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nexport const ARROW_LEFT = 'ArrowLeft';\nexport const ARROW_RIGHT = 'ArrowRight';\nexport const ARROW_UP = 'ArrowUp';\nexport const ARROW_DOWN = 'ArrowDown';","import { isShadowRoot } from '@floating-ui/utils/dom';\nexport function activeElement(doc) {\n let element = doc.activeElement;\n while (element?.shadowRoot?.activeElement != null) {\n element = element.shadowRoot.activeElement;\n }\n return element;\n}\nexport function contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode?.();\n\n // First, attempt with the faster native method.\n if (parent.contains(child)) {\n return true;\n }\n\n // Then fall back to traversing out of shadow roots when needed.\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n next = next.parentNode || next.host;\n }\n }\n return false;\n}\nexport function getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS assumes `composedPath()` always exists, but older browsers without\n // shadow DOM support still fall back to `target`.\n return event.target;\n}","import { isElement, isHTMLElement } from '@floating-ui/utils/dom';\nimport { platform } from '@base-ui/utils/platform';\nimport { FOCUSABLE_ATTRIBUTE, TYPEABLE_SELECTOR } from \"./constants.mjs\";\nimport { activeElement, contains, getTarget } from \"../../internals/shadowDom.mjs\";\nexport { activeElement, contains, getTarget };\nexport function isTargetInsideEnabledTrigger(target, triggerElements) {\n if (!isElement(target)) {\n return false;\n }\n const targetElement = target;\n if (triggerElements.hasElement(targetElement)) {\n return !targetElement.hasAttribute('data-trigger-disabled');\n }\n for (const [, trigger] of triggerElements.entries()) {\n if (contains(trigger, targetElement)) {\n return !trigger.hasAttribute('data-trigger-disabled');\n }\n }\n return false;\n}\nexport function isEventTargetWithin(event, node) {\n if (node == null) {\n return false;\n }\n if ('composedPath' in event) {\n return event.composedPath().includes(node);\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n const eventAgain = event;\n return eventAgain.target != null && node.contains(eventAgain.target);\n}\nexport function isRootElement(element) {\n return element.matches('html,body');\n}\nexport function isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nexport function isInteractiveElement(element) {\n return element?.closest(`button,a[href],[role=\"button\"],select,[tabindex]:not([tabindex=\"-1\"]),${TYPEABLE_SELECTOR}`) != null;\n}\nexport function isTypeableCombobox(element) {\n if (!element) {\n return false;\n }\n return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nexport function matchesFocusVisible(element) {\n // We don't want to block focus from working with `visibleOnly`\n // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n if (!element || platform.env.jsdom) {\n return true;\n }\n try {\n return element.matches(':focus-visible');\n } catch (_e) {\n return true;\n }\n}\nexport function getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(`[${FOCUSABLE_ATTRIBUTE}]`) || floatingElement;\n}","import { platform } from '@base-ui/utils/platform';\nexport function stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nexport function isReactEvent(event) {\n return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/main/packages/@react-aria/utils/src/isVirtualEvent.ts\nexport function isVirtualClick(event) {\n if (event.pointerType === '' && event.isTrusted) {\n return true;\n }\n if (platform.os.android && event.pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nexport function isVirtualPointerEvent(event) {\n if (platform.env.jsdom) {\n return false;\n }\n return !platform.os.android && event.width === 0 && event.height === 0 || platform.os.android && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n // iOS VoiceOver returns 0.333• for width/height.\n event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nexport function isMouseLikePointerType(pointerType, strict) {\n // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n const values = ['mouse', 'pen'];\n if (!strict) {\n values.push('', undefined);\n }\n return values.includes(pointerType);\n}\nexport function isClickLikeEvent(event) {\n const type = event.type;\n return type === 'click' || type === 'mousedown' || type === 'keydown' || type === 'keyup';\n}","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n var _padding$top, _padding$right, _padding$bottom, _padding$left;\n return {\n top: (_padding$top = padding.top) != null ? _padding$top : 0,\n right: (_padding$right = padding.right) != null ? _padding$right : 0,\n bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,\n left: (_padding$left = padding.left) != null ? _padding$left : 0\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { floor } from '@floating-ui/utils';\nimport { getComputedStyle } from '@floating-ui/utils/dom';\nimport { stopEvent } from \"./event.mjs\";\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP } from \"./constants.mjs\";\nexport function isDifferentGridRow(index, cols, prevRow) {\n return Math.floor(index / cols) !== prevRow;\n}\nexport function isIndexOutOfListBounds(list, index) {\n return index < 0 || index >= list.length;\n}\nexport function getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef.current, {\n disabledIndices\n });\n}\nexport function getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef.current, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nexport function findNonDisabledListIndex(list, {\n startingIndex = -1,\n decrement = false,\n disabledIndices,\n amount = 1\n} = {}) {\n let index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= list.length - 1 && isListIndexDisabled(list, index, disabledIndices));\n return index;\n}\nexport function getGridNavigatedIndex(list, {\n event,\n orientation,\n loopFocus,\n onLoop,\n rtl,\n cols,\n disabledIndices,\n minIndex,\n maxIndex,\n prevIndex,\n stopEvent: stop = false\n}) {\n let nextIndex = prevIndex;\n let verticalDirection;\n if (event.key === ARROW_UP) {\n verticalDirection = 'up';\n } else if (event.key === ARROW_DOWN) {\n verticalDirection = 'down';\n }\n if (verticalDirection) {\n // -------------------------------------------------------------------------\n // Detect row structure only when handling vertical navigation. This keeps\n // the non-vertical key paths free from row inference work.\n // -------------------------------------------------------------------------\n const rows = [];\n const rowIndexMap = [];\n let hasRoleRow = false;\n let visibleItemCount = 0;\n {\n let currentRowEl = null;\n let currentRowIndex = -1;\n list.forEach((el, idx) => {\n if (el == null) {\n return;\n }\n visibleItemCount += 1;\n const rowEl = el.closest('[role=\"row\"]');\n if (rowEl) {\n hasRoleRow = true;\n }\n if (rowEl !== currentRowEl || currentRowIndex === -1) {\n currentRowEl = rowEl;\n currentRowIndex += 1;\n rows[currentRowIndex] = [];\n }\n rows[currentRowIndex].push(idx);\n rowIndexMap[idx] = currentRowIndex;\n });\n }\n let hasDomRows = false;\n let inferredDomCols = 0;\n if (hasRoleRow) {\n for (const row of rows) {\n const rowLength = row.length;\n if (rowLength > inferredDomCols) {\n inferredDomCols = rowLength;\n }\n if (rowLength !== cols) {\n hasDomRows = true;\n }\n }\n }\n const hasVirtualizedGaps = hasDomRows && visibleItemCount < list.length;\n const verticalCols = inferredDomCols || cols;\n const navigateVertically = direction => {\n if (!hasDomRows || prevIndex === -1) {\n return undefined;\n }\n const currentRow = rowIndexMap[prevIndex];\n if (currentRow == null) {\n return undefined;\n }\n const colInRow = rows[currentRow].indexOf(prevIndex);\n const step = direction === 'up' ? -1 : 1;\n for (let nextRow = currentRow + step, i = 0; i < rows.length; i += 1, nextRow += step) {\n if (nextRow < 0 || nextRow >= rows.length) {\n if (!loopFocus || hasVirtualizedGaps) {\n return undefined;\n }\n nextRow = nextRow < 0 ? rows.length - 1 : 0;\n if (onLoop) {\n const clampedCol = Math.min(colInRow, rows[nextRow].length - 1);\n const targetItemIndex = rows[nextRow][clampedCol] ?? rows[nextRow][0];\n const returnedItemIndex = onLoop(event, prevIndex, targetItemIndex);\n nextRow = rowIndexMap[returnedItemIndex] ?? nextRow;\n }\n }\n const targetRow = rows[nextRow];\n for (let col = Math.min(colInRow, targetRow.length - 1); col >= 0; col -= 1) {\n const candidate = targetRow[col];\n if (!isListIndexDisabled(list, candidate, disabledIndices)) {\n return candidate;\n }\n }\n }\n return undefined;\n };\n const navigateVerticallyWithInferredRows = direction => {\n if (!hasVirtualizedGaps || prevIndex === -1) {\n return undefined;\n }\n const colInRow = prevIndex % verticalCols;\n const rowStep = direction === 'up' ? -verticalCols : verticalCols;\n const lastRowStart = maxIndex - maxIndex % verticalCols;\n const rowCount = floor(maxIndex / verticalCols) + 1;\n for (let rowStart = prevIndex - colInRow + rowStep, i = 0; i < rowCount; i += 1, rowStart += rowStep) {\n if (rowStart < 0 || rowStart > maxIndex) {\n if (!loopFocus) {\n return undefined;\n }\n rowStart = rowStart < 0 ? lastRowStart : 0;\n }\n const rowEnd = Math.min(rowStart + verticalCols - 1, maxIndex);\n for (let candidate = Math.min(rowStart + colInRow, rowEnd); candidate >= rowStart; candidate -= 1) {\n if (!isListIndexDisabled(list, candidate, disabledIndices)) {\n return candidate;\n }\n }\n }\n return undefined;\n };\n if (stop) {\n stopEvent(event);\n }\n const verticalCandidate = navigateVertically(verticalDirection) ?? navigateVerticallyWithInferredRows(verticalDirection);\n if (verticalCandidate !== undefined) {\n nextIndex = verticalCandidate;\n } else if (prevIndex === -1) {\n nextIndex = verticalDirection === 'up' ? maxIndex : minIndex;\n } else {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n amount: verticalCols,\n decrement: verticalDirection === 'up',\n disabledIndices\n });\n if (loopFocus) {\n if (verticalDirection === 'up' && (prevIndex - verticalCols < minIndex || nextIndex < 0)) {\n const col = prevIndex % verticalCols;\n const maxCol = maxIndex % verticalCols;\n const offset = maxIndex - (maxCol - col);\n if (maxCol === col) {\n nextIndex = maxIndex;\n } else {\n nextIndex = maxCol > col ? offset : offset - verticalCols;\n }\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (verticalDirection === 'down' && prevIndex + verticalCols > maxIndex) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex % verticalCols - verticalCols,\n amount: verticalCols,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n }\n }\n if (isIndexOutOfListBounds(list, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n\n // Remains on the same row/column.\n if (orientation === 'both') {\n const prevRow = floor(prevIndex / cols);\n if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n if (stop) {\n stopEvent(event);\n }\n if (prevIndex % cols !== cols - 1) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n disabledIndices\n });\n if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n } else if (loopFocus) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n if (stop) {\n stopEvent(event);\n }\n if (prevIndex % cols !== 0) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n decrement: true,\n disabledIndices\n });\n if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n } else if (loopFocus) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n const lastRow = floor(maxIndex / cols) === prevRow;\n if (isIndexOutOfListBounds(list, nextIndex)) {\n if (loopFocus && lastRow) {\n nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n } else {\n nextIndex = prevIndex;\n }\n }\n }\n return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nexport function createGridCellMap(sizes, cols, dense) {\n const cellMap = [];\n let startIndex = 0;\n sizes.forEach(({\n width,\n height\n }, index) => {\n if (width > cols) {\n if (process.env.NODE_ENV !== 'production') {\n // TODO: fix mui/no-guarded-throw\n // eslint-disable-next-line mui/no-guarded-throw\n throw new Error(`[Floating UI]: Invalid grid - item width at index ${index} is greater than grid columns`);\n }\n }\n let itemPlaced = false;\n if (dense) {\n startIndex = 0;\n }\n while (!itemPlaced) {\n const targetCells = [];\n for (let i = 0; i < width; i += 1) {\n for (let j = 0; j < height; j += 1) {\n targetCells.push(startIndex + i + j * cols);\n }\n }\n if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n targetCells.forEach(cell => {\n cellMap[cell] = index;\n });\n itemPlaced = true;\n } else {\n startIndex += 1;\n }\n }\n });\n\n // convert into a non-sparse array\n return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nexport function getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n if (index === -1) {\n return -1;\n }\n const firstCellIndex = cellMap.indexOf(index);\n const sizeItem = sizes[index];\n switch (corner) {\n case 'tl':\n return firstCellIndex;\n case 'tr':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + sizeItem.width - 1;\n case 'bl':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + (sizeItem.height - 1) * cols;\n case 'br':\n return cellMap.lastIndexOf(index);\n default:\n return -1;\n }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nexport function getGridCellIndices(indices, cellMap) {\n return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nexport function isListIndexDisabled(list, index, disabledIndices) {\n const isExplicitlyDisabled = typeof disabledIndices === 'function' ? disabledIndices(index) : disabledIndices?.includes(index) ?? false;\n if (isExplicitlyDisabled) {\n return true;\n }\n const element = list[index];\n if (!element) {\n return false;\n }\n if (!isElementVisible(element)) {\n return true;\n }\n\n // A natively disabled element can never receive focus, so it must always be\n // skipped, even when `disabledIndices` marks it as enabled. Only\n // `aria-disabled` items can be focusable-while-disabled.\n if (element.matches(':disabled')) {\n return true;\n }\n return !disabledIndices && (element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true');\n}\nexport function isHiddenByStyles(styles) {\n return styles.visibility === 'hidden' || styles.visibility === 'collapse';\n}\nexport function isElementVisible(element, styles = element ? getComputedStyle(element) : null) {\n if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {\n return false;\n }\n if (typeof element.checkVisibility === 'function') {\n return element.checkVisibility();\n }\n return styles.display !== 'none' && styles.display !== 'contents';\n}","import { getComputedStyle, getNodeName, isHTMLElement, isShadowRoot } from '@floating-ui/utils/dom';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { activeElement, contains } from \"./element.mjs\";\nimport { isElementVisible } from \"./composite.mjs\";\nconst CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable=\"false\"]),audio[controls],video[controls]';\nfunction getParentElement(element) {\n const assignedSlot = element.assignedSlot;\n if (assignedSlot) {\n return assignedSlot;\n }\n if (element.parentElement) {\n return element.parentElement;\n }\n const rootNode = element.getRootNode();\n return isShadowRoot(rootNode) ? rootNode.host : null;\n}\nfunction getDetailsSummary(details) {\n for (const child of Array.from(details.children)) {\n if (getNodeName(child) === 'summary') {\n return child;\n }\n }\n return null;\n}\nfunction isWithinOpenDetailsSummary(element, details) {\n const summary = getDetailsSummary(details);\n return !!summary && (element === summary || contains(summary, element));\n}\nfunction isFocusableCandidate(element) {\n const nodeName = element ? getNodeName(element) : '';\n return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== 'summary' || element.parentElement != null && getNodeName(element.parentElement) === 'details' && getDetailsSummary(element.parentElement) === element) && (nodeName !== 'details' || getDetailsSummary(element) == null) && (nodeName !== 'input' || element.type !== 'hidden');\n}\nfunction isFocusableElement(element) {\n if (!isFocusableCandidate(element) || !element.isConnected || element.matches(':disabled')) {\n return false;\n }\n for (let current = element; current; current = getParentElement(current)) {\n const isAncestor = current !== element;\n const isSlot = getNodeName(current) === 'slot';\n if (current.hasAttribute('inert')) {\n return false;\n }\n if (isAncestor && getNodeName(current) === 'details' && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute('hidden') || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {\n return false;\n }\n }\n return true;\n}\nfunction isVisibleInTabbableTree(element, isAncestor) {\n const styles = getComputedStyle(element);\n if (!isAncestor) {\n return isElementVisible(element, styles);\n }\n return styles.display !== 'none';\n}\nfunction getTabIndex(element) {\n const tabIndex = element.tabIndex;\n if (tabIndex < 0) {\n const nodeName = getNodeName(element);\n if (nodeName === 'details' || nodeName === 'audio' || nodeName === 'video' || isHTMLElement(element) && element.isContentEditable) {\n return 0;\n }\n }\n return tabIndex;\n}\nfunction getNamedRadioInput(element) {\n if (getNodeName(element) !== 'input') {\n return null;\n }\n const input = element;\n return input.type === 'radio' && input.name !== '' ? input : null;\n}\nfunction isTabbableRadio(element, candidates) {\n const input = getNamedRadioInput(element);\n if (!input) {\n return true;\n }\n const checkedRadio = candidates.find(candidate => {\n const radio = getNamedRadioInput(candidate);\n return radio?.name === input.name && radio.form === input.form && radio.checked;\n });\n if (checkedRadio) {\n return checkedRadio === input;\n }\n return candidates.find(candidate => {\n const radio = getNamedRadioInput(candidate);\n return radio?.name === input.name && radio.form === input.form;\n }) === input;\n}\nfunction getComposedChildren(container) {\n if (isHTMLElement(container) && getNodeName(container) === 'slot') {\n const assignedElements = container.assignedElements({\n flatten: true\n });\n if (assignedElements.length > 0) {\n return assignedElements;\n }\n }\n if (isHTMLElement(container) && container.shadowRoot) {\n return Array.from(container.shadowRoot.children);\n }\n return Array.from(container.children);\n}\nfunction appendCandidates(container, list) {\n getComposedChildren(container).forEach(child => {\n if (isFocusableCandidate(child)) {\n list.push(child);\n }\n appendCandidates(child, list);\n });\n}\nfunction appendMatchingElements(container, selector, list) {\n getComposedChildren(container).forEach(child => {\n if (isHTMLElement(child) && child.matches(selector)) {\n list.push(child);\n }\n appendMatchingElements(child, selector, list);\n });\n}\nexport function isTabbable(element) {\n return isFocusableElement(element) && getTabIndex(element) >= 0;\n}\nexport function focusable(container) {\n const candidates = [];\n appendCandidates(container, candidates);\n return candidates.filter(isFocusableElement);\n}\nexport function tabbable(container) {\n const candidates = focusable(container);\n return candidates.filter(element => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));\n}\nfunction getTabbableIn(container, dir) {\n const list = tabbable(container);\n const len = list.length;\n if (len === 0) {\n return undefined;\n }\n const active = activeElement(ownerDocument(container));\n const index = list.indexOf(active);\n // eslint-disable-next-line no-nested-ternary\n const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n return list[nextIndex];\n}\nexport function getNextTabbable(referenceElement) {\n return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;\n}\nexport function getPreviousTabbable(referenceElement) {\n return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;\n}\nfunction getTabbableNearElement(referenceElement, dir) {\n if (!referenceElement) {\n return null;\n }\n const list = tabbable(ownerDocument(referenceElement).body);\n const elementCount = list.length;\n if (elementCount === 0) {\n return null;\n }\n const index = list.indexOf(referenceElement);\n if (index === -1) {\n return null;\n }\n const nextIndex = (index + dir + elementCount) % elementCount;\n return list[nextIndex];\n}\nexport function getTabbableAfterElement(referenceElement) {\n return getTabbableNearElement(referenceElement, 1);\n}\nexport function getTabbableBeforeElement(referenceElement) {\n return getTabbableNearElement(referenceElement, -1);\n}\nexport function isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nexport function disableFocusInside(container) {\n const tabbableElements = tabbable(container);\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nexport function enableFocusInside(container) {\n const elements = [];\n appendMatchingElements(container, '[data-tabindex]', elements);\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}","import { ReactStore } from '@base-ui/utils/store';\nimport { generateId } from '@base-ui/utils/generateId';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { Timeout } from '@base-ui/utils/useTimeout';\nimport { resolvePromiseOptions } from \"./utils/resolvePromiseOptions.mjs\";\nimport { activeElement, contains, getTarget } from \"../floating-ui-react/utils.mjs\";\nimport { isFocusVisible } from \"./utils/focusVisible.mjs\";\n\n/**\n * A toast once it lives in the store. `addToast` is the only way in and it always\n * assigns `updateKey`, so unlike the public `ToastObject` it is never missing.\n */\n\nfunction createToastMetadata(toasts) {\n const metadata = new Map();\n let visibleIndex = 0;\n let offsetY = 0;\n toasts.forEach((toast, toastIndex) => {\n const isEnding = toast.transitionStatus === 'ending';\n metadata.set(toast.id, {\n value: toast,\n domIndex: toastIndex,\n visibleIndex: isEnding ? -1 : visibleIndex,\n offsetY\n });\n offsetY += toast.height || 0;\n if (!isEnding) {\n visibleIndex += 1;\n }\n });\n return metadata;\n}\n\n// Marks the active (non-ending) toasts beyond `limit` as limited. Callers pass\n// toasts in newest-first order, so the newest `limit` toasts stay visible and\n// the rest are flagged. Returns the same toast reference when its `limited`\n// flag is unchanged to avoid unnecessary re-renders.\nfunction applyLimited(toasts, limit) {\n let activeIndex = 0;\n return toasts.map(toast => {\n if (toast.transitionStatus === 'ending') {\n return toast;\n }\n const limited = activeIndex >= limit;\n activeIndex += 1;\n return toast.limited === limited ? toast : {\n ...toast,\n limited\n };\n });\n}\nexport const selectors = {\n toasts: state => state.toasts,\n isEmpty: state => state.toasts.length === 0,\n toast: (state, id) => state.toastMetadata.get(id)?.value,\n toastIndex: (state, id) => state.toastMetadata.get(id)?.domIndex ?? -1,\n toastOffsetY: (state, id) => state.toastMetadata.get(id)?.offsetY ?? 0,\n toastVisibleIndex: (state, id) => state.toastMetadata.get(id)?.visibleIndex ?? -1,\n focused: state => state.focused,\n expanded: state => state.hovering || state.focused,\n expandedOrOutOfFocus: state => state.hovering || state.focused || !state.isWindowFocused,\n prevFocusElement: state => state.prevFocusElement\n};\nexport class ToastStore extends ReactStore {\n timers = new Map();\n areTimersPaused = false;\n constructor(initialState) {\n super({\n ...initialState,\n toastMetadata: createToastMetadata(initialState.toasts)\n }, {}, selectors);\n }\n setViewport = viewport => {\n this.set('viewport', viewport);\n };\n syncProviderProps(timeout, limit) {\n const limitChanged = this.state.limit !== limit;\n if (this.state.timeout === timeout && !limitChanged) {\n return;\n }\n const updates = {\n timeout,\n limit\n };\n if (limitChanged) {\n const newToasts = applyLimited(this.state.toasts, limit);\n updates.toasts = newToasts;\n updates.toastMetadata = createToastMetadata(newToasts);\n }\n this.update(updates);\n }\n disposeEffect = () => {\n return () => {\n this.timers.forEach(timer => {\n timer.timeout?.clear();\n });\n this.timers.clear();\n };\n };\n removeToast(toastId, skipOnRemove = false) {\n const index = selectors.toastIndex(this.state, toastId);\n if (index === -1) {\n return;\n }\n const toast = this.state.toasts[index];\n if (!skipOnRemove) {\n toast?.onRemove?.();\n }\n const newToasts = [...this.state.toasts];\n newToasts.splice(index, 1);\n this.setToasts(newToasts);\n }\n addToast = toast => {\n const {\n timeout,\n limit\n } = this.state;\n const id = toast.id || generateId('toast');\n if (toast.id) {\n const existingToast = selectors.toast(this.state, toast.id);\n if (existingToast) {\n if (existingToast.transitionStatus === 'ending') {\n this.removeToast(toast.id, true);\n } else {\n const {\n id: ignoredId,\n transitionStatus: ignoredTransitionStatus,\n ...updates\n } = toast;\n this.updateToastInternal(toast.id, updates, true, true);\n return toast.id;\n }\n }\n }\n const toastToAdd = {\n ...toast,\n id,\n updateKey: 0,\n transitionStatus: 'starting'\n };\n const updatedToasts = [toastToAdd, ...this.state.toasts];\n this.setToasts(applyLimited(updatedToasts, limit));\n const duration = toastToAdd.timeout ?? timeout;\n if (toastToAdd.type !== 'loading' && duration > 0) {\n this.scheduleTimer(id, duration, () => this.closeToast(id));\n }\n if (selectors.expandedOrOutOfFocus(this.state)) {\n this.pauseTimers();\n }\n return id;\n };\n updateToast = (id, updates) => {\n this.updateToastInternal(id, updates, false, true);\n };\n updateToastInternal = (id, updates, resetTimer = false, markUpdated = false) => {\n const {\n timeout,\n toasts\n } = this.state;\n const prevToast = selectors.toast(this.state, id);\n if (!prevToast) {\n return;\n }\n\n // Ignore updates for toasts that are already closing.\n // This prevents races where async updates (e.g. promise success/error)\n // can block a dismissal from completing.\n if (prevToast.transitionStatus === 'ending') {\n return;\n }\n const nextToast = {\n ...prevToast,\n ...updates,\n ...(markUpdated && {\n updateKey: prevToast.updateKey + 1\n })\n };\n this.setToasts(toasts.map(toast => toast.id === id ? nextToast : toast));\n const nextTimeout = nextToast.timeout ?? timeout;\n const prevTimeout = prevToast.timeout ?? timeout;\n const timeoutUpdated = Object.hasOwn(updates, 'timeout');\n const shouldHaveTimer = nextToast.transitionStatus !== 'ending' && nextToast.type !== 'loading' && nextTimeout > 0;\n const hasTimer = this.timers.has(id);\n const timeoutChanged = prevTimeout !== nextTimeout;\n const wasLoading = prevToast.type === 'loading';\n if (!shouldHaveTimer && hasTimer) {\n this.clearTimer(id);\n return;\n }\n\n // Schedule or reschedule timer if needed\n if (shouldHaveTimer && (!hasTimer || timeoutChanged || timeoutUpdated || wasLoading || resetTimer)) {\n this.clearTimer(id);\n this.scheduleTimer(id, nextTimeout, () => this.closeToast(id));\n if (selectors.expandedOrOutOfFocus(this.state)) {\n this.pauseTimers();\n }\n }\n };\n closeToast = toastId => {\n const closeAll = toastId === undefined;\n const {\n limit,\n toasts\n } = this.state;\n let toastsToClose;\n if (closeAll) {\n toastsToClose = toasts;\n this.clearTimers();\n } else {\n const toast = selectors.toast(this.state, toastId);\n if (!toast) {\n return;\n }\n toastsToClose = [toast];\n this.clearTimer(toastId);\n }\n const endingToasts = toasts.map(item => closeAll || item.id === toastId ? {\n ...item,\n transitionStatus: 'ending',\n height: 0\n } : item);\n const newToasts = applyLimited(endingToasts, limit);\n this.setToasts(newToasts, !newToasts.some(toast => toast.transitionStatus !== 'ending'));\n toastsToClose.forEach(toast => {\n if (toast.transitionStatus !== 'ending') {\n toast.onClose?.();\n }\n });\n this.handleFocusManagement(toastId);\n };\n promiseToast = (promiseValue, options) => {\n // Create a loading toast (which does not auto-dismiss).\n const loadingOptions = resolvePromiseOptions(options.loading);\n const id = this.addToast({\n ...loadingOptions,\n type: 'loading'\n });\n const handledPromise = promiseValue.then(result => {\n const successOptions = resolvePromiseOptions(options.success, result);\n this.updateToast(id, {\n ...successOptions,\n type: 'success',\n timeout: successOptions.timeout\n });\n return result;\n }).catch(error => {\n const errorOptions = resolvePromiseOptions(options.error, error);\n this.updateToast(id, {\n ...errorOptions,\n type: 'error',\n timeout: errorOptions.timeout\n });\n return Promise.reject(error);\n });\n\n // Private API used exclusively by `Manager` to handoff the promise\n // back to the manager after it's handled here.\n if ({}.hasOwnProperty.call(options, 'setPromise')) {\n options.setPromise(handledPromise);\n }\n return handledPromise;\n };\n pauseTimers() {\n if (this.areTimersPaused) {\n return;\n }\n this.areTimersPaused = true;\n this.timers.forEach(timer => {\n // Timers added while already paused have no running timeout, so their\n // `remaining` is still the full delay and must be left alone.\n if (timer.timeout) {\n timer.timeout.clear();\n // `start` is stamped on every resume, so subtracting from `remaining`\n // (rather than from the original delay) keeps repeated pause/resume\n // cycles from handing the toast extra time.\n timer.remaining = Math.max(timer.remaining - (Date.now() - timer.start), 0);\n }\n });\n }\n resumeTimers() {\n if (!this.areTimersPaused) {\n return;\n }\n this.areTimersPaused = false;\n this.timers.forEach((timer, id) => {\n timer.remaining = timer.remaining > 0 ? timer.remaining : timer.delay;\n timer.timeout ??= Timeout.create();\n timer.timeout.start(timer.remaining, () => {\n this.handleTimerFired(id);\n timer.callback();\n });\n timer.start = Date.now();\n });\n }\n restoreFocusToPrevElement() {\n this.state.prevFocusElement?.focus({\n preventScroll: true\n });\n }\n handleDocumentPointerDown = event => {\n if (event.pointerType !== 'touch') {\n return;\n }\n const target = getTarget(event);\n if (contains(this.state.viewport, target)) {\n return;\n }\n\n // This is explicit touch activity outside the viewport, so the paused\n // interaction state should end even if the window focus state is unchanged.\n this.resumeTimers();\n this.update({\n hovering: false,\n focused: false\n });\n };\n scheduleTimer(id, delay, callback) {\n const start = Date.now();\n const shouldStartActive = !selectors.expandedOrOutOfFocus(this.state);\n const currentTimeout = shouldStartActive ? Timeout.create() : undefined;\n currentTimeout?.start(delay, () => {\n this.handleTimerFired(id);\n callback();\n });\n this.timers.set(id, {\n timeout: currentTimeout,\n start,\n delay,\n remaining: delay,\n callback\n });\n }\n clearTimers() {\n this.timers.forEach(timer => {\n timer.timeout?.clear();\n });\n this.timers.clear();\n this.areTimersPaused = false;\n }\n clearTimer(id) {\n const timer = this.timers.get(id);\n timer?.timeout?.clear();\n this.timers.delete(id);\n this.resetPausedStateIfNoTimersRemain();\n }\n handleTimerFired(id) {\n this.timers.delete(id);\n this.resetPausedStateIfNoTimersRemain();\n }\n resetPausedStateIfNoTimersRemain() {\n if (this.timers.size === 0) {\n // No timers remain to keep paused; clear the flag so a fresh toast's\n // running timer can be paused again on hover/focus.\n this.areTimersPaused = false;\n }\n }\n setToasts(newToasts, clearInteraction = newToasts.length === 0) {\n const updates = {\n toasts: newToasts,\n toastMetadata: createToastMetadata(newToasts)\n };\n if (clearInteraction) {\n updates.hovering = false;\n updates.focused = false;\n }\n this.update(updates);\n }\n handleFocusManagement(toastId) {\n const activeEl = activeElement(ownerDocument(this.state.viewport));\n if (!this.state.viewport || !contains(this.state.viewport, activeEl) || !isFocusVisible(activeEl)) {\n return;\n }\n if (toastId === undefined) {\n this.restoreFocusToPrevElement();\n return;\n }\n const toasts = selectors.toasts(this.state);\n const currentIndex = selectors.toastIndex(this.state, toastId);\n const scan = (from, step) => {\n for (let index = from; index >= 0 && index < toasts.length; index += step) {\n if (toasts[index].transitionStatus !== 'ending') {\n return toasts[index];\n }\n }\n return null;\n };\n\n // Try to find the next toast that isn't animating out, then fall back to the previous one.\n const nextToast = scan(currentIndex + 1, 1) ?? scan(currentIndex - 1, -1);\n if (nextToast) {\n nextToast.ref?.current?.focus();\n } else {\n this.restoreFocusToPrevElement();\n }\n }\n}","'use client';\n\nimport * as React from 'react';\nimport { useOnMount } from '@base-ui/utils/useOnMount';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { ToastContext } from \"./ToastProviderContext.mjs\";\nimport { ToastStore } from \"../store.mjs\";\n\n/**\n * Provides a context for creating and managing toasts.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const ToastProvider = function ToastProvider(props) {\n const {\n children,\n timeout = 5000,\n limit = 3,\n toastManager\n } = props;\n const store = useRefWithInit(() => new ToastStore({\n timeout,\n limit,\n viewport: null,\n toasts: [],\n hovering: false,\n focused: false,\n isWindowFocused: true,\n prevFocusElement: null\n })).current;\n useOnMount(store.disposeEffect);\n React.useEffect(function subscribeToToastManager() {\n if (!toastManager) {\n return undefined;\n }\n const unsubscribe = toastManager[' subscribe'](({\n action,\n options\n }) => {\n const id = options.id;\n if (action === 'promise' && options.promise) {\n store.promiseToast(options.promise, options);\n } else if (action === 'update' && id) {\n store.updateToast(id, options);\n } else if (action === 'close') {\n store.closeToast(id);\n } else {\n store.addToast(options);\n }\n });\n return unsubscribe;\n }, [store, toastManager]);\n return /*#__PURE__*/_jsxs(ToastContext.Provider, {\n value: store,\n children: [/*#__PURE__*/_jsx(ToastProviderPropsSynchronizer, {\n store: store,\n timeout: timeout,\n limit: limit\n }), children]\n });\n};\nif (process.env.NODE_ENV !== \"production\") ToastProvider.displayName = \"ToastProvider\";\nfunction ToastProviderPropsSynchronizer(props) {\n const {\n store,\n timeout,\n limit\n } = props;\n\n // `limit` needs custom syncing because changing it must also recompute each\n // toast's `limited` flag; `useSyncedValues` would only update the raw value.\n useIsoLayoutEffect(() => {\n store.syncProviderProps(timeout, limit);\n }, [store, timeout, limit]);\n return null;\n}","const visuallyHiddenBase = {\n clipPath: 'inset(50%)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n border: 0,\n padding: 0,\n width: 1,\n height: 1,\n margin: -1\n};\nexport const visuallyHidden = {\n ...visuallyHiddenBase,\n position: 'fixed',\n top: 0,\n left: 0\n};\nexport const visuallyHiddenInput = {\n ...visuallyHiddenBase,\n position: 'absolute'\n};","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { platform } from '@base-ui/utils/platform';\nimport { visuallyHidden } from '@base-ui/utils/visuallyHidden';\n\n/**\n * @internal\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n const [role, setRole] = React.useState();\n useIsoLayoutEffect(() => {\n // Unlike NVDA and JAWS, VoiceOver's virtual cursor triggers `onFocus` as\n // it moves — but only on focusable/role-button elements through WebKit's\n // NSAccessibility path. Setting `role=\"button\"` lets the focus trap catch\n // the cursor.\n if (platform.screenReader.voiceOver && platform.engine.webkit) {\n setRole('button');\n }\n }, []);\n const restProps = {\n tabIndex: 0,\n // Role is only for VoiceOver\n role\n };\n return /*#__PURE__*/_jsx(\"span\", {\n ...props,\n ref: ref,\n style: visuallyHidden,\n \"aria-hidden\": role ? undefined : true,\n ...restProps,\n \"data-base-ui-focus-guard\": \"\"\n });\n});\nif (process.env.NODE_ENV !== \"production\") FocusGuard.displayName = \"FocusGuard\";","'use client';\n\nimport * as React from 'react';\nimport { addEventListener } from '@base-ui/utils/addEventListener';\nimport { mergeCleanups } from '@base-ui/utils/mergeCleanups';\nimport { ownerDocument, ownerWindow } from '@base-ui/utils/owner';\nimport { visuallyHidden } from '@base-ui/utils/visuallyHidden';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { activeElement, contains, getTarget } from \"../../floating-ui-react/utils.mjs\";\nimport { FocusGuard } from \"../../utils/FocusGuard.mjs\";\nimport { useToastProviderContext } from \"../provider/ToastProviderContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { isFocusVisible } from \"../utils/focusVisible.mjs\";\n\n/**\n * A container viewport for toasts.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const ToastViewport = /*#__PURE__*/React.forwardRef(function ToastViewport(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n children,\n ...elementProps\n } = componentProps;\n const store = useToastProviderContext();\n const windowFocusTimeout = useTimeout();\n const handlingFocusGuardRef = React.useRef(false);\n const markedReadyForMouseLeaveRef = React.useRef(false);\n const touchActiveRef = React.useRef(false);\n const isEmpty = store.useState('isEmpty');\n const toasts = store.useState('toasts');\n const focused = store.useState('focused');\n const expanded = store.useState('expanded');\n const prevFocusElement = store.useState('prevFocusElement');\n const frontmostHeight = toasts[0]?.height;\n const hasTransitioningToasts = toasts.some(toast => toast.transitionStatus === 'ending');\n const highPriorityToasts = toasts.filter(toast => toast.priority === 'high');\n React.useEffect(() => {\n // `store.state.viewport` isn't available on the first render, since the portal node hasn't yet\n // been created. Depending on `isEmpty` ensures the listeners are attached once toasts exist and\n // the viewport ref is available.\n const viewport = store.state.viewport;\n if (!viewport || isEmpty) {\n return undefined;\n }\n const win = ownerWindow(viewport);\n const doc = ownerDocument(viewport);\n\n // Listen globally for F6 so we can force-focus the viewport.\n function handleGlobalKeyDown(event) {\n if (event.key === 'F6' && getTarget(event) !== viewport) {\n event.preventDefault();\n store.set('prevFocusElement', activeElement(doc));\n viewport?.focus({\n preventScroll: true\n });\n store.pauseTimers();\n store.set('focused', true);\n }\n }\n function handleWindowBlur(event) {\n if (getTarget(event) !== win) {\n return;\n }\n store.set('isWindowFocused', false);\n store.pauseTimers();\n }\n function handleWindowFocus(event) {\n if (event.relatedTarget) {\n return;\n }\n const target = getTarget(event);\n const activeEl = activeElement(ownerDocument(viewport));\n if (target === win || !contains(viewport, target) || !isFocusVisible(activeEl)) {\n store.resumeTimers();\n }\n\n // Wait for the `handleFocus` event to fire.\n windowFocusTimeout.start(0, () => store.set('isWindowFocused', true));\n }\n return mergeCleanups(addEventListener(win, 'keydown', handleGlobalKeyDown), addEventListener(win, 'blur', handleWindowBlur, true), addEventListener(win, 'focus', handleWindowFocus, true), addEventListener(doc, 'pointerdown', store.handleDocumentPointerDown, true));\n }, [store, windowFocusTimeout, isEmpty]);\n function handleFocusGuard(event) {\n handlingFocusGuardRef.current = true;\n\n // If we're coming off the container, move to the first toast that can hold\n // focus, skipping toasts that are animating out or inert because they're limited.\n const firstFocusableToast = event.relatedTarget === store.state.viewport ? toasts.find(toast => toast.transitionStatus !== 'ending' && !toast.limited) : undefined;\n if (firstFocusableToast) {\n firstFocusableToast.ref?.current?.focus();\n } else {\n store.restoreFocusToPrevElement();\n }\n }\n function handleKeyDown(event) {\n if (event.key === 'Tab' && event.shiftKey && getTarget(event.nativeEvent) === store.state.viewport) {\n event.preventDefault();\n // Restoring focus blurs the viewport, and `handleBlur` resumes the timers\n // from there. Resuming here as well would also fire when the previously\n // focused element lives inside the viewport, letting toasts dismiss out\n // from under the keyboard.\n store.restoreFocusToPrevElement();\n }\n }\n function flushMouseLeave() {\n const hasEndingToasts = store.state.toasts.some(toast => toast.transitionStatus === 'ending');\n if (hasEndingToasts || touchActiveRef.current || !markedReadyForMouseLeaveRef.current) {\n return;\n }\n\n // Once transitions have finished, see if a mouseleave was already triggered\n // but blocked from taking effect. If so, we can now safely collapse the viewport\n // without restarting timers while the window is blurred.\n if (store.state.isWindowFocused) {\n store.resumeTimers();\n }\n store.set('hovering', false);\n markedReadyForMouseLeaveRef.current = false;\n }\n React.useEffect(flushMouseLeave, [hasTransitioningToasts, store]);\n function handleMouseEnter() {\n store.pauseTimers();\n store.set('hovering', true);\n markedReadyForMouseLeaveRef.current = false;\n }\n function resumeTimersIfWindowFocused() {\n if (store.state.isWindowFocused) {\n store.resumeTimers();\n }\n }\n function handleMouseLeave() {\n // Defer to `flushMouseLeave`: while toasts are transitioning out or a touch gesture is active it\n // records the intent and collapses later; otherwise it collapses immediately.\n markedReadyForMouseLeaveRef.current = true;\n flushMouseLeave();\n }\n function handlePointerDown(event) {\n if (event.pointerType === 'touch') {\n touchActiveRef.current = true;\n }\n }\n function handlePointerEnd(event) {\n if (event.pointerType !== 'touch') {\n return;\n }\n touchActiveRef.current = false;\n flushMouseLeave();\n }\n function handleFocus() {\n if (handlingFocusGuardRef.current) {\n handlingFocusGuardRef.current = false;\n return;\n }\n if (focused) {\n return;\n }\n\n // Only set focused when the active element is focus-visible.\n // This prevents the viewport from staying expanded when clicking inside without\n // keyboard navigation.\n if (isFocusVisible(activeElement(ownerDocument(store.state.viewport)))) {\n store.set('focused', true);\n store.pauseTimers();\n }\n }\n function handleBlur(event) {\n if (!focused || contains(store.state.viewport, event.relatedTarget)) {\n return;\n }\n store.set('focused', false);\n resumeTimersIfWindowFocused();\n }\n const defaultProps = {\n tabIndex: -1,\n role: 'region',\n 'aria-live': 'polite',\n 'aria-atomic': false,\n 'aria-relevant': 'additions text',\n 'aria-label': 'Notifications',\n onMouseEnter: handleMouseEnter,\n onMouseMove: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onClick: handleFocus,\n onPointerDown: handlePointerDown,\n onPointerUp: handlePointerEnd,\n onPointerCancel: handlePointerEnd,\n style: {\n ['--toast-frontmost-height']: frontmostHeight ? `${frontmostHeight}px` : undefined\n }\n };\n const state = {\n expanded\n };\n const focusGuard = !isEmpty && prevFocusElement && /*#__PURE__*/_jsx(FocusGuard, {\n onFocus: handleFocusGuard\n });\n const element = useRenderElement('div', componentProps, {\n ref: [forwardedRef, store.setViewport],\n state,\n props: [defaultProps, elementProps, {\n children: /*#__PURE__*/_jsxs(React.Fragment, {\n children: [focusGuard, children, focusGuard]\n })\n }]\n });\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [focusGuard, element, !focused && highPriorityToasts.length > 0 && /*#__PURE__*/_jsx(\"div\", {\n style: visuallyHidden,\n children: highPriorityToasts.map(toast => /*#__PURE__*/_jsxs(\"div\", {\n role: \"alert\",\n \"aria-atomic\": true,\n children: [/*#__PURE__*/_jsx(\"div\", {\n children: toast.title\n }), /*#__PURE__*/_jsx(\"div\", {\n children: toast.description\n })]\n }, toast.id))\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastViewport.displayName = \"ToastViewport\";","import { isReactVersionAtLeast } from \"./reactVersion.mjs\";\nexport function inertValue(value) {\n if (isReactVersionAtLeast(19)) {\n return value;\n }\n // compatibility with React < 19\n return value ? 'true' : undefined;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ToastRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ToastRootContext.displayName = \"ToastRootContext\";\nexport function useToastRootContext() {\n const context = React.useContext(ToastRootContext);\n if (!context) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: ToastRootContext is missing. Toast parts must be used within <Toast.Root>.' : _formatErrorMessage(66));\n }\n return context;\n}","export let TransitionStatusDataAttributes = /*#__PURE__*/function (TransitionStatusDataAttributes) {\n /**\n * Present when the component begins animating in.\n */\n TransitionStatusDataAttributes[\"startingStyle\"] = \"data-starting-style\";\n /**\n * Present when the component is animating out.\n */\n TransitionStatusDataAttributes[\"endingStyle\"] = \"data-ending-style\";\n return TransitionStatusDataAttributes;\n}({});\nconst STARTING_HOOK = {\n 'data-starting-style': ''\n};\nconst ENDING_HOOK = {\n 'data-ending-style': ''\n};\nexport const transitionStatusMapping = {\n transitionStatus(value) {\n if (value === 'starting') {\n return STARTING_HOOK;\n }\n if (value === 'ending') {\n return ENDING_HOOK;\n }\n return null;\n }\n};","/**\n * If the provided argument is a ref object, returns its `current` value.\n * Otherwise, returns the argument itself.\n */\nexport function resolveRef(maybeRef) {\n if (maybeRef == null) {\n return maybeRef;\n }\n return 'current' in maybeRef ? maybeRef.current : maybeRef;\n}","'use client';\n\nimport * as ReactDOM from 'react-dom';\nimport { useAnimationFrame } from '@base-ui/utils/useAnimationFrame';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { resolveRef } from \"../utils/resolveRef.mjs\";\n\n/**\n * Executes a function once all animations have finished on the provided element.\n * If an animation is canceled, waits for any replacement animations before executing.\n * @param elementOrRef - The element to watch for animations.\n * @param waitForStartingStyleRemoved - Whether to wait for [data-starting-style] to be removed before checking for animations.\n * @returns A function that takes a callback to execute once all animations have finished, and an optional AbortSignal to abort the callback\n */\nexport function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false) {\n const frame = useAnimationFrame();\n return useStableCallback((fnToExecute,\n /**\n * An optional [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that\n * can be used to abort `fnToExecute` before all the animations have finished.\n * @default null\n */\n signal = null) => {\n frame.cancel();\n const element = resolveRef(elementOrRef);\n if (element == null) {\n return;\n }\n const resolvedElement = element;\n const done = () => {\n // Synchronously flush the unmounting of the component so that the browser doesn't\n // paint: https://github.com/mui/base-ui/issues/979\n ReactDOM.flushSync(fnToExecute);\n };\n if (typeof resolvedElement.getAnimations !== 'function' || globalThis.BASE_UI_ANIMATIONS_DISABLED) {\n fnToExecute();\n return;\n }\n function exec() {\n Promise.all(resolvedElement.getAnimations().map(animation => animation.finished)).then(() => {\n if (!signal?.aborted) {\n done();\n }\n }, () => {\n if (signal?.aborted) {\n return;\n }\n const currentAnimations = resolvedElement.getAnimations();\n if (currentAnimations.some(animation => animation.pending || animation.playState !== 'finished')) {\n // Sometimes animations can be aborted because a property they depend on changes while the animation plays.\n // In such cases, we need to re-check if any new animations have started.\n exec();\n return;\n }\n done();\n });\n }\n if (waitForStartingStyleRemoved) {\n const startingStyleAttribute = 'data-starting-style';\n\n // If `[data-starting-style]` isn't present, fall back to waiting one more frame\n // to give \"open\" animations a chance to be registered.\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n frame.request(exec);\n return;\n }\n\n // Wait for `[data-starting-style]` to have been removed.\n const attributeObserver = new MutationObserver(() => {\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n attributeObserver.disconnect();\n exec();\n }\n });\n attributeObserver.observe(resolvedElement, {\n attributes: true,\n attributeFilter: [startingStyleAttribute]\n });\n signal?.addEventListener('abort', () => attributeObserver.disconnect(), {\n once: true\n });\n return;\n }\n frame.request(exec);\n });\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useAnimationsFinished } from \"./useAnimationsFinished.mjs\";\n\n/**\n * Calls the provided function when the CSS open/close animation or transition completes.\n */\nexport function useOpenChangeComplete(parameters) {\n const {\n enabled = true,\n open,\n ref,\n onComplete: onCompleteParam\n } = parameters;\n const onComplete = useStableCallback(onCompleteParam);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, open);\n React.useEffect(() => {\n if (!enabled) {\n return undefined;\n }\n const abortController = new AbortController();\n runOnceAnimationsFinish(onComplete, abortController.signal);\n return () => {\n abortController.abort();\n };\n }, [enabled, open, onComplete, runOnceAnimationsFinish]);\n}","export const TYPEAHEAD_RESET_MS = 500;\nexport const PATIENT_CLICK_THRESHOLD = 500;\nexport const DISABLED_TRANSITIONS_STYLE = {\n style: {\n transition: 'none'\n }\n};\nexport const CLICK_TRIGGER_IDENTIFIER = 'data-base-ui-click-trigger';\nexport const BASE_UI_SWIPE_IGNORE_ATTRIBUTE = 'data-base-ui-swipe-ignore';\nexport const LEGACY_SWIPE_IGNORE_ATTRIBUTE = 'data-swipe-ignore';\nexport const BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;\nexport const LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;\n\n/**\n * Used for dropdowns that usually strictly prefer top/bottom placements and\n * use `var(--available-height)` to limit their height.\n */\nexport const DROPDOWN_COLLISION_AVOIDANCE = {\n fallbackAxisSide: 'none'\n};\n\n/**\n * Used by regular popups that usually aren't scrollable and are allowed to\n * freely flip to any axis of placement.\n */\nexport const POPUP_COLLISION_AVOIDANCE = {\n fallbackAxisSide: 'end'\n};\n\n/**\n * Special visually hidden styles for the aria-owns owner element to ensure owned element\n * accessibility in iOS/Safari/VoiceControl.\n * The owner element is an empty span, so most of the common visually hidden styles are not needed.\n * @see https://github.com/floating-ui/floating-ui/issues/3403\n */\nexport const ownerVisuallyHidden = {\n clipPath: 'inset(50%)',\n position: 'fixed',\n top: 0,\n left: 0\n};","import { getComputedStyle, getParentNode, isHTMLElement, isLastTraversableNode } from '@floating-ui/utils/dom';\nexport function isScrollableY(element, allowOverflowIntent = false) {\n const {\n overflowY\n } = getComputedStyle(element);\n if (overflowY !== 'auto' && overflowY !== 'scroll') {\n return false;\n }\n // When `allowOverflowIntent` is true, a container that overflows only once extra space is\n // added (e.g. drawer keyboard scroll slack) still counts, as long as it has layout size on\n // the axis.\n return allowOverflowIntent ? element.clientHeight > 0 : element.scrollHeight > element.clientHeight;\n}\nexport function isScrollableX(element, allowOverflowIntent = false) {\n const {\n overflowX\n } = getComputedStyle(element);\n if (overflowX !== 'auto' && overflowX !== 'scroll') {\n return false;\n }\n return allowOverflowIntent ? element.clientWidth > 0 : element.scrollWidth > element.clientWidth;\n}\nexport function isScrollable(element, axis, allowOverflowIntent = false) {\n return axis === 'vertical' ? isScrollableY(element, allowOverflowIntent) : isScrollableX(element, allowOverflowIntent);\n}\nexport function hasScrollableAncestor(target, root, axes) {\n // `getParentNode` crosses shadow boundaries (and slots), so a target inside a shadow root\n // still walks up to scrollable ancestors in the light DOM.\n let node = target;\n while (isHTMLElement(node) && node !== root && !isLastTraversableNode(node)) {\n for (const axis of axes) {\n if (isScrollable(node, axis)) {\n return true;\n }\n }\n node = getParentNode(node);\n }\n return false;\n}\nexport function findScrollableTouchTarget(target, root, axis = 'vertical', allowOverflowIntent = false) {\n // `getParentNode` crosses shadow boundaries (and slots), so a target inside a shadow root\n // still reaches a scrollable ancestor in the light DOM.\n let node = isHTMLElement(target) ? target : null;\n while (isHTMLElement(node) && node !== root && !isLastTraversableNode(node)) {\n if (isScrollable(node, axis, allowOverflowIntent)) {\n return node;\n }\n node = getParentNode(node);\n }\n return isScrollable(root, axis, allowOverflowIntent) ? root : null;\n}","export function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(val, max));\n}","// `Document.elementFromPoint` retargets shadow content to the shadow host, which then fails\n// `contains()` checks against a popup inside that shadow root, so callers pass `getRootNode()`\n// (a document or a shadow root) rather than `ownerDocument()`.\nexport function getElementAtPoint(root, x, y) {\n return typeof root?.elementFromPoint === 'function' ? root.elementFromPoint(x, y) : null;\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { ownerDocument, ownerWindow } from '@base-ui/utils/owner';\nimport { contains, getTarget } from \"../floating-ui-react/utils.mjs\";\nimport { findScrollableTouchTarget, hasScrollableAncestor } from \"./scrollable.mjs\";\nimport { clamp } from \"../internals/clamp.mjs\";\nimport { getElementAtPoint } from \"./getElementAtPoint.mjs\";\nconst DEFAULT_SWIPE_THRESHOLD = 40;\nconst REVERSE_CANCEL_THRESHOLD = 10;\nconst MIN_DRAG_THRESHOLD = 1;\nconst MIN_VELOCITY_DURATION_MS = 50;\nconst MIN_RELEASE_VELOCITY_DURATION_MS = 16;\nconst MAX_RELEASE_VELOCITY_AGE_MS = 80;\nconst DEFAULT_IGNORE_SELECTOR = 'button,a,input,select,textarea,label,[role=\"button\"]';\nexport function getDisplacement(direction, deltaX, deltaY) {\n switch (direction) {\n case 'up':\n return -deltaY;\n case 'down':\n return deltaY;\n case 'left':\n return -deltaX;\n case 'right':\n return deltaX;\n default:\n return 0;\n }\n}\nexport function getElementTransform(element) {\n const computedStyle = ownerWindow(element).getComputedStyle(element);\n const transform = computedStyle.transform;\n let translateX = 0;\n let translateY = 0;\n let scale = 1;\n if (transform && transform !== 'none') {\n const matrix = transform.match(/matrix(?:3d)?\\(([^)]+)\\)/);\n if (matrix) {\n const values = matrix[1].split(', ').map(parseFloat);\n if (values.length === 6) {\n translateX = values[4];\n translateY = values[5];\n scale = Math.sqrt(values[0] * values[0] + values[1] * values[1]);\n } else if (values.length === 16) {\n translateX = values[12];\n translateY = values[13];\n scale = values[0];\n }\n }\n }\n return {\n x: translateX,\n y: translateY,\n scale\n };\n}\nfunction getValidTimeStamp(timeStamp) {\n return Number.isFinite(timeStamp) && timeStamp > 0 ? timeStamp : null;\n}\nfunction getDragTransform(dragOffset, scale) {\n return `translate3d(${dragOffset.x}px,${dragOffset.y}px,0) scale(${scale})`;\n}\nfunction hasPrimaryMouseButton(buttons) {\n return buttons % 2 === 1;\n}\nfunction safelyChangePointerCapture(element, pointerId, method) {\n const pointerCaptureMethod = element[method];\n if (typeof pointerCaptureMethod !== 'function') {\n return;\n }\n try {\n pointerCaptureMethod.call(element, pointerId);\n } catch (error) {\n if (error && typeof error === 'object' && 'name' in error && error.name === 'NotFoundError') {\n return;\n }\n throw error;\n }\n}\nexport function useSwipeDismiss(options) {\n const {\n enabled,\n directions,\n elementRef,\n movementCssVars,\n canStart,\n ignoreSelectorWhenTouch = true,\n ignoreScrollableAncestors = false,\n swipeThreshold: swipeThresholdProp,\n onDismiss,\n onProgress,\n onCancel,\n onSwipeStart,\n onRelease,\n onSwipingChange,\n trackDrag = true\n } = options;\n const ignoreSelector = DEFAULT_IGNORE_SELECTOR;\n const primaryDirection = directions.length === 1 ? directions[0] : undefined;\n const swipeThresholdDefault = Math.max(0, typeof swipeThresholdProp === 'number' ? swipeThresholdProp : DEFAULT_SWIPE_THRESHOLD);\n const allowLeft = directions.includes('left');\n const allowRight = directions.includes('right');\n const allowUp = directions.includes('up');\n const allowDown = directions.includes('down');\n const hasHorizontal = allowLeft || allowRight;\n const hasVertical = allowUp || allowDown;\n const scrollAxes = React.useMemo(() => {\n const axes = [];\n if (hasVertical) {\n axes.push('vertical');\n }\n if (hasHorizontal) {\n axes.push('horizontal');\n }\n return axes;\n }, [hasHorizontal, hasVertical]);\n const [currentSwipeDirection, setCurrentSwipeDirection] = React.useState(undefined);\n const [isSwiping, setIsSwiping] = React.useState(false);\n const [dragDismissed, setDragDismissed] = React.useState(false);\n const dragStartPosRef = React.useRef({\n x: 0,\n y: 0\n });\n const dragOffsetRef = React.useRef({\n x: 0,\n y: 0\n });\n const lastMovePosRef = React.useRef(null);\n const initialTransformRef = React.useRef({\n x: 0,\n y: 0,\n scale: 1\n });\n const intendedSwipeDirectionRef = React.useRef(undefined);\n const maxSwipeDisplacementRef = React.useRef(0);\n const cancelledSwipeRef = React.useRef(false);\n const swipeCancelBaselineRef = React.useRef({\n x: 0,\n y: 0\n });\n const lockedDirectionRef = React.useRef(null);\n const isFirstPointerMoveRef = React.useRef(false);\n const pendingSwipeRef = React.useRef(false);\n const pendingSwipeStartPosRef = React.useRef(null);\n const swipeFromScrollableRef = React.useRef(false);\n const sawPrimaryButtonsOnMoveRef = React.useRef(false);\n const elementSizeRef = React.useRef({\n width: 0,\n height: 0\n });\n const swipeProgressRef = React.useRef(0);\n const swipeThresholdRef = React.useRef(swipeThresholdDefault);\n const swipeThresholdFunctionRef = React.useRef(null);\n const swipeStartTimeRef = React.useRef(null);\n const lastDragSampleRef = React.useRef(null);\n const lastDragVelocityRef = React.useRef({\n x: 0,\n y: 0\n });\n const lastProgressDetailsRef = React.useRef(null);\n const isSwipingRef = React.useRef(false);\n const dragStyleSnapshotRef = React.useRef(null);\n const setSwiping = useStableCallback(nextSwiping => {\n if (isSwipingRef.current === nextSwiping) {\n return;\n }\n isSwipingRef.current = nextSwiping;\n setIsSwiping(nextSwiping);\n onSwipingChange?.(nextSwiping);\n });\n function resolveSwipeThreshold(direction) {\n if (!direction) {\n return;\n }\n const element = elementRef.current;\n const thresholdFunction = swipeThresholdFunctionRef.current;\n if (!element || !thresholdFunction) {\n return;\n }\n const value = thresholdFunction({\n element,\n direction\n });\n swipeThresholdRef.current = Math.max(0, value);\n }\n const updateSwipeProgress = useStableCallback((progress, details) => {\n const nextProgress = Number.isFinite(progress) ? clamp(progress, 0, 1) : 0;\n const progressChanged = nextProgress !== swipeProgressRef.current;\n let detailsChanged = false;\n if (details) {\n const lastDetails = lastProgressDetailsRef.current;\n detailsChanged = !lastDetails || lastDetails.deltaX !== details.deltaX || lastDetails.deltaY !== details.deltaY || lastDetails.direction !== details.direction;\n }\n if (!progressChanged && !detailsChanged) {\n return;\n }\n swipeProgressRef.current = nextProgress;\n if (details) {\n lastProgressDetailsRef.current = details;\n } else if (progressChanged) {\n lastProgressDetailsRef.current = null;\n }\n onProgress?.(nextProgress, details);\n });\n const syncDragStyles = useStableCallback(swiping => {\n const element = elementRef.current;\n if (!trackDrag || !element) {\n if (!swiping) {\n dragStyleSnapshotRef.current = null;\n }\n return;\n }\n const style = element.style;\n const dragStyleSnapshot = dragStyleSnapshotRef.current;\n if (swiping) {\n if (!dragStyleSnapshot) {\n dragStyleSnapshotRef.current = [style.transition, style.transform];\n }\n style.transition = 'none';\n } else if (dragStyleSnapshot) {\n [style.transition, style.transform] = dragStyleSnapshot;\n dragStyleSnapshotRef.current = null;\n }\n const dragOffset = dragOffsetRef.current;\n const initialTransform = initialTransformRef.current;\n const deltaX = dragOffset.x - initialTransform.x;\n const deltaY = dragOffset.y - initialTransform.y;\n if (swiping) {\n style.transform = getDragTransform(dragOffset, initialTransform.scale);\n }\n style.setProperty(movementCssVars.x, `${deltaX}px`);\n style.setProperty(movementCssVars.y, `${deltaY}px`);\n });\n function recordDragSample(offset, timeStamp) {\n if (timeStamp === null) {\n return;\n }\n const lastSample = lastDragSampleRef.current;\n if (lastSample && timeStamp > lastSample.time) {\n const durationMs = Math.max(timeStamp - lastSample.time, MIN_RELEASE_VELOCITY_DURATION_MS);\n lastDragVelocityRef.current = {\n x: (offset.x - lastSample.x) / durationMs,\n y: (offset.y - lastSample.y) / durationMs\n };\n }\n lastDragSampleRef.current = {\n x: offset.x,\n y: offset.y,\n time: timeStamp\n };\n }\n const reset = React.useCallback(() => {\n setCurrentSwipeDirection(undefined);\n setSwiping(false);\n setDragDismissed(false);\n updateSwipeProgress(0);\n swipeThresholdRef.current = swipeThresholdDefault;\n swipeThresholdFunctionRef.current = null;\n dragStartPosRef.current = {\n x: 0,\n y: 0\n };\n dragOffsetRef.current = {\n x: 0,\n y: 0\n };\n initialTransformRef.current = {\n x: 0,\n y: 0,\n scale: 1\n };\n intendedSwipeDirectionRef.current = undefined;\n maxSwipeDisplacementRef.current = 0;\n cancelledSwipeRef.current = false;\n swipeCancelBaselineRef.current = {\n x: 0,\n y: 0\n };\n lockedDirectionRef.current = null;\n isFirstPointerMoveRef.current = false;\n lastMovePosRef.current = null;\n pendingSwipeRef.current = false;\n pendingSwipeStartPosRef.current = null;\n swipeFromScrollableRef.current = false;\n sawPrimaryButtonsOnMoveRef.current = false;\n elementSizeRef.current = {\n width: 0,\n height: 0\n };\n swipeStartTimeRef.current = null;\n lastDragSampleRef.current = null;\n lastDragVelocityRef.current = {\n x: 0,\n y: 0\n };\n lastProgressDetailsRef.current = null;\n syncDragStyles(false);\n }, [setSwiping, swipeThresholdDefault, syncDragStyles, updateSwipeProgress]);\n function getPrimaryPointerPosition(event) {\n if ('touches' in event) {\n const touch = event.touches[0];\n return touch ? {\n x: touch.clientX,\n y: touch.clientY\n } : null;\n }\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n function isTouchLikeEvent(event) {\n if ('touches' in event) {\n return true;\n }\n return event.pointerType === 'touch';\n }\n function getTargetAtPoint(position, nativeEvent) {\n const root = elementRef.current?.getRootNode();\n const elementAtPoint = getElementAtPoint(root, position.x, position.y);\n const target = elementAtPoint ?? getTarget(nativeEvent);\n return target;\n }\n function findGestureScrollableTouchTarget(target, root) {\n if (hasHorizontal && !hasVertical) {\n return findScrollableTouchTarget(target, root, 'horizontal');\n }\n if (hasVertical && !hasHorizontal) {\n return findScrollableTouchTarget(target, root, 'vertical');\n }\n return findScrollableTouchTarget(target, root, 'vertical') ?? findScrollableTouchTarget(target, root, 'horizontal');\n }\n function startSwipeAtPosition(event, position, startOptions) {\n swipeFromScrollableRef.current = false;\n const touchLike = isTouchLikeEvent(event);\n const target = getTargetAtPoint(position, event.nativeEvent);\n const doc = ownerDocument(elementRef.current);\n const body = doc.body;\n const scrollableTarget = touchLike && body ? findGestureScrollableTouchTarget(target, body) : null;\n const ignoreScrollableTarget = startOptions?.ignoreScrollableTarget ?? false;\n if (scrollableTarget && !ignoreScrollableTarget) {\n return false;\n }\n swipeFromScrollableRef.current = Boolean(scrollableTarget && ignoreScrollableTarget);\n const isInteractiveElement = target ? target.closest(ignoreSelector) : false;\n if (isInteractiveElement && (!touchLike || ignoreSelectorWhenTouch)) {\n return false;\n }\n const element = elementRef.current;\n if (ignoreScrollableAncestors && element && target && scrollAxes.length > 0) {\n const ignoreAncestors = startOptions?.ignoreScrollableAncestors ?? false;\n if (!ignoreAncestors && hasScrollableAncestor(target, element, scrollAxes)) {\n return false;\n }\n }\n cancelledSwipeRef.current = false;\n intendedSwipeDirectionRef.current = undefined;\n maxSwipeDisplacementRef.current = 0;\n dragStartPosRef.current = position;\n swipeStartTimeRef.current = getValidTimeStamp(event.timeStamp);\n swipeCancelBaselineRef.current = position;\n lastMovePosRef.current = position;\n swipeThresholdRef.current = swipeThresholdDefault;\n swipeThresholdFunctionRef.current = typeof swipeThresholdProp === 'function' ? swipeThresholdProp : null;\n if (element) {\n elementSizeRef.current = {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n resolveSwipeThreshold(primaryDirection);\n const transform = getElementTransform(element);\n initialTransformRef.current = transform;\n dragOffsetRef.current = {\n x: transform.x,\n y: transform.y\n };\n recordDragSample({\n x: transform.x,\n y: transform.y\n }, swipeStartTimeRef.current);\n if (!('touches' in event)) {\n safelyChangePointerCapture(element, event.pointerId, 'setPointerCapture');\n }\n }\n onSwipeStart?.(event.nativeEvent);\n setSwiping(true);\n lockedDirectionRef.current = null;\n isFirstPointerMoveRef.current = true;\n updateSwipeProgress(0);\n syncDragStyles(true);\n return true;\n }\n function resetPendingSwipeState() {\n clearPendingSwipeStartState();\n swipeFromScrollableRef.current = false;\n lastMovePosRef.current = null;\n }\n function clearPendingSwipeStartState() {\n pendingSwipeRef.current = false;\n pendingSwipeStartPosRef.current = null;\n }\n function cancelSwipeInteraction(event) {\n resetPendingSwipeState();\n if (!isSwipingRef.current) {\n return;\n }\n setSwiping(false);\n lockedDirectionRef.current = null;\n const resolvedInitialTransform = initialTransformRef.current;\n dragOffsetRef.current = {\n x: resolvedInitialTransform.x,\n y: resolvedInitialTransform.y\n };\n setCurrentSwipeDirection(undefined);\n sawPrimaryButtonsOnMoveRef.current = false;\n syncDragStyles(false);\n const element = elementRef.current;\n if (element) {\n safelyChangePointerCapture(element, event.pointerId, 'releasePointerCapture');\n }\n updateSwipeProgress(0, {\n deltaX: 0,\n deltaY: 0,\n direction: undefined\n });\n onCancel?.(event.nativeEvent);\n }\n function applyDirectionalDamping(deltaX, deltaY) {\n const exponent = value => Math.sign(value) * Math.abs(value) ** 0.5;\n const dampAxis = (delta, allowNegative, allowPositive) => {\n if (!allowNegative && delta < 0 || !allowPositive && delta > 0) {\n return exponent(delta);\n }\n return delta;\n };\n const newDeltaX = hasHorizontal ? dampAxis(deltaX, allowLeft, allowRight) : exponent(deltaX);\n const newDeltaY = hasVertical ? dampAxis(deltaY, allowUp, allowDown) : exponent(deltaY);\n return {\n x: newDeltaX,\n y: newDeltaY\n };\n }\n function canSwipeFromScrollEdgeOnPendingMove(scrollTarget, deltaX, deltaY) {\n // Swiping toward the axis start edge (down/right) is allowed when scrolled to the start;\n // toward the end edge (up/left) when scrolled to the end.\n const canSwipeOnAxis = (delta, scrollOffset, maxScrollOffset, allowTowardStart, allowTowardEnd) => delta > 0 && scrollOffset <= 0 && allowTowardStart || delta < 0 && scrollOffset >= Math.max(0, maxScrollOffset) && allowTowardEnd;\n const absDeltaX = Math.abs(deltaX);\n const absDeltaY = Math.abs(deltaY);\n if (hasVertical && deltaY !== 0 && (!hasHorizontal || absDeltaY >= absDeltaX)) {\n return canSwipeOnAxis(deltaY, scrollTarget.scrollTop, scrollTarget.scrollHeight - scrollTarget.clientHeight, allowDown, allowUp);\n }\n if (hasHorizontal && deltaX !== 0 && (!hasVertical || absDeltaX > absDeltaY)) {\n return canSwipeOnAxis(deltaX, scrollTarget.scrollLeft, scrollTarget.scrollWidth - scrollTarget.clientWidth, allowRight, allowLeft);\n }\n return null;\n }\n const handleStart = useStableCallback(event => {\n if (!enabled) {\n return;\n }\n if (event.defaultPrevented || event.nativeEvent.defaultPrevented) {\n return;\n }\n if (!('touches' in event) && event.button !== 0) {\n return;\n }\n const startPos = getPrimaryPointerPosition(event);\n if (!startPos) {\n return;\n }\n pendingSwipeRef.current = true;\n pendingSwipeStartPosRef.current = startPos;\n swipeFromScrollableRef.current = false;\n sawPrimaryButtonsOnMoveRef.current = !('touches' in event);\n const allowedToStart = canStart ? canStart(startPos, {\n nativeEvent: event.nativeEvent,\n direction: primaryDirection\n }) : true;\n if (!allowedToStart) {\n return;\n }\n if (startSwipeAtPosition(event, startPos)) {\n clearPendingSwipeStartState();\n }\n });\n function handleMoveCore(event, position, movement) {\n if (!enabled || !isSwipingRef.current) {\n return;\n }\n const target = getTarget(event.nativeEvent);\n if (isTouchLikeEvent(event) && !swipeFromScrollableRef.current) {\n const boundaryElement = event.currentTarget;\n if (findGestureScrollableTouchTarget(target, boundaryElement)) {\n return;\n }\n }\n if (!('touches' in event)) {\n // Prevent text selection on Safari\n event.preventDefault();\n }\n if (isFirstPointerMoveRef.current) {\n isFirstPointerMoveRef.current = false;\n // Reset the drag origin to the first move's position to absorb the gap between the press and\n // the first move event — notably on iOS touch, where the first `touchmove` arrives already\n // offset from the `touchstart` — which would otherwise make the dragged element jump. This\n // only matters when an element follows the pointer; when `trackDrag` is false (e.g. the\n // swipe-area, which only opens the drawer) keep the original press position so a quick flick\n // still registers: on a low-refresh-rate display the whole travel can land in this single\n // first move, and discarding it would drop the gesture.\n if (trackDrag) {\n dragStartPosRef.current = position;\n const moveTime = getValidTimeStamp(event.timeStamp);\n if (moveTime !== null) {\n swipeStartTimeRef.current = moveTime;\n }\n }\n }\n const clientX = position.x;\n const clientY = position.y;\n const movementX = movement.x;\n const movementY = movement.y;\n if (movementY < 0 && clientY > swipeCancelBaselineRef.current.y || movementY > 0 && clientY < swipeCancelBaselineRef.current.y) {\n swipeCancelBaselineRef.current = {\n x: swipeCancelBaselineRef.current.x,\n y: clientY\n };\n }\n if (movementX < 0 && clientX > swipeCancelBaselineRef.current.x || movementX > 0 && clientX < swipeCancelBaselineRef.current.x) {\n swipeCancelBaselineRef.current = {\n x: clientX,\n y: swipeCancelBaselineRef.current.y\n };\n }\n const deltaX = clientX - dragStartPosRef.current.x;\n const deltaY = clientY - dragStartPosRef.current.y;\n const cancelDeltaY = clientY - swipeCancelBaselineRef.current.y;\n const cancelDeltaX = clientX - swipeCancelBaselineRef.current.x;\n let lockedDirection = lockedDirectionRef.current;\n if (lockedDirection === null && hasHorizontal && hasVertical) {\n const movementDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (movementDistance >= MIN_DRAG_THRESHOLD) {\n lockedDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'horizontal' : 'vertical';\n lockedDirectionRef.current = lockedDirection;\n }\n }\n let candidate;\n if (!intendedSwipeDirectionRef.current) {\n if (lockedDirection === 'vertical') {\n if (deltaY > 0) {\n candidate = 'down';\n } else if (deltaY < 0) {\n candidate = 'up';\n }\n } else if (lockedDirection === 'horizontal') {\n if (deltaX > 0) {\n candidate = 'right';\n } else if (deltaX < 0) {\n candidate = 'left';\n }\n } else if (Math.abs(deltaX) >= Math.abs(deltaY)) {\n candidate = deltaX > 0 ? 'right' : 'left';\n } else {\n candidate = deltaY > 0 ? 'down' : 'up';\n }\n if (candidate) {\n const isAllowed = candidate === 'left' && allowLeft || candidate === 'right' && allowRight || candidate === 'up' && allowUp || candidate === 'down' && allowDown;\n if (isAllowed) {\n intendedSwipeDirectionRef.current = candidate;\n maxSwipeDisplacementRef.current = getDisplacement(candidate, deltaX, deltaY);\n setCurrentSwipeDirection(candidate);\n resolveSwipeThreshold(candidate);\n }\n }\n } else {\n const direction = intendedSwipeDirectionRef.current;\n const currentDisplacement = getDisplacement(direction, cancelDeltaX, cancelDeltaY);\n if (currentDisplacement > swipeThresholdRef.current) {\n cancelledSwipeRef.current = false;\n setCurrentSwipeDirection(direction);\n } else if (!(allowLeft && allowRight) && !(allowUp && allowDown) && maxSwipeDisplacementRef.current - currentDisplacement >= REVERSE_CANCEL_THRESHOLD) {\n // Mark that a change-of-mind has occurred\n cancelledSwipeRef.current = true;\n }\n }\n const dampedDelta = applyDirectionalDamping(deltaX, deltaY);\n let newOffsetX = initialTransformRef.current.x;\n let newOffsetY = initialTransformRef.current.y;\n if (lockedDirection === 'horizontal') {\n if (hasHorizontal) {\n newOffsetX += dampedDelta.x;\n }\n } else if (lockedDirection === 'vertical') {\n if (hasVertical) {\n newOffsetY += dampedDelta.y;\n }\n } else {\n if (hasHorizontal) {\n newOffsetX += dampedDelta.x;\n }\n if (hasVertical) {\n newOffsetY += dampedDelta.y;\n }\n }\n\n // Only rewrite drag styles when the drag offset actually changed. `syncDragStyles` writes the\n // raw (undamped) frozen transform and movement vars, relying on the consumer's `onProgress`\n // to overwrite them with damped styles — but `updateSwipeProgress` dedupes unchanged\n // deltas and skips `onProgress`. A move that doesn't change the offset (e.g. the cursor\n // pinned at a screen edge during an off-screen drag, jittering only on the ignored axis)\n // would otherwise reinstate the raw styles with no correction, jumping the element to the\n // undamped position.\n const previousOffset = dragOffsetRef.current;\n const offsetChanged = newOffsetX !== previousOffset.x || newOffsetY !== previousOffset.y;\n dragOffsetRef.current = {\n x: newOffsetX,\n y: newOffsetY\n };\n if (offsetChanged) {\n syncDragStyles(true);\n }\n recordDragSample({\n x: newOffsetX,\n y: newOffsetY\n }, getValidTimeStamp(event.timeStamp));\n const dragDeltaX = newOffsetX - initialTransformRef.current.x;\n const dragDeltaY = newOffsetY - initialTransformRef.current.y;\n const progressDetails = {\n deltaX: dragDeltaX,\n deltaY: dragDeltaY,\n direction: intendedSwipeDirectionRef.current\n };\n let progress = 0;\n const progressDirection = primaryDirection ?? intendedSwipeDirectionRef.current;\n if (progressDirection) {\n const size = progressDirection === 'left' || progressDirection === 'right' ? elementSizeRef.current.width : elementSizeRef.current.height;\n const scale = initialTransformRef.current.scale || 1;\n const progressDisplacement = getDisplacement(progressDirection, dragDeltaX, dragDeltaY);\n if (size > 0 && scale > 0 && progressDisplacement > 0) {\n progress = progressDisplacement / (size * scale);\n }\n }\n updateSwipeProgress(progress, progressDetails);\n }\n const handleEnd = useStableCallback(event => {\n if (!enabled) {\n return;\n }\n const resolvedDragOffset = dragOffsetRef.current;\n const resolvedInitialTransform = initialTransformRef.current;\n const releaseDeltaX = resolvedDragOffset.x - resolvedInitialTransform.x;\n const releaseDeltaY = resolvedDragOffset.y - resolvedInitialTransform.y;\n const progressDetails = {\n deltaX: releaseDeltaX,\n deltaY: releaseDeltaY,\n direction: intendedSwipeDirectionRef.current\n };\n if (!isSwipingRef.current) {\n resetPendingSwipeState();\n updateSwipeProgress(0, progressDetails);\n return;\n }\n setSwiping(false);\n lockedDirectionRef.current = null;\n resetPendingSwipeState();\n sawPrimaryButtonsOnMoveRef.current = false;\n const element = elementRef.current;\n if (element) {\n if (!('touches' in event)) {\n safelyChangePointerCapture(element, event.pointerId, 'releasePointerCapture');\n }\n }\n const deltaX = releaseDeltaX;\n const deltaY = releaseDeltaY;\n const startTime = swipeStartTimeRef.current;\n const endTime = getValidTimeStamp(event.timeStamp);\n const durationMs = startTime !== null && endTime !== null && endTime > startTime ? endTime - startTime : 0;\n const velocityDurationMs = durationMs > 0 ? Math.max(durationMs, MIN_VELOCITY_DURATION_MS) : 0;\n const velocityX = velocityDurationMs > 0 ? deltaX / velocityDurationMs : 0;\n const velocityY = velocityDurationMs > 0 ? deltaY / velocityDurationMs : 0;\n let releaseVelocityX = lastDragVelocityRef.current.x;\n let releaseVelocityY = lastDragVelocityRef.current.y;\n const lastSample = lastDragSampleRef.current;\n if (lastSample && endTime !== null && endTime >= lastSample.time) {\n const ageMs = endTime - lastSample.time;\n if (ageMs <= MAX_RELEASE_VELOCITY_AGE_MS) {\n const sampleDurationMs = Math.max(ageMs, MIN_RELEASE_VELOCITY_DURATION_MS);\n const deltaFromLastSampleX = resolvedDragOffset.x - lastSample.x;\n const deltaFromLastSampleY = resolvedDragOffset.y - lastSample.y;\n const sampleVelocityX = deltaFromLastSampleX / sampleDurationMs;\n const sampleVelocityY = deltaFromLastSampleY / sampleDurationMs;\n if (sampleVelocityX !== 0) {\n releaseVelocityX = sampleVelocityX;\n }\n if (sampleVelocityY !== 0) {\n releaseVelocityY = sampleVelocityY;\n }\n } else {\n releaseVelocityX = 0;\n releaseVelocityY = 0;\n }\n }\n const releaseDecision = onRelease?.({\n event: event.nativeEvent,\n direction: intendedSwipeDirectionRef.current,\n deltaX,\n deltaY,\n velocityX,\n velocityY,\n releaseVelocityX,\n releaseVelocityY\n });\n const hasReleaseDecision = typeof releaseDecision === 'boolean';\n if (cancelledSwipeRef.current && !hasReleaseDecision) {\n dragOffsetRef.current = {\n x: resolvedInitialTransform.x,\n y: resolvedInitialTransform.y\n };\n setCurrentSwipeDirection(undefined);\n syncDragStyles(false);\n updateSwipeProgress(0, progressDetails);\n return;\n }\n let shouldClose = false;\n let dismissDirection;\n if (hasReleaseDecision) {\n shouldClose = releaseDecision;\n dismissDirection = intendedSwipeDirectionRef.current ?? primaryDirection;\n } else {\n for (const direction of directions) {\n if (getDisplacement(direction, deltaX, deltaY) > swipeThresholdRef.current) {\n shouldClose = true;\n dismissDirection = direction;\n break;\n }\n }\n }\n if (shouldClose && dismissDirection) {\n setCurrentSwipeDirection(dismissDirection);\n setDragDismissed(true);\n syncDragStyles(false);\n onDismiss?.(event.nativeEvent, {\n direction: dismissDirection\n });\n } else {\n dragOffsetRef.current = {\n x: resolvedInitialTransform.x,\n y: resolvedInitialTransform.y\n };\n setCurrentSwipeDirection(undefined);\n syncDragStyles(false);\n updateSwipeProgress(0, progressDetails);\n }\n });\n const handleMove = useStableCallback(event => {\n const currentPos = getPrimaryPointerPosition(event);\n if (!currentPos) {\n return;\n }\n let endAfterMove = false;\n if (!('touches' in event)) {\n const hasPrimaryButton = hasPrimaryMouseButton(event.buttons);\n if (hasPrimaryButton) {\n sawPrimaryButtonsOnMoveRef.current = true;\n }\n\n // Cancel the swipe if a non-primary button takes over the interaction.\n // This handles cases where a right-click interrupts dragging.\n if (event.buttons !== 0 && !hasPrimaryButton) {\n cancelSwipeInteraction(event);\n return;\n }\n\n // A `buttons: 0` pointermove means the primary button was already released, so the gesture is\n // over even if no pointerup reached us. On fast trackpad flicks this trailing move is\n // dispatched just before pointerup; treat it as the release (mirroring touchend) instead of\n // cancelling and snapping the element back.\n if (event.buttons === 0 && sawPrimaryButtonsOnMoveRef.current) {\n if (!isSwipingRef.current) {\n // The gesture never activated — discard it.\n handleEnd(event);\n return;\n }\n // This release move can itself carry the threshold-crossing displacement (and the peak\n // release velocity), so let it flow through `handleMoveCore` below to update the drag\n // offset / velocity sample, then commit the release afterwards.\n endAfterMove = true;\n }\n }\n if (!isSwiping && pendingSwipeRef.current) {\n if (!isTouchLikeEvent(event) && (event.defaultPrevented || event.nativeEvent.defaultPrevented)) {\n resetPendingSwipeState();\n return;\n }\n const allowedToStart = canStart ? canStart(currentPos, {\n nativeEvent: event.nativeEvent,\n direction: primaryDirection\n }) : true;\n if (allowedToStart) {\n const pendingStartPos = pendingSwipeStartPosRef.current;\n let ignoreScrollableOnStart = false;\n if (isTouchLikeEvent(event)) {\n const element = elementRef.current;\n if (pendingStartPos && element) {\n const target = getTargetAtPoint(currentPos, event.nativeEvent);\n const doc = ownerDocument(element);\n const body = doc.body;\n const scrollTarget = body ? findGestureScrollableTouchTarget(target, body) : null;\n if (scrollTarget && (contains(element, scrollTarget) || contains(scrollTarget, element))) {\n const deltaX = currentPos.x - pendingStartPos.x;\n const deltaY = currentPos.y - pendingStartPos.y;\n const canSwipeFromEdge = canSwipeFromScrollEdgeOnPendingMove(scrollTarget, deltaX, deltaY);\n if (canSwipeFromEdge === false) {\n return;\n }\n if (canSwipeFromEdge === true) {\n ignoreScrollableOnStart = true;\n }\n }\n }\n }\n const started = startSwipeAtPosition(event, currentPos, {\n ignoreScrollableTarget: ignoreScrollableOnStart,\n ignoreScrollableAncestors: ignoreScrollableOnStart\n });\n if (started) {\n if (pendingStartPos && ignoreScrollableOnStart) {\n // Preserve displacement between touchstart and the move that activates swipe from\n // a scroll-edge so quick flicks can dismiss.\n clearPendingSwipeStartState();\n dragStartPosRef.current = pendingStartPos;\n swipeCancelBaselineRef.current = pendingStartPos;\n lastMovePosRef.current = pendingStartPos;\n isFirstPointerMoveRef.current = false;\n } else {\n // Start from the current in-bounds position without dropping follow-up move\n // displacement; this avoids jumps when entering from outside the element while\n // keeping swipe tracking responsive on the next move.\n clearPendingSwipeStartState();\n swipeFromScrollableRef.current = false;\n }\n }\n }\n }\n const previousPos = lastMovePosRef.current;\n const movement = previousPos === null ? {\n x: 0,\n y: 0\n } : {\n x: currentPos.x - previousPos.x,\n y: currentPos.y - previousPos.y\n };\n lastMovePosRef.current = currentPos;\n handleMoveCore(event, currentPos, movement);\n\n // `endAfterMove` is only set in the non-touch branch above; the `'touches'` guard re-narrows the\n // event type for `handleEnd` after the shared move handling has run.\n if (endAfterMove && !('touches' in event)) {\n handleEnd(event);\n }\n });\n\n // Feeds a native touchmove into the swipe pipeline. Used by consumers that claim the gesture\n // in a capture-phase listener and stop it from reaching React's delegated touch handlers.\n const moveNative = useStableCallback((nativeEvent, currentTarget) => {\n handleMove({\n touches: nativeEvent.touches,\n currentTarget,\n nativeEvent,\n defaultPrevented: nativeEvent.defaultPrevented,\n timeStamp: nativeEvent.timeStamp\n });\n });\n const getDragStyles = React.useCallback(() => {\n // Read `isSwipingRef`, not the lagging `isSwiping` state, to match the imperative writer\n // `syncDragStyles`. Otherwise a render that commits before `setSwiping(true)` flushes strips the\n // transform it just wrote, flashing the popup to its resting position for a frame.\n const swiping = isSwipingRef.current;\n const dragOffset = dragOffsetRef.current;\n const initialTransform = initialTransformRef.current;\n const deltaX = dragOffset.x - initialTransform.x;\n const deltaY = dragOffset.y - initialTransform.y;\n if (!swiping && deltaX === 0 && deltaY === 0 && !dragDismissed) {\n return {\n [movementCssVars.x]: '0px',\n [movementCssVars.y]: '0px'\n };\n }\n return {\n transition: swiping ? 'none' : undefined,\n // While swiping, freeze the element at its current visual transform so it doesn't snap to the\n // end position.\n transform: swiping ? getDragTransform(dragOffset, initialTransform.scale) : undefined,\n [movementCssVars.x]: `${deltaX}px`,\n [movementCssVars.y]: `${deltaY}px`\n };\n }, [dragDismissed, movementCssVars]);\n const getPointerProps = React.useCallback(() => {\n if (!enabled) {\n return {};\n }\n return {\n onPointerDown: handleStart,\n onPointerMove: handleMove,\n onPointerUp: handleEnd,\n onPointerCancel: handleEnd\n };\n }, [enabled, handleEnd, handleMove, handleStart]);\n const getTouchProps = React.useCallback(() => {\n if (!enabled) {\n return {};\n }\n return {\n onTouchStart: handleStart,\n onTouchMove: handleMove,\n onTouchEnd: handleEnd,\n onTouchCancel: handleEnd\n };\n }, [enabled, handleEnd, handleMove, handleStart]);\n return {\n swiping: isSwiping,\n swipeDirection: currentSwipeDirection,\n dragDismissed,\n getPointerProps,\n getTouchProps,\n moveNative,\n getDragStyles,\n reset\n };\n}","'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { addEventListener } from '@base-ui/utils/addEventListener';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { inertValue } from '@base-ui/utils/inertValue';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { activeElement, contains, getTarget } from \"../../floating-ui-react/utils.mjs\";\nimport { ToastRootContext } from \"./ToastRootContext.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useToastProviderContext } from \"../provider/ToastProviderContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { BASE_UI_SWIPE_IGNORE_SELECTOR, LEGACY_SWIPE_IGNORE_SELECTOR } from \"../../internals/constants.mjs\";\nimport { getDisplacement, getElementTransform } from \"../../utils/useSwipeDismiss.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const toastRootStateAttributesMapping = {\n ...transitionStatusMapping,\n swipeDirection(value) {\n return value ? {\n 'data-swipe-direction': value\n } : null;\n }\n};\nconst SWIPE_THRESHOLD = 40;\nconst REVERSE_CANCEL_THRESHOLD = 10;\nconst OPPOSITE_DIRECTION_DAMPING_FACTOR = 0.5;\nconst MIN_DRAG_THRESHOLD = 1;\nconst TOAST_SWIPE_IGNORE_SELECTOR = `${BASE_UI_SWIPE_IGNORE_SELECTOR},${LEGACY_SWIPE_IGNORE_SELECTOR}`;\n\n/**\n * Groups all parts of an individual toast.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastRoot = /*#__PURE__*/React.forwardRef(function ToastRoot(componentProps, forwardedRef) {\n const {\n toast,\n render,\n className,\n swipeDirection = ['down', 'right'],\n style,\n ...elementProps\n } = componentProps;\n const isAnchored = toast.positionerProps?.anchor !== undefined;\n let swipeDirections = [];\n if (!isAnchored) {\n swipeDirections = Array.isArray(swipeDirection) ? swipeDirection : [swipeDirection];\n }\n const swipeEnabled = swipeDirections.length > 0;\n const store = useToastProviderContext();\n const [currentSwipeDirection, setCurrentSwipeDirection] = React.useState(undefined);\n const [isSwiping, setIsSwiping] = React.useState(false);\n const [isRealSwipe, setIsRealSwipe] = React.useState(false);\n const [dragOffset, setDragOffset] = React.useState({\n x: 0,\n y: 0\n });\n const [initialTransform, setInitialTransform] = React.useState({\n x: 0,\n y: 0,\n scale: 1\n });\n const [titleId, setTitleId] = React.useState();\n const [descriptionId, setDescriptionId] = React.useState();\n const [lockedDirection, setLockedDirection] = React.useState(null);\n const rootRef = React.useRef(null);\n const lastToastIdRef = React.useRef(undefined);\n const dragStartPosRef = React.useRef({\n x: 0,\n y: 0\n });\n const initialTransformRef = React.useRef({\n x: 0,\n y: 0,\n scale: 1\n });\n const intendedSwipeDirectionRef = React.useRef(undefined);\n const maxSwipeDisplacementRef = React.useRef(0);\n const cancelledSwipeRef = React.useRef(false);\n const swipeCancelBaselineRef = React.useRef({\n x: 0,\n y: 0\n });\n const isFirstPointerMoveRef = React.useRef(false);\n const dragOffsetRef = React.useRef({\n x: 0,\n y: 0\n });\n const activePointerIdRef = React.useRef(null);\n const dragAbortControllerRef = React.useRef(null);\n const domIndex = store.useState('toastIndex', toast.id);\n const visibleIndex = store.useState('toastVisibleIndex', toast.id);\n const offsetY = store.useState('toastOffsetY', toast.id);\n const focused = store.useState('focused');\n const expanded = store.useState('expanded');\n useOpenChangeComplete({\n open: toast.transitionStatus !== 'ending',\n ref: rootRef,\n onComplete() {\n if (toast.transitionStatus === 'ending') {\n store.removeToast(toast.id);\n }\n }\n });\n\n // Recalculates the natural height of the toast and updates it in the toast manager.\n // `flushSync` avoids visual flickers when called from observer callbacks.\n // The store ignores this write while the toast is transitioning out.\n const recalculateHeight = useStableCallback((flushSync = false) => {\n const element = rootRef.current;\n if (!element) {\n return;\n }\n const previousHeight = element.style.height;\n element.style.height = 'auto';\n const height = element.offsetHeight;\n element.style.height = previousHeight;\n function update() {\n store.updateToastInternal(toast.id, {\n ref: rootRef,\n height,\n transitionStatus: undefined\n });\n }\n if (flushSync) {\n ReactDOM.flushSync(update);\n } else {\n update();\n }\n });\n\n // Initialize the toast on mount, and reinitialize when it begins a new lifecycle:\n // re-adding an ending toast retains the same root instance (`key={toast.id}`), and\n // index-keyed lists can hand an existing instance a different toast.\n useIsoLayoutEffect(() => {\n const previousToastId = lastToastIdRef.current;\n // `recalculateHeight` clears the `starting` status itself, so bail out on the\n // resulting re-run and on the later `ending` one, which the store discards anyway.\n if (toast.transitionStatus !== 'starting' && previousToastId === toast.id) {\n return;\n }\n if (previousToastId !== undefined) {\n // A retained root keeps component-local swipe state from its previous lifecycle;\n // clear it so the toast doesn't stay offset or exit in the swiped direction.\n setCurrentSwipeDirection(undefined);\n setInitialTransform({\n x: 0,\n y: 0,\n scale: 1\n });\n setResolvedDragOffset({\n x: 0,\n y: 0\n });\n }\n lastToastIdRef.current = toast.id;\n recalculateHeight();\n }, [recalculateHeight, toast.id, toast.transitionStatus]);\n function setResolvedDragOffset(nextDragOffset) {\n dragOffsetRef.current = nextDragOffset;\n setDragOffset(nextDragOffset);\n }\n useIsoLayoutEffect(() => {\n return () => {\n dragAbortControllerRef.current?.abort();\n };\n }, []);\n function applyDirectionalDamping(deltaX, deltaY) {\n const damp = delta => delta > 0 ? delta ** OPPOSITE_DIRECTION_DAMPING_FACTOR : -(Math.abs(delta) ** OPPOSITE_DIRECTION_DAMPING_FACTOR);\n const dampX = deltaX > 0 && !swipeDirections.includes('right') || deltaX < 0 && !swipeDirections.includes('left');\n const dampY = deltaY > 0 && !swipeDirections.includes('down') || deltaY < 0 && !swipeDirections.includes('up');\n return {\n x: dampX ? damp(deltaX) : deltaX,\n y: dampY ? damp(deltaY) : deltaY\n };\n }\n const handleSwipeEnd = useStableCallback(event => {\n if (event.pointerId !== activePointerIdRef.current) {\n return;\n }\n activePointerIdRef.current = null;\n dragAbortControllerRef.current?.abort();\n dragAbortControllerRef.current = null;\n setIsSwiping(false);\n setIsRealSwipe(false);\n setLockedDirection(null);\n const resolvedInitialTransform = initialTransformRef.current;\n if (event.type === 'pointercancel' || cancelledSwipeRef.current) {\n setResolvedDragOffset({\n x: resolvedInitialTransform.x,\n y: resolvedInitialTransform.y\n });\n setCurrentSwipeDirection(undefined);\n return;\n }\n const resolvedDragOffset = dragOffsetRef.current;\n const deltaX = resolvedDragOffset.x - resolvedInitialTransform.x;\n const deltaY = resolvedDragOffset.y - resolvedInitialTransform.y;\n let dismissDirection;\n for (const direction of swipeDirections) {\n if (getDisplacement(direction, deltaX, deltaY) > SWIPE_THRESHOLD) {\n dismissDirection = direction;\n break;\n }\n }\n if (dismissDirection) {\n setCurrentSwipeDirection(dismissDirection);\n store.closeToast(toast.id);\n } else {\n setResolvedDragOffset({\n x: resolvedInitialTransform.x,\n y: resolvedInitialTransform.y\n });\n setCurrentSwipeDirection(undefined);\n }\n });\n function handlePointerDown(event) {\n if (event.button !== 0) {\n return;\n }\n if (event.pointerType === 'touch') {\n store.pauseTimers();\n }\n const target = getTarget(event.nativeEvent);\n const isInteractiveElement = target?.closest(`button,a,input,textarea,[role=\"button\"],${TOAST_SWIPE_IGNORE_SELECTOR}`);\n if (isInteractiveElement) {\n return;\n }\n cancelledSwipeRef.current = false;\n intendedSwipeDirectionRef.current = undefined;\n maxSwipeDisplacementRef.current = 0;\n activePointerIdRef.current = event.pointerId;\n dragStartPosRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n swipeCancelBaselineRef.current = dragStartPosRef.current;\n const element = event.currentTarget;\n const transform = getElementTransform(element);\n initialTransformRef.current = transform;\n setInitialTransform(transform);\n setResolvedDragOffset({\n x: transform.x,\n y: transform.y\n });\n store.set('hovering', true);\n setIsSwiping(true);\n setIsRealSwipe(false);\n setLockedDirection(null);\n isFirstPointerMoveRef.current = true;\n dragAbortControllerRef.current?.abort();\n const dragAbortController = new AbortController();\n dragAbortControllerRef.current = dragAbortController;\n const doc = ownerDocument(element);\n doc.addEventListener('pointerup', handleSwipeEnd, {\n signal: dragAbortController.signal\n });\n doc.addEventListener('pointercancel', handleSwipeEnd, {\n signal: dragAbortController.signal\n });\n element.setPointerCapture?.(event.pointerId);\n }\n function handlePointerMove(event) {\n if (event.pointerId !== activePointerIdRef.current) {\n return;\n }\n\n // Prevent text selection on Safari\n event.preventDefault();\n if (isFirstPointerMoveRef.current) {\n // Adjust the starting position to the current position on the first move\n // to account for the delay between pointerdown and the first pointermove on iOS.\n dragStartPosRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n isFirstPointerMoveRef.current = false;\n }\n const {\n clientY,\n clientX,\n movementX,\n movementY\n } = event;\n if (movementY < 0 && clientY > swipeCancelBaselineRef.current.y || movementY > 0 && clientY < swipeCancelBaselineRef.current.y) {\n swipeCancelBaselineRef.current = {\n x: swipeCancelBaselineRef.current.x,\n y: clientY\n };\n }\n if (movementX < 0 && clientX > swipeCancelBaselineRef.current.x || movementX > 0 && clientX < swipeCancelBaselineRef.current.x) {\n swipeCancelBaselineRef.current = {\n x: clientX,\n y: swipeCancelBaselineRef.current.y\n };\n }\n const deltaX = clientX - dragStartPosRef.current.x;\n const deltaY = clientY - dragStartPosRef.current.y;\n const cancelDeltaY = clientY - swipeCancelBaselineRef.current.y;\n const cancelDeltaX = clientX - swipeCancelBaselineRef.current.x;\n let resolvedLockedDirection = lockedDirection;\n if (!isRealSwipe) {\n const movementDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (movementDistance >= MIN_DRAG_THRESHOLD) {\n setIsRealSwipe(true);\n // `lockedDirection` is always reset alongside `isRealSwipe`, so it is\n // still `null` here. Locking is only meaningful when both axes are\n // swipeable; otherwise the single axis already constrains the gesture.\n const hasHorizontal = swipeDirections.includes('left') || swipeDirections.includes('right');\n const hasVertical = swipeDirections.includes('up') || swipeDirections.includes('down');\n if (hasHorizontal && hasVertical) {\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n resolvedLockedDirection = absX > absY ? 'horizontal' : 'vertical';\n setLockedDirection(resolvedLockedDirection);\n }\n }\n }\n let candidate;\n if (!intendedSwipeDirectionRef.current) {\n if (resolvedLockedDirection === 'vertical') {\n if (deltaY > 0) {\n candidate = 'down';\n } else if (deltaY < 0) {\n candidate = 'up';\n }\n } else if (resolvedLockedDirection === 'horizontal') {\n if (deltaX > 0) {\n candidate = 'right';\n } else if (deltaX < 0) {\n candidate = 'left';\n }\n } else if (Math.abs(deltaX) >= Math.abs(deltaY)) {\n candidate = deltaX > 0 ? 'right' : 'left';\n } else {\n candidate = deltaY > 0 ? 'down' : 'up';\n }\n if (candidate && swipeDirections.includes(candidate)) {\n intendedSwipeDirectionRef.current = candidate;\n maxSwipeDisplacementRef.current = getDisplacement(candidate, deltaX, deltaY);\n setCurrentSwipeDirection(candidate);\n }\n } else {\n const direction = intendedSwipeDirectionRef.current;\n const currentDisplacement = getDisplacement(direction, cancelDeltaX, cancelDeltaY);\n if (currentDisplacement > SWIPE_THRESHOLD) {\n cancelledSwipeRef.current = false;\n setCurrentSwipeDirection(direction);\n } else if (!(swipeDirections.includes('left') && swipeDirections.includes('right')) && !(swipeDirections.includes('up') && swipeDirections.includes('down')) && maxSwipeDisplacementRef.current - currentDisplacement >= REVERSE_CANCEL_THRESHOLD) {\n // Mark that a change-of-mind has occurred\n cancelledSwipeRef.current = true;\n }\n }\n const dampedDelta = applyDirectionalDamping(deltaX, deltaY);\n let newOffsetX = initialTransformRef.current.x;\n let newOffsetY = initialTransformRef.current.y;\n const hasHorizontalDir = swipeDirections.includes('left') || swipeDirections.includes('right');\n const hasVerticalDir = swipeDirections.includes('up') || swipeDirections.includes('down');\n if (resolvedLockedDirection !== 'vertical' && hasHorizontalDir) {\n newOffsetX += dampedDelta.x;\n }\n if (resolvedLockedDirection !== 'horizontal' && hasVerticalDir) {\n newOffsetY += dampedDelta.y;\n }\n setResolvedDragOffset({\n x: newOffsetX,\n y: newOffsetY\n });\n }\n function handleKeyDown(event) {\n if (event.key === 'Escape') {\n if (!rootRef.current || !contains(rootRef.current, activeElement(ownerDocument(rootRef.current)))) {\n return;\n }\n store.closeToast(toast.id);\n }\n }\n React.useEffect(() => {\n const element = rootRef.current;\n if (!swipeEnabled || !element) {\n return undefined;\n }\n function preventDefaultTouchStart(event) {\n if (activePointerIdRef.current === null || !contains(element, getTarget(event))) {\n return;\n }\n\n // React's pointermove preventDefault is not enough on iOS; this\n // non-passive touchmove listener blocks native scrolling while dragging.\n event.preventDefault();\n }\n return addEventListener(element, 'touchmove', preventDefaultTouchStart, {\n passive: false\n });\n }, [swipeEnabled]);\n function getDragStyles() {\n const deltaX = dragOffset.x - initialTransform.x;\n const deltaY = dragOffset.y - initialTransform.y;\n return {\n transition: isSwiping ? 'none' : undefined,\n // While swiping, freeze the element at its current visual transform so it doesn't snap to the\n // end position.\n transform: isSwiping ? `translateX(${dragOffset.x}px) translateY(${dragOffset.y}px) scale(${initialTransform.scale})` : undefined,\n ['--toast-swipe-movement-x']: `${deltaX}px`,\n ['--toast-swipe-movement-y']: `${deltaY}px`\n };\n }\n const isHighPriority = toast.priority === 'high';\n const defaultProps = {\n role: isHighPriority ? 'alertdialog' : 'dialog',\n tabIndex: 0,\n 'aria-modal': false,\n 'aria-labelledby': titleId,\n 'aria-describedby': descriptionId,\n 'aria-hidden': isHighPriority && !focused ? true : undefined,\n onPointerDown: swipeEnabled ? handlePointerDown : undefined,\n onPointerMove: swipeEnabled ? handlePointerMove : undefined,\n onPointerUp: swipeEnabled ? handleSwipeEnd : undefined,\n onPointerCancel: swipeEnabled ? handleSwipeEnd : undefined,\n onKeyDown: handleKeyDown,\n inert: inertValue(toast.limited),\n style: {\n ...getDragStyles(),\n ['--toast-index']: toast.transitionStatus === 'ending' ? domIndex : visibleIndex,\n ['--toast-offset-y']: `${offsetY}px`,\n ['--toast-height']: toast.height ? `${toast.height}px` : undefined\n }\n };\n const toastRoot = React.useMemo(() => ({\n toast,\n setTitleId,\n setDescriptionId,\n recalculateHeight,\n visibleIndex,\n expanded\n }), [toast, setTitleId, setDescriptionId, recalculateHeight, visibleIndex, expanded]);\n const state = {\n transitionStatus: toast.transitionStatus,\n expanded,\n limited: toast.limited || false,\n type: toast.type,\n swiping: isSwiping,\n swipeDirection: currentSwipeDirection\n };\n const element = useRenderElement('div', componentProps, {\n ref: [forwardedRef, rootRef],\n state,\n stateAttributesMapping: toastRootStateAttributesMapping,\n props: [defaultProps, elementProps]\n });\n return /*#__PURE__*/_jsx(ToastRootContext.Provider, {\n value: toastRoot,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastRoot.displayName = \"ToastRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useToastRootContext } from \"../root/ToastRootContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\n\n/**\n * A container for the contents of a toast.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastContent = /*#__PURE__*/React.forwardRef(function ToastContent(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n ...elementProps\n } = componentProps;\n const {\n visibleIndex,\n expanded,\n recalculateHeight\n } = useToastRootContext();\n const contentRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n recalculateHeight();\n const node = contentRef.current;\n if (!node || typeof ResizeObserver !== 'function' || typeof MutationObserver !== 'function') {\n return undefined;\n }\n const resizeObserver = new ResizeObserver(() => recalculateHeight(true));\n const mutationObserver = new MutationObserver(() => recalculateHeight(true));\n resizeObserver.observe(node);\n mutationObserver.observe(node, {\n childList: true,\n subtree: true,\n characterData: true\n });\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [recalculateHeight]);\n const behind = visibleIndex > 0;\n const state = {\n expanded,\n behind\n };\n return useRenderElement('div', componentProps, {\n ref: [forwardedRef, contentRef],\n state,\n props: elementProps\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastContent.displayName = \"ToastContent\";","'use client';\n\nimport * as React from 'react';\nimport { SafeReact } from \"./safeReact.mjs\";\nlet globalId = 0;\n\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride, prefix = 'mui') {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`${prefix}-${globalId}`);\n }\n }, [defaultId, prefix]);\n return id;\n}\nconst maybeReactUseId = SafeReact.useId;\n\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport function useId(idOverride, prefix) {\n // React.useId() is only available from React 17.0.0.\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);\n }\n\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride, prefix);\n}","import * as React from 'react';\nexport function isRenderableNode(node) {\n if (node == null || typeof node === 'boolean' || node === '') {\n return false;\n }\n if (Array.isArray(node)) {\n return node.some(isRenderableNode);\n }\n return true;\n}\nexport function hasRenderableChildren(element) {\n return /*#__PURE__*/React.isValidElement(element) && isRenderableNode(element.props.children);\n}","'use client';\n\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useToastRootContext } from \"../root/ToastRootContext.mjs\";\nimport { hasRenderableChildren } from \"./isRenderableNode.mjs\";\n\n/**\n * Shared logic for `Toast.Title` and `Toast.Description`, which only differ by the rendered tag,\n * the fallback content, and which id setter they register with. Resolves the content and returns\n * the pieces each part passes to `useRenderElement` and `useToastLabelElement`.\n */\nexport function useToastLabelPart(idProp, childrenProp, part) {\n const {\n toast,\n setTitleId,\n setDescriptionId\n } = useToastRootContext();\n const setId = part === 'title' ? setTitleId : setDescriptionId;\n const children = childrenProp ?? (part === 'title' ? toast.title : toast.description);\n const id = useId(idProp);\n return {\n id,\n children,\n type: toast.type,\n setId\n };\n}\n\n/**\n * Mounts the evaluated label element only when it carries renderable content (so a `render` prop's\n * own children count, while a childless styling-only `render` stays conditional), registering the\n * generated id with the root while the part renders.\n */\nexport function useToastLabelElement(element, id, setId) {\n const shouldRender = hasRenderableChildren(element);\n useIsoLayoutEffect(() => {\n if (!shouldRender) {\n return undefined;\n }\n setId(id);\n return () => {\n setId(currentId => currentId === id ? undefined : currentId);\n };\n }, [shouldRender, id, setId]);\n return shouldRender ? element : null;\n}","'use client';\n\nimport * as React from 'react';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useToastLabelElement, useToastLabelPart } from \"../utils/useToastLabelPart.mjs\";\n\n/**\n * A description that describes the toast.\n * Can be used as the default message for the toast when no title is provided.\n * Renders a `<p>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastDescription = /*#__PURE__*/React.forwardRef(function ToastDescription(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n id: idProp,\n children: childrenProp,\n ...elementProps\n } = componentProps;\n const {\n id,\n children,\n type,\n setId\n } = useToastLabelPart(idProp, childrenProp, 'description');\n const state = {\n type\n };\n const element = useRenderElement('p', componentProps, {\n ref: forwardedRef,\n state,\n props: {\n ...elementProps,\n id,\n children\n }\n });\n return useToastLabelElement(element, id, setId);\n});\nif (process.env.NODE_ENV !== \"production\") ToastDescription.displayName = \"ToastDescription\";","'use client';\n\nimport * as React from 'react';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useToastLabelElement, useToastLabelPart } from \"../utils/useToastLabelPart.mjs\";\n\n/**\n * A title that labels the toast.\n * Renders an `<h2>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastTitle = /*#__PURE__*/React.forwardRef(function ToastTitle(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n id: idProp,\n children: childrenProp,\n ...elementProps\n } = componentProps;\n const {\n id,\n children,\n type,\n setId\n } = useToastLabelPart(idProp, childrenProp, 'title');\n const state = {\n type\n };\n const element = useRenderElement('h2', componentProps, {\n ref: forwardedRef,\n state,\n props: {\n ...elementProps,\n id,\n children\n }\n });\n return useToastLabelElement(element, id, setId);\n});\nif (process.env.NODE_ENV !== \"production\") ToastTitle.displayName = \"ToastTitle\";","'use client';\n\nimport * as React from 'react';\nimport { useToastRootContext } from \"../root/ToastRootContext.mjs\";\nimport { useToastProviderContext } from \"../provider/ToastProviderContext.mjs\";\nimport { useButton } from \"../../internals/use-button/useButton.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\n\n/**\n * Closes the toast when clicked.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastClose = /*#__PURE__*/React.forwardRef(function ToastClose(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n disabled,\n nativeButton = true,\n ...elementProps\n } = componentProps;\n const store = useToastProviderContext();\n const {\n toast,\n expanded\n } = useToastRootContext();\n const [hasFocus, setHasFocus] = React.useState(false);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const state = {\n type: toast.type\n };\n return useRenderElement('button', componentProps, {\n ref: [forwardedRef, buttonRef],\n state,\n props: [{\n 'aria-hidden': !expanded && !hasFocus,\n onClick() {\n store.closeToast(toast.id);\n },\n onFocus() {\n setHasFocus(true);\n },\n onBlur() {\n setHasFocus(false);\n }\n }, elementProps, getButtonProps]\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastClose.displayName = \"ToastClose\";","'use client';\n\nimport * as React from 'react';\nimport { useToastRootContext } from \"../root/ToastRootContext.mjs\";\nimport { useButton } from \"../../internals/use-button/useButton.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { hasRenderableChildren } from \"../utils/isRenderableNode.mjs\";\n\n/**\n * Performs an action when clicked.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastAction = /*#__PURE__*/React.forwardRef(function ToastAction(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n disabled,\n nativeButton = true,\n ...elementProps\n } = componentProps;\n const {\n toast\n } = useToastRootContext();\n const computedChildren = toast.actionProps?.children ?? elementProps.children;\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const state = {\n type: toast.type\n };\n const element = useRenderElement('button', componentProps, {\n ref: [forwardedRef, buttonRef],\n state,\n props: [elementProps, toast.actionProps, getButtonProps, {\n children: computedChildren\n }]\n });\n return hasRenderableChildren(element) ? element : null;\n});\nif (process.env.NODE_ENV !== \"production\") ToastAction.displayName = \"ToastAction\";","export const none = 'none';\nexport const triggerPress = 'trigger-press';\nexport const triggerHover = 'trigger-hover';\nexport const triggerFocus = 'trigger-focus';\nexport const outsidePress = 'outside-press';\nexport const itemPress = 'item-press';\nexport const closePress = 'close-press';\nexport const linkPress = 'link-press';\nexport const clearPress = 'clear-press';\nexport const chipRemovePress = 'chip-remove-press';\nexport const trackPress = 'track-press';\nexport const incrementPress = 'increment-press';\nexport const decrementPress = 'decrement-press';\nexport const inputChange = 'input-change';\nexport const inputClear = 'input-clear';\nexport const inputBlur = 'input-blur';\nexport const inputPaste = 'input-paste';\nexport const inputPress = 'input-press';\nexport const focusOut = 'focus-out';\nexport const escapeKey = 'escape-key';\nexport const closeWatcher = 'close-watcher';\nexport const listNavigation = 'list-navigation';\nexport const keyboard = 'keyboard';\nexport const pointer = 'pointer';\nexport const drag = 'drag';\nexport const wheel = 'wheel';\nexport const scrub = 'scrub';\nexport const cancelOpen = 'cancel-open';\nexport const siblingOpen = 'sibling-open';\nexport const disabled = 'disabled';\nexport const missing = 'missing';\nexport const initial = 'initial';\nexport const imperativeAction = 'imperative-action';\nexport const swipe = 'swipe';\nexport const windowResize = 'window-resize';","import { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { REASONS } from \"./reasons.mjs\";\n\n/**\n * Maps a change `reason` string to the corresponding native event type.\n */\n\n/**\n * Details of custom change events emitted by Base UI components.\n */\n\n/**\n * Details of custom generic events emitted by Base UI components.\n */\n\n/**\n * Creates a Base UI event details object with the given reason and utilities\n * for preventing Base UI's internal event handling.\n */\nexport function createChangeEventDetails(reason, event, trigger, customProperties) {\n let canceled = false;\n let allowPropagation = false;\n const custom = customProperties ?? EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n cancel() {\n canceled = true;\n },\n allowPropagation() {\n allowPropagation = true;\n },\n get isCanceled() {\n return canceled;\n },\n get isPropagationAllowed() {\n return allowPropagation;\n },\n trigger,\n ...custom\n };\n return details;\n}\nexport function createGenericEventDetails(reason, event, customProperties) {\n const custom = customProperties ?? EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n ...custom\n };\n return details;\n}","export function createAttribute(name) {\n return `data-base-ui-${name}`;\n}","'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { isNode } from '@floating-ui/utils/dom';\nimport { addEventListener } from '@base-ui/utils/addEventListener';\nimport { mergeCleanups } from '@base-ui/utils/mergeCleanups';\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { FocusGuard } from \"../../utils/FocusGuard.mjs\";\nimport { enableFocusInside, disableFocusInside, getPreviousTabbable, getNextTabbable, isOutsideEvent } from \"../utils/tabbable.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { createAttribute } from \"../utils/createAttribute.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { ownerVisuallyHidden } from \"../../internals/constants.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") PortalContext.displayName = \"PortalContext\";\nexport const usePortalContext = () => React.useContext(PortalContext);\nconst attr = createAttribute('portal');\nexport function useFloatingPortalNode(props = {}) {\n const {\n ref,\n container: containerProp,\n componentProps = EMPTY_OBJECT,\n elementProps\n } = props;\n const uniqueId = useId();\n const portalContext = usePortalContext();\n const parentPortalNode = portalContext?.portalNode;\n const [containerElement, setContainerElement] = React.useState(null);\n const [portalNode, setPortalNode] = React.useState(null);\n const setPortalNodeRef = useStableCallback(node => {\n if (node !== null) {\n // the useIsoLayoutEffect below watching containerProp / parentPortalNode\n // sets setPortalNode(null) when the container becomes null or changes.\n // So even though the ref callback now ignores null, the portal node still gets cleared.\n setPortalNode(node);\n }\n });\n const containerRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n // Wait for the container to be resolved if explicitly `null`.\n if (containerProp === null) {\n if (containerRef.current) {\n containerRef.current = null;\n setPortalNode(null);\n setContainerElement(null);\n }\n return;\n }\n const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;\n if (resolvedContainer == null) {\n if (containerRef.current) {\n containerRef.current = null;\n setPortalNode(null);\n setContainerElement(null);\n }\n return;\n }\n if (containerRef.current !== resolvedContainer) {\n containerRef.current = resolvedContainer;\n setPortalNode(null);\n setContainerElement(resolvedContainer);\n }\n }, [containerProp, parentPortalNode]);\n const portalElement = useRenderElement('div', componentProps, {\n ref: [ref, setPortalNodeRef],\n props: [{\n id: uniqueId,\n [attr]: ''\n }, elementProps]\n });\n\n // This `createPortal` call injects `portalElement` into the `container`.\n // Another call inside `FloatingPortal`/`FloatingPortalLite` then injects the children into `portalElement`.\n const portalSubtree = containerElement && portalElement ? /*#__PURE__*/ReactDOM.createPortal(portalElement, containerElement) : null;\n return {\n node: portalNode,\n // `id` and `render` props can override or remove the generated ID. Use the exact\n // rendered value so `aria-owns` never points at an ID absent from the DOM.\n nodeId: /*#__PURE__*/React.isValidElement(portalElement) ? portalElement.props.id : undefined,\n subtree: portalSubtree\n };\n}\n\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n * @internal\n */\nexport const FloatingPortal = /*#__PURE__*/React.forwardRef(function FloatingPortal(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n children,\n container,\n ...elementProps\n } = componentProps;\n const {\n node: portalNode,\n nodeId: portalNodeId,\n subtree: portalSubtree\n } = useFloatingPortalNode({\n container,\n ref: forwardedRef,\n componentProps,\n elementProps\n });\n const beforeOutsideRef = React.useRef(null);\n const afterOutsideRef = React.useRef(null);\n const beforeInsideRef = React.useRef(null);\n const afterInsideRef = React.useRef(null);\n const [focusManagerState, setFocusManagerState] = React.useState(null);\n const focusInsideDisabledRef = React.useRef(false);\n const modal = focusManagerState?.modal;\n const open = focusManagerState?.open;\n const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;\n\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n React.useEffect(() => {\n if (!portalNode || modal) {\n return undefined;\n }\n\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && event.relatedTarget && isOutsideEvent(event)) {\n if (event.type === 'focusin') {\n if (focusInsideDisabledRef.current) {\n enableFocusInside(portalNode);\n focusInsideDisabledRef.current = false;\n }\n } else {\n disableFocusInside(portalNode);\n focusInsideDisabledRef.current = true;\n }\n }\n }\n\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n return mergeCleanups(addEventListener(portalNode, 'focusin', onFocus, true), addEventListener(portalNode, 'focusout', onFocus, true));\n }, [portalNode, modal]);\n useIsoLayoutEffect(() => {\n if (!portalNode || open !== true || !focusInsideDisabledRef.current) {\n return;\n }\n\n // Restore tabbability before the focus manager's queued focus-on-open step runs.\n enableFocusInside(portalNode);\n focusInsideDisabledRef.current = false;\n }, [open, portalNode]);\n const portalContextValue = React.useMemo(() => ({\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n }), [portalNode]);\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [portalSubtree, /*#__PURE__*/_jsxs(PortalContext.Provider, {\n value: portalContextValue,\n children: [shouldRenderGuards && portalNode && /*#__PURE__*/_jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n beforeInsideRef.current?.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const prevTabbable = getPreviousTabbable(domReference);\n prevTabbable?.focus();\n }\n }\n }), shouldRenderGuards && portalNode && /*#__PURE__*/_jsx(\"span\", {\n \"aria-owns\": portalNodeId,\n style: ownerVisuallyHidden\n }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/_jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n afterInsideRef.current?.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const nextTabbable = getNextTabbable(domReference);\n nextTabbable?.focus();\n if (focusManagerState?.closeOnFocusOut) {\n focusManagerState?.onOpenChange(false, createChangeEventDetails(REASONS.focusOut, event.nativeEvent));\n }\n }\n }\n })]\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") FloatingPortal.displayName = \"FloatingPortal\";","'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useFloatingPortalNode } from \"../floating-ui-react/components/FloatingPortal.mjs\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `FloatingPortal` includes tabbable logic handling for focus management.\n * For components that don't need tabbable logic, use `FloatingPortalLite`.\n * @internal\n */\nexport const FloatingPortalLite = /*#__PURE__*/React.forwardRef(function FloatingPortalLite(componentProps, forwardedRef) {\n const {\n children,\n container,\n className,\n render,\n style,\n ...elementProps\n } = componentProps;\n const {\n node: portalNode,\n subtree: portalSubtree\n } = useFloatingPortalNode({\n container,\n ref: forwardedRef,\n componentProps,\n elementProps\n });\n if (!portalSubtree && !portalNode) {\n return null;\n }\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [portalSubtree, portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode)]\n });\n});\nif (process.env.NODE_ENV !== \"production\") FloatingPortalLite.displayName = \"FloatingPortalLite\";","'use client';\n\nimport * as React from 'react';\nimport { FloatingPortalLite } from \"../../utils/FloatingPortalLite.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * A portal element that moves the viewport to a different part of the DOM.\n * By default, the portal element is appended to `<body>`.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastPortal = /*#__PURE__*/React.forwardRef(function ToastPortal(props, forwardedRef) {\n return /*#__PURE__*/_jsx(FloatingPortalLite, {\n ref: forwardedRef,\n ...props\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastPortal.displayName = \"ToastPortal\";","'use client';\n\nimport { useIsoLayoutEffect } from \"./useIsoLayoutEffect.mjs\";\nimport { useRefWithInit } from \"./useRefWithInit.mjs\";\n\n/**\n * Untracks the provided value by turning it into a ref to remove its reactivity.\n *\n * Used to access the passed value inside `React.useEffect` without causing the effect to re-run when the value changes.\n */\nexport function useValueAsRef(value) {\n const latest = useRefWithInit(createLatestRef, value).current;\n latest.next = value;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useIsoLayoutEffect(latest.effect);\n return latest;\n}\nfunction createLatestRef(value) {\n const latest = {\n current: value,\n next: value,\n effect: () => {\n latest.current = latest.next;\n }\n };\n return latest;\n}","export function createEventEmitter() {\n const map = new Map();\n return {\n emit(event, data) {\n map.get(event)?.forEach(listener => listener(data));\n },\n on(event, listener) {\n if (!map.has(event)) {\n map.set(event, new Set());\n }\n map.get(event).add(listener);\n },\n off(event, listener) {\n map.get(event)?.delete(listener);\n }\n };\n}","'use client';\n\nimport * as React from 'react';\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { FloatingTreeStore } from \"./FloatingTreeStore.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") FloatingNodeContext.displayName = \"FloatingNodeContext\";\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nif (process.env.NODE_ENV !== \"production\") FloatingTreeContext.displayName = \"FloatingTreeContext\";\nexport const useFloatingParentNodeId = () => React.useContext(FloatingNodeContext)?.id || null;\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nexport const useFloatingTree = externalTree => {\n const contextTree = React.useContext(FloatingTreeContext);\n return externalTree ?? contextTree;\n};\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nexport function useFloatingNodeId(externalTree) {\n const id = useId();\n const tree = useFloatingTree(externalTree);\n const parentId = useFloatingParentNodeId();\n useIsoLayoutEffect(() => {\n if (!id) {\n return undefined;\n }\n const node = {\n id,\n parentId\n };\n tree?.addNode(node);\n return () => {\n tree?.removeNode(node);\n };\n }, [tree, id, parentId]);\n return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n * @internal\n */\nexport function FloatingNode(props) {\n const {\n children,\n id\n } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/_jsx(FloatingNodeContext.Provider, {\n value: React.useMemo(() => ({\n id,\n parentId\n }), [id, parentId]),\n children: children\n });\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n * @internal\n */\nexport function FloatingTree(props) {\n const {\n children,\n externalTree\n } = props;\n const tree = useRefWithInit(() => externalTree ?? new FloatingTreeStore()).current;\n return /*#__PURE__*/_jsx(FloatingTreeContext.Provider, {\n value: tree,\n children: children\n });\n}","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n const alignment = getAlignment(placement);\n if (alignment) {\n coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) && (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(minPadding, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n\n // No rects (e.g. a hidden or detached reference, or a collapsed range) —\n // keep the existing reference rect rather than resetting to an invalid\n // one with non-finite values.\n if (!nativeClientRects.length) {\n return {};\n }\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && (clientRects[0].left > clientRects[1].right || clientRects[1].left > clientRects[0].right) && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n return rectToClientRect({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top\n });\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n return rectToClientRect({\n x: minLeft,\n y: top,\n width: maxRight - minLeft,\n height: bottom - top\n });\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);\n if (checkMainAxis) {\n mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);\n }\n if (checkCrossAxis) {\n crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n var _rawOffset$mainAxis, _rawOffset$crossAxis;\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,\n crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n// Method syntax keeps callback parameters bivariant, but expressing the\n// explicit `| undefined` required by `exactOptionalPropertyTypes` needs\n// property syntax, which is contravariant under `strictFunctionTypes`.\n// Extracting the function from a method position restores that bivariance so\n// consumers can still assign callbacks with narrower parameter types.\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const shiftData = state.middlewareData.shift;\n const noShift = !shiftData;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (shiftData != null && shiftData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if (shiftData != null && shiftData.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n if (isYAxis) {\n availableWidth = width - 2 * max(overflow.left, overflow.right);\n } else {\n availableHeight = height - 2 * max(overflow.top, overflow.bottom);\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement && offsetParent) {\n const win = getWindow(domElement);\n const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return element.getClientRects ? Array.from(element.getClientRects()) : [];\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(html) {\n const scroll = getNodeScroll(html);\n const body = html.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(html);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy, rootBoundary) {\n if (rootBoundary === void 0) {\n rootBoundary = 'viewport';\n }\n const isLayoutViewport = rootBoundary === 'layoutViewport';\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n // Client coordinates are relative to the layout viewport, except in\n // WebKit with an `absolute` strategy, where they are relative to the\n // visual viewport.\n const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';\n if (isLayoutViewport) {\n if (!layoutRelativeClientCoords) {\n x = -visualViewport.offsetLeft;\n y = -visualViewport.offsetTop;\n }\n } else {\n width = visualViewport.width;\n height = visualViewport.height;\n if (layoutRelativeClientCoords) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks\n // the visual width but isn't reflected in `html.clientWidth`, so subtract it.\n // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also\n // reserves an empty inline-start gutter that clips nothing, so exclude just\n // the one scrollbar-side gutter — halve the measured (two-gutter) total. A\n // left-side scrollbar (`windowScrollbarX > 0`) is already handled by\n // `getHTMLOffset`/`visualViewport.width`; skip it here.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;\n if (gutter <= SCROLLBAR_MAX) {\n width -= gutter;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = getScale(element);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport' || clippingAncestor === 'layoutViewport') {\n rect = getViewportRect(element, strategy, clippingAncestor);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let lastKeptComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n // Position of the containing block chain below the current node. A fixed\n // element whose containing block hasn't been found yet is a fixed chain.\n const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';\n\n // A non-containing ancestor does not clip the element when the chain\n // below it escapes it: a fixed chain escapes all ancestors up to the\n // next containing block, an absolute chain escapes static ancestors.\n const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // The kept node carries the chain position for the next iteration.\n lastKeptComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n if (!isOffsetParentAnElement && documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove, ancestorResize) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n\n // The entry is a snapshot, so the reference may have moved since the\n // intersection was computed (under performance constraints, or between\n // consecutive frames of a multi-frame layout shift). The reported ratio\n // and the observed area are stale in that case and cannot be trusted to\n // detect subsequent movement, so refresh regardless of the ratio.\n if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n return refresh();\n }\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped in place, the ratio is 0. Throttle\n // the refresh to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n const win = getWindow(element);\n // The window is a resize ancestor, so when `ancestorResize` is enabled its\n // listener already runs the update on resize. Here we only need to rebuild\n // the `IntersectionObserver` for the new root size, skipping a redundant\n // update. When `ancestorResize` is disabled, this becomes the sole update.\n const handleResize = () => refresh(ancestorResize);\n win.addEventListener('resize', handleResize);\n refresh(true);\n return () => {\n win.removeEventListener('resize', handleResize);\n cleanup();\n };\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update);\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = options != null ? options : {};\n const platformWithCache = {\n ...platform,\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n const result = offset$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n const result = shift$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n const result = limitShift$1(options);\n return {\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n const result = flip$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n const result = size$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n const result = autoPlacement$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n const result = hide$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n const result = inline$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n const result = arrow$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import { ReactStore } from '@base-ui/utils/store';\nimport { createEventEmitter } from \"../utils/createEventEmitter.mjs\";\nimport { isClickLikeEvent } from \"../utils.mjs\";\nconst selectors = {\n open: state => state.open,\n transitionStatus: state => state.transitionStatus,\n domReferenceElement: state => state.domReferenceElement,\n referenceElement: state => state.positionReference ?? state.referenceElement,\n floatingElement: state => state.floatingElement,\n floatingId: state => state.floatingId\n};\nexport class FloatingRootStore extends ReactStore {\n constructor(options) {\n const {\n syncOnly,\n nested,\n onOpenChange,\n triggerElements,\n ...initialState\n } = options;\n super({\n ...initialState,\n positionReference: initialState.referenceElement,\n domReferenceElement: initialState.referenceElement\n }, {\n onOpenChange,\n dataRef: {\n current: {}\n },\n events: createEventEmitter(),\n nested,\n triggerElements\n }, selectors);\n this.syncOnly = syncOnly;\n }\n\n /**\n * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.\n */\n syncOpenEvent = (newOpen, event) => {\n if (!newOpen || !this.state.open ||\n // Prevent a pending hover-open from overwriting a click-open event, while allowing\n // click events to upgrade a hover-open.\n event != null && isClickLikeEvent(event)) {\n this.context.dataRef.current.openEvent = newOpen ? event : undefined;\n }\n };\n\n /**\n * Runs the root-owned side effects for an open state change.\n */\n dispatchOpenChange = (newOpen, eventDetails) => {\n this.syncOpenEvent(newOpen, eventDetails.event);\n const details = {\n open: newOpen,\n reason: eventDetails.reason,\n nativeEvent: eventDetails.event,\n nested: this.context.nested,\n triggerElement: eventDetails.trigger\n };\n this.context.events.emit('openchange', details);\n };\n\n /**\n * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.\n *\n * @param newOpen The new open state.\n * @param eventDetails Details about the event that triggered the open state change.\n */\n setOpen = (newOpen, eventDetails) => {\n if (this.syncOnly) {\n this.context.onOpenChange?.(newOpen, eventDetails);\n return;\n }\n this.dispatchOpenChange(newOpen, eventDetails);\n this.context.onOpenChange?.(newOpen, eventDetails);\n };\n}","/**\n * Development-only reverse index of element to registered id, keyed by the owning map.\n *\n * Registration would otherwise have to scan every entry to detect an element claimed by two ids,\n * making the mount of many triggers sharing one handle quadratic. Kept module-scoped, lazily\n * initialized, and read only from `process.env.NODE_ENV` guards so production builds drop it along\n * with the checks.\n */\nlet devElementIdsByMap;\nfunction getDevElementIds(map) {\n devElementIdsByMap ??= new WeakMap();\n let elementIds = devElementIdsByMap.get(map);\n if (!elementIds) {\n elementIds = new WeakMap();\n devElementIdsByMap.set(map, elementIds);\n }\n return elementIds;\n}\n\n/**\n * Data structure to keep track of popup trigger elements by their IDs.\n *\n * Element lookups iterate the id map rather than maintaining a parallel Set. Registration is O(1),\n * while `hasElement` and `hasMatchingElement` are linear in the number of triggers.\n */\nexport class PopupTriggerMap {\n constructor() {\n this.idMap = new Map();\n }\n\n /**\n * Adds a trigger element with the given ID.\n *\n * Note: The provided element is assumed to not be registered under multiple IDs.\n */\n add(id, element) {\n if (process.env.NODE_ENV !== 'production') {\n const elementIds = getDevElementIds(this);\n const existingId = elementIds.get(element);\n if (existingId !== undefined && existingId !== id) {\n // TODO: fix mui/no-guarded-throw\n // eslint-disable-next-line mui/no-guarded-throw\n throw new Error('Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.');\n }\n\n // Reusing an id for a different element evicts the previous one, so it must lose its claim\n // on the id or a later registration under a different id would be reported as a duplicate.\n const previousElement = this.idMap.get(id);\n if (previousElement !== undefined && previousElement !== element) {\n elementIds.delete(previousElement);\n }\n elementIds.set(element, id);\n }\n this.idMap.set(id, element);\n }\n\n /**\n * Removes the trigger element with the given ID.\n */\n delete(id) {\n if (process.env.NODE_ENV !== 'production') {\n const element = this.idMap.get(id);\n if (element !== undefined) {\n devElementIdsByMap?.get(this)?.delete(element);\n }\n }\n this.idMap.delete(id);\n }\n\n /**\n * Whether the given element is registered as a trigger.\n */\n hasElement(element) {\n for (const registered of this.idMap.values()) {\n if (registered === element) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Whether there is a registered trigger element matching the given predicate.\n */\n hasMatchingElement(predicate) {\n for (const element of this.idMap.values()) {\n if (predicate(element)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the trigger element associated with the given ID, or undefined if no such element exists.\n */\n getById(id) {\n return this.idMap.get(id);\n }\n\n /**\n * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].\n */\n entries() {\n return this.idMap.entries();\n }\n\n /**\n * Returns an iterable of all registered trigger elements.\n */\n elements() {\n return this.idMap.values();\n }\n\n /**\n * Returns the number of registered trigger elements.\n */\n get size() {\n return this.idMap.size;\n }\n}","'use client';\n\nimport { isElement } from '@floating-ui/utils/dom';\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { PopupTriggerMap } from \"../../utils/popups/index.mjs\";\nimport { useFloatingParentNodeId } from \"../components/FloatingTree.mjs\";\nimport { FloatingRootStore } from \"../components/FloatingRootStore.mjs\";\nexport function useFloatingRootContext(options) {\n const {\n open = false,\n onOpenChange,\n elements = {}\n } = options;\n const floatingId = useId();\n const nested = useFloatingParentNodeId() != null;\n if (process.env.NODE_ENV !== 'production') {\n const optionDomReference = elements.reference;\n if (optionDomReference && !isElement(optionDomReference)) {\n console.error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `context.setPositionReference()`', 'instead.');\n }\n }\n const store = useRefWithInit(() => new FloatingRootStore({\n open,\n transitionStatus: undefined,\n onOpenChange,\n referenceElement: elements.reference ?? null,\n floatingElement: elements.floating ?? null,\n triggerElements: new PopupTriggerMap(),\n floatingId,\n syncOnly: false,\n nested\n })).current;\n useIsoLayoutEffect(() => {\n const valuesToSync = {\n open,\n floatingId\n };\n\n // Only sync elements that are defined to avoid overwriting existing ones\n if (elements.reference !== undefined) {\n valuesToSync.referenceElement = elements.reference;\n valuesToSync.domReferenceElement = isElement(elements.reference) ? elements.reference : null;\n }\n if (elements.floating !== undefined) {\n valuesToSync.floatingElement = elements.floating;\n }\n store.update(valuesToSync);\n }, [open, floatingId, elements.reference, elements.floating, store]);\n store.context.onOpenChange = onOpenChange;\n store.context.nested = nested;\n return store;\n}","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useFloating as usePosition } from '@floating-ui/react-dom';\nimport { isElement } from '@floating-ui/utils/dom';\nimport { useFloatingTree } from \"../components/FloatingTree.mjs\";\nimport { useFloatingRootContext } from \"./useFloatingRootContext.mjs\";\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nexport function useFloating(options = {}) {\n const internalStore = useFloatingRootContext(options);\n const store = options.rootContext || internalStore;\n return useFloatingWithStore(options, store);\n}\n\n/**\n * Base UI's private `useFloating` path. The caller must supply the root store, so this skips the\n * internal root-context hook used by the public Floating UI-compatible API.\n */\nexport function useBaseUIFloating(options) {\n return useFloatingWithStore(options, options.rootContext);\n}\nfunction useFloatingWithStore(options, store) {\n const {\n nodeId,\n externalTree\n } = options;\n const referenceElement = store.useState('referenceElement');\n const floatingElement = store.useState('floatingElement');\n const domReferenceElement = store.useState('domReferenceElement');\n const open = store.useState('open');\n const floatingId = store.useState('floatingId');\n const [positionReference, setPositionReferenceRaw] = React.useState(null);\n const [localDomReference, setLocalDomReference] = React.useState(undefined);\n const [localFloatingElement, setLocalFloatingElement] = React.useState(undefined);\n const domReferenceRef = React.useRef(null);\n const tree = useFloatingTree(externalTree);\n const storeElements = React.useMemo(() => ({\n reference: referenceElement,\n floating: floatingElement,\n domReference: domReferenceElement\n }), [referenceElement, floatingElement, domReferenceElement]);\n const position = usePosition({\n ...options,\n elements: {\n ...storeElements,\n ...(positionReference && {\n reference: positionReference\n })\n }\n });\n const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;\n const syncedFloatingElement = localFloatingElement === undefined ? store.state.floatingElement : localFloatingElement;\n store.useSyncedValue('referenceElement', localDomReference ?? null);\n store.useSyncedValue('domReferenceElement', localDomReference === undefined ? domReferenceElement : localDomReferenceElement);\n store.useSyncedValue('floatingElement', syncedFloatingElement);\n const setPositionReference = React.useCallback(node => {\n const computedPositionReference = isElement(node) ? {\n getBoundingClientRect: () => node.getBoundingClientRect(),\n getClientRects: () => node.getClientRects(),\n contextElement: node\n } : node;\n // Store the positionReference in state if the DOM reference is specified externally via the\n // `elements.reference` option. This ensures that it won't be overridden on future renders.\n setPositionReferenceRaw(computedPositionReference);\n position.refs.setReference(computedPositionReference);\n }, [position.refs]);\n const setReference = React.useCallback(node => {\n if (isElement(node) || node === null) {\n domReferenceRef.current = node;\n setLocalDomReference(node);\n }\n\n // Backwards-compatibility for passing a virtual element to `reference`\n // after it has set the DOM reference.\n if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n // Don't allow setting virtual elements using the old technique back to\n // `null` to support `positionReference` + an unstable `reference`\n // callback ref.\n node !== null && !isElement(node)) {\n position.refs.setReference(node);\n }\n }, [position.refs, setLocalDomReference]);\n const setFloating = React.useCallback(node => {\n setLocalFloatingElement(node);\n position.refs.setFloating(node);\n }, [position.refs]);\n const refs = React.useMemo(() => ({\n ...position.refs,\n setReference,\n setFloating,\n setPositionReference,\n domReference: domReferenceRef\n }), [position.refs, setReference, setFloating, setPositionReference]);\n const elements = React.useMemo(() => ({\n ...position.elements,\n domReference: domReferenceElement\n }), [position.elements, domReferenceElement]);\n const context = React.useMemo(() => ({\n ...position,\n dataRef: store.context.dataRef,\n open,\n onOpenChange: store.setOpen,\n events: store.context.events,\n floatingId,\n refs,\n elements,\n nodeId,\n rootStore: store\n }), [position, refs, elements, nodeId, store, open, floatingId]);\n useIsoLayoutEffect(() => {\n if (domReferenceElement) {\n domReferenceRef.current = domReferenceElement;\n }\n }, [domReferenceElement]);\n useIsoLayoutEffect(() => {\n store.context.dataRef.current.floatingContext = context;\n const node = tree?.nodesRef.current.find(n => n.id === nodeId);\n if (node) {\n node.context = context;\n }\n });\n return React.useMemo(() => ({\n ...position,\n context,\n refs,\n elements,\n rootStore: store\n }), [position, refs, elements, context, store]);\n}","'use client';\n\nimport * as React from 'react';\nexport const DirectionContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") DirectionContext.displayName = \"DirectionContext\";\nexport function useDirection() {\n const context = React.useContext(DirectionContext);\n return context?.direction ?? 'ltr';\n}","import { clamp, evaluate, getAlignment, getAlignmentAxis, getAxisLength, getPaddingObject } from '@floating-ui/utils';\n/**\n * Fork of the original `arrow` middleware from Floating UI that allows\n * configuring the offset parent.\n */\nexport const baseArrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0,\n offsetParent = 'real'\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = offsetParent === 'real' ? await platform.getOffsetParent?.(element) : elements.floating;\n let clientSize = elements.floating[clientProp] || rects.floating[length];\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await platform.isElement?.(arrowOffsetParent))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n // eslint-disable-next-line no-nested-ternary\n const alignmentOffset = shouldAddOffset ? center < min ? center - min : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nexport const arrow = (options, deps) => ({\n ...baseArrow(options),\n options: [options, deps]\n});","export const hide = {\n name: 'hide',\n async fn(state) {\n const {\n width,\n height,\n x,\n y\n } = state.rects.reference;\n const anchorHidden = width === 0 && height === 0 && x === 0 && y === 0;\n // Mirrors Floating UI's `hide()` referenceHidden strategy. Floating UI injects\n // `detectOverflow` into the middleware platform before invoking middleware.\n const overflow = await state.platform.detectOverflow(state, {\n elementContext: 'reference'\n });\n const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0;\n return {\n data: {\n referenceHidden: referenceHidden || anchorHidden\n }\n };\n }\n};","export const DEFAULT_SIDES = {\n sideX: 'left',\n sideY: 'top'\n};\n\n// Self-contained stand-in for Floating UI's `Middleware` type. Referencing the real type in\n// store state makes `tsc` declaration emit reference `Platform`/`detectOverflow` from\n// `@floating-ui/core` internals, which fails as non-portable (TS2883) in consuming builds.","'use client';\n\nimport * as React from 'react';\nimport { getSide, getAlignment, getSideAxis } from '@floating-ui/utils';\nimport { ownerDocument, ownerWindow } from '@base-ui/utils/owner';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useValueAsRef } from '@base-ui/utils/useValueAsRef';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { autoUpdate, flip, limitShift, offset, shift as floatingShift, size } from \"../floating-ui-react/index.mjs\";\nimport { useBaseUIFloating } from \"../floating-ui-react/hooks/useFloating.mjs\";\nimport { useDirection } from \"./direction-context/DirectionContext.mjs\";\nimport { arrow } from \"../floating-ui-react/middleware/arrow.mjs\";\nimport { hide } from \"../utils/hideMiddleware.mjs\";\nimport { DEFAULT_SIDES } from \"../utils/adaptiveOriginConstants.mjs\";\nconst AVAILABLE_WIDTH_VAR = '--available-width';\nconst AVAILABLE_HEIGHT_VAR = '--available-height';\nfunction getLogicalSide(sideParam, renderedSide, isRtl) {\n const isLogicalSideParam = sideParam === 'inline-start' || sideParam === 'inline-end';\n const logicalRight = isRtl ? 'inline-start' : 'inline-end';\n const logicalLeft = isRtl ? 'inline-end' : 'inline-start';\n return {\n top: 'top',\n right: isLogicalSideParam ? logicalRight : 'right',\n bottom: 'bottom',\n left: isLogicalSideParam ? logicalLeft : 'left'\n }[renderedSide];\n}\nfunction getOffsetData(state, sideParam, isRtl) {\n const {\n rects,\n placement\n } = state;\n const data = {\n side: getLogicalSide(sideParam, getSide(placement), isRtl),\n align: getAlignment(placement) || 'center',\n anchor: {\n width: rects.reference.width,\n height: rects.reference.height\n },\n positioner: {\n width: rects.floating.width,\n height: rects.floating.height\n }\n };\n return data;\n}\n/**\n * Provides standardized anchor positioning behavior for floating elements. Wraps Floating UI's\n * `useFloating` hook.\n */\nexport function useAnchorPositioning(params) {\n return useAnchorPositioningWithHook(params, useBaseUIFloating);\n}\nexport function useAnchorPositioningWithHook(params, useFloatingHook) {\n const {\n // Public parameters\n anchor,\n positionMethod = 'absolute',\n side: sideParam = 'bottom',\n sideOffset = 0,\n align = 'center',\n alignOffset = 0,\n collisionBoundary,\n collisionPadding: collisionPaddingParam = 5,\n sticky = false,\n arrowPadding = 5,\n disableAnchorTracking = false,\n inline: inlineMiddleware,\n // Private parameters\n keepMounted = false,\n floatingRootContext,\n mounted,\n collisionAvoidance,\n shift,\n nodeId,\n adaptiveOrigin,\n lazyFlip = false,\n externalTree\n } = params;\n const [mountSide, setMountSide] = React.useState(null);\n if (!mounted && mountSide !== null) {\n setMountSide(null);\n }\n const collisionAvoidanceSide = collisionAvoidance.side || 'flip';\n const collisionAvoidanceAlign = collisionAvoidance.align || 'flip';\n const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || 'end';\n const shiftCrossAxis = shift?.crossAxis ?? false;\n const shiftRootBoundary = shift?.rootBoundary;\n const anchorFn = typeof anchor === 'function' ? anchor : undefined;\n const anchorFnCallback = useStableCallback(anchorFn);\n const anchorDep = anchorFn ? anchorFnCallback : anchor;\n const anchorValueRef = useValueAsRef(anchor);\n const mountedRef = useValueAsRef(mounted);\n const direction = useDirection();\n const isRtl = direction === 'rtl';\n const side = mountSide || {\n top: 'top',\n right: 'right',\n bottom: 'bottom',\n left: 'left',\n 'inline-end': isRtl ? 'left' : 'right',\n 'inline-start': isRtl ? 'right' : 'left'\n }[sideParam];\n const placement = align === 'center' ? side : `${side}-${align}`;\n let collisionPadding = collisionPaddingParam;\n if (typeof collisionPadding === 'number') {\n collisionPadding = {\n top: collisionPadding,\n right: collisionPadding,\n bottom: collisionPadding,\n left: collisionPadding\n };\n } else if (collisionPadding) {\n collisionPadding = {\n top: collisionPadding.top || 0,\n right: collisionPadding.right || 0,\n bottom: collisionPadding.bottom || 0,\n left: collisionPadding.left || 0\n };\n }\n\n // Create a bias to the preferred side.\n // On iOS, when the mobile software keyboard opens, the input is exactly centered\n // in the viewport, but this can cause it to flip to the top undesirably.\n // The bias is only applied to `flip()` so it doesn't shift the resting position\n // computed by `shift()` and `size()` away from the requested `collisionPadding`.\n const bias = 1;\n const biasTop = sideParam === 'bottom' ? bias : 0;\n const biasBottom = sideParam === 'top' ? bias : 0;\n const biasLeft = sideParam === 'right' ? bias : 0;\n const biasRight = sideParam === 'left' ? bias : 0;\n const commonCollisionProps = {\n boundary: collisionBoundary === 'clipping-ancestors' ? 'clippingAncestors' : collisionBoundary,\n padding: collisionPadding\n };\n\n // Using a ref assumes that the arrow element is always present in the DOM for the lifetime of the\n // popup. If this assumption ends up being false, we can switch to state to manage the arrow's\n // presence.\n const arrowRef = React.useRef(null);\n\n // Keep these reactive if they're not functions\n const sideOffsetRef = useValueAsRef(sideOffset);\n const alignOffsetRef = useValueAsRef(alignOffset);\n const sideOffsetDep = typeof sideOffset !== 'function' ? sideOffset : 0;\n const alignOffsetDep = typeof alignOffset !== 'function' ? alignOffset : 0;\n const middleware = [];\n if (inlineMiddleware) {\n middleware.push(inlineMiddleware);\n }\n middleware.push(offset(state => {\n const data = getOffsetData(state, sideParam, isRtl);\n const sideAxis = typeof sideOffsetRef.current === 'function' ? sideOffsetRef.current(data) : sideOffsetRef.current;\n const alignAxis = typeof alignOffsetRef.current === 'function' ? alignOffsetRef.current(data) : alignOffsetRef.current;\n return {\n mainAxis: sideAxis,\n crossAxis: alignAxis,\n alignmentAxis: alignAxis\n };\n }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));\n const shiftDisabled = collisionAvoidanceAlign === 'none' && collisionAvoidanceSide !== 'shift';\n const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === 'shift');\n const flipMiddleware = collisionAvoidanceSide === 'none' ? null : flip({\n ...commonCollisionProps,\n // Ensure the popup flips if it's been limited by its --available-height and it resizes.\n // Since the size() padding is smaller than the flip() padding, flip() will take precedence.\n padding: {\n top: collisionPadding.top + bias + biasTop,\n right: collisionPadding.right + bias + biasRight,\n bottom: collisionPadding.bottom + bias + biasBottom,\n left: collisionPadding.left + bias + biasLeft\n },\n mainAxis: !shiftCrossAxis && collisionAvoidanceSide === 'flip',\n crossAxis: collisionAvoidanceAlign === 'flip' ? 'alignment' : false,\n fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide\n });\n const shiftMiddleware = shiftDisabled ? null : floatingShift({\n ...commonCollisionProps,\n // Use the Layout Viewport to avoid shifting around when pinch-zooming.\n rootBoundary: shiftRootBoundary,\n mainAxis: collisionAvoidanceAlign !== 'none',\n crossAxis: crossAxisShiftEnabled,\n limiter: sticky || shiftCrossAxis ? undefined : limitShift(limitData => {\n if (!arrowRef.current) {\n return {};\n }\n const {\n width,\n height\n } = arrowRef.current.getBoundingClientRect();\n const sideAxis = getSideAxis(getSide(limitData.placement));\n const arrowSize = sideAxis === 'y' ? width : height;\n const offsetAmount = sideAxis === 'y' ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;\n return {\n offset: arrowSize / 2 + offsetAmount / 2\n };\n })\n }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]);\n\n // https://floating-ui.com/docs/flip#combining-with-shift\n if (collisionAvoidanceSide === 'shift' || collisionAvoidanceAlign === 'shift' || align === 'center') {\n middleware.push(shiftMiddleware, flipMiddleware);\n } else {\n middleware.push(flipMiddleware, shiftMiddleware);\n }\n middleware.push(size({\n ...commonCollisionProps,\n apply({\n elements: {\n floating\n },\n availableWidth,\n availableHeight,\n rects\n }) {\n if (!mountedRef.current) {\n return;\n }\n const floatingStyle = floating.style;\n floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `${availableWidth}px`);\n floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `${availableHeight}px`);\n\n // Snap anchor dimensions to device pixels to ensure the popup's visual width matches the anchor's one.\n const dpr = ownerWindow(floating).devicePixelRatio || 1;\n const {\n x,\n y,\n width,\n height\n } = rects.reference;\n const anchorWidth = (Math.round((x + width) * dpr) - Math.round(x * dpr)) / dpr;\n const anchorHeight = (Math.round((y + height) * dpr) - Math.round(y * dpr)) / dpr;\n floatingStyle.setProperty('--anchor-width', `${anchorWidth}px`);\n floatingStyle.setProperty('--anchor-height', `${anchorHeight}px`);\n }\n }), arrow(state => ({\n // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,\n // we'll create a fake element.\n element: arrowRef.current || ownerDocument(state.elements.floating).createElement('div'),\n padding: arrowPadding,\n offsetParent: 'floating'\n }), [arrowPadding]), {\n name: 'transformOrigin',\n fn(state) {\n const {\n elements,\n middlewareData,\n placement: renderedPlacement,\n rects,\n y\n } = state;\n const currentRenderedSide = getSide(renderedPlacement);\n const currentRenderedAxis = getSideAxis(currentRenderedSide);\n const arrowEl = arrowRef.current;\n const arrowX = middlewareData.arrow?.x || 0;\n const arrowY = middlewareData.arrow?.y || 0;\n const arrowWidth = arrowEl?.clientWidth || 0;\n const arrowHeight = arrowEl?.clientHeight || 0;\n const transformX = arrowX + arrowWidth / 2;\n const transformY = arrowY + arrowHeight / 2;\n const shiftY = Math.abs(middlewareData.shift?.y || 0);\n const halfAnchorHeight = rects.reference.height / 2;\n const sideOffsetValue = typeof sideOffset === 'function' ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;\n const isOverlappingAnchor = shiftY > sideOffsetValue;\n const adjacentTransformOrigin = {\n top: `${transformX}px calc(100% + ${sideOffsetValue}px)`,\n bottom: `${transformX}px ${-sideOffsetValue}px`,\n left: `calc(100% + ${sideOffsetValue}px) ${transformY}px`,\n right: `${-sideOffsetValue}px ${transformY}px`\n }[currentRenderedSide];\n const overlapTransformOrigin = `${transformX}px ${rects.reference.y + halfAnchorHeight - y}px`;\n elements.floating.style.setProperty('--transform-origin', crossAxisShiftEnabled && currentRenderedAxis === 'y' && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin);\n return {};\n }\n }, hide, adaptiveOrigin);\n useIsoLayoutEffect(() => {\n // Ensure positioning doesn't run initially for `keepMounted` elements that\n // aren't initially open.\n if (!mounted && floatingRootContext) {\n floatingRootContext.update({\n referenceElement: null,\n floatingElement: null,\n domReferenceElement: null,\n positionReference: null\n });\n }\n }, [mounted, floatingRootContext]);\n const autoUpdateOptions = React.useMemo(() => ({\n elementResize: !disableAnchorTracking && typeof ResizeObserver !== 'undefined',\n layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== 'undefined'\n }), [disableAnchorTracking]);\n const {\n refs,\n elements,\n x,\n y,\n middlewareData,\n update,\n placement: renderedPlacement,\n context,\n isPositioned,\n floatingStyles: originalFloatingStyles\n } = useFloatingHook({\n rootContext: floatingRootContext,\n open: keepMounted ? mounted : undefined,\n placement,\n middleware,\n strategy: positionMethod,\n whileElementsMounted: keepMounted ? undefined : (...args) => autoUpdate(...args, autoUpdateOptions),\n nodeId,\n externalTree\n });\n const {\n sideX,\n sideY\n } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;\n\n // Default to `fixed` when not positioned to prevent `autoFocus` scroll jumps.\n // This ensures the popup is inside the viewport initially before it gets positioned.\n const resolvedPosition = isPositioned ? positionMethod : 'fixed';\n const floatingStyles = React.useMemo(() => {\n let base;\n if (!isPositioned) {\n // Until a position for the current open is computed, ignore any coordinates retained from a\n // previous open (or from a pass that measured the hidden popup as 0x0). Rendering the\n // full-size popup at such stale coordinates can overflow the layout viewport, which makes\n // mobile Chrome zoom the page out and reflow everything the popup is anchored to.\n base = {\n position: resolvedPosition,\n top: 0,\n left: 0\n };\n } else if (adaptiveOrigin) {\n base = {\n position: resolvedPosition,\n [sideX]: x,\n [sideY]: y\n };\n } else {\n base = {\n ...originalFloatingStyles,\n position: resolvedPosition\n };\n }\n\n // Seed the available size vars so consumer `max-height: min(x, var(--available-height))` rules\n // resolve to a valid length on the first positioning pass, before `size()` writes the real\n // values. Without a fallback the unresolved `var()` invalidates the whole declaration, so the\n // popup is measured unconstrained while `flip()` picks its side, against the full content\n // height rather than the capped one. Seeded unconditionally (not only while `!isPositioned`):\n // the keys must stay present with a constant value so React's per-property style diff never\n // rewrites them after mount, preserving the px values `size()` sets imperatively. Moving them\n // into the `!isPositioned` branch makes React remove them once positioned, wiping `size()`'s\n // values and leaving the popup unconstrained.\n base[AVAILABLE_WIDTH_VAR] = '100vw';\n base[AVAILABLE_HEIGHT_VAR] = '100vh';\n if (!isPositioned) {\n base.opacity = 0;\n }\n return base;\n }, [adaptiveOrigin, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]);\n const registeredPositionReferenceRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n if (!mounted) {\n return;\n }\n const anchorValue = anchorValueRef.current;\n const resolvedAnchor = typeof anchorValue === 'function' ? anchorValue() : anchorValue;\n const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;\n const finalAnchor = unwrappedElement || null;\n if (finalAnchor !== registeredPositionReferenceRef.current) {\n refs.setPositionReference(finalAnchor);\n registeredPositionReferenceRef.current = finalAnchor;\n }\n }, [mounted, refs, anchorDep, anchorValueRef]);\n React.useEffect(() => {\n if (!mounted) {\n return;\n }\n const anchorValue = anchorValueRef.current;\n\n // Refs from parent components are set after useLayoutEffect runs and are available in useEffect.\n // Therefore, if the anchor is a ref, we need to update the position reference in useEffect.\n if (typeof anchorValue === 'function') {\n return;\n }\n if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {\n refs.setPositionReference(anchorValue.current);\n registeredPositionReferenceRef.current = anchorValue.current;\n }\n }, [mounted, refs, anchorDep, anchorValueRef]);\n React.useEffect(() => {\n if (keepMounted && mounted && elements.reference && elements.floating) {\n return autoUpdate(elements.reference, elements.floating, update, autoUpdateOptions);\n }\n return undefined;\n }, [keepMounted, mounted, elements, update, autoUpdateOptions]);\n const renderedSide = getSide(renderedPlacement);\n const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);\n const renderedAlign = getAlignment(renderedPlacement) || 'center';\n const anchorHidden = Boolean(middlewareData.hide?.referenceHidden);\n\n // Locks the flip (makes it \"sticky\") so it doesn't prefer a given placement\n // and flips back lazily, not eagerly. Ideal for filtered lists that change\n // the size of the popup dynamically to avoid unwanted flipping when typing.\n useIsoLayoutEffect(() => {\n if (lazyFlip && mounted && isPositioned && renderedSide !== side) {\n setMountSide(renderedSide);\n }\n }, [lazyFlip, mounted, isPositioned, renderedSide, side]);\n const arrowStyles = React.useMemo(() => ({\n position: 'absolute',\n top: middlewareData.arrow?.y,\n left: middlewareData.arrow?.x\n }), [middlewareData.arrow]);\n const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;\n return React.useMemo(() => ({\n positionerStyles: floatingStyles,\n arrowStyles,\n arrowRef,\n arrowUncentered,\n side: logicalRenderedSide,\n align: renderedAlign,\n physicalSide: renderedSide,\n anchorHidden,\n refs,\n context,\n isPositioned,\n update\n }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update]);\n}\nfunction isRef(param) {\n return param != null && 'current' in param;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ToastPositionerContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ToastPositionerContext.displayName = \"ToastPositionerContext\";\nexport function useToastPositionerContext() {\n const context = React.useContext(ToastPositionerContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: ToastPositionerContext is missing. ToastPositioner parts must be placed within <Toast.Positioner>.' : _formatErrorMessage(84));\n }\n return context;\n}","import { TransitionStatusDataAttributes, transitionStatusMapping } from \"../internals/stateAttributesMapping.mjs\";\nexport let CommonPopupDataAttributes = function (CommonPopupDataAttributes) {\n /**\n * Present when the popup is open.\n */\n CommonPopupDataAttributes[\"open\"] = \"data-open\";\n /**\n * Present when the popup is closed.\n */\n CommonPopupDataAttributes[\"closed\"] = \"data-closed\";\n /**\n * Present when the popup begins animating in.\n */\n CommonPopupDataAttributes[CommonPopupDataAttributes[\"startingStyle\"] = TransitionStatusDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the popup is animating out.\n */\n CommonPopupDataAttributes[CommonPopupDataAttributes[\"endingStyle\"] = TransitionStatusDataAttributes.endingStyle] = \"endingStyle\";\n /**\n * Present when the anchor is hidden.\n */\n CommonPopupDataAttributes[\"anchorHidden\"] = \"data-anchor-hidden\";\n /**\n * Indicates which side the popup is positioned relative to the trigger.\n * @type { 'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start'}\n */\n CommonPopupDataAttributes[\"side\"] = \"data-side\";\n /**\n * Indicates how the popup is aligned relative to specified side.\n * @type {'start' | 'center' | 'end'}\n */\n CommonPopupDataAttributes[\"align\"] = \"data-align\";\n return CommonPopupDataAttributes;\n}({});\nexport let CommonTriggerDataAttributes = /*#__PURE__*/function (CommonTriggerDataAttributes) {\n /**\n * Present when the popup is open.\n */\n CommonTriggerDataAttributes[\"popupOpen\"] = \"data-popup-open\";\n /**\n * Present when a pressable trigger is pressed.\n */\n CommonTriggerDataAttributes[\"pressed\"] = \"data-pressed\";\n return CommonTriggerDataAttributes;\n}({});\n\n// Literal keys (instead of enum member references) keep the docs-only enums above\n// tree-shakeable: a runtime reference would retain the whole enum IIFE in every bundle.\nconst TRIGGER_HOOK = {\n 'data-popup-open': ''\n};\nconst PRESSABLE_TRIGGER_HOOK = {\n 'data-popup-open': '',\n 'data-pressed': ''\n};\nconst POPUP_OPEN_HOOK = {\n 'data-open': ''\n};\nconst POPUP_CLOSED_HOOK = {\n 'data-closed': ''\n};\nconst ANCHOR_HIDDEN_HOOK = {\n 'data-anchor-hidden': ''\n};\nexport const triggerOpenStateMapping = {\n open(value) {\n if (value) {\n return TRIGGER_HOOK;\n }\n return null;\n }\n};\nexport const pressableTriggerOpenStateMapping = {\n open(value) {\n if (value) {\n return PRESSABLE_TRIGGER_HOOK;\n }\n return null;\n }\n};\nexport const popupStateMapping = {\n open(value) {\n if (value) {\n return POPUP_OPEN_HOOK;\n }\n return POPUP_CLOSED_HOOK;\n },\n anchorHidden(value) {\n if (value) {\n return ANCHOR_HIDDEN_HOOK;\n }\n return null;\n }\n};\nexport const popupTransitionStateMapping = {\n ...popupStateMapping,\n ...transitionStatusMapping\n};","import { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { DISABLED_TRANSITIONS_STYLE } from \"./constants.mjs\";\nexport function getDisabledMountTransitionStyles(transitionStatus) {\n return transitionStatus === 'starting' ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;\n}","'use client';\n\nimport { popupStateMapping } from \"./popupStateMapping.mjs\";\nimport { useRenderElement } from \"../internals/useRenderElement.mjs\";\nimport { getDisabledMountTransitionStyles } from \"../internals/getDisabledMountTransitionStyles.mjs\";\n/**\n * Renders the shared outer Positioner element used by popup components.\n * Applies the common role, hidden state, transition styles, state attributes, and optional inert styling.\n */\nexport function usePositioner(componentProps, state, {\n styles,\n transitionStatus,\n props,\n refs,\n hidden,\n inert = false\n}) {\n const style = {\n ...styles\n };\n if (inert) {\n style.pointerEvents = 'none';\n }\n return useRenderElement('div', componentProps, {\n state,\n ref: refs,\n props: [{\n role: 'presentation',\n hidden,\n style\n }, getDisabledMountTransitionStyles(transitionStatus), props],\n stateAttributesMapping: popupStateMapping\n });\n}","'use client';\n\nimport * as React from 'react';\nimport { isElement } from '@floating-ui/utils/dom';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useAnchorPositioning } from \"../../internals/useAnchorPositioning.mjs\";\nimport { POPUP_COLLISION_AVOIDANCE } from \"../../internals/constants.mjs\";\nimport { ToastPositionerContext } from \"./ToastPositionerContext.mjs\";\nimport { useFloatingRootContext } from \"../../floating-ui-react/index.mjs\";\nimport { NOOP } from \"../../internals/noop.mjs\";\nimport { useToastProviderContext } from \"../provider/ToastProviderContext.mjs\";\nimport { usePositioner } from \"../../utils/usePositioner.mjs\";\n\n/**\n * Positions the toast against the anchor.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const ToastPositioner = /*#__PURE__*/React.forwardRef(function ToastPositioner(componentProps, forwardedRef) {\n const {\n toast,\n ...props\n } = componentProps;\n const store = useToastProviderContext();\n const positionerProps = toast.positionerProps ?? EMPTY_OBJECT;\n const {\n render,\n className,\n anchor: anchorProp = positionerProps.anchor,\n positionMethod = positionerProps.positionMethod ?? 'absolute',\n side = positionerProps.side ?? 'top',\n align = positionerProps.align ?? 'center',\n sideOffset = positionerProps.sideOffset ?? 0,\n alignOffset = positionerProps.alignOffset ?? 0,\n collisionBoundary = positionerProps.collisionBoundary ?? 'clipping-ancestors',\n collisionPadding = positionerProps.collisionPadding ?? 5,\n arrowPadding = positionerProps.arrowPadding ?? 5,\n sticky = positionerProps.sticky ?? false,\n disableAnchorTracking = positionerProps.disableAnchorTracking ?? false,\n collisionAvoidance = positionerProps.collisionAvoidance ?? POPUP_COLLISION_AVOIDANCE,\n style,\n ...elementProps\n } = props;\n const [positionerElement, setPositionerElement] = React.useState(null);\n const domIndex = store.useState('toastIndex', toast.id);\n const visibleIndex = store.useState('toastVisibleIndex', toast.id);\n const anchor = isElement(anchorProp) ? anchorProp : null;\n const floatingRootContext = useFloatingRootContext({\n open: true,\n onOpenChange: NOOP,\n elements: {\n floating: positionerElement,\n reference: anchor\n }\n });\n const positioning = useAnchorPositioning({\n anchor,\n positionMethod,\n floatingRootContext,\n mounted: true,\n side,\n sideOffset,\n align,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n keepMounted: true,\n collisionAvoidance\n });\n const state = {\n side: positioning.side,\n align: positioning.align,\n anchorHidden: positioning.anchorHidden\n };\n const element = usePositioner(componentProps, state, {\n styles: {\n ...positioning.positionerStyles,\n ['--toast-index']: toast.transitionStatus === 'ending' ? domIndex : visibleIndex\n },\n transitionStatus: toast.transitionStatus,\n props: elementProps,\n refs: [forwardedRef, setPositionerElement]\n });\n return /*#__PURE__*/_jsx(ToastPositionerContext.Provider, {\n value: positioning,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastPositioner.displayName = \"ToastPositioner\";","'use client';\n\nimport * as React from 'react';\nimport { useToastPositionerContext } from \"../positioner/ToastPositionerContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\n\n/**\n * Displays an element positioned against the toast anchor.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Toast](https://base-ui.com/react/components/toast)\n */\nexport const ToastArrow = /*#__PURE__*/React.forwardRef(function ToastArrow(componentProps, forwardedRef) {\n const {\n className,\n render,\n style,\n ...elementProps\n } = componentProps;\n const {\n arrowRef,\n side,\n align,\n arrowUncentered,\n arrowStyles\n } = useToastPositionerContext();\n const state = {\n side,\n align,\n uncentered: arrowUncentered\n };\n return useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, arrowRef],\n props: [{\n style: arrowStyles,\n 'aria-hidden': true\n }, elementProps]\n });\n});\nif (process.env.NODE_ENV !== \"production\") ToastArrow.displayName = \"ToastArrow\";","'use client';\n\nimport * as React from 'react';\nimport { useToastProviderContext } from \"./provider/ToastProviderContext.mjs\";\n/**\n * Returns the array of toasts and methods to manage them.\n */\nexport function useToastManager() {\n const store = useToastProviderContext();\n const toasts = store.useState('toasts');\n return React.useMemo(() => ({\n toasts,\n add: store.addToast,\n close: store.closeToast,\n update: store.updateToast,\n promise: store.promiseToast\n }), [toasts, store]);\n}","import { generateId } from '@base-ui/utils/generateId';\n/**\n * Creates a new toast manager.\n */\nexport function createToastManager() {\n const listeners = new Set();\n function emit(data) {\n listeners.forEach(listener => listener(data));\n }\n return {\n // This should be private aside from ToastProvider needing to access it.\n // https://x.com/drosenwasser/status/1816947740032872664\n ' subscribe': function subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n add(options) {\n const id = options.id || generateId('toast');\n const toastToAdd = {\n ...options,\n id,\n transitionStatus: 'starting'\n };\n emit({\n action: 'add',\n options: toastToAdd\n });\n return id;\n },\n close(id) {\n emit({\n action: 'close',\n options: {\n id\n }\n });\n },\n update(id, updates) {\n emit({\n action: 'update',\n options: {\n ...updates,\n id\n }\n });\n },\n promise(promiseValue, options) {\n let handledPromise = promiseValue;\n emit({\n action: 'promise',\n options: {\n ...options,\n promise: promiseValue,\n setPromise(promise) {\n handledPromise = promise;\n }\n }\n });\n return handledPromise;\n }\n };\n}","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-action.tsx\nconst TRToastAction = createComponentPart(Toast.Action, \"tr-toast-action\");\n//#endregion\nexport { TRToastAction };\n\n//# sourceMappingURL=toast-action.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-arrow.tsx\nconst TRToastArrow = createComponentPart(Toast.Arrow, \"tr-layer-arrow tr-toast-arrow\");\n//#endregion\nexport { TRToastArrow };\n\n//# sourceMappingURL=toast-arrow.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-close.tsx\nconst TRToastClose = createComponentPart(Toast.Close, \"tr-toast-close\");\n//#endregion\nexport { TRToastClose };\n\n//# sourceMappingURL=toast-close.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-content.tsx\nconst TRToastContent = createComponentPart(Toast.Content, \"tr-toast-content\");\n//#endregion\nexport { TRToastContent };\n\n//# sourceMappingURL=toast-content.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-description.tsx\nconst TRToastDescription = createComponentPart(Toast.Description, \"tr-toast-description\");\n//#endregion\nexport { TRToastDescription };\n\n//# sourceMappingURL=toast-description.js.map","\"use client\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-manager.ts\nfunction createToastManager() {\n\treturn Toast.createToastManager();\n}\nfunction useToastManager() {\n\treturn Toast.useToastManager();\n}\n//#endregion\nexport { createToastManager, useToastManager };\n\n//# sourceMappingURL=toast-manager.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-portal.tsx\nconst TRToastPortal = createComponentPart(Toast.Portal);\n//#endregion\nexport { TRToastPortal };\n\n//# sourceMappingURL=toast-portal.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-positioner.tsx\nconst TRToastPositioner = createComponentPart(Toast.Positioner, \"tr-layer-positioner tr-toast-positioner\");\n//#endregion\nexport { TRToastPositioner };\n\n//# sourceMappingURL=toast-positioner.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-provider.tsx\nconst TRToastProvider = createComponentPart(Toast.Provider);\n//#endregion\nexport { TRToastProvider };\n\n//# sourceMappingURL=toast-provider.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-root.tsx\nconst toastVariants = [\n\t\"neutral\",\n\t\"info\",\n\t\"success\",\n\t\"warning\",\n\t\"danger\"\n];\nfunction isToastVariant(value) {\n\treturn value !== void 0 && toastVariants.includes(value);\n}\nfunction TRToastRoot({ className, toast, variant, ...props }) {\n\tconst resolvedVariant = variant ?? (isToastVariant(toast.type) ? toast.type : \"neutral\");\n\treturn /* @__PURE__ */ jsx(Toast.Root, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-toast\", className),\n\t\t\"data-variant\": resolvedVariant,\n\t\ttoast\n\t});\n}\n//#endregion\nexport { TRToastRoot };\n\n//# sourceMappingURL=toast-root.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-title.tsx\nconst TRToastTitle = createComponentPart(Toast.Title, \"tr-toast-title\");\n//#endregion\nexport { TRToastTitle };\n\n//# sourceMappingURL=toast-title.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Toast } from \"@base-ui/react/toast\";\n//#region src/components/toast/toast-viewport.tsx\nfunction TRToastViewport({ className, position = \"block-end-inline-end\", ...props }) {\n\treturn /* @__PURE__ */ jsx(Toast.Viewport, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-layer-viewport tr-toast-viewport\", className),\n\t\t\"data-position\": position\n\t});\n}\n//#endregion\nexport { TRToastViewport };\n\n//# sourceMappingURL=toast-viewport.js.map","import { TRToastAction } from \"./toast-action.js\";\nimport { TRToastArrow } from \"./toast-arrow.js\";\nimport { TRToastClose } from \"./toast-close.js\";\nimport { TRToastContent } from \"./toast-content.js\";\nimport { TRToastDescription } from \"./toast-description.js\";\nimport { createToastManager, useToastManager } from \"./toast-manager.js\";\nimport { TRToastPortal } from \"./toast-portal.js\";\nimport { TRToastPositioner } from \"./toast-positioner.js\";\nimport { TRToastProvider } from \"./toast-provider.js\";\nimport { TRToastRoot } from \"./toast-root.js\";\nimport { TRToastTitle } from \"./toast-title.js\";\nimport { TRToastViewport } from \"./toast-viewport.js\";\n//#region src/components/toast/index.tsx\nconst TRToast = {\n\tProvider: TRToastProvider,\n\tViewport: TRToastViewport,\n\tRoot: TRToastRoot,\n\tContent: TRToastContent,\n\tDescription: TRToastDescription,\n\tTitle: TRToastTitle,\n\tClose: TRToastClose,\n\tAction: TRToastAction,\n\tPortal: TRToastPortal,\n\tPositioner: TRToastPositioner,\n\tArrow: TRToastArrow,\n\tcreateToastManager,\n\tuseToastManager\n};\n//#endregion\nexport { TRToast, TRToastAction, TRToastArrow, TRToastClose, TRToastContent, TRToastDescription, TRToastPortal, TRToastPositioner, TRToastProvider, TRToastRoot, TRToastTitle, TRToastViewport, createToastManager, useToastManager };\n\n//# sourceMappingURL=index.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 (Object.prototype.hasOwnProperty.call(target, prop)) {\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 rawFormats = format.split(this.formatSeparator);\n const formats = [];\n for (let i = 0; i < rawFormats.length; i++) {\n let f = rawFormats[i];\n while (f.indexOf('(') > -1 && !f.includes(')') && i + 1 < rawFormats.length) {\n f = `${f}${this.formatSeparator}${rawFormats[++i]}`;\n }\n formats.push(f);\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.dismiss\": \"Dismiss\",\n \"common.otp.label\": \"Verification code\",\n \"common.otp.digit\": \"{{label}}, digit {{position}} of {{total}}\",\n \"common.password.show\": \"Show password\",\n \"common.password.hide\": \"Hide password\",\n \"common.no\": \"No\",\n \"common.none\": \"None\",\n \"common.or\": \"or\",\n \"authorizationContext.label\": \"Authorization request\",\n \"authorizationContext.title\": \"Continue to {{app}}\",\n \"authorizationContext.redirect\": \"Returns to {{origin}}\",\n \"authorizationContext.permissions\": \"Requested access\",\n \"authorizationContext.noScopes\": \"No additional profile access requested.\",\n \"login.email.label\": \"Email address\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"Login failed. Please check your email and password.\",\n \"login.password.label\": \"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.passkey.error.unsupported\": \"Passkeys are not available in this browser or app. Try a supported browser or sign in with email.\",\n \"login.passkey.error.failed\": \"Passkey sign in could not be completed. In-app browsers may block passkeys. Try again or sign in with email.\",\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 Issuary 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.label\": \"Email address\",\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.label\": \"Password\",\n \"register.password.hint\": \"Use at least {{count}} characters.\",\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.required\": \"Please enter your email address\",\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.password.strength.label\": \"Password strength\",\n \"validation.password.strength.weak\": \"Weak\",\n \"validation.password.strength.fair\": \"Fair\",\n \"validation.password.strength.good\": \"Good\",\n \"validation.password.strength.strong\": \"Strong\",\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.label\": \"Verification token\",\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.label\": \"Email address\",\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.label\": \"Reset token\",\n \"resetPassword.token.placeholder\": \"Enter the token from your email\",\n \"resetPassword.password.label\": \"New password\",\n \"resetPassword.password.placeholder\": \"Enter your new password\",\n \"resetPassword.confirmPassword.label\": \"Confirm 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 \"accountSelect.title\": \"Choose an account\",\n \"accountSelect.subtitle\": \"Choose an account to continue to this application\",\n \"accountSelect.unavailable\": \"Account selection is unavailable\",\n \"accountSelect.noRememberedAccounts\": \"No remembered accounts are available in this browser session.\",\n \"accountSelect.currentAccount\": \"Current account\",\n \"accountSelect.rememberedAccount\": \"Remembered account\",\n \"accountSelect.current\": \"Current\",\n \"accountSelect.removeAccount\": \"Remove {{email}}\",\n \"accountSelect.useAnotherAccount\": \"Use another account\",\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.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.nameLabel\": \"Passkey name\",\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.stepProgress\": \"Step {{current}} of {{total}}\",\n \"setupTotp.steps.scan\": \"Scan\",\n \"setupTotp.steps.verify\": \"Verify\",\n \"setupTotp.steps.saveCodes\": \"Save codes\",\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.unsupported\": \"Passkeys are not available in this browser or app.\",\n \"verifyPasskey.error.notAllowed\": \"Passkey verification could not be completed. In-app browsers may block passkeys.\",\n \"verifyPasskey.error.failed\": \"Passkey verification failed. Please try again.\",\n \"verifyPasskey.useTotp\": \"Use authenticator app\",\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.error.unsupported\": \"Passkeys are not available in this browser or app.\",\n \"setupPasskey.error.notAllowed\": \"Passkey registration could not be completed. In-app browsers may block passkeys.\",\n \"setupPasskey.error.expired\": \"Session expired. Please log in again.\",\n \"setupPasskey.useTotp\": \"Set up authenticator app\",\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.additionalOptionalConsent\": \"Additional optional consent\",\n \"terms.view\": \"View\",\n \"terms.viewSpecific\": \"View {{title}}\",\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\": \"Issuary 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.dismiss\": \"閉じる\",\n \"common.otp.label\": \"認証コード\",\n \"common.otp.digit\": \"{{label}}、{{total}}桁中{{position}}桁目\",\n \"common.password.show\": \"パスワードを表示\",\n \"common.password.hide\": \"パスワードを非表示\",\n \"common.no\": \"いいえ\",\n \"common.none\": \"なし\",\n \"common.or\": \"または\",\n \"authorizationContext.label\": \"認可リクエスト\",\n \"authorizationContext.title\": \"{{app}}に続行\",\n \"authorizationContext.redirect\": \"{{origin}}に戻ります\",\n \"authorizationContext.permissions\": \"要求されたアクセス\",\n \"authorizationContext.noScopes\": \"追加のプロフィールアクセスは要求されていません。\",\n \"login.email.label\": \"メールアドレス\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"ログインに失敗しました。メールアドレスとパスワードを確認してください。\",\n \"login.password.label\": \"パスワード\",\n \"login.password.placeholder\": \"パスワードを入力\",\n \"login.submit\": \"ログイン\",\n \"login.submitting\": \"ログイン中...\",\n \"login.title\": \"おかえりなさい\",\n \"login.link.register\": \"新規登録\",\n \"login.link.forgotPassword\": \"パスワードをお忘れですか?\",\n \"login.selectMethod.subtitle\": \"\",\n \"login.method.password\": \"メール\",\n \"login.method.passkey\": \"パスキー\",\n \"login.passkey.error.unsupported\": \"このブラウザまたはアプリではパスキーを使用できません。対応ブラウザを使用するか、メールでログインしてください。\",\n \"login.passkey.error.failed\": \"パスキーでのログインを完了できませんでした。アプリ内ブラウザではパスキーがブロックされることがあります。再試行するか、メールでログインしてください。\",\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\": \"Issuary のユーザーとクライアントを一元管理します。\",\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.label\": \"メールアドレス\",\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.label\": \"パスワード\",\n \"register.password.hint\": \"{{count}}文字以上で入力してください。\",\n \"register.password.placeholder\": \"パスワードを入力\",\n \"register.submit\": \"アカウント作成\",\n \"register.submitting\": \"アカウント作成中...\",\n \"register.subtitle\": \"新しいアカウントを作成して始めましょう\",\n \"register.title\": \"アカウント作成\",\n \"validation.email.required\": \"メールアドレスを入力してください\",\n \"validation.email.invalid\": \"正しいメールアドレスの形式ではありません\",\n \"validation.password.max\": \"パスワードは{{count}}文字以下である必要があります\",\n \"validation.password.min\": \"パスワードは{{count}}文字以上である必要があります\",\n \"validation.password.required\": \"パスワードを入力してください\",\n \"validation.password.strength.label\": \"パスワードの強度\",\n \"validation.password.strength.weak\": \"弱い\",\n \"validation.password.strength.fair\": \"普通\",\n \"validation.password.strength.good\": \"良い\",\n \"validation.password.strength.strong\": \"強い\",\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.label\": \"認証トークン\",\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.label\": \"メールアドレス\",\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.label\": \"リセットトークン\",\n \"resetPassword.token.placeholder\": \"メールで受け取ったトークンを入力\",\n \"resetPassword.password.label\": \"新しいパスワード\",\n \"resetPassword.password.placeholder\": \"新しいパスワードを入力\",\n \"resetPassword.confirmPassword.label\": \"新しいパスワードの確認\",\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 \"accountSelect.title\": \"アカウントを選択\",\n \"accountSelect.subtitle\": \"このアプリケーションに続行するアカウントを選択してください\",\n \"accountSelect.unavailable\": \"アカウント選択は利用できません\",\n \"accountSelect.noRememberedAccounts\": \"このブラウザーセッションに記憶されたアカウントはありません。\",\n \"accountSelect.currentAccount\": \"現在のアカウント\",\n \"accountSelect.rememberedAccount\": \"記憶されたアカウント\",\n \"accountSelect.current\": \"現在\",\n \"accountSelect.removeAccount\": \"{{email}}を削除\",\n \"accountSelect.useAnotherAccount\": \"別のアカウントを使用\",\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.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.nameLabel\": \"パスキー名\",\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.stepProgress\": \"ステップ {{current}} / {{total}}\",\n \"setupTotp.steps.scan\": \"スキャン\",\n \"setupTotp.steps.verify\": \"確認\",\n \"setupTotp.steps.saveCodes\": \"コードを保存\",\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.unsupported\": \"このブラウザまたはアプリではパスキーを使用できません。\",\n \"verifyPasskey.error.notAllowed\": \"パスキー認証を完了できませんでした。アプリ内ブラウザではパスキーがブロックされることがあります。\",\n \"verifyPasskey.error.failed\": \"パスキー認証に失敗しました。もう一度お試しください。\",\n \"verifyPasskey.useTotp\": \"認証アプリを使用\",\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.error.unsupported\": \"このブラウザまたはアプリではパスキーを使用できません。\",\n \"setupPasskey.error.notAllowed\": \"パスキーの登録を完了できませんでした。アプリ内ブラウザではパスキーがブロックされることがあります。\",\n \"setupPasskey.error.expired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"setupPasskey.useTotp\": \"認証アプリを設定\",\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.additionalOptionalConsent\": \"追加の任意同意\",\n \"terms.view\": \"表示\",\n \"terms.viewSpecific\": \"{{title}}を表示\",\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\": \"Issuary 管理\",\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.dismiss\": \"닫기\",\n \"common.otp.label\": \"인증 코드\",\n \"common.otp.digit\": \"{{label}}, {{total}}자리 중 {{position}}번째\",\n \"common.password.show\": \"비밀번호 표시\",\n \"common.password.hide\": \"비밀번호 숨기기\",\n \"common.no\": \"아니오\",\n \"common.none\": \"없음\",\n \"common.or\": \"또는\",\n \"authorizationContext.label\": \"권한 요청\",\n \"authorizationContext.title\": \"{{app}}로 계속\",\n \"authorizationContext.redirect\": \"{{origin}}로 돌아갑니다\",\n \"authorizationContext.permissions\": \"요청된 접근 권한\",\n \"authorizationContext.noScopes\": \"추가 프로필 접근 권한을 요청하지 않았습니다.\",\n \"login.email.label\": \"이메일 주소\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"로그인에 실패했습니다. 이메일과 비밀번호를 확인해주세요.\",\n \"login.password.label\": \"비밀번호\",\n \"login.password.placeholder\": \"비밀번호를 입력하세요\",\n \"login.submit\": \"로그인\",\n \"login.submitting\": \"로그인 중...\",\n \"login.title\": \"다시 만나서 반갑습니다\",\n \"login.link.register\": \"회원가입\",\n \"login.link.forgotPassword\": \"비밀번호를 잊으셨나요?\",\n \"login.selectMethod.subtitle\": \"\",\n \"login.method.password\": \"이메일\",\n \"login.method.passkey\": \"패스키\",\n \"login.passkey.error.unsupported\": \"이 브라우저나 앱에서는 패스키를 사용할 수 없습니다. 지원되는 브라우저를 사용하거나 이메일로 로그인하세요.\",\n \"login.passkey.error.failed\": \"패스키 로그인을 완료하지 못했습니다. 인앱 브라우저에서는 패스키가 차단될 수 있습니다. 다시 시도하거나 이메일로 로그인하세요.\",\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\": \"Issuary 사용자와 클라이언트를 한 곳에서 관리합니다.\",\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.label\": \"이메일 주소\",\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.label\": \"비밀번호\",\n \"register.password.hint\": \"최소 {{count}}자 이상 입력하세요.\",\n \"register.password.placeholder\": \"비밀번호를 입력하세요\",\n \"register.submit\": \"회원가입\",\n \"register.submitting\": \"회원가입 중...\",\n \"register.subtitle\": \"새 계정을 만들어 시작하세요\",\n \"register.title\": \"계정 만들기\",\n \"validation.email.required\": \"이메일 주소를 입력해주세요\",\n \"validation.email.invalid\": \"올바른 이메일 형식이 아닙니다\",\n \"validation.password.max\": \"비밀번호는 최대 {{count}}자까지 가능합니다\",\n \"validation.password.min\": \"비밀번호는 최소 {{count}}자 이상이어야 합니다\",\n \"validation.password.required\": \"비밀번호를 입력해주세요\",\n \"validation.password.strength.label\": \"비밀번호 강도\",\n \"validation.password.strength.weak\": \"약함\",\n \"validation.password.strength.fair\": \"보통\",\n \"validation.password.strength.good\": \"좋음\",\n \"validation.password.strength.strong\": \"강함\",\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.label\": \"인증 토큰\",\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.label\": \"이메일 주소\",\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.label\": \"재설정 토큰\",\n \"resetPassword.token.placeholder\": \"이메일로 받은 토큰을 입력하세요\",\n \"resetPassword.password.label\": \"새 비밀번호\",\n \"resetPassword.password.placeholder\": \"새 비밀번호를 입력하세요\",\n \"resetPassword.confirmPassword.label\": \"새 비밀번호 확인\",\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 \"accountSelect.title\": \"계정 선택\",\n \"accountSelect.subtitle\": \"이 애플리케이션에 계속하려면 계정을 선택하세요\",\n \"accountSelect.unavailable\": \"계정 선택을 사용할 수 없습니다\",\n \"accountSelect.noRememberedAccounts\": \"이 브라우저 세션에 기억된 계정이 없습니다.\",\n \"accountSelect.currentAccount\": \"현재 계정\",\n \"accountSelect.rememberedAccount\": \"기억된 계정\",\n \"accountSelect.current\": \"현재\",\n \"accountSelect.removeAccount\": \"{{email}} 제거\",\n \"accountSelect.useAnotherAccount\": \"다른 계정 사용\",\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.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.nameLabel\": \"패스키 이름\",\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.stepProgress\": \"{{total}}단계 중 {{current}}단계\",\n \"setupTotp.steps.scan\": \"스캔\",\n \"setupTotp.steps.verify\": \"확인\",\n \"setupTotp.steps.saveCodes\": \"코드 저장\",\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.unsupported\": \"이 브라우저나 앱에서는 패스키를 사용할 수 없습니다.\",\n \"verifyPasskey.error.notAllowed\": \"패스키 인증을 완료하지 못했습니다. 인앱 브라우저에서는 패스키가 차단될 수 있습니다.\",\n \"verifyPasskey.error.failed\": \"패스키 인증에 실패했습니다. 다시 시도해주세요.\",\n \"verifyPasskey.useTotp\": \"인증 앱 코드로 인증\",\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.error.unsupported\": \"이 브라우저나 앱에서는 패스키를 사용할 수 없습니다.\",\n \"setupPasskey.error.notAllowed\": \"패스키 등록을 완료하지 못했습니다. 인앱 브라우저에서는 패스키가 차단될 수 있습니다.\",\n \"setupPasskey.error.expired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"setupPasskey.useTotp\": \"인증 앱으로 설정\",\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.additionalOptionalConsent\": \"추가 선택 동의\",\n \"terms.view\": \"보기\",\n \"terms.viewSpecific\": \"{{title}} 보기\",\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\": \"Issuary 관리자\",\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 = 'issuary-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","import { useCallback, useEffect, useSyncExternalStore } from 'react';\n\ntype ColorScheme = 'light' | 'dark';\n\nconst STORAGE_KEY = 'issuary-color-scheme';\n\nconst COLOR_SCHEME_CHANGE_EVENT = 'issuary-color-scheme-change';\n\nfunction getOsPreference(): ColorScheme {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\nfunction getStoredColorScheme(): ColorScheme | null {\n if (typeof window === 'undefined') return null;\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === 'light' || stored === 'dark') {\n return stored;\n }\n return null;\n}\n\nfunction applyColorScheme(scheme: ColorScheme) {\n document.documentElement.setAttribute(\n 'data-theme',\n scheme === 'dark' ? 'tinyrack-dark' : 'tinyrack-light',\n );\n}\n\nfunction subscribeToColorSchemeChanges(callback: () => void): () => void {\n window.addEventListener(COLOR_SCHEME_CHANGE_EVENT, callback);\n window.addEventListener('storage', callback);\n return () => {\n window.removeEventListener(COLOR_SCHEME_CHANGE_EVENT, callback);\n window.removeEventListener('storage', callback);\n };\n}\n\nfunction getColorSchemeSnapshot(): ColorScheme | null {\n return getStoredColorScheme();\n}\n\nfunction getColorSchemeServerSnapshot(): ColorScheme | null {\n return null;\n}\n\n/**\n * Inline script string for anti-flicker.\n * Place this in HTML <head> to set data-theme before React renders.\n */\nexport const colorSchemeInitScript = `(function(){var s=localStorage.getItem('${STORAGE_KEY}');var c=s||(window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light');document.documentElement.setAttribute('data-theme',c==='dark'?'tinyrack-dark':'tinyrack-light')})()`;\n\nexport function useColorScheme() {\n const storedScheme = useSyncExternalStore(\n subscribeToColorSchemeChanges,\n getColorSchemeSnapshot,\n getColorSchemeServerSnapshot,\n );\n\n const hasStoredPreference = storedScheme !== null;\n\n const colorScheme: ColorScheme = hasStoredPreference\n ? (storedScheme as ColorScheme)\n : getOsPreference();\n\n useEffect(() => {\n applyColorScheme(colorScheme);\n }, [colorScheme]);\n\n useEffect(() => {\n if (hasStoredPreference) return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n applyColorScheme(mediaQuery.matches ? 'dark' : 'light');\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [hasStoredPreference]);\n\n const toggleColorScheme = useCallback(() => {\n const next: ColorScheme = colorScheme === 'dark' ? 'light' : 'dark';\n localStorage.setItem(STORAGE_KEY, next);\n window.dispatchEvent(new CustomEvent(COLOR_SCHEME_CHANGE_EVENT));\n }, [colorScheme]);\n\n return { colorScheme, toggleColorScheme };\n}\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/issuary-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 { IssuaryError } from './error';\n\n/**\n * Custom fetch that adds Accept-Language header\n * and converts error responses to IssuaryError.\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 IssuaryError.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 `IssuaryError` 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 // 2FA\n pendingSecondFactorMethods: () => ['/api/auth/2fa/methods'] as const,\n\n // 앱 설정\n config: () => ['/api/config'] as const,\n\n // OAuth\n oauth: {\n accounts: () => ['/api/user/oauth-accounts'] as const,\n authorizationContext: (\n clientId: string,\n redirectUri: string,\n responseType: string,\n scope?: string,\n ) =>\n [\n '/api/oauth/authorization-context',\n clientId,\n redirectUri,\n responseType,\n scope,\n ] 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 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"],"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,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,137,138,139],"mappings":"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"}
|