@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":"terms-BHDAgn-H.js","names":["standardSchemaResolver","useMutation","useQueryClient","useSuspenseQuery","useRouter","TRButton","TriangleAlertIcon","useMemo","useForm","useTranslation","z","AuthPageHeader","TermsCheckboxList","Alert","LabeledSeparator","AuthLayout","tick","appConfigQueryOptions","getSessionQueryOptions","getTermsQueryOptions","termsConsentMutationOptions","Route","Terms","t","i18n","router","queryClient","search","useSearch","data","configData","lang","language","termsQuery","implicitNotice","registration","signup_notice","fallback_language","explicitTerms","terms","filter","term","consentMode","implicitTerms","hasExplicitTerms","length","termsSchema","object","termsConsents","Object","fromEntries","map","id","required","literal","message","boolean","TermsFormValues","TermsConsentsField","handleSubmit","control","setValue","formState","errors","defaultValues","userConsent","agreed","requiresUpdate","resolver","mode","consentMutation","onSuccess","invalidateQueries","queryKey","fetchQuery","redirect","window","location","href","navigate","to","onSubmit","values","explicitConsents","entries","TermsConsentItem","termsId","consentType","implicitConsents","mutate","consents","registration_token","registrationToken","__html","isPending","isError","component"],"sources":["../../../frontend/src/routes/terms/index.tsx?tsr-split=component"],"sourcesContent":["import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport {\n createFileRoute,\n type ErrorComponentProps,\n redirect,\n useRouter,\n} from '@tanstack/react-router';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TriangleAlertIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport {\n TermsCheckboxList,\n type TermsConsentsField,\n} from '#frontend/components/terms/terms-checkbox-list.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { LabeledSeparator } from '#frontend/components/ui/labeled-separator.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\nimport { OAuthSearchSchema } from '#frontend/libs/oauth-search.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n getTermsQueryOptions,\n type TermsConsentItem,\n termsConsentMutationOptions,\n} from '#frontend/queries/terms.ts';\n\nconst TermsSearchSchema = OAuthSearchSchema.extend({\n redirect: z.string().optional(),\n lang: z.string().optional(),\n mode: z.enum(['normal', 'complete_registration']).optional(),\n registration_token: z.string().optional(),\n});\n\nfunction TermsError(props: ErrorComponentProps) {\n return (\n <RouteErrorFallback\n {...props}\n onUnauthorized={() => {\n window.location.href = '/login';\n }}\n />\n );\n}\n\nexport const Route = createFileRoute('/terms/')({\n component: Terms,\n errorComponent: TermsError,\n validateSearch: TermsSearchSchema,\n beforeLoad: async ({ context, search }) => {\n // When mode=complete_registration, user is completing OAuth signup.\n // The registration_token in the URL references a DB record with OAuth data.\n // Skip auth check — backend will validate the token on consent submission.\n if (search.mode === 'complete_registration') {\n return;\n }\n\n // Standard mode: requires authentication\n // Users are redirected here after OAuth login when they need to agree to terms\n if (!context.user) {\n throw redirect({\n to: '/login',\n });\n }\n },\n loaderDeps: ({ search }) => ({\n lang: search.lang,\n }),\n loader: async ({ context, deps }) => {\n const lang = deps.lang ?? context.i18n.language;\n await Promise.all([\n context.queryClient.ensureQueryData(getTermsQueryOptions(lang)),\n context.queryClient.ensureQueryData(appConfigQueryOptions),\n ]);\n },\n});\n\nfunction Terms() {\n const { t, i18n } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n\n const { data: configData } = useSuspenseQuery(appConfigQueryOptions);\n const lang = search.lang ?? i18n.language;\n const termsQuery = useSuspenseQuery(getTermsQueryOptions(lang));\n const implicitNotice =\n configData.registration.signup_notice?.[lang] ??\n configData.registration.signup_notice?.[configData.i18n.fallback_language];\n\n // Separate explicit and implicit terms\n const explicitTerms = useMemo(\n () =>\n termsQuery.data.terms.filter((term) => term.consentMode === 'explicit'),\n [termsQuery.data.terms],\n );\n\n const implicitTerms = useMemo(\n () =>\n termsQuery.data.terms.filter((term) => term.consentMode === 'implicit'),\n [termsQuery.data.terms],\n );\n\n const hasExplicitTerms = explicitTerms.length > 0;\n\n // Schema only validates explicit terms (implicit are auto-agreed)\n const termsSchema = useMemo(\n () =>\n z.object({\n termsConsents: z.object(\n Object.fromEntries(\n explicitTerms.map((term) => [\n term.id,\n term.required\n ? z.literal(true, {\n message: t('validation.terms.required'),\n })\n : z.boolean(),\n ]),\n ),\n ),\n }),\n [t, explicitTerms],\n );\n\n type TermsFormValues = TermsConsentsField;\n\n const {\n handleSubmit,\n control,\n setValue,\n formState: { errors },\n } = useForm<TermsFormValues>({\n defaultValues: {\n termsConsents: Object.fromEntries(\n explicitTerms.map((term) => [\n term.id,\n !!(term.userConsent?.agreed && !term.userConsent.requiresUpdate),\n ]),\n ),\n },\n resolver: standardSchemaResolver(termsSchema),\n mode: 'onChange',\n });\n\n const consentMutation = useMutation({\n ...termsConsentMutationOptions,\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n await queryClient.fetchQuery(getSessionQueryOptions);\n await tick();\n\n // Redirect after successful consent\n if (search.redirect) {\n window.location.href = search.redirect;\n } else {\n router.navigate({ to: '/profile' });\n }\n },\n });\n\n const onSubmit = (values: TermsFormValues) => {\n const explicitConsents = Object.entries(\n values.termsConsents,\n ).map<TermsConsentItem>(([termsId, agreed]) => ({\n termsId,\n agreed,\n consentType: 'explicit',\n }));\n\n const implicitConsents = implicitTerms.map<TermsConsentItem>((term) => ({\n termsId: term.id,\n agreed: true,\n consentType: 'implicit',\n }));\n\n consentMutation.mutate({\n consents: [...explicitConsents, ...implicitConsents],\n ...(search.registration_token && {\n registrationToken: search.registration_token,\n }),\n });\n };\n\n return (\n <AuthLayout width=\"wide\">\n <AuthPageHeader title={t('terms.title')} />\n\n {implicitNotice && (\n <div\n className=\"prose prose-sm text-center text-tinyrack-text-muted text-tinyrack-xs! **:text-tinyrack-xs!\"\n dangerouslySetInnerHTML={{ __html: implicitNotice }}\n />\n )}\n\n {implicitNotice && hasExplicitTerms && (\n <LabeledSeparator label={t('terms.additionalOptionalConsent')} />\n )}\n\n <form\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n {/* Explicit terms with checkboxes */}\n {hasExplicitTerms && (\n <TermsCheckboxList\n control={control}\n disabled={consentMutation.isPending}\n errors={errors}\n setValue={setValue}\n terms={explicitTerms}\n />\n )}\n\n {/* Error message */}\n {consentMutation.isError && (\n <Alert icon={TriangleAlertIcon} type=\"error\">\n {t('terms.error.submitFailed')}\n </Alert>\n )}\n\n {/*\n Sticky, like consent: a long list of terms would otherwise push the\n only action off the bottom of the screen.\n */}\n <div className=\"sticky bottom-0 flex gap-tinyrack-sm border-tinyrack-border border-t-tinyrack-default bg-tinyrack-surface/80 py-tinyrack-md backdrop-blur-sm\">\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={consentMutation.isPending}\n loadingLabel={t('terms.submit')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('terms.submit')}\n </TRButton>\n </div>\n </form>\n </AuthLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,Z as t,i as n,q as r,s as i}from"./createLucideIcon-BPpAIXR_.js";import{t as a}from"./badge-CsOfUji0.js";import{t as o}from"./checkbox-gdHnSFQ-.js";import{t as s}from"./modal-BDQFucjz.js";import{t as c}from"./link-C-WdTj3F.js";import{i as l,n as u}from"./standard-schema-e8gtSzGE.js";var d=t(e(),1),f=r();function p({isOpen:e,onClose:t,title:n,content:r}){return(0,f.jsx)(s,{isOpen:e,onClose:t,size:`lg`,title:n,children:(0,f.jsx)(`div`,{className:`prose prose-sm mt-tinyrack-md max-h-dvh overflow-y-auto`,dangerouslySetInnerHTML:{__html:r}})})}function m({terms:e,control:t,setValue:r,errors:s,disabled:m=!1}){let{t:g}=n(),[_,v]=(0,d.useState)(null),y=l({control:t,name:`termsConsents`}),b=t=>{for(let n of e)r(`termsConsents.${n.id}`,t,{shouldValidate:!0})},x=e.every(e=>y?.[e.id]),S=e.some(e=>!e.required),C=s?.termsConsents,w=e=>e.title===e.id?h(e.id):e.title;return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`space-y-tinyrack-xs`,children:[e.length>1&&(0,f.jsxs)(`div`,{className:`flex cursor-pointer items-center gap-tinyrack-sm py-[calc(var(--tinyrack-space-3xs)*2)]`,children:[(0,f.jsx)(o.Root,{"aria-labelledby":`terms-all-label`,checked:x,"data-testid":`terms-checkbox`,disabled:m,onCheckedChange:b,children:(0,f.jsx)(o.Indicator,{})}),(0,f.jsx)(`span`,{className:`font-tinyrack-medium text-tinyrack-xs`,id:`terms-all-label`,children:g(`terms.agreeAll`)}),S&&(0,f.jsx)(`span`,{className:`text-tinyrack-text-muted text-tinyrack-xs`,children:g(`terms.agreeAllOptionalIncluded`)})]}),e.map(e=>(0,f.jsx)(u,{control:t,name:`termsConsents.${e.id}`,render:({field:t})=>(0,f.jsxs)(`div`,{children:[(0,f.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm py-[calc(var(--tinyrack-space-3xs)*2)]`,children:[(0,f.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-tinyrack-sm`,children:[(0,f.jsx)(o.Root,{"aria-labelledby":`term-label-${e.id}`,checked:t.value===!0,"data-testid":`terms-checkbox`,disabled:m,onCheckedChange:e=>t.onChange(e===!0),children:(0,f.jsx)(o.Indicator,{})}),(0,f.jsx)(`span`,{className:`truncate text-tinyrack-xs`,id:`term-label-${e.id}`,children:w(e)}),(0,f.jsx)(a,{"data-testid":e.required?`terms-badge-required`:`terms-badge-optional`,uiSize:`md`,variant:e.required?`danger`:`neutral`,children:e.required?g(`terms.required`):g(`terms.optional`)})]}),e.type===`link`&&e.content&&(0,f.jsx)(c,{"aria-label":g(`terms.viewSpecific`,{title:w(e)}),className:`shrink-0 text-tinyrack-xs`,href:e.content,rel:`noopener noreferrer`,target:`_blank`,children:g(`terms.view`)}),e.type===`text`&&e.content&&(0,f.jsx)(i,{appearance:`ghost`,"aria-label":g(`terms.viewSpecific`,{title:w(e)}),className:`shrink-0 text-tinyrack-xs`,onClick:()=>v(e),type:`button`,uiSize:`sm`,children:g(`terms.view`)})]}),e.userConsent?.requiresUpdate&&(0,f.jsx)(`p`,{className:`ml-tinyrack-xl text-tinyrack-warning text-tinyrack-xs`,children:g(`terms.versionUpdated`)}),C?.[e.id]&&(0,f.jsx)(`p`,{className:`ml-tinyrack-xl text-tinyrack-danger text-tinyrack-xs`,"data-testid":`terms-field-error`,children:C[e.id]?.message})]})},e.id))]}),(0,f.jsx)(p,{content:_?.content??``,isOpen:_!==null,onClose:()=>v(null),title:_?.title??``})]})}function h(e){return e.replaceAll(`-`,` `).replaceAll(`_`,` `).replace(/([a-zA-Z])(\d)/g,`$1 $2`).split(` `).filter(e=>e.length>0).map(e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(` `)}export{m as t};
|
|
2
|
+
//# sourceMappingURL=terms-checkbox-list-6jteUTIZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms-checkbox-list-6jteUTIZ.js","names":[],"sources":["../../../frontend/src/components/terms/terms-content-modal.tsx","../../../frontend/src/components/terms/terms-checkbox-list.tsx"],"sourcesContent":["import { Modal } from '#frontend/components/ui/modal.tsx';\n\ntype TermsContentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n content: string;\n};\n\nexport function TermsContentModal({\n isOpen,\n onClose,\n title,\n content,\n}: TermsContentModalProps) {\n return (\n <Modal isOpen={isOpen} onClose={onClose} size=\"lg\" title={title}>\n <div\n className=\"prose prose-sm mt-tinyrack-md max-h-dvh overflow-y-auto\"\n dangerouslySetInnerHTML={{ __html: content }}\n />\n </Modal>\n );\n}\n","import { TRBadge } from '@tinyrack/ui/components/badge';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCheckbox } from '@tinyrack/ui/components/checkbox';\nimport { TRLink } from '@tinyrack/ui/components/link';\nimport { useState } from 'react';\nimport {\n type Control,\n Controller,\n type FieldErrors,\n type FieldValues,\n type Path,\n type PathValue,\n type UseFormSetValue,\n useWatch,\n} from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { TermItem } from '#frontend/queries/terms.ts';\nimport { TermsContentModal } from './terms-content-modal.tsx';\n\nexport type TermsConsentsField = {\n termsConsents: Record<string, boolean>;\n};\n\ntype TermsCheckboxListProps<T extends FieldValues & TermsConsentsField> = {\n terms: TermItem[];\n control: Control<T>;\n setValue: UseFormSetValue<T>;\n errors?: FieldErrors<T>;\n disabled?: boolean;\n};\n\nexport function TermsCheckboxList<T extends FieldValues & TermsConsentsField>({\n terms,\n control,\n setValue,\n errors,\n disabled = false,\n}: TermsCheckboxListProps<T>) {\n const { t } = useTranslation();\n const [modalTerm, setModalTerm] = useState<TermItem | null>(null);\n\n const termsConsents = useWatch({\n control,\n name: 'termsConsents' as Path<T>,\n }) as Record<string, boolean> | undefined;\n\n const handleAllChange = (checked: boolean) => {\n for (const term of terms) {\n setValue(\n `termsConsents.${term.id}` as Path<T>,\n checked as PathValue<T, Path<T>>,\n { shouldValidate: true },\n );\n }\n };\n\n const allChecked = terms.every((term) => termsConsents?.[term.id]);\n\n const hasOptionalTerms = terms.some((term) => !term.required);\n\n const termsConsentsErrors = errors?.termsConsents as\n | Record<string, { message?: string }>\n | undefined;\n\n const getTermTitle = (term: TermItem) => {\n if (term.title !== term.id) {\n return term.title;\n }\n\n return humanizeTermId(term.id);\n };\n\n return (\n <>\n <div className=\"space-y-tinyrack-xs\">\n {terms.length > 1 && (\n <div className=\"flex cursor-pointer items-center gap-tinyrack-sm py-[calc(var(--tinyrack-space-3xs)*2)]\">\n <TRCheckbox.Root\n aria-labelledby=\"terms-all-label\"\n checked={allChecked}\n data-testid=\"terms-checkbox\"\n disabled={disabled}\n onCheckedChange={handleAllChange}\n >\n <TRCheckbox.Indicator />\n </TRCheckbox.Root>\n <span\n className=\"font-tinyrack-medium text-tinyrack-xs\"\n id=\"terms-all-label\"\n >\n {t('terms.agreeAll')}\n </span>\n {hasOptionalTerms && (\n <span className=\"text-tinyrack-text-muted text-tinyrack-xs\">\n {t('terms.agreeAllOptionalIncluded')}\n </span>\n )}\n </div>\n )}\n\n {terms.map((term) => (\n <Controller\n control={control}\n key={term.id}\n name={`termsConsents.${term.id}` as Path<T>}\n render={({ field }) => (\n <div>\n <div className=\"flex items-center gap-tinyrack-sm py-[calc(var(--tinyrack-space-3xs)*2)]\">\n <div className=\"flex min-w-0 flex-1 items-center gap-tinyrack-sm\">\n <TRCheckbox.Root\n aria-labelledby={`term-label-${term.id}`}\n checked={field.value === true}\n data-testid=\"terms-checkbox\"\n disabled={disabled}\n onCheckedChange={(checked) =>\n field.onChange(checked === true)\n }\n >\n <TRCheckbox.Indicator />\n </TRCheckbox.Root>\n <span\n className=\"truncate text-tinyrack-xs\"\n id={`term-label-${term.id}`}\n >\n {getTermTitle(term)}\n </span>\n <TRBadge\n data-testid={\n term.required\n ? 'terms-badge-required'\n : 'terms-badge-optional'\n }\n uiSize=\"md\"\n variant={term.required ? 'danger' : 'neutral'}\n >\n {term.required\n ? t('terms.required')\n : t('terms.optional')}\n </TRBadge>\n </div>\n {term.type === 'link' && term.content && (\n <TRLink\n aria-label={t('terms.viewSpecific', {\n title: getTermTitle(term),\n })}\n className=\"shrink-0 text-tinyrack-xs\"\n href={term.content}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t('terms.view')}\n </TRLink>\n )}\n {term.type === 'text' && term.content && (\n <TRButton\n appearance=\"ghost\"\n aria-label={t('terms.viewSpecific', {\n title: getTermTitle(term),\n })}\n className=\"shrink-0 text-tinyrack-xs\"\n onClick={() => setModalTerm(term)}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('terms.view')}\n </TRButton>\n )}\n </div>\n {term.userConsent?.requiresUpdate && (\n <p className=\"ml-tinyrack-xl text-tinyrack-warning text-tinyrack-xs\">\n {t('terms.versionUpdated')}\n </p>\n )}\n {termsConsentsErrors?.[term.id] && (\n <p\n className=\"ml-tinyrack-xl text-tinyrack-danger text-tinyrack-xs\"\n data-testid=\"terms-field-error\"\n >\n {termsConsentsErrors[term.id]?.message}\n </p>\n )}\n </div>\n )}\n />\n ))}\n </div>\n\n <TermsContentModal\n content={modalTerm?.content ?? ''}\n isOpen={modalTerm !== null}\n onClose={() => setModalTerm(null)}\n title={modalTerm?.title ?? ''}\n />\n </>\n );\n}\n\nfunction humanizeTermId(id: string): string {\n const words = id\n .replaceAll('-', ' ')\n .replaceAll('_', ' ')\n .replace(/([a-zA-Z])(\\d)/g, '$1 $2')\n .split(' ')\n .filter((word) => word.length > 0);\n\n return words\n .map((word) => `${word.charAt(0).toUpperCase()}${word.slice(1)}`)\n .join(' ');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,r as t}from"./config-DTQCUlfZ.js";import{t as n}from"./mutationOptions-DyYFUbyn.js";var r=n({mutationFn:async()=>e(await t.api.user.totp.setup.$post())}),i=n({mutationFn:async n=>e(await t.api.user.totp.verify.$post({json:n}))}),a=n({mutationFn:async()=>e(await t.api.user.totp.confirm.$post({json:{}}))}),o=n({mutationFn:async n=>e(await t.api.user.totp.$delete({json:n}))}),s=n({mutationFn:async n=>e(await t.api.user.totp.recovery.regenerate.$post({json:n}))}),c=n({mutationFn:async n=>e(await t.api.auth.totp.verify.$post({json:n}))}),l=n({mutationFn:async n=>e(await t.api.auth.totp.recovery.verify.$post({json:n}))});export{l as a,r as i,o as n,c as o,s as r,i as s,a as t};
|
|
2
|
+
//# sourceMappingURL=totp-BNZ904Zm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp-BNZ904Zm.js","names":[],"sources":["../../../frontend/src/queries/totp.ts"],"sourcesContent":["import { mutationOptions } from '@tanstack/react-query';\nimport type { InferRequestType, InferResponseType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\nexport type TotpSetupResponse = InferResponseType<\n (typeof client.api.user.totp.setup)['$post'],\n 200\n>;\n\nexport type TotpSetupVerifyResponse = InferResponseType<\n (typeof client.api.user.totp.verify)['$post'],\n 200\n>;\n\nexport type TotpConfirmResponse = InferResponseType<\n (typeof client.api.user.totp.confirm)['$post'],\n 200\n>;\n\nexport type RegenerateTotpRecoveryCodesResponse = InferResponseType<\n (typeof client.api.user.totp.recovery.regenerate)['$post'],\n 200\n>;\n\nexport type TotpLoginVerifyResponse = InferResponseType<\n (typeof client.api.auth.totp.verify)['$post'],\n 200\n>;\n\n/**\n * Start TOTP setup - generates secret and QR code\n */\nexport const startTotpSetupMutationOptions = mutationOptions({\n mutationFn: async () => {\n const res = await client.api.user.totp.setup.$post();\n return jsonOk(res);\n },\n});\n\n/**\n * Verify TOTP code during setup (returns recovery codes)\n */\nexport type VerifyTotpParams = InferRequestType<\n (typeof client.api.user.totp.verify)['$post']\n>['json'];\n\nexport const verifyTotpMutationOptions = mutationOptions({\n mutationFn: async (values: VerifyTotpParams) => {\n const res = await client.api.user.totp.verify.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Confirm TOTP setup after user acknowledges recovery\n * codes\n */\nexport const confirmTotpSetupMutationOptions = mutationOptions({\n mutationFn: async () => {\n const res = await client.api.user.totp.confirm.$post({\n json: {},\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Disable TOTP authentication\n */\nexport type DisableTotpParams = InferRequestType<\n (typeof client.api.user.totp)['$delete']\n>['json'];\n\nexport const disableTotpMutationOptions = mutationOptions({\n mutationFn: async (values: DisableTotpParams) => {\n const res = await client.api.user.totp.$delete({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\nexport type RegenerateTotpRecoveryCodesParams = InferRequestType<\n (typeof client.api.user.totp.recovery.regenerate)['$post']\n>['json'];\n\nexport const regenerateTotpRecoveryCodesMutationOptions = mutationOptions({\n mutationFn: async (values: RegenerateTotpRecoveryCodesParams) => {\n const res = await client.api.user.totp.recovery.regenerate.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Verify TOTP code during login (complete 2FA login)\n */\nexport type VerifyTotpLoginParams = InferRequestType<\n (typeof client.api.auth.totp.verify)['$post']\n>['json'];\n\nexport const verifyTotpLoginMutationOptions = mutationOptions({\n mutationFn: async (values: VerifyTotpLoginParams) => {\n const res = await client.api.auth.totp.verify.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Verify recovery code during login (complete 2FA login)\n */\nexport type VerifyRecoveryCodeParams = InferRequestType<\n (typeof client.api.auth.totp.recovery.verify)['$post']\n>['json'];\n\nexport type VerifyRecoveryCodeResponse = InferResponseType<\n (typeof client.api.auth.totp.recovery.verify)['$post'],\n 200\n>;\n\nexport const verifyRecoveryCodeMutationOptions = mutationOptions({\n mutationFn: async (values: VerifyRecoveryCodeParams) => {\n const res = await client.api.auth.totp.recovery.verify.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n"],"mappings":"kGAgCA,IAAa,EAAgC,EAAgB,CAC3D,WAAY,SAEH,EAAO,MADI,EAAO,IAAI,KAAK,KAAK,MAAM,MAAM,CAClC,CAErB,CAAC,EASY,EAA4B,EAAgB,CACvD,WAAY,KAAO,IAIV,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,OAAO,MAAM,CAClD,KAAM,CACR,CAAC,CACgB,CAErB,CAAC,EAMY,EAAkC,EAAgB,CAC7D,WAAY,SAIH,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,QAAQ,MAAM,CACnD,KAAM,CAAC,CACT,CAAC,CACgB,CAErB,CAAC,EASY,EAA6B,EAAgB,CACxD,WAAY,KAAO,IAIV,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,QAAQ,CAC7C,KAAM,CACR,CAAC,CACgB,CAErB,CAAC,EAMY,EAA6C,EAAgB,CACxE,WAAY,KAAO,IAIV,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,SAAS,WAAW,MAAM,CAC/D,KAAM,CACR,CAAC,CACgB,CAErB,CAAC,EASY,EAAiC,EAAgB,CAC5D,WAAY,KAAO,IAIV,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,OAAO,MAAM,CAClD,KAAM,CACR,CAAC,CACgB,CAErB,CAAC,EAcY,EAAoC,EAAgB,CAC/D,WAAY,KAAO,IAIV,EAAO,MAHI,EAAO,IAAI,KAAK,KAAK,SAAS,OAAO,MAAM,CAC3D,KAAM,CACR,CAAC,CACgB,CAErB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,Z as t,i as n,q as r,r as i,s as a}from"./createLucideIcon-BPpAIXR_.js";import{On as o,Sn as s,Sr as c}from"./config-DTQCUlfZ.js";import{t as l}from"./useMutation-BWZ0G4Td.js";import{c as u,o as d}from"./zod-C87S6Tec.js";import{F as f,N as p,R as m,S as h,h as g,j as _}from"./index-CS23Ozt6.js";import{t as v}from"./auth-page-header-CIn2E4zI.js";import{t as y}from"./alert-leqyvHOp.js";import{t as b}from"./auth-layout-VtpryDof.js";import{t as x}from"./promise-OpBtq8tG.js";import{n as S,t as C}from"./auth-footer-Cz5ivsDc.js";import{r as w,t as T}from"./standard-schema-e8gtSzGE.js";import{o as E}from"./totp-BNZ904Zm.js";import{t as D}from"./pin-input-Cc-VkrQ3.js";import{t as O}from"./labeled-separator-CV7nb0XW.js";var k=t(e()),A=r(),j={SECOND_FACTOR_SESSION_EXPIRED:`SECOND_FACTOR_SESSION_EXPIRED`,INVALID_TOTP_CODE:`INVALID_TOTP_CODE`,TOTP_NOT_ENABLED:`TOTP_NOT_ENABLED`},M=5;function N(){let{t:e}=n(),t=o(),r=c(),N=g.useSearch(),P=(0,k.useRef)(null),[F,I]=(0,k.useState)(!1),[L,R]=(0,k.useState)(M),z=(0,k.useMemo)(()=>d({code:u().length(6,e(`validation.totp.length`)).regex(/^\d{6}$/,e(`validation.totp.digits`))}),[e]),B=l({...E,onSuccess:async e=>{r.setQueryData(h.queryKey,{user:e.user}),await x(),f(N)?window.location.href=_(N):t.navigate({to:`/profile`})},onSettled:()=>{r.invalidateQueries({queryKey:h.queryKey})}}),{setValue:V,setError:H,handleSubmit:U,watch:W,formState:{errors:G}}=w({defaultValues:{code:``},resolver:T(z)}),K=W(`code`),q=(0,k.useCallback)(()=>{t.navigate({to:`/login`,search:p(N)})},[t,N]);(0,k.useEffect)(()=>{if(!F)return;let e=setInterval(()=>{R(t=>t<=1?(clearInterval(e),q(),0):t-1)},1e3);return()=>clearInterval(e)},[F,q]);let J=async t=>{try{await B.mutateAsync(t)}catch(t){if(t instanceof i)switch(t.code){case j.SECOND_FACTOR_SESSION_EXPIRED:I(!0),R(M);return;case j.TOTP_NOT_ENABLED:q();return;case j.INVALID_TOTP_CODE:H(`code`,{type:`manual`,message:e(`verifyTotp.error.invalid`)}),V(`code`,``),P.current?.focus();return}H(`code`,{type:`manual`,message:e(`verifyTotp.error.invalid`)}),V(`code`,``),P.current?.focus()}};return(0,A.jsxs)(b,{children:[(0,A.jsx)(v,{subtitle:e(`verifyTotp.subtitle`),title:e(`verifyTotp.title`)}),F&&(0,A.jsx)(y,{"data-testid":`totp-verify-session-expired`,icon:m,type:`warning`,children:(0,A.jsxs)(`span`,{className:`flex flex-col items-start gap-tinyrack-3xs`,children:[(0,A.jsx)(`span`,{children:e(`verifyTotp.error.expired`)}),(0,A.jsx)(`span`,{className:`text-tinyrack-sm opacity-tinyrack-hover`,children:e(`verifyTotp.redirecting`,{seconds:L})}),(0,A.jsx)(a,{appearance:`ghost`,intent:`neutral`,onClick:q,type:`button`,uiSize:`sm`,children:e(`verifyTotp.redirectNow`)})]})}),(0,A.jsxs)(`form`,{className:`flex flex-col gap-tinyrack-lg`,onSubmit:U(J),children:[(0,A.jsx)(D,{autoFocus:!0,disabled:F,error:G.code,length:6,onChange:e=>V(`code`,e),onComplete:()=>U(J)(),ref:P,value:K}),F?(0,A.jsx)(a,{className:`w-full`,disabled:!0,intent:`primary`,type:`button`,uiSize:`lg`,children:e(`verifyTotp.submit`)}):(0,A.jsx)(a,{className:`w-full`,intent:`primary`,loading:B.isPending,loadingLabel:e(`verifyTotp.submitting`),type:`submit`,uiSize:`lg`,children:e(`verifyTotp.submit`)})]}),(0,A.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-md`,children:[(0,A.jsx)(O,{label:e(`common.or`)}),(0,A.jsx)(a,{appearance:`ghost`,className:`w-full`,"data-testid":`totp-verify-recovery-link`,intent:`neutral`,onClick:()=>t.navigate({to:`/verify/totp/recovery`,search:p(N)}),type:`button`,children:e(`verifyTotp.useRecoveryCode`)})]}),(0,A.jsx)(C,{children:(0,A.jsx)(S,{link:(0,A.jsx)(s,{search:p(N),to:`/login`,children:e(`verifyTotp.backToLogin`)})})})]})}export{N as component};
|
|
2
|
+
//# sourceMappingURL=totp-CJtfVNEq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp-CJtfVNEq.js","names":["standardSchemaResolver","useMutation","useQueryClient","Link","useRouter","TRButton","CircleAlertIcon","useCallback","useEffect","useMemo","useRef","useState","useForm","useTranslation","z","AuthFooter","AuthFooterLink","AuthPageHeader","Alert","LabeledSeparator","PinInput","AuthLayout","IssuaryError","buildAuthenticatedAuthorizeUrl","extractOAuthParams","isOAuthFlow","tick","getSessionQueryOptions","verifyTotpLoginMutationOptions","ERROR_CODES","SECOND_FACTOR_SESSION_EXPIRED","INVALID_TOTP_CODE","TOTP_NOT_ENABLED","const","Route","VerifyTotpFormValues","code","REDIRECT_COUNTDOWN_SECONDS","VerifyTotp","t","router","queryClient","search","useSearch","pinInputRef","PinInputRef","sessionExpired","setSessionExpired","redirectCountdown","setRedirectCountdown","verifySchema","object","string","length","regex","verifyMutation","onSuccess","data","setQueryData","queryKey","user","window","location","href","navigate","to","onSettled","invalidateQueries","setValue","setError","handleSubmit","watch","formState","errors","defaultValues","resolver","codeValue","redirectToLogin","timer","setInterval","prev","clearInterval","onSubmit","values","mutateAsync","error","type","message","current","focus","seconds","value","isPending","component"],"sources":["../../../frontend/src/routes/verify/totp/index.tsx?tsr-split=component"],"sourcesContent":["import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { createFileRoute, Link, useRouter } from '@tanstack/react-router';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { CircleAlertIcon } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport {\n AuthFooter,\n AuthFooterLink,\n} from '#frontend/components/auth/auth-footer.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { LabeledSeparator } from '#frontend/components/ui/labeled-separator.tsx';\nimport {\n PinInput,\n type PinInputRef,\n} from '#frontend/components/ui/pin-input.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport {\n buildAuthenticatedAuthorizeUrl,\n extractOAuthParams,\n isOAuthFlow,\n OAuthSearchSchema,\n} from '#frontend/libs/oauth-search.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport { verifyTotpLoginMutationOptions } from '#frontend/queries/totp.ts';\n\n/** Error codes from backend */\nconst ERROR_CODES = {\n SECOND_FACTOR_SESSION_EXPIRED: 'SECOND_FACTOR_SESSION_EXPIRED',\n INVALID_TOTP_CODE: 'INVALID_TOTP_CODE',\n TOTP_NOT_ENABLED: 'TOTP_NOT_ENABLED',\n} as const;\n\nconst SearchSchema = OAuthSearchSchema;\n\nexport const Route = createFileRoute('/verify/totp/')({\n component: VerifyTotp,\n validateSearch: SearchSchema,\n});\n\ntype VerifyTotpFormValues = {\n code: string;\n};\n\n/** Auto redirect countdown seconds */\nconst REDIRECT_COUNTDOWN_SECONDS = 5;\n\nfunction VerifyTotp() {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n const pinInputRef = useRef<PinInputRef>(null);\n\n const [sessionExpired, setSessionExpired] = useState(false);\n const [redirectCountdown, setRedirectCountdown] = useState(\n REDIRECT_COUNTDOWN_SECONDS,\n );\n\n const verifySchema = useMemo(\n () =>\n z.object({\n code: z\n .string()\n .length(6, t('validation.totp.length'))\n .regex(/^\\d{6}$/, t('validation.totp.digits')),\n }),\n [t],\n );\n\n const verifyMutation = useMutation({\n ...verifyTotpLoginMutationOptions,\n onSuccess: async (data) => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: data.user,\n });\n await tick();\n\n if (isOAuthFlow(search)) {\n window.location.href = buildAuthenticatedAuthorizeUrl(search);\n } else {\n router.navigate({ to: '/profile' });\n }\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const {\n setValue,\n setError,\n handleSubmit,\n watch,\n formState: { errors },\n } = useForm<VerifyTotpFormValues>({\n defaultValues: {\n code: '',\n },\n resolver: standardSchemaResolver(verifySchema),\n });\n\n const codeValue = watch('code');\n\n // Auto redirect when session expires\n const redirectToLogin = useCallback(() => {\n router.navigate({\n to: '/login',\n search: extractOAuthParams(search),\n });\n }, [router, search]);\n\n useEffect(() => {\n if (!sessionExpired) return;\n\n const timer = setInterval(() => {\n setRedirectCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n redirectToLogin();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => clearInterval(timer);\n }, [sessionExpired, redirectToLogin]);\n\n const onSubmit = async (values: VerifyTotpFormValues) => {\n try {\n await verifyMutation.mutateAsync(values);\n } catch (error) {\n if (error instanceof IssuaryError) {\n switch (error.code) {\n case ERROR_CODES.SECOND_FACTOR_SESSION_EXPIRED:\n // Session expired - show alert and start auto redirect\n setSessionExpired(true);\n setRedirectCountdown(REDIRECT_COUNTDOWN_SECONDS);\n return;\n\n case ERROR_CODES.TOTP_NOT_ENABLED:\n // TOTP not enabled - redirect to login\n redirectToLogin();\n return;\n\n case ERROR_CODES.INVALID_TOTP_CODE:\n // Invalid code - show specific error and clear input\n setError('code', {\n type: 'manual',\n message: t('verifyTotp.error.invalid'),\n });\n setValue('code', '');\n pinInputRef.current?.focus();\n return;\n }\n }\n\n // Generic error fallback\n setError('code', {\n type: 'manual',\n message: t('verifyTotp.error.invalid'),\n });\n setValue('code', '');\n pinInputRef.current?.focus();\n }\n };\n\n return (\n <AuthLayout>\n <AuthPageHeader\n subtitle={t('verifyTotp.subtitle')}\n title={t('verifyTotp.title')}\n />\n\n {sessionExpired && (\n <Alert\n data-testid=\"totp-verify-session-expired\"\n icon={CircleAlertIcon}\n type=\"warning\"\n >\n <span className=\"flex flex-col items-start gap-tinyrack-3xs\">\n <span>{t('verifyTotp.error.expired')}</span>\n <span className=\"text-tinyrack-sm opacity-tinyrack-hover\">\n {t('verifyTotp.redirecting', { seconds: redirectCountdown })}\n </span>\n <TRButton\n appearance=\"ghost\"\n intent=\"neutral\"\n onClick={redirectToLogin}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('verifyTotp.redirectNow')}\n </TRButton>\n </span>\n </Alert>\n )}\n\n <form\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <PinInput\n autoFocus\n disabled={sessionExpired}\n error={errors.code}\n length={6}\n onChange={(value) => setValue('code', value)}\n onComplete={() => handleSubmit(onSubmit)()}\n ref={pinInputRef}\n value={codeValue}\n />\n\n {sessionExpired ? (\n <TRButton\n className=\"w-full\"\n disabled\n intent=\"primary\"\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('verifyTotp.submit')}\n </TRButton>\n ) : (\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={verifyMutation.isPending}\n loadingLabel={t('verifyTotp.submitting')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('verifyTotp.submit')}\n </TRButton>\n )}\n </form>\n\n {/*\n The recovery code is the way out when the authenticator is gone, so it\n sits below the rule rather than in the footer with the navigation.\n */}\n <div className=\"flex flex-col gap-tinyrack-md\">\n <LabeledSeparator label={t('common.or')} />\n <TRButton\n appearance=\"ghost\"\n className=\"w-full\"\n data-testid=\"totp-verify-recovery-link\"\n intent=\"neutral\"\n onClick={() =>\n router.navigate({\n to: '/verify/totp/recovery',\n search: extractOAuthParams(search),\n })\n }\n type=\"button\"\n >\n {t('verifyTotp.useRecoveryCode')}\n </TRButton>\n </div>\n\n <AuthFooter>\n <AuthFooterLink\n link={\n <Link search={extractOAuthParams(search)} to=\"/login\">\n {t('verifyTotp.backToLogin')}\n </Link>\n }\n />\n </AuthFooter>\n </AuthLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,U as t,Z as n,i as r,n as i,q as a,r as o,s,t as c}from"./createLucideIcon-BPpAIXR_.js";import{On as ee,Sn as te,Sr as l}from"./config-DTQCUlfZ.js";import{a as u,i as d,n as f,r as p,t as m}from"./use-totp-setup-BbS3XcZA.js";import{t as h}from"./shield-check-D_p8H0ni.js";import{F as g,N as _,R as ne,S as re,d as ie,j as v}from"./index-CS23Ozt6.js";import{t as y}from"./auth-page-header-CIn2E4zI.js";import{n as b,t as x}from"./alert-leqyvHOp.js";import{t as S}from"./auth-layout-VtpryDof.js";import{t as C}from"./promise-OpBtq8tG.js";import{n as w,t as T}from"./auth-footer-Cz5ivsDc.js";var ae=c(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),E=n(e()),D=a();function oe({steps:e,current:t,progressLabel:n}){return(0,D.jsxs)(`div`,{className:`flex w-full flex-col gap-tinyrack-xs`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between gap-tinyrack-sm`,children:[(0,D.jsx)(i,{color:`muted`,variant:`label`,children:n}),(0,D.jsx)(i,{color:`muted`,variant:`caption`,children:e[t]})]}),(0,D.jsx)(`div`,{"aria-label":n,"aria-valuemax":e.length,"aria-valuemin":1,"aria-valuenow":t+1,className:`flex gap-tinyrack-xs`,role:`progressbar`,children:e.map((e,n)=>(0,D.jsx)(`span`,{"aria-hidden":!0,className:`h-tinyrack-xs flex-1 rounded-tinyrack-full transition-colors duration-tinyrack-normal ease-tinyrack-standard ${n<=t?`bg-tinyrack-primary`:`bg-tinyrack-surface-hover`}`},e))})]})}var O={TOTP_ALREADY_ENABLED:`TOTP_ALREADY_ENABLED`,TOTP_NOT_SETUP:`TOTP_NOT_SETUP`,INVALID_TOTP_CODE:`INVALID_TOTP_CODE`,UNAUTHORIZED:`UNAUTHORIZED`,SECOND_FACTOR_SESSION_EXPIRED:`SECOND_FACTOR_SESSION_EXPIRED`},k=5;function A(){let{t:e}=r(),n=ee(),i=l(),a=ie.useSearch(),[c,A]=(0,E.useState)(`generic`),[j,M]=(0,E.useState)(k),N=(0,E.useCallback)(()=>{n.navigate({to:`/login`,search:_(a)})},[n,a]),P=(0,E.useCallback)(()=>{n.navigate({to:`/profile`})},[n]),{step:F,setupData:I,recoveryCodes:L,isSetupPending:R,isVerifyPending:z,isConfirmPending:B,startSetup:V,verify:H,goToQr:U,goToVerify:W,confirmRecoveryCodes:G}=m({autoStart:!0,onSetupError:(0,E.useCallback)(e=>{if(e instanceof o)switch(e.code){case O.TOTP_ALREADY_ENABLED:A(`already_enabled`);break;case O.UNAUTHORIZED:case O.SECOND_FACTOR_SESSION_EXPIRED:A(`session_expired`),M(k);break;default:A(`generic`)}else A(`generic`)},[]),onVerifySuccess:(0,E.useCallback)(async e=>{await C()},[]),onConfirmSuccess:(0,E.useCallback)(async e=>{i.setQueryData(re.queryKey,{user:e.user}),await C(),g(a)?window.location.href=v(a):n.navigate({to:`/profile`})},[i,n,a]),onVerifyError:e=>{if(e instanceof o)switch(e.code){case O.TOTP_ALREADY_ENABLED:P();break;case O.UNAUTHORIZED:case O.SECOND_FACTOR_SESSION_EXPIRED:A(`session_expired`),M(k);break;case O.TOTP_NOT_SETUP:V();break}}});(0,E.useEffect)(()=>{if(c!==`session_expired`||F!==`error`)return;let e=setInterval(()=>{M(t=>t<=1?(clearInterval(e),N(),0):t-1)},1e3);return()=>clearInterval(e)},[c,F,N]);let K=(0,E.useCallback)(async e=>{await H(e)},[H]),q=F===`recovery`&&L.length>0,J=F===`qr`&&I!==null,Y=F!==`loading`&&F!==`error`,X=1;q?X=2:J&&(X=0);let Z=e(`setupTotp.title`),Q=e(`setupTotp.subtitle`);q?Z=e(`setupTotp.recoveryCodes.title`):Y&&!J&&(Z=e(`setupTotp.verifyTitle`),Q=e(`setupTotp.verifySubtitle`));let se=F===`error`||J,$;return $=F===`loading`?(0,D.jsx)(`div`,{className:`flex justify-center py-tinyrack-xl`,"data-testid":`totp-setup-loading`,children:(0,D.jsx)(t,{uiSize:`lg`,variant:`primary`})}):F===`error`&&c===`session_expired`?(0,D.jsxs)(b.Root,{"data-testid":`totp-setup-session-expired`,variant:`warning`,children:[(0,D.jsx)(ne,{"aria-hidden":!0,className:`size-tinyrack-xl`}),(0,D.jsx)(b.Title,{children:e(`setupTotp.error.expired`)}),(0,D.jsx)(b.Description,{children:e(`setupTotp.redirecting`,{seconds:j})}),(0,D.jsx)(b.Actions,{children:(0,D.jsx)(s,{appearance:`ghost`,intent:`neutral`,onClick:N,type:`button`,uiSize:`sm`,children:e(`setupTotp.redirectNow`)})})]}):F===`error`&&c===`already_enabled`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(x,{icon:u,type:`info`,children:e(`setupTotp.error.alreadyEnabled`)}),(0,D.jsx)(s,{className:`w-full`,intent:`primary`,onClick:P,type:`button`,uiSize:`lg`,children:e(`setupTotp.goToProfile`)})]}):F===`error`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(x,{icon:ae,type:`error`,children:e(`setupTotp.error.setupFailed`)}),(0,D.jsx)(s,{className:`w-full`,disabled:R,intent:`primary`,loading:R,onClick:V,type:`button`,uiSize:`lg`,children:e(`setupTotp.retry`)})]}):q?(0,D.jsx)(d,{isLoading:B,onConfirm:G,recoveryCodes:L}):J&&I?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(x,{icon:h,type:`info`,children:e(`setupTotp.required`)}),(0,D.jsx)(f,{onNext:W,setupData:I})]}):(0,D.jsx)(p,{isPending:z,onBack:U,onSubmit:K}),(0,D.jsxs)(S,{width:q?`wide`:`form`,children:[(0,D.jsx)(y,{eyebrow:Y?(0,D.jsx)(oe,{current:X,progressLabel:e(`setupTotp.stepProgress`,{current:X+1,total:3}),steps:[e(`setupTotp.steps.scan`),e(`setupTotp.steps.verify`),e(`setupTotp.steps.saveCodes`)]}):void 0,subtitle:Q,title:Z}),(0,D.jsx)(`div`,{className:`auth-enter flex flex-col gap-tinyrack-lg`,children:$},F),se&&(0,D.jsx)(T,{children:(0,D.jsx)(w,{link:(0,D.jsx)(te,{search:_(a),to:`/login`,children:e(`setupTotp.backToLogin`)})})})]})}export{A as component};
|
|
2
|
+
//# sourceMappingURL=totp-ECvOUcFx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp-ECvOUcFx.js","names":["useQueryClient","Link","useRouter","TRAlert","TRButton","TRSpinner","CircleAlertIcon","CircleXIcon","InfoIcon","ShieldCheckIcon","useCallback","useEffect","useState","useTranslation","AuthFooter","AuthFooterLink","AuthPageHeader","AuthSteps","QrStep","RecoveryCodesStep","VerifyStep","Alert","AuthLayout","useTotpSetup","IssuaryError","buildAuthenticatedAuthorizeUrl","extractOAuthParams","isOAuthFlow","tick","getSessionQueryOptions","ERROR_CODES","TOTP_ALREADY_ENABLED","TOTP_NOT_SETUP","INVALID_TOTP_CODE","UNAUTHORIZED","SECOND_FACTOR_SESSION_EXPIRED","const","Route","ErrorType","REDIRECT_COUNTDOWN_SECONDS","SetupTotp","t","router","queryClient","search","useSearch","errorType","setErrorType","redirectCountdown","setRedirectCountdown","redirectToLogin","navigate","to","redirectToProfile","handleSetupError","error","Error","code","handleVerifySuccess","_data","TotpSetupVerifyResponse","handleConfirmSuccess","data","TotpConfirmResponse","setQueryData","queryKey","user","window","location","href","step","setupData","recoveryCodes","isSetupPending","isVerifyPending","isConfirmPending","startSetup","verify","goToQr","goToVerify","confirmRecoveryCodes","autoStart","onSetupError","onVerifySuccess","onConfirmSuccess","onVerifyError","timer","setInterval","prev","clearInterval","handleVerify","isRecoveryStep","length","isQrStep","isWizardStep","wizardIndex","title","subtitle","showFooter","body","React","ReactNode","seconds","current","total","undefined","component"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/circle-x.mjs","../../../frontend/src/components/auth/auth-steps.tsx","../../../frontend/src/routes/setup/totp/index.tsx?tsr-split=component"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.mjs.map\n","import { TRText } from '@tinyrack/ui/components/text';\n\ntype AuthStepsProps = {\n /** Ordered step labels. The current one is announced to assistive tech. */\n steps: string[];\n /** Zero-based index of the step being shown. */\n current: number;\n /** e.g. \"Step {{current}} of {{total}}\" — already interpolated by the caller. */\n progressLabel: string;\n};\n\n/**\n * Progress indicator for the multi-step auth wizards.\n *\n * Not built on `TRSteps`: that component is a vertical, docs-prose ordered\n * list with an inline-start rail and absolutely positioned counters, and it\n * has no notion of a current or completed step. Forcing it horizontal would\n * mean overriding most of its CSS. A stateful, orientable stepper is worth\n * proposing upstream; until then this is a small token-only composition.\n *\n * Renders as a labelled group rather than a list, because the segments are\n * decorative — the text label carries the information.\n */\nexport function AuthSteps({ steps, current, progressLabel }: AuthStepsProps) {\n return (\n <div className=\"flex w-full flex-col gap-tinyrack-xs\">\n <div className=\"flex items-baseline justify-between gap-tinyrack-sm\">\n <TRText color=\"muted\" variant=\"label\">\n {progressLabel}\n </TRText>\n <TRText color=\"muted\" variant=\"caption\">\n {steps[current]}\n </TRText>\n </div>\n <div\n aria-label={progressLabel}\n aria-valuemax={steps.length}\n aria-valuemin={1}\n aria-valuenow={current + 1}\n className=\"flex gap-tinyrack-xs\"\n role=\"progressbar\"\n >\n {steps.map((step, index) => (\n <span\n aria-hidden\n className={`h-tinyrack-xs flex-1 rounded-tinyrack-full transition-colors duration-tinyrack-normal ease-tinyrack-standard ${\n index <= current\n ? 'bg-tinyrack-primary'\n : 'bg-tinyrack-surface-hover'\n }`}\n key={step}\n />\n ))}\n </div>\n </div>\n );\n}\n","import { useQueryClient } from '@tanstack/react-query';\nimport { createFileRoute, Link, useRouter } from '@tanstack/react-router';\nimport { TRAlert } from '@tinyrack/ui/components/alert';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRSpinner } from '@tinyrack/ui/components/spinner';\nimport {\n CircleAlertIcon,\n CircleXIcon,\n InfoIcon,\n ShieldCheckIcon,\n} from 'lucide-react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n AuthFooter,\n AuthFooterLink,\n} from '#frontend/components/auth/auth-footer.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { AuthSteps } from '#frontend/components/auth/auth-steps.tsx';\nimport { QrStep } from '#frontend/components/totp/qr-step.tsx';\nimport { RecoveryCodesStep } from '#frontend/components/totp/recovery-codes-step.tsx';\nimport { VerifyStep } from '#frontend/components/totp/verify-step.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\nimport { useTotpSetup } from '#frontend/features/totp/use-totp-setup.ts';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport {\n buildAuthenticatedAuthorizeUrl,\n extractOAuthParams,\n isOAuthFlow,\n OAuthSearchSchema,\n} from '#frontend/libs/oauth-search.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport type {\n TotpConfirmResponse,\n TotpSetupVerifyResponse,\n} from '#frontend/queries/totp.ts';\n\n/** Error codes from backend */\nconst ERROR_CODES = {\n TOTP_ALREADY_ENABLED: 'TOTP_ALREADY_ENABLED',\n TOTP_NOT_SETUP: 'TOTP_NOT_SETUP',\n INVALID_TOTP_CODE: 'INVALID_TOTP_CODE',\n UNAUTHORIZED: 'UNAUTHORIZED',\n SECOND_FACTOR_SESSION_EXPIRED: 'SECOND_FACTOR_SESSION_EXPIRED',\n} as const;\n\nconst SearchSchema = OAuthSearchSchema;\n\nexport const Route = createFileRoute('/setup/totp/')({\n component: SetupTotp,\n validateSearch: SearchSchema,\n});\n\ntype ErrorType = 'generic' | 'already_enabled' | 'session_expired';\n\n/** Auto redirect countdown seconds */\nconst REDIRECT_COUNTDOWN_SECONDS = 5;\n\nfunction SetupTotp() {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n\n const [errorType, setErrorType] = useState<ErrorType>('generic');\n const [redirectCountdown, setRedirectCountdown] = useState(\n REDIRECT_COUNTDOWN_SECONDS,\n );\n\n const redirectToLogin = useCallback(() => {\n router.navigate({\n to: '/login',\n search: extractOAuthParams(search),\n });\n }, [router, search]);\n\n const redirectToProfile = useCallback(() => {\n router.navigate({ to: '/profile' });\n }, [router]);\n\n const handleSetupError = useCallback((error: Error) => {\n if (error instanceof IssuaryError) {\n switch (error.code) {\n case ERROR_CODES.TOTP_ALREADY_ENABLED:\n setErrorType('already_enabled');\n break;\n case ERROR_CODES.UNAUTHORIZED:\n case ERROR_CODES.SECOND_FACTOR_SESSION_EXPIRED:\n setErrorType('session_expired');\n setRedirectCountdown(REDIRECT_COUNTDOWN_SECONDS);\n break;\n default:\n setErrorType('generic');\n }\n } else {\n setErrorType('generic');\n }\n }, []);\n\n const handleVerifySuccess = useCallback(\n async (_data: TotpSetupVerifyResponse) => {\n // Recovery codes step is handled by useTotpSetup hook\n // (step transitions to 'recovery' automatically)\n // Session update happens after confirm, not here\n await tick();\n },\n [],\n );\n\n const handleConfirmSuccess = useCallback(\n async (data: TotpConfirmResponse) => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: data.user,\n });\n await tick();\n // Navigate after successful confirm\n if (isOAuthFlow(search)) {\n window.location.href = buildAuthenticatedAuthorizeUrl(search);\n } else {\n router.navigate({ to: '/profile' });\n }\n },\n [queryClient, router, search],\n );\n\n const {\n step,\n setupData,\n recoveryCodes,\n isSetupPending,\n isVerifyPending,\n isConfirmPending,\n startSetup,\n verify,\n goToQr,\n goToVerify,\n confirmRecoveryCodes,\n } = useTotpSetup({\n autoStart: true,\n onSetupError: handleSetupError,\n onVerifySuccess: handleVerifySuccess,\n onConfirmSuccess: handleConfirmSuccess,\n onVerifyError: (error) => {\n if (error instanceof IssuaryError) {\n switch (error.code) {\n case ERROR_CODES.TOTP_ALREADY_ENABLED:\n redirectToProfile();\n break;\n case ERROR_CODES.UNAUTHORIZED:\n case ERROR_CODES.SECOND_FACTOR_SESSION_EXPIRED:\n setErrorType('session_expired');\n setRedirectCountdown(REDIRECT_COUNTDOWN_SECONDS);\n break;\n case ERROR_CODES.TOTP_NOT_SETUP:\n startSetup();\n break;\n }\n }\n },\n });\n\n // Auto redirect when session expires\n useEffect(() => {\n if (errorType !== 'session_expired' || step !== 'error') return;\n\n const timer = setInterval(() => {\n setRedirectCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n redirectToLogin();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => clearInterval(timer);\n }, [errorType, step, redirectToLogin]);\n\n const handleVerify = useCallback(\n async (code: string) => {\n await verify(code);\n },\n [verify],\n );\n\n const isRecoveryStep = step === 'recovery' && recoveryCodes.length > 0;\n const isQrStep = step === 'qr' && setupData !== null;\n // `loading` and `error` are not points on the journey, so the wizard's\n // progress is hidden there rather than showing a misleading step.\n const isWizardStep = step !== 'loading' && step !== 'error';\n\n let wizardIndex = 1;\n if (isRecoveryStep) {\n wizardIndex = 2;\n } else if (isQrStep) {\n wizardIndex = 0;\n }\n\n let title = t('setupTotp.title');\n let subtitle: string | undefined = t('setupTotp.subtitle');\n if (isRecoveryStep) {\n title = t('setupTotp.recoveryCodes.title');\n } else if (isWizardStep && !isQrStep) {\n title = t('setupTotp.verifyTitle');\n subtitle = t('setupTotp.verifySubtitle');\n }\n\n // Where the original screens offered a way out: the wizard's later steps\n // deliberately do not, so nobody leaves before saving their codes.\n const showFooter = step === 'error' || isQrStep;\n\n let body: React.ReactNode;\n if (step === 'loading') {\n body = (\n <div\n className=\"flex justify-center py-tinyrack-xl\"\n data-testid=\"totp-setup-loading\"\n >\n <TRSpinner uiSize=\"lg\" variant=\"primary\" />\n </div>\n );\n } else if (step === 'error' && errorType === 'session_expired') {\n body = (\n <TRAlert.Root data-testid=\"totp-setup-session-expired\" variant=\"warning\">\n <CircleAlertIcon aria-hidden className=\"size-tinyrack-xl\" />\n <TRAlert.Title>{t('setupTotp.error.expired')}</TRAlert.Title>\n <TRAlert.Description>\n {t('setupTotp.redirecting', {\n seconds: redirectCountdown,\n })}\n </TRAlert.Description>\n <TRAlert.Actions>\n <TRButton\n appearance=\"ghost\"\n intent=\"neutral\"\n onClick={redirectToLogin}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('setupTotp.redirectNow')}\n </TRButton>\n </TRAlert.Actions>\n </TRAlert.Root>\n );\n } else if (step === 'error' && errorType === 'already_enabled') {\n body = (\n <>\n <Alert icon={InfoIcon} type=\"info\">\n {t('setupTotp.error.alreadyEnabled')}\n </Alert>\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n onClick={redirectToProfile}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('setupTotp.goToProfile')}\n </TRButton>\n </>\n );\n } else if (step === 'error') {\n body = (\n <>\n <Alert icon={CircleXIcon} type=\"error\">\n {t('setupTotp.error.setupFailed')}\n </Alert>\n <TRButton\n className=\"w-full\"\n disabled={isSetupPending}\n intent=\"primary\"\n loading={isSetupPending}\n onClick={startSetup}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('setupTotp.retry')}\n </TRButton>\n </>\n );\n } else if (isRecoveryStep) {\n body = (\n <RecoveryCodesStep\n isLoading={isConfirmPending}\n onConfirm={confirmRecoveryCodes}\n recoveryCodes={recoveryCodes}\n />\n );\n } else if (isQrStep && setupData) {\n body = (\n <>\n <Alert icon={ShieldCheckIcon} type=\"info\">\n {t('setupTotp.required')}\n </Alert>\n <QrStep onNext={goToVerify} setupData={setupData} />\n </>\n );\n } else {\n body = (\n <VerifyStep\n isPending={isVerifyPending}\n onBack={goToQr}\n onSubmit={handleVerify}\n />\n );\n }\n\n /*\n One shell, one header. The seven `AuthLayout` blocks this replaced meant\n the header remounted on every transition, so the title flashed and the\n progress had nowhere to live.\n */\n return (\n <AuthLayout width={isRecoveryStep ? 'wide' : 'form'}>\n <AuthPageHeader\n eyebrow={\n isWizardStep ? (\n <AuthSteps\n current={wizardIndex}\n progressLabel={t('setupTotp.stepProgress', {\n current: wizardIndex + 1,\n total: 3,\n })}\n steps={[\n t('setupTotp.steps.scan'),\n t('setupTotp.steps.verify'),\n t('setupTotp.steps.saveCodes'),\n ]}\n />\n ) : undefined\n }\n subtitle={subtitle}\n title={title}\n />\n\n {/* Keyed so each step animates in rather than swapping in place. */}\n <div className=\"auth-enter flex flex-col gap-tinyrack-lg\" key={step}>\n {body}\n </div>\n\n {showFooter && (\n <AuthFooter>\n <AuthFooterLink\n link={\n <Link search={extractOAuthParams(search)} to=\"/login\">\n {t('setupTotp.backToLogin')}\n </Link>\n }\n />\n </AuthFooter>\n )}\n </AuthLayout>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-BPpAIXR_.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=trash-2-DZdKBLvC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash-2-DZdKBLvC.js","names":[],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/trash-2.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"mDAgBA,IAAM,EAAS,EAAiB,UAAW,CANzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE,EAAG,2CAA4C,IAAK,QAAS,CAAC,EACzE,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAS,CAAC,EACxC,CAAC,OAAQ,CAAE,EAAG,yCAA0C,IAAK,QAAS,CAAC,CAE9B,CAAU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-BPpAIXR_.js";var t=e(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=triangle-alert-CqNn0kPs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triangle-alert-CqNn0kPs.js","names":[],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"mDAoBA,IAAM,EAAgB,EAAiB,iBAAkB,CAVvD,CACE,OACA,CACE,EAAG,2EACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAS,CAAC,EACxC,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,CAEY,CAAU"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{J as e,M as t,Z as n,b as r,c as i,h as a,i as o,l as s,m as c,q as l,s as u,t as d,v as f,x as p}from"./createLucideIcon-BPpAIXR_.js";import{P as m,Sr as h,Y as g,_t as _,bn as v,dn as y,et as b,f as x,gt as S,k as C,mt as w,pn as T,pt as E}from"./config-DTQCUlfZ.js";import{t as D}from"./useMutation-BWZ0G4Td.js";import{O,T as k,X as A}from"./shell-header-bar-CjG5qvPg.js";import{t as j}from"./triangle-alert-CqNn0kPs.js";import{c as M,o as N}from"./zod-C87S6Tec.js";import{S as P}from"./index-CS23Ozt6.js";import{t as F}from"./alert-leqyvHOp.js";import{t as I}from"./checkbox-gdHnSFQ-.js";import{t as L}from"./field-Cn4H1CUj.js";import{r as R,t as z}from"./standard-schema-e8gtSzGE.js";import{i as B,s as V,t as H}from"./totp-BNZ904Zm.js";import{t as U}from"./pin-input-Cc-VkrQ3.js";var ee=d(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),te=d(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),W=n(e(),1),G=l();function ne({recoveryCodes:e,onConfirm:t,isLoading:n=!1,className:r=``}){let{t:i}=o(),a=x.useToastManager(),[s,c]=(0,W.useState)(!1),l=(0,W.useCallback)(async()=>{await navigator.clipboard.writeText(e.join(`
|
|
2
|
+
`)),a.add({title:i(`setupTotp.recoveryCodes.copied`),type:`success`})},[e,a,i]);return(0,G.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-lg ${r}`,children:[(0,G.jsx)(`p`,{className:`text-tinyrack-sm text-tinyrack-text-muted`,children:i(`setupTotp.recoveryCodes.description`)}),(0,G.jsx)(`div`,{className:`grid grid-cols-2 gap-tinyrack-sm rounded-tinyrack-lg border border-tinyrack-border bg-tinyrack-surface p-tinyrack-lg`,"data-testid":`recovery-codes-grid`,children:e.map(e=>(0,G.jsx)(`code`,{className:`rounded-tinyrack-sm bg-tinyrack-surface-muted px-tinyrack-sm py-tinyrack-3xs text-center font-tinyrack-mono text-tinyrack-sm text-tinyrack-text`,children:e},e))}),(0,G.jsx)(F,{icon:j,type:`warning`,children:i(`setupTotp.recoveryCodes.warning`)}),(0,G.jsxs)(u,{appearance:`outline`,className:`w-full gap-tinyrack-sm`,intent:`neutral`,onClick:l,type:`button`,children:[(0,G.jsx)(ee,{"aria-hidden":!0,className:`size-tinyrack-lg`}),i(`setupTotp.recoveryCodes.copy`)]}),(0,G.jsx)(L.Root,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,G.jsx)(I.Root,{checked:s,"data-testid":`recovery-codes-confirm`,disabled:n,onCheckedChange:e=>c(e===!0),uiSize:`md`,children:(0,G.jsx)(I.Indicator,{})}),(0,G.jsx)(L.Label,{className:`cursor-pointer`,children:i(`setupTotp.recoveryCodes.confirmCheckbox`)})]})}),(0,G.jsx)(u,{className:`w-full`,"data-testid":`recovery-codes-submit`,disabled:!s||n,intent:`primary`,loading:n,onClick:t,type:`button`,uiSize:`lg`,children:i(`setupTotp.recoveryCodes.confirm`)})]})}function re({onSubmit:e,onBack:t,isPending:n,invalidMessage:r,submitLabel:i,pendingText:a,backLabel:s,className:c=``}){let{t:l}=o(),d=(0,W.useRef)(null),{setValue:f,setError:p,handleSubmit:m,watch:h,formState:{errors:g}}=R({defaultValues:{code:``},resolver:z((0,W.useMemo)(()=>N({code:M().length(6,l(`validation.totp.length`)).regex(/^\d{6}$/,l(`validation.totp.digits`))}),[l]))}),_=h(`code`),v=(0,W.useCallback)(async t=>{try{await e(t.code)}catch{p(`code`,{type:`manual`,message:r??l(`setupTotp.error.invalid`)}),f(`code`,``),d.current?.focus()}},[r,e,p,f,l]);return(0,G.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-lg ${c}`,children:[(0,G.jsxs)(`form`,{className:`flex flex-col gap-tinyrack-lg`,onSubmit:m(v),children:[(0,G.jsx)(U,{autoFocus:!0,error:g.code,length:6,onChange:e=>f(`code`,e),onComplete:()=>m(v)(),ref:d,value:_}),(0,G.jsx)(u,{className:`w-full`,intent:`primary`,loading:n,loadingLabel:a??l(`setupTotp.verifying`),type:`submit`,uiSize:`lg`,children:i??l(`setupTotp.verify`)})]}),t&&(0,G.jsx)(u,{appearance:`ghost`,className:`w-full`,"data-testid":`totp-verify-back`,disabled:n,intent:`neutral`,onClick:t,type:`button`,children:s??l(`setupTotp.back`)})]})}function ie(e){let{open:t,defaultOpen:n,onOpenChange:r,disabled:i}=e,[a,o]=k({controlled:t,default:n,name:`Collapsible`,state:`open`}),{mounted:s,setMounted:c,transitionStatus:l}=A(a,!0,!0),u=O(),[d,f]=W.useState(),h=d===null?void 0:d??u,g=p(e=>{let t=!a,n=m(b,e.nativeEvent);r(t,n),!n.isCanceled&&o(t)});return W.useMemo(()=>({defaultPanelId:u,disabled:i,handleTrigger:g,mounted:s,open:a,panelId:h,setMounted:c,setOpen:o,setPanelIdState:f,transitionStatus:l}),[u,i,g,s,a,h,c,o,f,l])}var K=W.createContext(void 0);function q(){let e=W.useContext(K);if(e===void 0)throw Error(f(15));return e}var J=function(e){return e.open=`data-open`,e.closed=`data-closed`,e[e.startingStyle=S.startingStyle]=`startingStyle`,e[e.endingStyle=S.endingStyle]=`endingStyle`,e}({}),ae=function(e){return e.panelOpen=`data-panel-open`,e}({}),oe={[J.open]:``},se={[J.closed]:``},ce={open(e){return e?{[ae.panelOpen]:``}:null}},Y={open(e){return e?oe:se},..._},le=W.forwardRef(function(e,t){let{render:n,className:r,defaultOpen:a=!1,disabled:o=!1,onOpenChange:s,open:c,style:l,...u}=e,d=p(s),f=ie({open:c,defaultOpen:a,onOpenChange:d,disabled:o}),m=W.useMemo(()=>({open:f.open,disabled:f.disabled,transitionStatus:f.transitionStatus}),[f.open,f.disabled,f.transitionStatus]),h=W.useMemo(()=>({...f,onOpenChange:d,state:m}),[f,d,m]),g=i(`div`,e,{state:m,ref:t,props:u,stateAttributesMapping:Y});return(0,G.jsx)(K.Provider,{value:h,children:g})}),ue={...ce,..._},de=W.forwardRef(function(e,t){let{panelId:n,open:r,handleTrigger:o,state:s,disabled:c}=q(),{className:l,disabled:u=c,render:d,nativeButton:f=!0,style:p,...m}=e,{getButtonProps:h,buttonRef:g}=a({disabled:u,focusableWhenDisabled:!0,native:f});return i(`button`,e,{state:s,ref:[t,g],props:[{"aria-controls":r?n:void 0,"aria-expanded":r,onClick:o},m,h],stateAttributesMapping:ue})}),X={height:void 0,width:void 0};function fe(e){let{externalRef:t,hiddenUntilFound:n,id:i,keepMounted:a,mounted:o,onOpenChange:s,open:l,setMounted:u,setOpen:d,transitionStatus:f}=e,h=W.useRef(null),_=W.useRef(null),[v,b]=W.useState(X),x=W.useRef(X),S=W.useRef(!1),D=W.useRef(l),O=W.useRef(!1),[k,A]=W.useState(!1),j=W.useRef(null),M=c(t,h),N=C(l),P=w(h),F=!l&&!o,I=k?`idle`:f,L=l&&(D.current||O.current),R=!l&&o&&_.current===`css-animation`&&v.height===void 0&&v.width===void 0?x.current:v,z=n&&F&&_.current!==`css-animation`,B=p((e,t=!0)=>{t&&(x.current=e),b(e)}),V=p(()=>{j.current?.(),j.current=null}),H=p(e=>{V(),j.current=()=>{j.current=null,e()}}),U=p(()=>{l&&o&&_.current===`css-animation`&&(O.current=!0)});r(()=>{!k||f===`starting`||A(!1)},[k,f]),W.useEffect(()=>()=>{U(),V()},[U,V]),r(()=>{let e=h.current;if(!e)return;!l&&j.current&&V();let t=pe(e,L);if(_.current=t,l&&f===`idle`&&D.current&&t===`css-animation`){x.current=Z(e);return}if(l&&f===`starting`){let n=S.current;if(S.current=!1,t===`none`){B(Z(e)),A(!0);return}if(t===`css-transition`){let t=he(e);if(B(Z(e)),!n)return t;let r=Q(e,`transition-duration`,`0s`);return H(r),A(!0),t}B(Z(e));let r=Q(e,`animation-name`,`none`);if(!n){r();return}let i=Q(e,`animation-duration`,`0s`);r(),H(i),A(!0);return}if(!l&&o&&(f===`idle`||f===`starting`)){if(D.current=!1,O.current=!1,t===`none`){B(X,!1),u(!1);return}B(Z(e));return}if(f!==`ending`)return;if(t===`none`){u(!1);return}let n=Z(e);if(!(n.height>0||n.width>0)){u(!1);return}B(n),t===`css-animation`&&Q(e,`animation-name`,`none`)()},[o,l,V,B,u,H,L,f]),E({enabled:l&&o&&I===`idle`,open:!0,ref:h,onComplete(){l&&B(X,!1)}}),W.useEffect(()=>{if(l||!o||I!==`ending`||!h.current)return;let e=new AbortController,t=-1;function n(){N.current||(u(!1),B(X,!1))}return t=y.request(()=>{P(n,e.signal)}),()=>{y.cancel(t),e.abort()}},[N,o,l,I,P,B,u]),r(()=>{let e=h.current;!e||!n||!F||e.setAttribute(`hidden`,`until-found`)},[F,n]),W.useEffect(function(){let e=h.current;if(!e)return;function t(e){let t=m(g,e);s(!0,t),!t.isCanceled&&(S.current=!0,d(!0))}return T(e,`beforematch`,t)},[s,d]);let ee=a||n||o||l;return{height:R.height,props:{...z?{[J.startingStyle]:``}:void 0,hidden:F,id:i},ref:M,shouldPreventOpenAnimation:L,shouldRender:ee,transitionStatus:I,width:R.width}}function Z(e){return{height:e.scrollHeight,width:e.scrollWidth}}function pe(e,n){let r=t(e).getComputedStyle(e),i=(r.animationName.split(`,`).map(e=>e.trim()).some(e=>e!==``&&e!==`none`)||n)&&me(r.animationDuration),a=me(r.transitionDuration);return i&&a||a?`css-transition`:i?`css-animation`:`none`}function me(e){return e.split(`,`).map(e=>e.trim()).some(e=>e!==``&&Number.parseFloat(e)>0)}function Q(e,t,n){let r=e.style.getPropertyValue(t),i=e.style.getPropertyPriority(t);return e.style.setProperty(t,n),()=>{if(r===``){e.style.removeProperty(t);return}e.style.setProperty(t,r,i)}}function he(e){let t={"justify-content":e.style.justifyContent,"align-items":e.style.alignItems,"align-content":e.style.alignContent,"justify-items":e.style.justifyItems};Object.keys(t).forEach(t=>{e.style.setProperty(t,`initial`,`important`)});function n(){Object.entries(t).forEach(([t,n])=>{if(n===``){e.style.removeProperty(t);return}e.style.setProperty(t,n)})}let r=y.request(n);return()=>{y.cancel(r),n()}}var ge=function(e){return e.collapsiblePanelHeight=`--collapsible-panel-height`,e.collapsiblePanelWidth=`--collapsible-panel-width`,e}({}),_e=v(W.forwardRef(function(e,t){let{className:n,hiddenUntilFound:a,keepMounted:o,render:c,id:l,style:u,...d}=e,{defaultPanelId:f,mounted:p,onOpenChange:m,open:h,setMounted:g,setPanelIdState:_,setOpen:v,state:y,transitionStatus:b}=q(),x=a??!1,S=o??!1,C=l||void 0,w=C??f;r(()=>(_(e=>C??(e===null?void 0:e)),()=>{_(e=>e===C?null:e)}),[C,_]);let{height:T,props:E,ref:D,shouldPreventOpenAnimation:O,shouldRender:k,transitionStatus:A,width:j}=fe({externalRef:t,hiddenUntilFound:x,id:w,keepMounted:S,mounted:p,onOpenChange:m,open:h,setMounted:g,setOpen:v,transitionStatus:b}),M={...y,transitionStatus:A},N=s(u,M),P=i(`div`,{...e,style:void 0},{state:M,ref:D,props:[E,{style:{[ge.collapsiblePanelHeight]:T===void 0?`auto`:`${T}px`,[ge.collapsiblePanelWidth]:j===void 0?`auto`:`${j}px`}},d,N?{style:N}:void 0,O?{style:{animationName:`none`}}:void 0],stateAttributesMapping:Y});return k?P:null}),`tr-collapsible-content`),$={Root:v(le,`tr-collapsible`),Trigger:v(de,`tr-collapsible-summary`),Panel:_e};function ve({setupData:e,onNext:t,additionalActions:n,className:r=``}){let{t:i}=o();return(0,G.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-lg ${r}`,children:[(0,G.jsx)(`p`,{className:`text-center text-tinyrack-sm text-tinyrack-text-muted`,children:i(`setupTotp.qrDescription`)}),(0,G.jsx)(`div`,{className:`flex justify-center`,children:(0,G.jsx)(`div`,{className:`rounded-tinyrack-lg border border-tinyrack-border bg-tinyrack-surface p-tinyrack-lg`,children:(0,G.jsx)(`img`,{alt:`TOTP QR Code`,className:`block size-tinyrack-measure-sm`,src:e.qr_code})})}),(0,G.jsxs)($.Root,{children:[(0,G.jsx)($.Trigger,{children:i(`setupTotp.manualEntry`)}),(0,G.jsx)($.Panel,{children:(0,G.jsx)(`code`,{className:`mt-tinyrack-xs block break-all rounded-tinyrack-sm bg-tinyrack-surface-muted p-tinyrack-sm text-tinyrack-sm text-tinyrack-text`,children:e.secret})})]}),(0,G.jsx)(u,{className:`w-full`,"data-testid":`totp-qr-next`,intent:`primary`,onClick:t,type:`button`,uiSize:`lg`,children:i(`setupTotp.next`)}),n]})}function ye(e={}){let{onSetupSuccess:t,onSetupError:n,onVerifySuccess:r,onVerifyError:i,onConfirmSuccess:a,onConfirmError:o,autoStart:s=!1}=e,c=h(),[l,u]=(0,W.useState)(s?`loading`:`qr`),[d,f]=(0,W.useState)(null),[p,m]=(0,W.useState)([]),g=(0,W.useRef)(!1),_=D({...B,onSuccess:e=>{f(e),u(`qr`),t?.(e)},onError:e=>{u(`error`),n?.(e)}}),v=D({...V,onSuccess:e=>{m(e.recovery_codes),u(`recovery`),r?.(e)},onError:e=>{i?.(e)}}),y=D({...H,onSuccess:e=>{c.invalidateQueries({queryKey:P.queryKey}),a?.(e)},onError:e=>{o?.(e)}}),b=(0,W.useCallback)(()=>{g.current=!0,u(`loading`),_.mutate()},[_]),x=(0,W.useCallback)(async e=>v.mutateAsync({code:e}),[v]),S=(0,W.useCallback)(()=>{u(`qr`)},[]),C=(0,W.useCallback)(()=>{u(`verify`)},[]),w=(0,W.useCallback)(async()=>y.mutateAsync(),[y]),T=(0,W.useCallback)(()=>{u(s?`loading`:`qr`),f(null),m([]),g.current=!1,_.reset(),v.reset(),y.reset()},[s,_,v,y]);return(0,W.useEffect)(()=>{s&&!g.current&&l===`loading`&&(g.current=!0,_.mutate())},[s,l,_]),{step:l,setupData:d,recoveryCodes:p,isSetupPending:_.isPending,isVerifyPending:v.isPending,isConfirmPending:y.isPending,isPending:_.isPending||v.isPending||y.isPending,setupError:_.error,verifyError:v.error,confirmError:y.error,startSetup:b,verify:x,goToQr:S,goToVerify:C,confirmRecoveryCodes:w,reset:T}}export{te as a,ne as i,ve as n,re as r,ye as t};
|
|
3
|
+
//# sourceMappingURL=use-totp-setup-BbS3XcZA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-totp-setup-BbS3XcZA.js","names":["__iconNode","REASONS.triggerPress","_formatErrorMessage","baseMapping","REASONS.none","ownerWindow","Collapsible.Panel","Collapsible.Root","Collapsible.Trigger"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/copy.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/info.mjs","../../../frontend/src/components/totp/recovery-codes-step.tsx","../../../frontend/src/components/totp/verify-step.tsx","../../../../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/collapsible/root/useCollapsibleRoot.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/collapsible/root/CollapsibleRootContext.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/collapsible/panel/CollapsiblePanelDataAttributes.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/collapsible/trigger/CollapsibleTriggerDataAttributes.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/collapsibleOpenStateMapping.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/collapsible/root/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/collapsible/root/CollapsibleRoot.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/collapsible/trigger/CollapsibleTrigger.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/collapsible/panel/useCollapsiblePanel.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/collapsible/panel/CollapsiblePanelCssVars.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/collapsible/panel/CollapsiblePanel.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/collapsible/collapsible-panel.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/collapsible/collapsible-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/collapsible/collapsible-trigger.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/collapsible/index.js","../../../frontend/src/components/totp/qr-step.tsx","../../../frontend/src/features/totp/use-totp-setup.ts"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.mjs.map\n","/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.mjs.map\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCheckbox } from '@tinyrack/ui/components/checkbox';\nimport { TRField } from '@tinyrack/ui/components/field';\nimport { TRToast } from '@tinyrack/ui/components/toast';\nimport { CopyIcon, TriangleAlertIcon } from 'lucide-react';\nimport { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\n\nexport interface RecoveryCodesStepProps {\n recoveryCodes: string[];\n onConfirm: () => void;\n isLoading?: boolean;\n className?: string;\n}\n\nexport function RecoveryCodesStep({\n recoveryCodes,\n onConfirm,\n isLoading = false,\n className = '',\n}: RecoveryCodesStepProps) {\n const { t } = useTranslation();\n const toast = TRToast.useToastManager();\n const [confirmed, setConfirmed] = useState(false);\n\n // The toast manager owns the dismissal timer, so this no longer keeps a\n // \"copied\" flag alive with its own setTimeout.\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(recoveryCodes.join('\\n'));\n toast.add({ title: t('setupTotp.recoveryCodes.copied'), type: 'success' });\n }, [recoveryCodes, toast, t]);\n\n return (\n <div className={`flex flex-col gap-tinyrack-lg ${className}`}>\n <p className=\"text-tinyrack-sm text-tinyrack-text-muted\">\n {t('setupTotp.recoveryCodes.description')}\n </p>\n\n {/*\n Two columns so a full set of codes stays on one screen without\n scrolling — this is the only time the user will ever see them.\n */}\n <div\n className=\"grid grid-cols-2 gap-tinyrack-sm rounded-tinyrack-lg border border-tinyrack-border bg-tinyrack-surface p-tinyrack-lg\"\n data-testid=\"recovery-codes-grid\"\n >\n {recoveryCodes.map((code) => (\n <code\n className=\"rounded-tinyrack-sm bg-tinyrack-surface-muted px-tinyrack-sm py-tinyrack-3xs text-center font-tinyrack-mono text-tinyrack-sm text-tinyrack-text\"\n key={code}\n >\n {code}\n </code>\n ))}\n </div>\n\n <Alert icon={TriangleAlertIcon} type=\"warning\">\n {t('setupTotp.recoveryCodes.warning')}\n </Alert>\n\n <TRButton\n appearance=\"outline\"\n className=\"w-full gap-tinyrack-sm\"\n intent=\"neutral\"\n onClick={handleCopy}\n type=\"button\"\n >\n <CopyIcon aria-hidden className=\"size-tinyrack-lg\" />\n {t('setupTotp.recoveryCodes.copy')}\n </TRButton>\n\n {/*\n `TRField.Root` owns the label/control association, so the checkbox\n keeps its own focus ring instead of being swallowed by a wrapping\n `<label>` that had none.\n */}\n <TRField.Root>\n <div className=\"flex items-center gap-tinyrack-sm\">\n <TRCheckbox.Root\n checked={confirmed}\n data-testid=\"recovery-codes-confirm\"\n disabled={isLoading}\n onCheckedChange={(checked) => setConfirmed(checked === true)}\n uiSize=\"md\"\n >\n <TRCheckbox.Indicator />\n </TRCheckbox.Root>\n <TRField.Label className=\"cursor-pointer\">\n {t('setupTotp.recoveryCodes.confirmCheckbox')}\n </TRField.Label>\n </div>\n </TRField.Root>\n\n <TRButton\n className=\"w-full\"\n data-testid=\"recovery-codes-submit\"\n disabled={!confirmed || isLoading}\n intent=\"primary\"\n loading={isLoading}\n onClick={onConfirm}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('setupTotp.recoveryCodes.confirm')}\n </TRButton>\n </div>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { useCallback, useMemo, useRef } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport {\n PinInput,\n type PinInputRef,\n} from '#frontend/components/ui/pin-input.tsx';\n\nexport interface VerifyStepProps {\n onSubmit: (code: string) => Promise<void>;\n onBack?: (() => void) | undefined;\n isPending: boolean;\n invalidMessage?: string | undefined;\n submitLabel?: string | undefined;\n pendingText?: string | undefined;\n backLabel?: string | undefined;\n className?: string;\n}\n\ntype VerifyFormValues = {\n code: string;\n};\n\nexport function VerifyStep({\n onSubmit,\n onBack,\n isPending,\n invalidMessage,\n submitLabel,\n pendingText,\n backLabel,\n className = '',\n}: VerifyStepProps) {\n const { t } = useTranslation();\n const pinInputRef = useRef<PinInputRef>(null);\n\n const verifySchema = useMemo(\n () =>\n z.object({\n code: z\n .string()\n .length(6, t('validation.totp.length'))\n .regex(/^\\d{6}$/, t('validation.totp.digits')),\n }),\n [t],\n );\n\n const {\n setValue,\n setError,\n handleSubmit,\n watch,\n formState: { errors },\n } = useForm<VerifyFormValues>({\n defaultValues: { code: '' },\n resolver: standardSchemaResolver(verifySchema),\n });\n\n const codeValue = watch('code');\n\n const handleFormSubmit = useCallback(\n async (values: VerifyFormValues) => {\n try {\n await onSubmit(values.code);\n } catch {\n setError('code', {\n type: 'manual',\n message: invalidMessage ?? t('setupTotp.error.invalid'),\n });\n setValue('code', '');\n pinInputRef.current?.focus();\n }\n },\n [invalidMessage, onSubmit, setError, setValue, t],\n );\n\n return (\n <div className={`flex flex-col gap-tinyrack-lg ${className}`}>\n <form\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(handleFormSubmit)}\n >\n <PinInput\n autoFocus\n error={errors.code}\n length={6}\n onChange={(value) => setValue('code', value)}\n onComplete={() => handleSubmit(handleFormSubmit)()}\n ref={pinInputRef}\n value={codeValue}\n />\n\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={isPending}\n loadingLabel={pendingText ?? t('setupTotp.verifying')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {submitLabel ?? t('setupTotp.verify')}\n </TRButton>\n </form>\n\n {onBack && (\n <TRButton\n appearance=\"ghost\"\n className=\"w-full\"\n data-testid=\"totp-verify-back\"\n disabled={isPending}\n intent=\"neutral\"\n onClick={onBack}\n type=\"button\"\n >\n {backLabel ?? t('setupTotp.back')}\n </TRButton>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nexport function useCollapsibleRoot(parameters) {\n const {\n open: openParam,\n defaultOpen,\n onOpenChange,\n disabled\n } = parameters;\n const [open, setOpen] = useControlled({\n controlled: openParam,\n default: defaultOpen,\n name: 'Collapsible',\n state: 'open'\n });\n const {\n mounted,\n setMounted,\n transitionStatus\n } = useTransitionStatus(open, true, true);\n const defaultPanelId = useBaseUiId();\n // `undefined` uses the initial generated fallback; `null` means the panel unmounted.\n const [registeredPanelId, setPanelIdState] = React.useState();\n const panelId = registeredPanelId === null ? undefined : registeredPanelId ?? defaultPanelId;\n const handleTrigger = useStableCallback(event => {\n const nextOpen = !open;\n const eventDetails = createChangeEventDetails(REASONS.triggerPress, event.nativeEvent);\n onOpenChange(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n setOpen(nextOpen);\n });\n return React.useMemo(() => ({\n defaultPanelId,\n disabled,\n handleTrigger,\n mounted,\n open,\n panelId,\n setMounted,\n setOpen,\n setPanelIdState,\n transitionStatus\n }), [defaultPanelId, disabled, handleTrigger, mounted, open, panelId, setMounted, setOpen, setPanelIdState, transitionStatus]);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const CollapsibleRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CollapsibleRootContext.displayName = \"CollapsibleRootContext\";\nexport function useCollapsibleRootContext() {\n const context = React.useContext(CollapsibleRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: CollapsibleRootContext is missing. Collapsible parts must be placed within <Collapsible.Root>.' : _formatErrorMessage(15));\n }\n return context;\n}","import { TransitionStatusDataAttributes } from \"../../internals/stateAttributesMapping.mjs\";\nexport let CollapsiblePanelDataAttributes = function (CollapsiblePanelDataAttributes) {\n /**\n * Present when the collapsible panel is open.\n */\n CollapsiblePanelDataAttributes[\"open\"] = \"data-open\";\n /**\n * Present when the collapsible panel is closed.\n */\n CollapsiblePanelDataAttributes[\"closed\"] = \"data-closed\";\n /**\n * Present when the panel begins animating in.\n */\n CollapsiblePanelDataAttributes[CollapsiblePanelDataAttributes[\"startingStyle\"] = TransitionStatusDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the panel is animating out.\n */\n CollapsiblePanelDataAttributes[CollapsiblePanelDataAttributes[\"endingStyle\"] = TransitionStatusDataAttributes.endingStyle] = \"endingStyle\";\n return CollapsiblePanelDataAttributes;\n}({});","export let CollapsibleTriggerDataAttributes = /*#__PURE__*/function (CollapsibleTriggerDataAttributes) {\n /**\n * Present when the collapsible panel is open.\n */\n CollapsibleTriggerDataAttributes[\"panelOpen\"] = \"data-panel-open\";\n return CollapsibleTriggerDataAttributes;\n}({});","import { CollapsiblePanelDataAttributes } from \"../collapsible/panel/CollapsiblePanelDataAttributes.mjs\";\nimport { CollapsibleTriggerDataAttributes } from \"../collapsible/trigger/CollapsibleTriggerDataAttributes.mjs\";\nconst PANEL_OPEN_HOOK = {\n [CollapsiblePanelDataAttributes.open]: ''\n};\nconst PANEL_CLOSED_HOOK = {\n [CollapsiblePanelDataAttributes.closed]: ''\n};\nexport const triggerOpenStateMapping = {\n open(value) {\n if (value) {\n return {\n [CollapsibleTriggerDataAttributes.panelOpen]: ''\n };\n }\n return null;\n }\n};\nexport const collapsibleOpenStateMapping = {\n open(value) {\n if (value) {\n return PANEL_OPEN_HOOK;\n }\n return PANEL_CLOSED_HOOK;\n }\n};","import { collapsibleOpenStateMapping as baseMapping } from \"../../utils/collapsibleOpenStateMapping.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nexport const collapsibleStateAttributesMapping = {\n ...baseMapping,\n ...transitionStatusMapping\n};","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useCollapsibleRoot } from \"./useCollapsibleRoot.mjs\";\nimport { CollapsibleRootContext } from \"./CollapsibleRootContext.mjs\";\nimport { collapsibleStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Groups all parts of the collapsible.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Collapsible](https://base-ui.com/react/components/collapsible)\n */\nexport const CollapsibleRoot = /*#__PURE__*/React.forwardRef(function CollapsibleRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n defaultOpen = false,\n disabled = false,\n onOpenChange: onOpenChangeProp,\n open,\n style,\n ...elementProps\n } = componentProps;\n const onOpenChange = useStableCallback(onOpenChangeProp);\n const collapsible = useCollapsibleRoot({\n open,\n defaultOpen,\n onOpenChange,\n disabled\n });\n const state = React.useMemo(() => ({\n open: collapsible.open,\n disabled: collapsible.disabled,\n transitionStatus: collapsible.transitionStatus\n }), [collapsible.open, collapsible.disabled, collapsible.transitionStatus]);\n const contextValue = React.useMemo(() => ({\n ...collapsible,\n onOpenChange,\n state\n }), [collapsible, onOpenChange, state]);\n const element = useRenderElement('div', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: collapsibleStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(CollapsibleRootContext.Provider, {\n value: contextValue,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") CollapsibleRoot.displayName = \"CollapsibleRoot\";","'use client';\n\nimport * as React from 'react';\nimport { triggerOpenStateMapping } from \"../../utils/collapsibleOpenStateMapping.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useButton } from \"../../internals/use-button/index.mjs\";\nimport { useCollapsibleRootContext } from \"../root/CollapsibleRootContext.mjs\";\nconst stateAttributesMapping = {\n ...triggerOpenStateMapping,\n ...transitionStatusMapping\n};\n\n/**\n * A button that opens and closes the collapsible panel.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Collapsible](https://base-ui.com/react/components/collapsible)\n */\nexport const CollapsibleTrigger = /*#__PURE__*/React.forwardRef(function CollapsibleTrigger(componentProps, forwardedRef) {\n const {\n panelId,\n open,\n handleTrigger,\n state,\n disabled: contextDisabled\n } = useCollapsibleRootContext();\n const {\n className,\n disabled = contextDisabled,\n render,\n nativeButton = true,\n style,\n ...elementProps\n } = componentProps;\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n focusableWhenDisabled: true,\n native: nativeButton\n });\n const element = useRenderElement('button', componentProps, {\n state,\n ref: [forwardedRef, buttonRef],\n props: [{\n 'aria-controls': open ? panelId : undefined,\n 'aria-expanded': open,\n onClick: handleTrigger\n }, elementProps, getButtonProps],\n stateAttributesMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") CollapsibleTrigger.displayName = \"CollapsibleTrigger\";","'use client';\n\nimport * as React from 'react';\nimport { addEventListener } from '@base-ui/utils/addEventListener';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { AnimationFrame } from '@base-ui/utils/useAnimationFrame';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useValueAsRef } from '@base-ui/utils/useValueAsRef';\nimport { warn } from '@base-ui/utils/warn';\nimport { ownerWindow } from '@base-ui/utils/owner';\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useAnimationsFinished } from \"../../internals/useAnimationsFinished.mjs\";\nimport { CollapsiblePanelDataAttributes } from \"./CollapsiblePanelDataAttributes.mjs\";\nconst EMPTY_DIMENSIONS = {\n height: undefined,\n width: undefined\n};\nexport function useCollapsiblePanel(parameters) {\n const {\n externalRef,\n hiddenUntilFound,\n id: idParam,\n keepMounted,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setOpen,\n transitionStatus\n } = parameters;\n const panelRef = React.useRef(null);\n const animationTypeRef = React.useRef(null);\n const [dimensions, setDimensionsUnwrapped] = React.useState(EMPTY_DIMENSIONS);\n const lastMeasuredDimensionsRef = React.useRef(EMPTY_DIMENSIONS);\n // `beforematch` should reveal the matched content immediately, so the next\n // open cycle skips author-defined motion once and then returns to normal.\n const shouldSkipNextOpenRef = React.useRef(false);\n // Keyframe mount animations on initially open panels cause a visible layout\n // shift during the server-rendered first paint, so suppress that first open\n // lifecycle until the panel has been closed once.\n const shouldPreventMountAnimationRef = React.useRef(open);\n // React.Activity tears down Effects while preserving state, so revealing an\n // already-open panel would otherwise replay its CSS keyframe open animation.\n const shouldPreventActivityResumeAnimationRef = React.useRef(false);\n // Some open paths intentionally bypass motion, but the shared root transition\n // status still advances asynchronously. Override the panel to idle so its data\n // attributes and dimension cleanup reflect the immediate open state.\n const [forcePanelIdle, setForcePanelIdle] = React.useState(false);\n const pendingTemporaryStyleRestoreRef = React.useRef(null);\n const mergedPanelRef = useMergedRefs(externalRef, panelRef);\n const latestOpenRef = useValueAsRef(open);\n // Only used to handle panel close\n const runOnceCloseAnimationsFinish = useAnimationsFinished(panelRef);\n const hidden = !open && !mounted;\n const panelTransitionStatus = forcePanelIdle ? 'idle' : transitionStatus;\n const shouldPreventOpenAnimation = open && (\n // These 2 refs are safe to read in render, they are only written from committed\n // layout/effect paths and gate one-shot motion suppression for the next open\n // lifecycle. They intentionally expose the last committed motion snapshot.\n shouldPreventMountAnimationRef.current || shouldPreventActivityResumeAnimationRef.current);\n const renderedDimensions = !open && mounted &&\n // These 2 refs are also safe to read in render, both hold the last committed\n // animation mode and measurement. This fallback only restores a previously\n // measured pixel size after the live dimensions state has been reset back to `auto`.\n animationTypeRef.current === 'css-animation' && dimensions.height === undefined && dimensions.width === undefined ? lastMeasuredDimensionsRef.current : dimensions;\n const shouldPersistHiddenTransitionStyles = hiddenUntilFound && hidden && animationTypeRef.current !== 'css-animation';\n\n // Most measured dimensions are reused later when CSS keyframe closes need a\n // pixel size after the rendered dimensions have been reset back to `auto`.\n // Passing `false` is only for clearing the current dimensions state.\n const setDimensions = useStableCallback((nextDimensions, shouldCacheMeasurement = true) => {\n if (shouldCacheMeasurement) {\n lastMeasuredDimensionsRef.current = nextDimensions;\n }\n setDimensionsUnwrapped(nextDimensions);\n });\n const restorePendingTemporaryStyle = useStableCallback(() => {\n pendingTemporaryStyleRestoreRef.current?.();\n pendingTemporaryStyleRestoreRef.current = null;\n });\n const setPendingTemporaryStyleRestore = useStableCallback(restore => {\n restorePendingTemporaryStyle();\n pendingTemporaryStyleRestoreRef.current = () => {\n pendingTemporaryStyleRestoreRef.current = null;\n restore();\n };\n });\n\n // React.Activity unmounts Effects while preserving component state. If that\n // teardown happens while an already-open keyframe panel is visible, remember\n // to suppress the replayed open animation on the next committed reveal.\n const markActivityResumeAnimationSuppressed = useStableCallback(() => {\n if (open && mounted && animationTypeRef.current === 'css-animation') {\n shouldPreventActivityResumeAnimationRef.current = true;\n }\n });\n useIsoLayoutEffect(() => {\n // `forcePanelIdle` is only a temporary override for open paths that skip\n // motion. Keep it active while the shared root still reports `starting`,\n // then drop it once the root transition state catches up.\n if (!forcePanelIdle || transitionStatus === 'starting') {\n return;\n }\n setForcePanelIdle(false);\n }, [forcePanelIdle, transitionStatus]);\n React.useEffect(() => {\n return () => {\n markActivityResumeAnimationSuppressed();\n restorePendingTemporaryStyle();\n };\n }, [markActivityResumeAnimationSuppressed, restorePendingTemporaryStyle]);\n useIsoLayoutEffect(() => {\n const panel = panelRef.current;\n if (!panel) {\n return undefined;\n }\n\n // `beforematch` can temporarily force a `0s` motion duration so the matched\n // content reveals immediately. Restore the authored duration before detecting\n // the next close animation type, otherwise that first close is misread as\n // \"no motion\" and the close transition or keyframe gets skipped.\n if (!open && pendingTemporaryStyleRestoreRef.current) {\n restorePendingTemporaryStyle();\n }\n const animationType = getAnimationType(panel, shouldPreventOpenAnimation);\n animationTypeRef.current = animationType;\n\n // Initially open keyframe panels skip their first paint animation to avoid\n // layout shift, but we still need to cache the expanded size so the first\n // close animation can start from pixels instead of `auto`.\n if (open && transitionStatus === 'idle' && shouldPreventMountAnimationRef.current && animationType === 'css-animation') {\n lastMeasuredDimensionsRef.current = getDimensions(panel);\n return undefined;\n }\n\n // Handle the opening pass: measure the expanded size and, when necessary,\n // neutralize author-defined motion so the panel can open immediately.\n if (open && transitionStatus === 'starting') {\n // `beforematch` opens should reveal the panel immediately so find-in-page\n // does not wait for the author-defined transition or animation to finish.\n const skipNextOpen = shouldSkipNextOpenRef.current;\n shouldSkipNextOpenRef.current = false;\n if (animationType === 'none') {\n setDimensions(getDimensions(panel));\n setForcePanelIdle(true);\n return undefined;\n }\n if (animationType === 'css-transition') {\n const restoreLayoutStyles = resetLayoutStyles(panel);\n setDimensions(getDimensions(panel));\n if (!skipNextOpen) {\n return restoreLayoutStyles;\n }\n const restoreTransitionDuration = setTemporaryStyle(panel, 'transition-duration', '0s');\n setPendingTemporaryStyleRestore(restoreTransitionDuration);\n setForcePanelIdle(true);\n return restoreLayoutStyles;\n }\n setDimensions(getDimensions(panel));\n const restoreAnimationName = setTemporaryStyle(panel, 'animation-name', 'none');\n if (!skipNextOpen) {\n restoreAnimationName();\n return undefined;\n }\n const restoreAnimationDuration = setTemporaryStyle(panel, 'animation-duration', '0s');\n restoreAnimationName();\n setPendingTemporaryStyleRestore(restoreAnimationDuration);\n setForcePanelIdle(true);\n return undefined;\n }\n\n // Capture the current size as soon as close is requested, before the\n // deferred ending phase applies closed styles. This keeps close transitions\n // starting from a measured pixel value, including interrupted opens.\n if (!open && mounted && (transitionStatus === 'idle' || transitionStatus === 'starting')) {\n shouldPreventMountAnimationRef.current = false;\n shouldPreventActivityResumeAnimationRef.current = false;\n if (animationType === 'none') {\n setDimensions(EMPTY_DIMENSIONS, false);\n setMounted(false);\n return undefined;\n }\n setDimensions(getDimensions(panel));\n return undefined;\n }\n if (transitionStatus !== 'ending') {\n return undefined;\n }\n\n // Reachable when `transitionStatus` already flipped to `ending` before this effect ran, so\n // the close branch above was skipped. Without motion there is nothing to wait for, so unmount\n // here instead of deferring to the animation-finished path below.\n if (animationType === 'none') {\n setMounted(false);\n return undefined;\n }\n const nextDimensions = getDimensions(panel);\n const hasMeasuredSize = nextDimensions.height > 0 || nextDimensions.width > 0;\n if (!hasMeasuredSize) {\n setMounted(false);\n return undefined;\n }\n setDimensions(nextDimensions);\n if (animationType === 'css-animation') {\n const restoreAnimationName = setTemporaryStyle(panel, 'animation-name', 'none');\n restoreAnimationName();\n }\n return undefined;\n }, [mounted, open, restorePendingTemporaryStyle, setDimensions, setMounted, setPendingTemporaryStyleRestore, shouldPreventOpenAnimation, transitionStatus]);\n useOpenChangeComplete({\n enabled: open && mounted && panelTransitionStatus === 'idle',\n open: true,\n ref: panelRef,\n onComplete() {\n // `useOpenChangeComplete` only aborts from its effect cleanup, which React runs in the\n // post-paint passive flush. An animation's `finished` microtask can resolve after the render\n // that set `open` to `false` but before that cleanup, so re-check the latest value here.\n // Clearing the measured size in that window would make the close transition start from\n // `height: 0` instead of the expanded pixel height.\n if (!open) {\n return;\n }\n setDimensions(EMPTY_DIMENSIONS, false);\n }\n });\n\n // Closing panels need extra sequencing beyond `useOpenChangeComplete`.\n // This passive effect runs after the `ending` render has committed, so\n // `[data-ending-style]` is already present. Chrome can still register the\n // exit transition one frame later when an Accordion closes one item while\n // opening another, so wait one frame before watching animations.\n // See https://github.com/mui/base-ui/issues/3099\n React.useEffect(() => {\n if (open || !mounted || panelTransitionStatus !== 'ending') {\n return undefined;\n }\n const panel = panelRef.current;\n if (!panel) {\n return undefined;\n }\n const abortController = new AbortController();\n let endingStyleFrame = -1;\n function handleComplete() {\n // Same post-paint race as the `useOpenChangeComplete` callback above, except `open` is\n // captured by this effect's closure and always `false` here, so read the latest value from\n // a ref. Unmounting a panel that has already reopened would drop it from the DOM.\n if (latestOpenRef.current) {\n return;\n }\n setMounted(false);\n setDimensions(EMPTY_DIMENSIONS, false);\n }\n endingStyleFrame = AnimationFrame.request(() => {\n runOnceCloseAnimationsFinish(handleComplete, abortController.signal);\n });\n return () => {\n AnimationFrame.cancel(endingStyleFrame);\n abortController.abort();\n };\n }, [latestOpenRef, mounted, open, panelTransitionStatus, runOnceCloseAnimationsFinish, setDimensions, setMounted]);\n useIsoLayoutEffect(() => {\n const panel = panelRef.current;\n if (!panel || !hiddenUntilFound || !hidden) {\n return;\n }\n\n // React only supports a boolean for the `hidden` attribute and forces\n // legit string values to booleans so we have to force it back in the DOM\n // when necessary: https://github.com/react/react/issues/24740\n panel.setAttribute('hidden', 'until-found');\n }, [hidden, hiddenUntilFound]);\n React.useEffect(function registerBeforeMatchListener() {\n const panel = panelRef.current;\n if (!panel) {\n return undefined;\n }\n function handleBeforeMatch(event) {\n const eventDetails = createChangeEventDetails(REASONS.none, event);\n onOpenChange(true, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n shouldSkipNextOpenRef.current = true;\n setOpen(true);\n }\n return addEventListener(panel, 'beforematch', handleBeforeMatch);\n }, [onOpenChange, setOpen]);\n const shouldRender = keepMounted || hiddenUntilFound || mounted || open;\n return {\n height: renderedDimensions.height,\n props: {\n ...(shouldPersistHiddenTransitionStyles ? {\n [CollapsiblePanelDataAttributes.startingStyle]: ''\n } : undefined),\n hidden,\n id: idParam\n },\n ref: mergedPanelRef,\n shouldPreventOpenAnimation,\n shouldRender,\n transitionStatus: panelTransitionStatus,\n width: renderedDimensions.width\n };\n}\nfunction getDimensions(element) {\n return {\n height: element.scrollHeight,\n width: element.scrollWidth\n };\n}\nfunction getAnimationType(element, hasSuppressedMountAnimation) {\n const panelStyles = ownerWindow(element).getComputedStyle(element);\n const hasAnimation = (panelStyles.animationName.split(',').map(name => name.trim()).some(name => name !== '' && name !== 'none') || hasSuppressedMountAnimation) && hasNonZeroDuration(panelStyles.animationDuration);\n const hasTransition = hasNonZeroDuration(panelStyles.transitionDuration);\n if (hasAnimation && hasTransition) {\n /* istanbul ignore else -- `process.env.NODE_ENV` is a build-time constant under test */\n if (process.env.NODE_ENV !== 'production') {\n warn('CSS transitions and CSS animations both detected on Collapsible or Accordion panel.', 'Only one of either animation type should be used.');\n }\n return 'css-transition';\n }\n if (hasTransition) {\n return 'css-transition';\n }\n if (hasAnimation) {\n return 'css-animation';\n }\n return 'none';\n}\nfunction hasNonZeroDuration(value) {\n return value.split(',').map(part => part.trim()).some(part => part !== '' && Number.parseFloat(part) > 0);\n}\n\n/**\n * Temporarily overrides an inline style property and returns a cleanup that\n * restores the previous inline value and priority.\n * @param element - The element whose inline style should be updated.\n * @param property - The CSS property name to override.\n * @param value - The temporary value to assign.\n * @returns A cleanup function that restores the original inline style state.\n */\nfunction setTemporaryStyle(element, property, value) {\n const previousValue = element.style.getPropertyValue(property);\n const previousPriority = element.style.getPropertyPriority(property);\n element.style.setProperty(property, value);\n return () => {\n if (previousValue === '') {\n element.style.removeProperty(property);\n return;\n }\n element.style.setProperty(property, previousValue, previousPriority);\n };\n}\n\n/**\n * Temporarily resets inline alignment styles that can distort scroll-based\n * size measurements, then restores them on the next animation frame.\n * @param element - The panel element being measured.\n * @returns A cleanup function that cancels the scheduled restore and reapplies\n * the original inline layout styles immediately.\n */\nfunction resetLayoutStyles(element) {\n const originalLayoutStyles = {\n 'justify-content': element.style.justifyContent,\n 'align-items': element.style.alignItems,\n 'align-content': element.style.alignContent,\n 'justify-items': element.style.justifyItems\n };\n Object.keys(originalLayoutStyles).forEach(key => {\n element.style.setProperty(key, 'initial', 'important');\n });\n function restoreLayoutStyles() {\n Object.entries(originalLayoutStyles).forEach(([key, value]) => {\n if (value === '') {\n element.style.removeProperty(key);\n return;\n }\n element.style.setProperty(key, value);\n });\n }\n const frame = AnimationFrame.request(restoreLayoutStyles);\n return () => {\n AnimationFrame.cancel(frame);\n restoreLayoutStyles();\n };\n}","export let CollapsiblePanelCssVars = /*#__PURE__*/function (CollapsiblePanelCssVars) {\n /**\n * The collapsible panel's height.\n * @type {number}\n */\n CollapsiblePanelCssVars[\"collapsiblePanelHeight\"] = \"--collapsible-panel-height\";\n /**\n * The collapsible panel's width.\n * @type {number}\n */\n CollapsiblePanelCssVars[\"collapsiblePanelWidth\"] = \"--collapsible-panel-width\";\n return CollapsiblePanelCssVars;\n}({});","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { warn } from '@base-ui/utils/warn';\nimport { resolveStyle } from \"../../utils/resolveStyle.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useCollapsibleRootContext } from \"../root/CollapsibleRootContext.mjs\";\nimport { collapsibleStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useCollapsiblePanel } from \"./useCollapsiblePanel.mjs\";\nimport { CollapsiblePanelCssVars } from \"./CollapsiblePanelCssVars.mjs\";\n/**\n * A panel with the collapsible contents.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Collapsible](https://base-ui.com/react/components/collapsible)\n */\nexport const CollapsiblePanel = /*#__PURE__*/React.forwardRef(function CollapsiblePanel(componentProps, forwardedRef) {\n const {\n className,\n hiddenUntilFound: hiddenUntilFoundProp,\n keepMounted: keepMountedProp,\n render,\n id: idProp,\n style,\n ...elementProps\n } = componentProps;\n\n /* istanbul ignore else -- `process.env.NODE_ENV` is a build-time constant under test */\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (hiddenUntilFoundProp && keepMountedProp === false) {\n warn('The `keepMounted={false}` prop on `Collapsible.Panel` is ignored when `hiddenUntilFound` is enabled, since the panel must remain mounted while closed.');\n }\n }, [hiddenUntilFoundProp, keepMountedProp]);\n }\n const {\n defaultPanelId,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setPanelIdState,\n setOpen,\n state,\n transitionStatus\n } = useCollapsibleRootContext();\n const hiddenUntilFound = hiddenUntilFoundProp ?? false;\n const keepMounted = keepMountedProp ?? false;\n const registeredId = idProp || undefined;\n const id = registeredId ?? defaultPanelId;\n useIsoLayoutEffect(() => {\n setPanelIdState(currentId => registeredId ?? (currentId === null ? undefined : currentId));\n return () => {\n setPanelIdState(currentId => currentId === registeredId ? null : currentId);\n };\n }, [registeredId, setPanelIdState]);\n const {\n height,\n props,\n ref,\n shouldPreventOpenAnimation,\n shouldRender,\n transitionStatus: panelTransitionStatus,\n width\n } = useCollapsiblePanel({\n externalRef: forwardedRef,\n hiddenUntilFound,\n id,\n keepMounted,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setOpen,\n transitionStatus\n });\n const panelState = {\n ...state,\n transitionStatus: panelTransitionStatus\n };\n const resolvedStyle = resolveStyle(style, panelState);\n const element = useRenderElement('div', {\n ...componentProps,\n style: undefined\n }, {\n state: panelState,\n ref,\n props: [props, {\n style: {\n [CollapsiblePanelCssVars.collapsiblePanelHeight]: height === undefined ? 'auto' : `${height}px`,\n [CollapsiblePanelCssVars.collapsiblePanelWidth]: width === undefined ? 'auto' : `${width}px`\n }\n }, elementProps, resolvedStyle ? {\n style: resolvedStyle\n } : undefined,\n // Resolve the public `style` prop so temporary `animationName: 'none'`\n // can still win after user's inline styles have been merged.\n shouldPreventOpenAnimation ? {\n style: {\n animationName: 'none'\n }\n } : undefined],\n stateAttributesMapping: collapsibleStateAttributesMapping\n });\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") CollapsiblePanel.displayName = \"CollapsiblePanel\";","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Collapsible } from \"@base-ui/react/collapsible\";\n//#region src/components/collapsible/collapsible-panel.tsx\nconst TRCollapsiblePanel = createComponentPart(Collapsible.Panel, \"tr-collapsible-content\");\n//#endregion\nexport { TRCollapsiblePanel };\n\n//# sourceMappingURL=collapsible-panel.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Collapsible } from \"@base-ui/react/collapsible\";\n//#region src/components/collapsible/collapsible-root.tsx\nconst TRCollapsibleRoot = createComponentPart(Collapsible.Root, \"tr-collapsible\");\n//#endregion\nexport { TRCollapsibleRoot };\n\n//# sourceMappingURL=collapsible-root.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Collapsible } from \"@base-ui/react/collapsible\";\n//#region src/components/collapsible/collapsible-trigger.tsx\nconst TRCollapsibleTrigger = createComponentPart(Collapsible.Trigger, \"tr-collapsible-summary\");\n//#endregion\nexport { TRCollapsibleTrigger };\n\n//# sourceMappingURL=collapsible-trigger.js.map","import { TRCollapsiblePanel } from \"./collapsible-panel.js\";\nimport { TRCollapsibleRoot } from \"./collapsible-root.js\";\nimport { TRCollapsibleTrigger } from \"./collapsible-trigger.js\";\n//#region src/components/collapsible/index.tsx\nconst TRCollapsible = {\n\tRoot: TRCollapsibleRoot,\n\tTrigger: TRCollapsibleTrigger,\n\tPanel: TRCollapsiblePanel\n};\n//#endregion\nexport { TRCollapsible, TRCollapsiblePanel, TRCollapsibleRoot, TRCollapsibleTrigger };\n\n//# sourceMappingURL=index.js.map","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCollapsible } from '@tinyrack/ui/components/collapsible';\nimport type { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { TotpSetupData } from '#frontend/features/totp/use-totp-setup.ts';\n\nexport interface QrStepProps {\n setupData: TotpSetupData;\n onNext: () => void;\n additionalActions?: ReactNode;\n className?: string;\n}\n\nexport function QrStep({\n setupData,\n onNext,\n additionalActions,\n className = '',\n}: QrStepProps) {\n const { t } = useTranslation();\n\n return (\n <div className={`flex flex-col gap-tinyrack-lg ${className}`}>\n <p className=\"text-center text-tinyrack-sm text-tinyrack-text-muted\">\n {t('setupTotp.qrDescription')}\n </p>\n\n {/*\n The QR sits on its own light surface with padding for the quiet zone.\n Rendered straight onto the canvas it inherited the dark theme's\n background, and scanners need the margin and the contrast to lock on.\n */}\n <div className=\"flex justify-center\">\n <div className=\"rounded-tinyrack-lg border border-tinyrack-border bg-tinyrack-surface p-tinyrack-lg\">\n <img\n alt=\"TOTP QR Code\"\n className=\"block size-tinyrack-measure-sm\"\n src={setupData.qr_code}\n />\n </div>\n </div>\n\n <TRCollapsible.Root>\n <TRCollapsible.Trigger>\n {t('setupTotp.manualEntry')}\n </TRCollapsible.Trigger>\n <TRCollapsible.Panel>\n <code className=\"mt-tinyrack-xs block break-all rounded-tinyrack-sm bg-tinyrack-surface-muted p-tinyrack-sm text-tinyrack-sm text-tinyrack-text\">\n {setupData.secret}\n </code>\n </TRCollapsible.Panel>\n </TRCollapsible.Root>\n\n <TRButton\n className=\"w-full\"\n data-testid=\"totp-qr-next\"\n intent=\"primary\"\n onClick={onNext}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('setupTotp.next')}\n </TRButton>\n\n {additionalActions}\n </div>\n );\n}\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n confirmTotpSetupMutationOptions,\n startTotpSetupMutationOptions,\n type TotpConfirmResponse,\n type TotpSetupResponse,\n type TotpSetupVerifyResponse,\n verifyTotpMutationOptions,\n} from '#frontend/queries/totp.ts';\n\nexport type TotpSetupStep = 'loading' | 'qr' | 'verify' | 'recovery' | 'error';\n\nexport interface TotpSetupData {\n qr_code: string;\n secret: string;\n}\n\nexport interface UseTotpSetupOptions {\n onSetupSuccess?: (data: TotpSetupResponse) => void;\n onSetupError?: (error: Error) => void;\n onVerifySuccess?: (data: TotpSetupVerifyResponse) => void;\n onVerifyError?: (error: Error) => void;\n onConfirmSuccess?: (data: TotpConfirmResponse) => void;\n onConfirmError?: (error: Error) => void;\n autoStart?: boolean;\n}\n\nexport interface UseTotpSetupReturn {\n step: TotpSetupStep;\n setupData: TotpSetupResponse | null;\n recoveryCodes: string[];\n isSetupPending: boolean;\n isVerifyPending: boolean;\n isConfirmPending: boolean;\n isPending: boolean;\n setupError: Error | null;\n verifyError: Error | null;\n confirmError: Error | null;\n startSetup: () => void;\n verify: (code: string) => Promise<TotpSetupVerifyResponse>;\n goToQr: () => void;\n goToVerify: () => void;\n confirmRecoveryCodes: () => Promise<TotpConfirmResponse>;\n reset: () => void;\n}\n\nexport function useTotpSetup(\n options: UseTotpSetupOptions = {},\n): UseTotpSetupReturn {\n const {\n onSetupSuccess,\n onSetupError,\n onVerifySuccess,\n onVerifyError,\n onConfirmSuccess,\n onConfirmError,\n autoStart = false,\n } = options;\n\n const queryClient = useQueryClient();\n const [step, setStep] = useState<TotpSetupStep>(autoStart ? 'loading' : 'qr');\n const [setupData, setSetupData] = useState<TotpSetupResponse | null>(null);\n const [recoveryCodes, setRecoveryCodes] = useState<string[]>([]);\n const setupInitiatedRef = useRef(false);\n\n const setupMutation = useMutation({\n ...startTotpSetupMutationOptions,\n onSuccess: (data) => {\n setSetupData(data);\n setStep('qr');\n onSetupSuccess?.(data);\n },\n onError: (error) => {\n setStep('error');\n onSetupError?.(error);\n },\n });\n\n const verifyMutation = useMutation({\n ...verifyTotpMutationOptions,\n onSuccess: (data) => {\n // Do NOT invalidate session here - TOTP is not fully enabled yet\n setRecoveryCodes(data.recovery_codes);\n setStep('recovery');\n onVerifySuccess?.(data);\n },\n onError: (error) => {\n onVerifyError?.(error);\n },\n });\n\n const confirmMutation = useMutation({\n ...confirmTotpSetupMutationOptions,\n onSuccess: (data) => {\n // Now TOTP is fully enabled, invalidate session\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n onConfirmSuccess?.(data);\n },\n onError: (error) => {\n onConfirmError?.(error);\n },\n });\n\n const startSetup = useCallback(() => {\n setupInitiatedRef.current = true;\n setStep('loading');\n setupMutation.mutate();\n }, [setupMutation]);\n\n const verify = useCallback(\n async (code: string) => {\n return verifyMutation.mutateAsync({ code });\n },\n [verifyMutation],\n );\n\n const goToQr = useCallback(() => {\n setStep('qr');\n }, []);\n\n const goToVerify = useCallback(() => {\n setStep('verify');\n }, []);\n\n const confirmRecoveryCodes = useCallback(async () => {\n return confirmMutation.mutateAsync();\n }, [confirmMutation]);\n\n const reset = useCallback(() => {\n setStep(autoStart ? 'loading' : 'qr');\n setSetupData(null);\n setRecoveryCodes([]);\n setupInitiatedRef.current = false;\n setupMutation.reset();\n verifyMutation.reset();\n confirmMutation.reset();\n }, [autoStart, setupMutation, verifyMutation, confirmMutation]);\n\n // Auto start setup on mount if enabled\n useEffect(() => {\n if (autoStart && !setupInitiatedRef.current && step === 'loading') {\n setupInitiatedRef.current = true;\n setupMutation.mutate();\n }\n }, [autoStart, step, setupMutation]);\n\n return {\n step,\n setupData,\n recoveryCodes,\n isSetupPending: setupMutation.isPending,\n isVerifyPending: verifyMutation.isPending,\n isConfirmPending: confirmMutation.isPending,\n isPending:\n setupMutation.isPending ||\n verifyMutation.isPending ||\n confirmMutation.isPending,\n setupError: setupMutation.error,\n verifyError: verifyMutation.error,\n confirmError: confirmMutation.error,\n startSetup,\n verify,\n goToQr,\n goToVerify,\n confirmRecoveryCodes,\n reset,\n };\n}\n"],"x_google_ignoreList":[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,Z as t,b as n}from"./createLucideIcon-BPpAIXR_.js";import{O as r}from"./shell-header-bar-CjG5qvPg.js";var i=t(e(),1);function a(e,t,a,s=!0,c){let[l,u]=i.useState(),d=r(c?`${c}-label`:void 0),f=e??t??l;return n(()=>{let n=e||t||!s?void 0:o(a.current,d);l!==n&&u(n)}),f}function o(e,t){let n=s(e);if(n)return!n.id&&t&&(n.id=t),n.id||void 0}function s(e){if(!e)return;let t=e.parentElement;if(t&&t.tagName===`LABEL`)return t;let n=e.id;if(n){let t=e.nextElementSibling;if(t&&t.htmlFor===n)return t}let r=e.labels;return r&&r[0]}export{a as t};
|
|
2
|
+
//# sourceMappingURL=useAriaLabelledBy-ByuMi3Ry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAriaLabelledBy-ByuMi3Ry.js","names":[],"sources":["../../../../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/labelable-provider/useAriaLabelledBy.mjs"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useBaseUiId } from \"../useBaseUiId.mjs\";\nexport function useAriaLabelledBy(explicitAriaLabelledBy, labelId, labelSourceRef, enableFallback = true, labelSourceId) {\n const [fallbackAriaLabelledBy, setFallbackAriaLabelledBy] = React.useState();\n const generatedLabelId = useBaseUiId(labelSourceId ? `${labelSourceId}-label` : undefined);\n const ariaLabelledBy = explicitAriaLabelledBy ?? labelId ?? fallbackAriaLabelledBy;\n\n // Fallback for <span> controls labelled by wrapping/sibling native <label>.\n // Run after every commit so DOM association changes (e.g. label mount/unmount)\n // are reflected even when props/state deps are unchanged.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useIsoLayoutEffect(() => {\n const nextAriaLabelledBy = explicitAriaLabelledBy || labelId || !enableFallback ? undefined : getAriaLabelledBy(labelSourceRef.current, generatedLabelId);\n if (fallbackAriaLabelledBy !== nextAriaLabelledBy) {\n setFallbackAriaLabelledBy(nextAriaLabelledBy);\n }\n });\n return ariaLabelledBy;\n}\nfunction getAriaLabelledBy(labelSource, generatedLabelId) {\n const label = findAssociatedLabel(labelSource);\n if (!label) {\n return undefined;\n }\n if (!label.id && generatedLabelId) {\n label.id = generatedLabelId;\n }\n return label.id || undefined;\n}\nfunction findAssociatedLabel(labelSource) {\n if (!labelSource) {\n return undefined;\n }\n\n // Fast path before the expensive `.labels` read.\n const parent = labelSource.parentElement;\n if (parent && parent.tagName === 'LABEL') {\n return parent;\n }\n const controlId = labelSource.id;\n if (controlId) {\n const nextSibling = labelSource.nextElementSibling;\n if (nextSibling && nextSibling.htmlFor === controlId) {\n return nextSibling;\n }\n }\n const labels = labelSource.labels;\n return labels && labels[0];\n}"],"x_google_ignoreList":[0],"mappings":"mIAKA,SAAgB,EAAkB,EAAwB,EAAS,EAAgB,EAAiB,GAAM,EAAe,CACvH,GAAM,CAAC,EAAwB,GAAA,EAAmC,SAAS,EACrE,EAAmB,EAAY,EAAgB,GAAG,EAAc,QAAU,IAAA,EAAS,EACnF,EAAiB,GAA0B,GAAW,EAY5D,OANA,MAAyB,CACvB,IAAM,EAAqB,GAA0B,GAAW,CAAC,EAAiB,IAAA,GAAY,EAAkB,EAAe,QAAS,CAAgB,EACpJ,IAA2B,GAC7B,EAA0B,CAAkB,CAEhD,CAAC,EACM,CACT,CACA,SAAS,EAAkB,EAAa,EAAkB,CACxD,IAAM,EAAQ,EAAoB,CAAW,EACxC,KAML,MAHI,CAAC,EAAM,IAAM,IACf,EAAM,GAAK,GAEN,EAAM,IAAM,IAAA,EACrB,CACA,SAAS,EAAoB,EAAa,CACxC,GAAI,CAAC,EACH,OAIF,IAAM,EAAS,EAAY,cAC3B,GAAI,GAAU,EAAO,UAAY,QAC/B,OAAO,EAET,IAAM,EAAY,EAAY,GAC9B,GAAI,EAAW,CACb,IAAM,EAAc,EAAY,mBAChC,GAAI,GAAe,EAAY,UAAY,EACzC,OAAO,CAEX,CACA,IAAM,EAAS,EAAY,OAC3B,OAAO,GAAU,EAAO,EAC1B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,Z as t}from"./createLucideIcon-BPpAIXR_.js";import{Br as n,Fr as r,Or as i,Sr as a,Ur as o,jr as s,zr as c}from"./config-DTQCUlfZ.js";import{r as l}from"./mutationOptions-DyYFUbyn.js";var u=class extends o{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),c(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&s(t.mutationKey)!==s(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??l();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){i.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},d=t(e(),1);function f(e,t){let o=a(t),[s]=d.useState(()=>new u(o,e));d.useEffect(()=>{s.setOptions(e)},[s,e]);let c=d.useSyncExternalStore(d.useCallback(e=>s.subscribe(i.batchCalls(e)),[s]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),l=d.useCallback((e,t)=>{s.mutate(e,t).catch(r)},[s]);if(c.error&&n(s.options.throwOnError,[c.error]))throw c.error;return{...c,mutate:l,mutateAsync:c.mutate}}export{f as t};
|
|
2
|
+
//# sourceMappingURL=useMutation-BWZ0G4Td.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMutation-BWZ0G4Td.js","names":["#client","#updateResult","#currentMutation","#notify","#currentResult","#mutateOptions"],"sources":["../../../../node_modules/.pnpm/@tanstack+query-core@5.101.2/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/useMutation.js"],"sourcesContent":["// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuery-Ckxjmvtl.js","names":[],"sources":["../../../../node_modules/.pnpm/@tanstack+react-query@5.101.2_react@19.2.7/node_modules/@tanstack/react-query/build/modern/useQuery.js"],"sourcesContent":["\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map"],"x_google_ignoreList":[0],"mappings":"8FAKA,SAAS,EAAS,EAAS,EAAa,CACtC,OAAO,EAAa,EAAS,EAAe,CAAW,CACzD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,W as t,Z as n,i as r,n as i,q as a,s as o,t as s}from"./createLucideIcon-BPpAIXR_.js";import{Sr as c,t as l}from"./config-DTQCUlfZ.js";import{t as u}from"./useMutation-BWZ0G4Td.js";import{N as d,P as f,r as p,tt as m}from"./shell-header-bar-CjG5qvPg.js";import{a as h,c as g,d as _,i as v,l as y,n as ee,o as b,r as x,s as te,t as S,u as C}from"./admin-users-DvPbw1Vq.js";import{t as w}from"./plus-DSBBSrgj.js";import{t as T}from"./triangle-alert-CqNn0kPs.js";import{B as E,o as D}from"./index-CS23Ozt6.js";import{t as O}from"./badge-CsOfUji0.js";import{n as k}from"./alert-leqyvHOp.js";import{t as A}from"./checkbox-gdHnSFQ-.js";import{t as j}from"./field-Cn4H1CUj.js";import{t as M}from"./input-CzQki7k6.js";import{n as N,t as P}from"./modal-BDQFucjz.js";var F=s(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),I=n(e(),1);function L(e){return e===`admin`?`admin`:`user`}function R(e){return e.role===`admin`?`admins`:e.managedBy===`database`?`database`:e.managedBy===`config`?`config`:`all`}var z=a();function B({modal:e,isMutating:t,onClose:n,onCreate:a,onUpdate:s,onDelete:c}){let{t:l}=r(),u=(0,I.useMemo)(()=>e?.type===`edit`?e.user:null,[e]);if(!e)return null;if(e.type===`delete`)return(0,z.jsxs)(P,{isOpen:!0,onClose:n,title:l(`admin.users.deleteTitle`,{email:e.user.email}),variant:`destructive`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-xs rounded-tinyrack-md border border-tinyrack-danger-border bg-tinyrack-danger-surface p-tinyrack-lg text-tinyrack-danger`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,z.jsx)(T,{"aria-hidden":!0,className:`size-tinyrack-lg`}),(0,z.jsx)(i,{as:`p`,weight:`medium`,children:l(`admin.users.deleteWarning`)})]}),(0,z.jsx)(i,{as:`p`,variant:`bodySm`,children:l(`admin.users.deleteDescription`)})]}),(0,z.jsxs)(N,{children:[(0,z.jsx)(o,{disabled:t,onClick:n,type:`button`,uiSize:`sm`,children:l(`admin.users.cancel`)}),(0,z.jsx)(o,{disabled:t,intent:`danger`,onClick:()=>c(e.user.sub),type:`button`,uiSize:`sm`,children:l(`admin.users.deleteConfirm`)})]})]});let d=e.type===`create`?l(`admin.users.create`):l(`admin.users.editTitle`),m=e.type===`create`?l(`admin.users.createSubmit`):l(`admin.users.save`);return(0,z.jsx)(P,{description:e.type===`create`?l(`admin.users.createHint`):l(`admin.users.editHint`),isOpen:!0,onClose:n,title:d,children:(0,z.jsxs)(`form`,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-lg`,onSubmit:t=>{t.preventDefault();let n=new FormData(t.currentTarget),r={email:String(n.get(`email`)??``),role:L(n.get(`role`)),email_verified:n.get(`email_verified`)===`on`};e.type===`create`?a({...r,password:String(n.get(`password`)??``)}):s({sub:e.user.sub,...r})},children:[(0,z.jsxs)(j.Root,{children:[(0,z.jsx)(j.Label,{htmlFor:`admin-user-email`,children:l(`profile.email.label`)}),(0,z.jsx)(M,{defaultValue:u?.email??``,id:`admin-user-email`,name:`email`,required:!0,type:`email`,uiSize:`sm`})]}),e.type===`create`?(0,z.jsxs)(j.Root,{children:[(0,z.jsx)(j.Label,{htmlFor:`admin-user-password`,children:l(`admin.users.password`)}),(0,z.jsx)(M,{id:`admin-user-password`,name:`password`,required:!0,type:`password`,uiSize:`sm`})]}):null,(0,z.jsxs)(j.Root,{children:[(0,z.jsx)(j.Label,{htmlFor:`admin-user-role`,children:l(`admin.users.role`)}),(0,z.jsxs)(p.Root,{defaultValue:u?.role??`user`,name:`role`,children:[(0,z.jsx)(p.Trigger,{id:`admin-user-role`,uiSize:`sm`,children:(0,z.jsx)(p.Value,{})}),(0,z.jsx)(p.Positioner,{children:(0,z.jsx)(p.Popup,{children:(0,z.jsx)(p.List,{children:[`user`,`admin`].map(e=>(0,z.jsxs)(p.Item,{value:e,children:[(0,z.jsx)(p.ItemText,{children:l(`admin.users.role${e===`user`?`User`:`Admin`}`)}),(0,z.jsx)(p.ItemIndicator,{children:(0,z.jsx)(f,{"aria-hidden":!0})})]},e))})})})]})]}),(0,z.jsx)(j.Root,{children:(0,z.jsxs)(`div`,{className:`flex items-center gap-tinyrack-md rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface px-tinyrack-md py-tinyrack-sm`,children:[(0,z.jsx)(A.Root,{"aria-label":l(`admin.users.emailVerified`),defaultChecked:u?.email_verified??!1,name:`email_verified`,uiSize:`md`,value:`on`,children:(0,z.jsx)(A.Indicator,{})}),(0,z.jsx)(j.Label,{className:`cursor-pointer`,children:l(`admin.users.emailVerified`)})]})}),(0,z.jsxs)(N,{children:[(0,z.jsx)(o,{disabled:t,onClick:n,type:`button`,uiSize:`sm`,children:l(`admin.users.cancel`)}),(0,z.jsx)(o,{disabled:t,intent:`primary`,type:`submit`,uiSize:`sm`,children:m})]})]})})}var V=[10,20,50];function H({pageStart:e,pageEnd:t,total:n,query:a,includeDeleted:s,activeQuickFilter:c,hasActiveFilters:l,onClearFilters:u,pageSize:d,onPageSizeChange:m}){let{t:h}=r();return(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-tinyrack-md px-tinyrack-xl`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-tinyrack-sm`,children:[(0,z.jsx)(i,{color:`muted`,variant:`bodySm`,children:h(`admin.users.showingRange`,{from:e,to:t,total:n})}),a?(0,z.jsx)(O,{uiSize:`md`,variant:`neutral`,children:h(`admin.users.queryChip`,{query:a})}):null,s?(0,z.jsx)(O,{uiSize:`md`,variant:`warning`,children:h(`admin.users.includeDeleted`)}):null,c===`all`?null:(0,z.jsx)(O,{uiSize:`md`,children:h(`admin.users.filter.${c}`)}),l?(0,z.jsx)(o,{appearance:`ghost`,onClick:u,type:`button`,uiSize:`sm`,children:h(`admin.users.clearFilters`)}):null]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,z.jsx)(i,{color:`muted`,variant:`bodySm`,children:h(`admin.users.pageSize`)}),(0,z.jsxs)(p.Root,{onValueChange:e=>{typeof e==`number`&&m(e)},value:d,children:[(0,z.jsx)(p.Trigger,{"aria-label":h(`admin.users.pageSize`),uiSize:`sm`,children:(0,z.jsx)(p.Value,{})}),(0,z.jsx)(p.Portal,{children:(0,z.jsx)(p.Positioner,{children:(0,z.jsx)(p.Popup,{children:(0,z.jsx)(p.List,{children:V.map(e=>(0,z.jsxs)(p.Item,{value:e,children:[(0,z.jsx)(p.ItemText,{children:e}),(0,z.jsx)(p.ItemIndicator,{children:(0,z.jsx)(f,{})})]},e))})})})})]})]})]})}function U({notice:e,onDismiss:t}){let{t:n}=r(),i=e.tone===`success`;return(0,z.jsxs)(k.Root,{"aria-live":i?`polite`:`assertive`,role:i?`status`:`alert`,variant:i?`success`:`danger`,children:[i?(0,z.jsx)(f,{"aria-hidden":!0,className:`size-tinyrack-xl`}):(0,z.jsx)(T,{"aria-hidden":!0,className:`size-tinyrack-xl`}),(0,z.jsx)(k.Title,{children:e.message}),(0,z.jsx)(o,{appearance:`ghost`,"aria-label":n(`common.close`),className:`ms-auto`,onClick:t,type:`button`,uiSize:`sm`,children:(0,z.jsx)(d,{"aria-hidden":!0,className:`size-tinyrack-lg`})})]})}function W({active:e,config:t,database:n}){let{t:i}=r(),a=i(`admin.users.currentPage`);return(0,z.jsxs)(`div`,{className:`flex flex-col overflow-hidden rounded-tinyrack-lg border border-tinyrack-border bg-tinyrack-surface shadow-tinyrack-raised lg:flex-row lg:divide-x lg:divide-tinyrack-border`,children:[(0,z.jsx)(b,{hint:a,label:i(`admin.users.activeOnPage`),value:e}),(0,z.jsx)(b,{hint:a,label:i(`admin.users.configOnPage`),value:t}),(0,z.jsx)(b,{hint:a,label:i(`admin.users.databaseOnPage`),value:n})]})}function G({className:e,...n}){return(0,z.jsx)(`tbody`,{...n,className:t(`tr-table-body`,e)})}function K({className:e,...n}){return(0,z.jsx)(`caption`,{...n,className:t(`tr-table-caption`,e)})}function q({className:e,...n}){return(0,z.jsx)(`td`,{...n,className:t(`tr-table-cell`,e)})}function J({className:e,...n}){return(0,z.jsx)(`tfoot`,{...n,className:t(`tr-table-footer`,e)})}function Y({className:e,...n}){return(0,z.jsx)(`th`,{...n,className:t(`tr-table-head`,e)})}function X({className:e,...n}){return(0,z.jsx)(`thead`,{...n,className:t(`tr-table-header`,e)})}function Z({className:e,containerClassName:n,containerProps:r,containerRef:i,density:a=`comfortable`,striped:o=!1,...s}){let{className:c,ref:l,...u}=r??{};return(0,z.jsx)(`div`,{...u,className:t(`tr-table-container`,n,c),ref:i??l,children:(0,z.jsx)(`table`,{...s,className:t(`tr-table`,e),"data-density":a,"data-striped":o?`true`:void 0})})}function Q({className:e,...n}){return(0,z.jsx)(`tr`,{...n,className:t(`tr-table-row`,e)})}var $={Root:Z,Caption:K,Header:X,Body:G,Footer:J,Row:Q,Head:Y,Cell:q};function ne({users:e,onEdit:t,onDelete:n}){let{t:a}=r();return(0,z.jsx)(`div`,{className:`overflow-x-auto pb-tinyrack-sm`,children:(0,z.jsxs)($.Root,{density:`compact`,striped:!0,children:[(0,z.jsx)($.Header,{children:(0,z.jsxs)($.Row,{children:[(0,z.jsx)($.Head,{children:a(`profile.email.label`)}),(0,z.jsx)($.Head,{children:a(`admin.users.role`)}),(0,z.jsx)($.Head,{children:a(`admin.users.source`)}),(0,z.jsx)($.Head,{children:a(`admin.users.emailVerified`)}),(0,z.jsx)($.Head,{children:a(`admin.users.secondFactor`)}),(0,z.jsx)($.Head,{children:a(`admin.users.status`)}),(0,z.jsx)($.Head,{children:a(`admin.users.actions`)})]})}),(0,z.jsxs)($.Body,{children:[e.map(e=>(0,z.jsxs)($.Row,{children:[(0,z.jsx)($.Cell,{children:(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-3xs`,children:[(0,z.jsx)(i,{as:`div`,variant:`bodySm`,weight:`medium`,children:e.email}),(0,z.jsx)(i,{as:`div`,className:`max-w-tinyrack-measure-lg`,color:`muted`,truncate:!0,variant:`caption`,children:(0,z.jsx)(`span`,{className:`font-tinyrack-mono`,children:e.sub})})]})}),(0,z.jsx)($.Cell,{children:(0,z.jsx)(O,{className:`whitespace-nowrap`,uiSize:`md`,variant:e.role===`admin`?`neutral`:void 0,children:g(a,e.role)})}),(0,z.jsx)($.Cell,{children:(0,z.jsx)(O,{className:`whitespace-nowrap`,uiSize:`md`,variant:e.managed_by===`config`?`warning`:`info`,children:y(a,e.managed_by)})}),(0,z.jsx)($.Cell,{children:e.email_verified?a(`common.yes`):a(`common.no`)}),(0,z.jsx)($.Cell,{children:e.totp_registered?a(`admin.users.secondFactorTotp`):e.passkey_count>0?a(e.passkey_count===1?`admin.users.secondFactorPasskey`:`admin.users.secondFactorPasskeys`,{count:e.passkey_count}):a(`common.none`)}),(0,z.jsx)($.Cell,{children:(0,z.jsx)(O,{className:`whitespace-nowrap`,uiSize:`md`,variant:e.deleted_at?`danger`:`success`,children:e.deleted_at?a(`admin.users.deleted`):a(`admin.users.active`)})}),(0,z.jsx)($.Cell,{children:e.managed_by===`database`&&!e.deleted_at?(0,z.jsxs)(`div`,{className:`inline-flex items-center whitespace-nowrap rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface-muted`,children:[(0,z.jsx)(o,{appearance:`ghost`,"aria-label":a(`admin.users.editUser`,{email:e.email}),onClick:()=>t(e),type:`button`,uiSize:`sm`,children:a(`admin.users.edit`)}),(0,z.jsx)(o,{appearance:`outline`,"aria-label":a(`admin.users.deleteUser`,{email:e.email}),intent:`danger`,onClick:()=>n(e),type:`button`,uiSize:`sm`,children:a(`admin.users.delete`)})]}):(0,z.jsx)(O,{className:`whitespace-nowrap`,uiSize:`md`,children:a(`admin.users.readonly`)})})]},e.sub)),e.length===0?(0,z.jsx)($.Row,{children:(0,z.jsx)($.Cell,{className:`py-tinyrack-3xl text-center text-tinyrack-text-muted`,colSpan:7,children:a(`admin.users.emptyFiltered`)})}):null]})]})})}var re=[`all`,`database`,`config`,`admins`];function ie({total:e,draftQuery:t,onDraftQueryChange:n,draftIncludeDeleted:a,onDraftIncludeDeletedChange:s,onSearch:c,onCreate:l,activeQuickFilter:u,onQuickFilter:d}){let{t:f}=r();return(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-lg border-tinyrack-border border-b-tinyrack-default bg-tinyrack-surface-muted p-tinyrack-xl xl:flex-row xl:items-end xl:justify-between`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-sm`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,z.jsx)(_,{"aria-hidden":!0,className:`size-tinyrack-lg text-tinyrack-success`}),(0,z.jsx)(i,{color:`muted`,variant:`label`,children:f(`admin.users.directoryEyebrow`)})]}),(0,z.jsx)(E.Title,{children:f(`admin.users.directory`)}),(0,z.jsx)(E.Description,{className:`text-tinyrack-sm`,children:f(`admin.users.total`,{count:e})})]}),(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-md xl:items-end`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-sm lg:flex-row lg:items-center`,children:[(0,z.jsx)(M,{"aria-label":f(`admin.users.searchPlaceholder`),className:`w-full lg:w-tinyrack-overlay-width-sm`,onChange:e=>n(e.target.value),onKeyDown:e=>{e.key===`Enter`&&c()},placeholder:f(`admin.users.searchPlaceholder`),type:`search`,uiSize:`sm`,value:t}),(0,z.jsx)(j.Root,{children:(0,z.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface px-tinyrack-md py-tinyrack-sm`,children:[(0,z.jsx)(A.Root,{"aria-label":f(`admin.users.includeDeleted`),checked:a,onCheckedChange:e=>s(e===!0),uiSize:`md`,children:(0,z.jsx)(A.Indicator,{})}),(0,z.jsx)(j.Label,{className:`cursor-pointer`,children:f(`admin.users.includeDeleted`)})]})}),(0,z.jsxs)(o,{appearance:`outline`,onClick:c,type:`button`,uiSize:`sm`,children:[(0,z.jsx)(F,{"aria-hidden":!0,className:`size-tinyrack-lg`}),f(`admin.users.search`)]}),(0,z.jsxs)(o,{intent:`primary`,onClick:l,type:`button`,uiSize:`sm`,children:[(0,z.jsx)(w,{"aria-hidden":!0,className:`size-tinyrack-lg`}),f(`admin.users.create`)]})]}),(0,z.jsx)(`div`,{className:`inline-flex items-center gap-tinyrack-3xs rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface-muted p-tinyrack-xs`,children:re.map(e=>(0,z.jsx)(o,{appearance:u===e?`solid`:`ghost`,intent:u===e?`primary`:void 0,onClick:()=>d(e),type:`button`,uiSize:`sm`,children:f(`admin.users.filter.${e}`)},e))})]})]})}function ae(){let e=D.useRouteContext({select:e=>e.user});return e?.role===`admin`?(0,z.jsx)(oe,{user:e}):(0,z.jsx)(C,{reason:`access-required`})}function oe({user:e}){let{data:t}=m(l);return t.admin.enabled?(0,z.jsx)(se,{user:e}):(0,z.jsx)(C,{reason:`console-disabled`})}function se({user:e}){let{t}=r(),n=c(),[i,a]=(0,I.useState)(``),[s,l]=(0,I.useState)(!1),[d,f]=(0,I.useState)(()=>v()),[p,g]=(0,I.useState)(null),[_,y]=(0,I.useState)(null),{data:b}=m(S(d)),C=b.users.filter(e=>!e.deleted_at).length,w=b.users.filter(e=>e.managed_by===`config`).length,T=b.users.filter(e=>e.managed_by===`database`).length,D=R(d),k=d.query!==``||d.includeDeleted||d.managedBy!==void 0||d.role!==void 0,A=b.pagination.total===0?0:(b.pagination.page-1)*b.pagination.page_size+1,j=Math.min(b.pagination.page*b.pagination.page_size,b.pagination.total),M=e=>g({tone:`success`,message:e}),N=()=>g({tone:`error`,message:t(`admin.users.operationFailed`)}),P=u({mutationFn:ee,onSuccess:({user:e})=>{n.invalidateQueries({queryKey:[`admin`,`users`]}),M(t(`admin.users.createdNotice`,{email:e.email})),y(null)},onError:N}),F=u({mutationFn:h,onSuccess:({user:e})=>{n.invalidateQueries({queryKey:[`admin`,`users`]}),M(t(`admin.users.updatedNotice`,{email:e.email})),y(null)},onError:N}),L=u({mutationFn:x,onSuccess:({user:e})=>{n.invalidateQueries({queryKey:[`admin`,`users`]}),M(t(`admin.users.deletedNotice`,{email:e.email})),y(null)},onError:N}),V=P.isPending||F.isPending||L.isPending;return(0,z.jsxs)(te,{current:`users`,description:t(`admin.users.description`),title:t(`admin.users.title`),user:e,children:[(0,z.jsx)(W,{active:C,config:w,database:T}),p?(0,z.jsx)(U,{notice:p,onDismiss:()=>g(null)}):null,(0,z.jsx)(E.Root,{className:`overflow-hidden shadow-tinyrack-raised`,"data-testid":`admin-users-directory`,variant:`outlined`,children:(0,z.jsxs)(E.Content,{className:`gap-tinyrack-lg p-0`,children:[(0,z.jsx)(ie,{activeQuickFilter:D,draftIncludeDeleted:s,draftQuery:i,onCreate:()=>y({type:`create`}),onDraftIncludeDeletedChange:l,onDraftQueryChange:a,onQuickFilter:e=>{f(t=>({...t,page:1,managedBy:e===`database`?`database`:e===`config`?`config`:void 0,role:e===`admins`?`admin`:void 0}))},onSearch:()=>{f(e=>({...e,query:i.trim(),includeDeleted:s,page:1}))},total:b.pagination.total}),(0,z.jsx)(H,{activeQuickFilter:D,hasActiveFilters:k,includeDeleted:d.includeDeleted,onClearFilters:()=>{a(``),l(!1),f(v())},onPageSizeChange:e=>f(t=>({...t,page:1,pageSize:e})),pageEnd:j,pageSize:d.pageSize,pageStart:A,query:d.query,total:b.pagination.total}),(0,z.jsx)(ne,{onDelete:e=>y({type:`delete`,user:e}),onEdit:e=>y({type:`edit`,user:e}),users:b.users}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-tinyrack-border border-t-tinyrack-default bg-tinyrack-surface-muted p-tinyrack-lg`,children:[(0,z.jsx)(o,{appearance:`outline`,disabled:d.page<=1,onClick:()=>f(e=>({...e,page:e.page-1})),type:`button`,uiSize:`sm`,children:t(`admin.users.previous`)}),(0,z.jsx)(O,{uiSize:`md`,children:t(`admin.users.page`,{page:b.pagination.page})}),(0,z.jsx)(o,{appearance:`outline`,disabled:b.pagination.page*b.pagination.page_size>=b.pagination.total,onClick:()=>f(e=>({...e,page:e.page+1})),type:`button`,uiSize:`sm`,children:t(`admin.users.next`)})]})]})}),(0,z.jsx)(B,{isMutating:V,modal:_,onClose:()=>y(null),onCreate:e=>P.mutate(e),onDelete:e=>L.mutate(e),onUpdate:e=>F.mutate(e)})]})}export{ae as component};
|
|
2
|
+
//# sourceMappingURL=users-CmFxrCQT.js.map
|