@tinyrack/issuary-server 0.27.0 → 0.29.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.
Files changed (2048) hide show
  1. package/dist/emails/components/email-layout.d.ts.map +1 -1
  2. package/dist/emails/components/email-layout.js +1 -2
  3. package/dist/emails/components/email-layout.js.map +1 -1
  4. package/dist/emails/i18n/index.d.ts.map +1 -1
  5. package/dist/emails/i18n/index.js +1 -1
  6. package/dist/emails/render.d.ts.map +1 -1
  7. package/dist/emails/render.js +4 -4
  8. package/dist/emails/render.js.map +1 -1
  9. package/dist/emails/templates/password-reset.d.ts.map +1 -1
  10. package/dist/emails/templates/password-reset.js +3 -3
  11. package/dist/emails/templates/password-reset.js.map +1 -1
  12. package/dist/emails/templates/verification.d.ts.map +1 -1
  13. package/dist/emails/templates/verification.js +3 -3
  14. package/dist/emails/templates/verification.js.map +1 -1
  15. package/dist/entities/background-job.entity.d.ts +42 -42
  16. package/dist/entities/background-job.entity.d.ts.map +1 -1
  17. package/dist/entities/background-job.entity.js +2 -2
  18. package/dist/entities/base.entity.d.ts +8 -8
  19. package/dist/entities/base.entity.d.ts.map +1 -1
  20. package/dist/entities/bootstrap-state.entity.d.ts +15 -15
  21. package/dist/entities/bootstrap-state.entity.d.ts.map +1 -1
  22. package/dist/entities/bootstrap-state.entity.js +1 -1
  23. package/dist/entities/email-verification.entity.d.ts +27 -27
  24. package/dist/entities/email-verification.entity.d.ts.map +1 -1
  25. package/dist/entities/email-verification.entity.js +3 -3
  26. package/dist/entities/jwt-key.entity.d.ts +43 -43
  27. package/dist/entities/jwt-key.entity.d.ts.map +1 -1
  28. package/dist/entities/jwt-key.entity.js +2 -2
  29. package/dist/entities/oauth-client.entity.d.ts +657 -639
  30. package/dist/entities/oauth-client.entity.d.ts.map +1 -1
  31. package/dist/entities/oauth-client.entity.js +18 -6
  32. package/dist/entities/oauth-client.entity.js.map +1 -1
  33. package/dist/entities/oauth-code.entity.d.ts +659 -641
  34. package/dist/entities/oauth-code.entity.d.ts.map +1 -1
  35. package/dist/entities/oauth-code.entity.js +4 -4
  36. package/dist/entities/oauth-device-code.entity.d.ts +657 -639
  37. package/dist/entities/oauth-device-code.entity.d.ts.map +1 -1
  38. package/dist/entities/oauth-device-code.entity.js +4 -4
  39. package/dist/entities/password-reset.entity.d.ts +27 -27
  40. package/dist/entities/password-reset.entity.d.ts.map +1 -1
  41. package/dist/entities/password-reset.entity.js +3 -3
  42. package/dist/entities/pending-oauth-registration.entity.d.ts +39 -39
  43. package/dist/entities/pending-oauth-registration.entity.d.ts.map +1 -1
  44. package/dist/entities/pending-oauth-registration.entity.js +2 -2
  45. package/dist/entities/revoked-token.entity.d.ts +659 -641
  46. package/dist/entities/revoked-token.entity.d.ts.map +1 -1
  47. package/dist/entities/revoked-token.entity.js +4 -4
  48. package/dist/entities/scheduler-job.entity.d.ts +48 -48
  49. package/dist/entities/scheduler-job.entity.d.ts.map +1 -1
  50. package/dist/entities/scheduler-job.entity.js +2 -2
  51. package/dist/entities/terms-content.entity.d.ts +305 -305
  52. package/dist/entities/terms-content.entity.d.ts.map +1 -1
  53. package/dist/entities/terms-content.entity.js +3 -3
  54. package/dist/entities/terms.entity.d.ts +305 -305
  55. package/dist/entities/terms.entity.d.ts.map +1 -1
  56. package/dist/entities/terms.entity.js +4 -4
  57. package/dist/entities/user-consent.entity.d.ts +657 -639
  58. package/dist/entities/user-consent.entity.d.ts.map +1 -1
  59. package/dist/entities/user-consent.entity.js +4 -4
  60. package/dist/entities/user-oauth.entity.d.ts +30 -30
  61. package/dist/entities/user-oauth.entity.d.ts.map +1 -1
  62. package/dist/entities/user-oauth.entity.js +3 -3
  63. package/dist/entities/user-passkey.entity.d.ts +42 -42
  64. package/dist/entities/user-passkey.entity.d.ts.map +1 -1
  65. package/dist/entities/user-passkey.entity.js +3 -3
  66. package/dist/entities/user-terms-consent.entity.d.ts +305 -305
  67. package/dist/entities/user-terms-consent.entity.d.ts.map +1 -1
  68. package/dist/entities/user-terms-consent.entity.js +4 -4
  69. package/dist/entities/user-totp-recovery-code.entity.d.ts +190 -190
  70. package/dist/entities/user-totp-recovery-code.entity.d.ts.map +1 -1
  71. package/dist/entities/user-totp-recovery-code.entity.js +3 -3
  72. package/dist/entities/user-totp.entity.d.ts +190 -190
  73. package/dist/entities/user-totp.entity.d.ts.map +1 -1
  74. package/dist/entities/user-totp.entity.js +3 -3
  75. package/dist/entities/user.entity.d.ts +190 -190
  76. package/dist/entities/user.entity.d.ts.map +1 -1
  77. package/dist/entities/user.entity.js +6 -6
  78. package/dist/entrypoints/app.d.ts +1415 -1319
  79. package/dist/entrypoints/app.d.ts.map +1 -1
  80. package/dist/entrypoints/app.js +24 -22
  81. package/dist/entrypoints/app.js.map +1 -1
  82. package/dist/entrypoints/config/index.js +1 -1
  83. package/dist/entrypoints/database/postgres/cli.d.ts.map +1 -1
  84. package/dist/entrypoints/database/postgres/cli.js +1 -1
  85. package/dist/entrypoints/database/postgres/compiled-functions.d.ts +10 -4
  86. package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
  87. package/dist/entrypoints/database/postgres/compiled-functions.js +112 -25
  88. package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
  89. package/dist/entrypoints/database/postgres/postgres.js +2 -2
  90. package/dist/entrypoints/database/sqlite/cli.d.ts.map +1 -1
  91. package/dist/entrypoints/database/sqlite/cli.js +1 -1
  92. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +10 -4
  93. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
  94. package/dist/entrypoints/database/sqlite/compiled-functions.js +112 -25
  95. package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
  96. package/dist/entrypoints/database/sqlite/sqlite.js +2 -2
  97. package/dist/entrypoints/index.js +2 -2
  98. package/dist/entrypoints/scheduler/croner.js +1 -1
  99. package/dist/entrypoints/scheduler/croner.js.map +1 -1
  100. package/dist/entrypoints/scheduler/database.d.ts.map +1 -1
  101. package/dist/entrypoints/scheduler/database.js +4 -4
  102. package/dist/entrypoints/scheduler/database.js.map +1 -1
  103. package/dist/entrypoints/scheduler/distributed-runner.d.ts.map +1 -1
  104. package/dist/entrypoints/scheduler/distributed-runner.js +1 -1
  105. package/dist/entrypoints/services.js +1 -1
  106. package/dist/lib/config/account-deletion.d.ts +2 -2
  107. package/dist/lib/config/account-deletion.d.ts.map +1 -1
  108. package/dist/lib/config/account-deletion.js +2 -2
  109. package/dist/lib/config/admin.d.ts +1 -1
  110. package/dist/lib/config/admin.d.ts.map +1 -1
  111. package/dist/lib/config/admin.js +1 -1
  112. package/dist/lib/config/auth.d.ts +39 -39
  113. package/dist/lib/config/auth.d.ts.map +1 -1
  114. package/dist/lib/config/auth.js +3 -3
  115. package/dist/lib/config/branding.d.ts +1 -1
  116. package/dist/lib/config/branding.d.ts.map +1 -1
  117. package/dist/lib/config/cleanup.d.ts +14 -6
  118. package/dist/lib/config/cleanup.d.ts.map +1 -1
  119. package/dist/lib/config/cleanup.js +18 -2
  120. package/dist/lib/config/cleanup.js.map +1 -1
  121. package/dist/lib/config/client.d.ts +10 -10
  122. package/dist/lib/config/client.d.ts.map +1 -1
  123. package/dist/lib/config/i18n.d.ts +7 -7
  124. package/dist/lib/config/i18n.d.ts.map +1 -1
  125. package/dist/lib/config/i18n.js +1 -1
  126. package/dist/lib/config/identity-providers.d.ts +8 -8
  127. package/dist/lib/config/identity-providers.d.ts.map +1 -1
  128. package/dist/lib/config/index.d.ts +0 -2
  129. package/dist/lib/config/index.d.ts.map +1 -1
  130. package/dist/lib/config/index.js +20 -21
  131. package/dist/lib/config/index.js.map +1 -1
  132. package/dist/lib/config/logging.d.ts +9 -9
  133. package/dist/lib/config/logging.d.ts.map +1 -1
  134. package/dist/lib/config/openapi.d.ts +4 -4
  135. package/dist/lib/config/openapi.d.ts.map +1 -1
  136. package/dist/lib/config/openapi.js +1 -1
  137. package/dist/lib/config/registration.d.ts +1 -1
  138. package/dist/lib/config/registration.d.ts.map +1 -1
  139. package/dist/lib/config/registration.js +1 -1
  140. package/dist/lib/config/resolved.d.ts +58 -55
  141. package/dist/lib/config/resolved.d.ts.map +1 -1
  142. package/dist/lib/config/resolved.js +19 -21
  143. package/dist/lib/config/resolved.js.map +1 -1
  144. package/dist/lib/config/security.d.ts +1 -1
  145. package/dist/lib/config/security.d.ts.map +1 -1
  146. package/dist/lib/config/security.js +2 -2
  147. package/dist/lib/config/server.d.ts +2 -2
  148. package/dist/lib/config/server.d.ts.map +1 -1
  149. package/dist/lib/config/server.js +2 -2
  150. package/dist/lib/config/terms.d.ts +6 -6
  151. package/dist/lib/config/terms.d.ts.map +1 -1
  152. package/dist/lib/config/terms.js +1 -1
  153. package/dist/lib/config/tokens.d.ts +3 -3
  154. package/dist/lib/config/tokens.d.ts.map +1 -1
  155. package/dist/lib/config/tokens.js +1 -1
  156. package/dist/lib/config/user.d.ts +4 -4
  157. package/dist/lib/config/user.d.ts.map +1 -1
  158. package/dist/lib/crypto.js +2 -2
  159. package/dist/lib/database/entities.js +20 -20
  160. package/dist/lib/frontend/react-router.d.ts +8 -0
  161. package/dist/lib/frontend/react-router.d.ts.map +1 -0
  162. package/dist/lib/frontend/react-router.js +92 -0
  163. package/dist/lib/frontend/react-router.js.map +1 -0
  164. package/dist/lib/frontend/runtime-context.d.ts +6 -0
  165. package/dist/lib/frontend/runtime-context.d.ts.map +1 -0
  166. package/dist/lib/frontend/runtime-context.js +3 -0
  167. package/dist/lib/frontend/runtime-context.js.map +1 -0
  168. package/dist/lib/locale.d.ts +1 -1
  169. package/dist/lib/locale.d.ts.map +1 -1
  170. package/dist/lib/logger.js +1 -1
  171. package/dist/lib/openapi.d.ts +4 -4
  172. package/dist/lib/openapi.d.ts.map +1 -1
  173. package/dist/lib/password-policy.d.ts.map +1 -1
  174. package/dist/lib/password-policy.js +1 -1
  175. package/dist/lib/password-policy.js.map +1 -1
  176. package/dist/lib/pkce.js +1 -1
  177. package/dist/lib/pkce.js.map +1 -1
  178. package/dist/lib/scopes.d.ts.map +1 -1
  179. package/dist/lib/swagger-tags.d.ts +8 -8
  180. package/dist/lib/swagger-tags.d.ts.map +1 -1
  181. package/dist/middleware/auth.d.ts +6 -6
  182. package/dist/middleware/auth.d.ts.map +1 -1
  183. package/dist/middleware/auth.js +1 -1
  184. package/dist/middleware/csrf.js +1 -1
  185. package/dist/middleware/session.js +1 -1
  186. package/dist/middleware/trusted-proxy-guard.js +2 -2
  187. package/dist/migrations/postgres/Migration20260509171036_initial.d.ts.map +1 -1
  188. package/dist/migrations/postgres/Migration20260512120000_add_scheduler_jobs.d.ts.map +1 -1
  189. package/dist/migrations/postgres/Migration20260619075007.d.ts.map +1 -1
  190. package/dist/migrations/postgres/Migration20260619191600_unique_oauth_client_client_id.d.ts.map +1 -1
  191. package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -1
  192. package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -1
  193. package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -1
  194. package/dist/migrations/postgres/Migration20260626103000_allow_revoked_token_without_user.d.ts.map +1 -1
  195. package/dist/migrations/postgres/Migration20260825110000_add_password_reset_required.d.ts.map +1 -1
  196. package/dist/migrations/postgres/Migration20260825140000_drop_password_reset_required.d.ts.map +1 -1
  197. package/dist/migrations/postgres/Migration20260827090000_archive_terms.d.ts.map +1 -1
  198. package/dist/migrations/postgres/Migration20260904090000_add_oauth_client_lifecycle.d.ts +6 -0
  199. package/dist/migrations/postgres/Migration20260904090000_add_oauth_client_lifecycle.d.ts.map +1 -0
  200. package/dist/migrations/postgres/Migration20260904090000_add_oauth_client_lifecycle.js +14 -0
  201. package/dist/migrations/postgres/Migration20260904090000_add_oauth_client_lifecycle.js.map +1 -0
  202. package/dist/migrations/postgres/index.d.ts.map +1 -1
  203. package/dist/migrations/postgres/index.js +2 -0
  204. package/dist/migrations/postgres/index.js.map +1 -1
  205. package/dist/migrations/sqlite/Migration20260509171226_initial.d.ts.map +1 -1
  206. package/dist/migrations/sqlite/Migration20260512120000_add_scheduler_jobs.d.ts.map +1 -1
  207. package/dist/migrations/sqlite/Migration20260619075330.d.ts.map +1 -1
  208. package/dist/migrations/sqlite/Migration20260619191600_unique_oauth_client_client_id.d.ts.map +1 -1
  209. package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -1
  210. package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -1
  211. package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -1
  212. package/dist/migrations/sqlite/Migration20260626103000_allow_revoked_token_without_user.d.ts.map +1 -1
  213. package/dist/migrations/sqlite/Migration20260825110000_add_password_reset_required.d.ts.map +1 -1
  214. package/dist/migrations/sqlite/Migration20260825140000_drop_password_reset_required.d.ts.map +1 -1
  215. package/dist/migrations/sqlite/Migration20260827090000_archive_terms.d.ts.map +1 -1
  216. package/dist/migrations/sqlite/Migration20260904090000_add_oauth_client_lifecycle.d.ts +6 -0
  217. package/dist/migrations/sqlite/Migration20260904090000_add_oauth_client_lifecycle.d.ts.map +1 -0
  218. package/dist/migrations/sqlite/Migration20260904090000_add_oauth_client_lifecycle.js +14 -0
  219. package/dist/migrations/sqlite/Migration20260904090000_add_oauth_client_lifecycle.js.map +1 -0
  220. package/dist/migrations/sqlite/index.d.ts.map +1 -1
  221. package/dist/migrations/sqlite/index.js +2 -0
  222. package/dist/migrations/sqlite/index.js.map +1 -1
  223. package/dist/repositories/email-verification.repository.d.ts.map +1 -1
  224. package/dist/repositories/email-verification.repository.js +1 -1
  225. package/dist/repositories/jwt-key.repository.d.ts.map +1 -1
  226. package/dist/repositories/jwt-key.repository.js +1 -1
  227. package/dist/repositories/oauth-code.repository.d.ts.map +1 -1
  228. package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -1
  229. package/dist/repositories/password-reset.repository.d.ts.map +1 -1
  230. package/dist/repositories/password-reset.repository.js +1 -1
  231. package/dist/repositories/pending-oauth-registration.repository.d.ts.map +1 -1
  232. package/dist/repositories/revoked-token.repository.d.ts.map +1 -1
  233. package/dist/repositories/terms.repository.d.ts.map +1 -1
  234. package/dist/repositories/user-consent.repository.d.ts.map +1 -1
  235. package/dist/repositories/user-consent.repository.js +1 -1
  236. package/dist/repositories/user-oauth.repository.d.ts.map +1 -1
  237. package/dist/repositories/user-oauth.repository.js +1 -1
  238. package/dist/repositories/user-passkey.repository.d.ts +42 -42
  239. package/dist/repositories/user-passkey.repository.d.ts.map +1 -1
  240. package/dist/repositories/user-terms-consent.repository.d.ts.map +1 -1
  241. package/dist/repositories/user-terms-consent.repository.js +1 -1
  242. package/dist/repositories/user-totp-recovery-code.repository.d.ts +124 -124
  243. package/dist/repositories/user-totp-recovery-code.repository.d.ts.map +1 -1
  244. package/dist/repositories/user-totp.repository.d.ts +186 -186
  245. package/dist/repositories/user-totp.repository.d.ts.map +1 -1
  246. package/dist/repositories/user.repository.d.ts.map +1 -1
  247. package/dist/repositories/user.repository.js +1 -1
  248. package/dist/routes/.well-known/index.d.ts +2 -2
  249. package/dist/routes/.well-known/openid-configuration/get.d.ts +2 -2
  250. package/dist/routes/api/admin/console/index.d.ts +216 -126
  251. package/dist/routes/api/admin/console/index.d.ts.map +1 -1
  252. package/dist/routes/api/admin/console/index.js +12 -4
  253. package/dist/routes/api/admin/console/index.js.map +1 -1
  254. package/dist/routes/api/admin/index.d.ts +290 -200
  255. package/dist/routes/api/admin/index.d.ts.map +1 -1
  256. package/dist/routes/api/admin/index.js +3 -3
  257. package/dist/routes/api/admin/me/get.d.ts +3 -3
  258. package/dist/routes/api/admin/me/get.js +4 -4
  259. package/dist/routes/api/admin/users/index.d.ts +71 -71
  260. package/dist/routes/api/admin/users/index.js +6 -6
  261. package/dist/routes/api/auth/2fa/methods/get.d.ts +2 -2
  262. package/dist/routes/api/auth/2fa/methods/get.js +4 -4
  263. package/dist/routes/api/auth/accounts/get.d.ts +6 -6
  264. package/dist/routes/api/auth/accounts/remove.post.d.ts +6 -6
  265. package/dist/routes/api/auth/accounts/remove.post.js +2 -2
  266. package/dist/routes/api/auth/accounts/select.post.d.ts +7 -7
  267. package/dist/routes/api/auth/accounts/select.post.js +1 -1
  268. package/dist/routes/api/auth/email/resend/post.d.ts +5 -5
  269. package/dist/routes/api/auth/email/resend/post.js +4 -4
  270. package/dist/routes/api/auth/email/verify/post.d.ts +7 -7
  271. package/dist/routes/api/auth/email/verify/post.js +4 -4
  272. package/dist/routes/api/auth/index.d.ts +140 -140
  273. package/dist/routes/api/auth/index.js +15 -15
  274. package/dist/routes/api/auth/login/post.d.ts +8 -8
  275. package/dist/routes/api/auth/login/post.js +4 -4
  276. package/dist/routes/api/auth/logout/post.d.ts +1 -1
  277. package/dist/routes/api/auth/logout/post.js +2 -2
  278. package/dist/routes/api/auth/passkey/options/post.d.ts +10 -10
  279. package/dist/routes/api/auth/passkey/options/post.js +4 -4
  280. package/dist/routes/api/auth/passkey/verify/post.d.ts +18 -18
  281. package/dist/routes/api/auth/passkey/verify/post.js +5 -5
  282. package/dist/routes/api/auth/password/forgot/post.d.ts +5 -5
  283. package/dist/routes/api/auth/password/forgot/post.js +4 -4
  284. package/dist/routes/api/auth/password/reset/post.d.ts +5 -5
  285. package/dist/routes/api/auth/password/reset/post.js +4 -4
  286. package/dist/routes/api/auth/register/post.d.ts +17 -17
  287. package/dist/routes/api/auth/register/post.js +6 -6
  288. package/dist/routes/api/auth/totp/recovery/verify/post.d.ts +7 -7
  289. package/dist/routes/api/auth/totp/recovery/verify/post.js +6 -6
  290. package/dist/routes/api/auth/totp/verify/post.d.ts +7 -7
  291. package/dist/routes/api/auth/totp/verify/post.js +6 -6
  292. package/dist/routes/api/config/get.d.ts +4 -4
  293. package/dist/routes/api/config/get.js +1 -1
  294. package/dist/routes/api/config/index.d.ts +4 -4
  295. package/dist/routes/api/config/index.js +1 -1
  296. package/dist/routes/api/consent/get.d.ts +6 -6
  297. package/dist/routes/api/consent/get.d.ts.map +1 -1
  298. package/dist/routes/api/consent/get.js +7 -7
  299. package/dist/routes/api/consent/index.d.ts +13 -13
  300. package/dist/routes/api/consent/index.js +2 -2
  301. package/dist/routes/api/consent/post.d.ts +7 -7
  302. package/dist/routes/api/consent/post.js +6 -6
  303. package/dist/routes/api/docs/get.d.ts +1 -1
  304. package/dist/routes/api/docs/index.d.ts +1 -1
  305. package/dist/routes/api/docs/index.js +1 -1
  306. package/dist/routes/api/health/get.d.ts +5 -5
  307. package/dist/routes/api/health/get.d.ts.map +1 -1
  308. package/dist/routes/api/health/get.js +2 -2
  309. package/dist/routes/api/health/index.d.ts +12 -12
  310. package/dist/routes/api/health/index.js +3 -3
  311. package/dist/routes/api/health/live/get.d.ts +2 -2
  312. package/dist/routes/api/health/live/get.d.ts.map +1 -1
  313. package/dist/routes/api/health/live/get.js +2 -2
  314. package/dist/routes/api/health/ready/get.d.ts +5 -5
  315. package/dist/routes/api/health/ready/get.d.ts.map +1 -1
  316. package/dist/routes/api/health/ready/get.js +2 -2
  317. package/dist/routes/api/index.d.ts +1316 -1226
  318. package/dist/routes/api/index.d.ts.map +1 -1
  319. package/dist/routes/api/index.js +9 -9
  320. package/dist/routes/api/oauth/_provider/authorize/get.d.ts +4 -4
  321. package/dist/routes/api/oauth/_provider/authorize/get.js +6 -6
  322. package/dist/routes/api/oauth/_provider/callback/get.d.ts +9 -9
  323. package/dist/routes/api/oauth/_provider/callback/get.js +5 -5
  324. package/dist/routes/api/oauth/_provider/callback/post.d.ts +7 -7
  325. package/dist/routes/api/oauth/_provider/callback/post.js +6 -6
  326. package/dist/routes/api/oauth/_provider/delete.d.ts +5 -5
  327. package/dist/routes/api/oauth/_provider/delete.js +6 -6
  328. package/dist/routes/api/oauth/authorization-context/get.d.ts +8 -8
  329. package/dist/routes/api/oauth/authorization-context/get.d.ts.map +1 -1
  330. package/dist/routes/api/oauth/authorization-context/get.js +4 -4
  331. package/dist/routes/api/oauth/index.d.ts +56 -56
  332. package/dist/routes/api/oauth/index.js +5 -5
  333. package/dist/routes/api/terms/consent/post.d.ts +6 -6
  334. package/dist/routes/api/terms/consent/post.js +5 -5
  335. package/dist/routes/api/terms/get.d.ts +13 -13
  336. package/dist/routes/api/terms/get.js +5 -5
  337. package/dist/routes/api/terms/index.d.ts +19 -19
  338. package/dist/routes/api/terms/index.js +2 -2
  339. package/dist/routes/api/user/delete.d.ts +1 -1
  340. package/dist/routes/api/user/delete.js +6 -6
  341. package/dist/routes/api/user/index.d.ts +103 -103
  342. package/dist/routes/api/user/index.js +16 -16
  343. package/dist/routes/api/user/oauth-accounts/get.d.ts +1 -1
  344. package/dist/routes/api/user/oauth-accounts/get.js +5 -5
  345. package/dist/routes/api/user/passkeys/_id/delete.d.ts +5 -5
  346. package/dist/routes/api/user/passkeys/_id/delete.js +6 -6
  347. package/dist/routes/api/user/passkeys/_id/patch.d.ts +5 -5
  348. package/dist/routes/api/user/passkeys/_id/patch.js +6 -6
  349. package/dist/routes/api/user/passkeys/get.d.ts +2 -2
  350. package/dist/routes/api/user/passkeys/get.js +5 -5
  351. package/dist/routes/api/user/passkeys/register/options/post.d.ts +15 -15
  352. package/dist/routes/api/user/passkeys/register/options/post.js +5 -5
  353. package/dist/routes/api/user/passkeys/register/verify/post.d.ts +9 -9
  354. package/dist/routes/api/user/passkeys/register/verify/post.js +5 -5
  355. package/dist/routes/api/user/password/delete.d.ts +5 -5
  356. package/dist/routes/api/user/password/delete.js +6 -6
  357. package/dist/routes/api/user/password/post.d.ts +5 -5
  358. package/dist/routes/api/user/password/post.js +6 -6
  359. package/dist/routes/api/user/password/put.d.ts +5 -5
  360. package/dist/routes/api/user/password/put.js +6 -6
  361. package/dist/routes/api/user/session/get.d.ts +4 -4
  362. package/dist/routes/api/user/session/get.js +4 -4
  363. package/dist/routes/api/user/totp/confirm/post.d.ts +5 -5
  364. package/dist/routes/api/user/totp/confirm/post.js +5 -5
  365. package/dist/routes/api/user/totp/delete.d.ts +5 -5
  366. package/dist/routes/api/user/totp/delete.js +6 -6
  367. package/dist/routes/api/user/totp/recovery/regenerate/post.d.ts +5 -5
  368. package/dist/routes/api/user/totp/recovery/regenerate/post.js +6 -6
  369. package/dist/routes/api/user/totp/setup/post.d.ts +1 -1
  370. package/dist/routes/api/user/totp/setup/post.js +5 -5
  371. package/dist/routes/api/user/totp/verify/post.d.ts +5 -5
  372. package/dist/routes/api/user/totp/verify/post.js +6 -6
  373. package/dist/routes/index.d.ts +1570 -1480
  374. package/dist/routes/index.d.ts.map +1 -1
  375. package/dist/routes/index.js +3 -3
  376. package/dist/routes/oauth/.well-known/jwks/get.d.ts +6 -6
  377. package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts +3 -3
  378. package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts.map +1 -1
  379. package/dist/routes/oauth/authorize/get.d.ts +4 -4
  380. package/dist/routes/oauth/authorize/get.js +6 -6
  381. package/dist/routes/oauth/device/get-post.d.ts +7 -7
  382. package/dist/routes/oauth/device/get-post.js +3 -3
  383. package/dist/routes/oauth/device-authorization/post.d.ts +7 -7
  384. package/dist/routes/oauth/end-session/get.d.ts +9 -9
  385. package/dist/routes/oauth/index.d.ts +117 -117
  386. package/dist/routes/oauth/index.js +7 -7
  387. package/dist/routes/oauth/introspect/post.d.ts +14 -14
  388. package/dist/routes/oauth/introspect/post.js +4 -4
  389. package/dist/routes/oauth/revoke/post.d.ts +4 -4
  390. package/dist/routes/oauth/revoke/post.js +3 -3
  391. package/dist/routes/oauth/token/post.d.ts +10 -10
  392. package/dist/routes/oauth/token/post.js +4 -4
  393. package/dist/routes/oauth/userinfo/get.d.ts +2 -2
  394. package/dist/routes/oauth/userinfo/get.js +6 -6
  395. package/dist/schemas/error.d.ts +358 -283
  396. package/dist/schemas/error.d.ts.map +1 -1
  397. package/dist/schemas/error.js +3 -0
  398. package/dist/schemas/error.js.map +1 -1
  399. package/dist/schemas/field.d.ts +8 -8
  400. package/dist/schemas/field.d.ts.map +1 -1
  401. package/dist/schemas/field.js +2 -2
  402. package/dist/schemas/header.d.ts.map +1 -1
  403. package/dist/schemas/provider.d.ts +7 -1
  404. package/dist/schemas/provider.d.ts.map +1 -1
  405. package/dist/schemas/response.d.ts +42 -41
  406. package/dist/schemas/response.d.ts.map +1 -1
  407. package/dist/schemas/response.js +7 -3
  408. package/dist/schemas/response.js.map +1 -1
  409. package/dist/seeders/config.seeder.js +20 -17
  410. package/dist/seeders/config.seeder.js.map +1 -1
  411. package/dist/services/account-selection.service.d.ts.map +1 -1
  412. package/dist/services/admin-console.service.d.ts +73 -26
  413. package/dist/services/admin-console.service.d.ts.map +1 -1
  414. package/dist/services/admin-console.service.js +76 -7
  415. package/dist/services/admin-console.service.js.map +1 -1
  416. package/dist/services/cleanup.service.d.ts +2 -0
  417. package/dist/services/cleanup.service.d.ts.map +1 -1
  418. package/dist/services/cleanup.service.js +75 -14
  419. package/dist/services/cleanup.service.js.map +1 -1
  420. package/dist/services/container.d.ts +26 -23
  421. package/dist/services/container.d.ts.map +1 -1
  422. package/dist/services/container.js +20 -20
  423. package/dist/services/container.js.map +1 -1
  424. package/dist/services/email.service.d.ts.map +1 -1
  425. package/dist/services/email.service.js +3 -3
  426. package/dist/services/jwt.service.d.ts +2 -0
  427. package/dist/services/jwt.service.d.ts.map +1 -1
  428. package/dist/services/jwt.service.js +9 -3
  429. package/dist/services/jwt.service.js.map +1 -1
  430. package/dist/services/mikro.service.d.ts.map +1 -1
  431. package/dist/services/mikro.service.js +19 -19
  432. package/dist/services/oauth-authorize.service.d.ts.map +1 -1
  433. package/dist/services/oauth-authorize.service.js +3 -3
  434. package/dist/services/oauth-client.service.d.ts.map +1 -1
  435. package/dist/services/oauth-client.service.js +10 -6
  436. package/dist/services/oauth-client.service.js.map +1 -1
  437. package/dist/services/oauth-connect.service.d.ts +1 -1
  438. package/dist/services/oauth-connect.service.d.ts.map +1 -1
  439. package/dist/services/oauth-connect.service.js +3 -3
  440. package/dist/services/oauth-token.service.d.ts.map +1 -1
  441. package/dist/services/oauth-token.service.js +11 -4
  442. package/dist/services/oauth-token.service.js.map +1 -1
  443. package/dist/services/passkey.service.d.ts.map +1 -1
  444. package/dist/services/passkey.service.js +2 -2
  445. package/dist/services/password-auth.service.d.ts.map +1 -1
  446. package/dist/services/password-auth.service.js +2 -2
  447. package/dist/services/password-reset.service.d.ts.map +1 -1
  448. package/dist/services/password-reset.service.js +1 -1
  449. package/dist/services/scheduler.service.d.ts.map +1 -1
  450. package/dist/services/scheduler.service.js.map +1 -1
  451. package/dist/services/security.service.d.ts.map +1 -1
  452. package/dist/services/security.service.js +2 -2
  453. package/dist/services/terms.service.d.ts.map +1 -1
  454. package/dist/services/totp.service.d.ts.map +1 -1
  455. package/dist/services/totp.service.js +2 -2
  456. package/dist/services/user-consent.service.d.ts.map +1 -1
  457. package/dist/services/user.service.d.ts.map +1 -1
  458. package/dist/services/user.service.js +1 -1
  459. package/frontend/client/assets/CompositeItem-VmYWaHnv.js +1 -0
  460. package/frontend/client/assets/FieldControl-D6zWw018.js +1 -0
  461. package/frontend/client/assets/FieldItemContext-CPjig163.js +1 -0
  462. package/frontend/client/assets/HydrationBoundary-CGOTaz3j.js +1 -0
  463. package/frontend/client/assets/NullStore-BxU9yW8l.js +1 -0
  464. package/frontend/client/assets/Separator-eMrsmRws.js +1 -0
  465. package/frontend/client/assets/admin-console-BVGtfvzy.js +1 -0
  466. package/frontend/client/assets/admin-users-notice-DcKE5B43.js +1 -0
  467. package/frontend/client/assets/alert-B9BFeQs3.js +1 -0
  468. package/frontend/client/assets/alert-CFUBsmUN.js +1 -0
  469. package/frontend/client/assets/api-0SzZx6X7.js +1 -0
  470. package/frontend/client/assets/auth-choice-row-vQ3LzZiF.js +1 -0
  471. package/frontend/client/assets/auth-field-1EM9pnWe.js +1 -0
  472. package/frontend/client/assets/auth-footer-DgRsLHyD.js +1 -0
  473. package/frontend/client/assets/auth-layout-CFKu8bHI.js +1 -0
  474. package/frontend/client/assets/auth-outcome-B7tCCKZC.js +1 -0
  475. package/frontend/client/assets/auth-page-header-D5Z-EA6V.js +1 -0
  476. package/frontend/client/assets/authorization-context-banner-Cqtzj9A1.js +1 -0
  477. package/frontend/client/assets/avatar-BacTFLjX.js +1 -0
  478. package/frontend/client/assets/badge-BCQspax5.js +1 -0
  479. package/frontend/client/assets/card-CTv8DubK.js +1 -0
  480. package/frontend/client/assets/checkbox-OA4CFk-6.js +1 -0
  481. package/frontend/client/assets/circle-alert-DGTJ9B9k.js +1 -0
  482. package/frontend/client/assets/circle-check-CGasu2tI.js +1 -0
  483. package/frontend/client/assets/code-RrwtZcA2.js +1 -0
  484. package/frontend/client/assets/components-C1SipCbb.js +1 -0
  485. package/frontend/client/assets/document-navigation-Cnp3Alf0.js +1 -0
  486. package/frontend/client/assets/entry.client-wT_SpBr6.js +9 -0
  487. package/frontend/client/assets/errorBoundaries-BmdAyh9C.js +16 -0
  488. package/frontend/client/assets/field-DzNLNMM0.js +2 -0
  489. package/frontend/client/assets/fingerprint-pattern-V_eTEvnZ.js +1 -0
  490. package/frontend/client/assets/format-admin-user-BiqYL7ZT.js +1 -0
  491. package/frontend/client/assets/i18n-BY3irWek.js +1 -0
  492. package/frontend/client/assets/initial-avatar-D4aPMV9z.js +1 -0
  493. package/frontend/client/assets/input-BFJdEx8B.js +1 -0
  494. package/frontend/client/assets/jsx-runtime-BFZ_fnNJ.js +1 -0
  495. package/frontend/client/assets/key-round-DgCbGqQL.js +1 -0
  496. package/frontend/client/assets/labeled-separator-DkexQjxp.js +1 -0
  497. package/frontend/client/assets/language-selector-CGXk9vW_.js +1 -0
  498. package/frontend/client/assets/link-DcBltZGP.js +1 -0
  499. package/frontend/client/assets/link-button-qvSTUE1n.js +1 -0
  500. package/frontend/client/assets/lock-m97gMmUy.js +1 -0
  501. package/frontend/client/assets/logout-CBTnIosZ.js +1 -0
  502. package/frontend/client/assets/mail-tgQpWyoC.js +1 -0
  503. package/frontend/client/assets/manifest-4ae87899.js +1 -0
  504. package/frontend/client/assets/modal-LoTH9Ttl.js +1 -0
  505. package/frontend/client/assets/mutation-C0KT2UXZ.js +1 -0
  506. package/frontend/client/assets/mutationOptions-Dfvzj6n2.js +1 -0
  507. package/frontend/client/assets/oauth-search-BtLPTIS7.js +1 -0
  508. package/frontend/client/assets/passkey-C9bzur2Z.js +1 -0
  509. package/frontend/client/assets/passkey-error-CZnhXTc7.js +1 -0
  510. package/frontend/client/assets/password-reset-BuDycpfY.js +1 -0
  511. package/frontend/client/assets/password-strength-DLtV7dBZ.js +1 -0
  512. package/frontend/client/assets/pin-input-DtemAOnm.js +1 -0
  513. package/frontend/client/assets/progress-xdWpxn2G.js +1 -0
  514. package/frontend/client/assets/promise-CFWkfv2A.js +1 -0
  515. package/frontend/client/assets/provider-mark-B05f08GZ.js +1 -0
  516. package/frontend/client/assets/react-dom-BxmrrPTH.js +1 -0
  517. package/frontend/client/assets/root-DDLeooq1.js +1 -0
  518. package/frontend/client/assets/root-DxmAI0wD.css +2 -0
  519. package/frontend/client/assets/route-48mZ_bkD.js +1 -0
  520. package/frontend/client/assets/route-9i9rqQdx.js +4 -0
  521. package/frontend/client/assets/route-BIhwXFuk.js +1 -0
  522. package/frontend/client/assets/route-Bx9hz_OF.js +1 -0
  523. package/frontend/client/assets/route-C5Pe2AZT.js +1 -0
  524. package/frontend/client/assets/route-C9TWgUZf.js +1 -0
  525. package/frontend/client/assets/route-CBjporWj.js +1 -0
  526. package/frontend/client/assets/route-CLo3eo-R.js +1 -0
  527. package/frontend/client/assets/route-CPIXY7eE.js +1 -0
  528. package/frontend/client/assets/route-Caw4ohFV.js +1 -0
  529. package/frontend/client/assets/route-Ceht21dJ.js +1 -0
  530. package/frontend/client/assets/route-CkS9fAlL.js +1 -0
  531. package/frontend/client/assets/route-CsT5EJEh.js +1 -0
  532. package/frontend/client/assets/route-Cvob9_0Q.js +1 -0
  533. package/frontend/client/assets/route-D-ycfUyo.js +1 -0
  534. package/frontend/client/assets/route-DCfkikii.js +1 -0
  535. package/frontend/client/assets/route-DHEnEwHa.js +1 -0
  536. package/frontend/client/assets/route-DHQ_td-S.js +1 -0
  537. package/frontend/client/assets/route-DLNoCW7x.js +1 -0
  538. package/frontend/client/assets/route-DlKXugZV.js +1 -0
  539. package/frontend/client/assets/route-DokK6Iod.js +1 -0
  540. package/frontend/client/assets/route-ID67gqvy.js +1 -0
  541. package/frontend/client/assets/route-OWWRYmAT.js +1 -0
  542. package/frontend/client/assets/route-R-BJj3-W.js +1 -0
  543. package/frontend/client/assets/route-error-fallback-C2OHu3JW.js +1 -0
  544. package/frontend/client/assets/route-goGP2kXu.js +1 -0
  545. package/frontend/client/assets/route-module-Bm4sHkx9.js +1 -0
  546. package/frontend/client/assets/route-uV_qilhG.js +1 -0
  547. package/frontend/client/assets/route-xuoylbDO.js +1 -0
  548. package/frontend/client/assets/sanitized-rich-text-nFi_4i6F.js +3 -0
  549. package/frontend/client/assets/schemas-Dxi9xZo6.js +50 -0
  550. package/frontend/client/assets/search-DSkOjYwI.js +1 -0
  551. package/frontend/client/assets/select--ltVnlVl.js +1 -0
  552. package/frontend/client/assets/separator-C5dnwYaA.js +1 -0
  553. package/frontend/client/assets/shell-header-bar-C3KYib1D.js +1 -0
  554. package/frontend/client/assets/shield-check-93-WFkyJ.js +1 -0
  555. package/frontend/client/assets/standard-schema-C8Td_miB.js +3 -0
  556. package/frontend/client/assets/table-D2oRcUKc.js +1 -0
  557. package/frontend/client/assets/terms-BReb6uEz.js +1 -0
  558. package/frontend/client/assets/text-CGN4ZtUZ.js +1 -0
  559. package/frontend/client/assets/toast-_zV1SGz6.js +1 -0
  560. package/frontend/client/assets/totp-BW4BoCpi.js +1 -0
  561. package/frontend/client/assets/trash-2-BOsxjkzU.js +1 -0
  562. package/frontend/client/assets/triangle-alert-DSSurAZ_.js +1 -0
  563. package/frontend/client/assets/use-admin-selection-CAegSKw5.js +1 -0
  564. package/frontend/client/assets/use-totp-setup-BOSkSnYG.js +2 -0
  565. package/frontend/client/assets/useAriaLabelledBy-CYSspZIu.js +1 -0
  566. package/frontend/client/assets/useMutation-C4CmK9Sb.js +1 -0
  567. package/frontend/client/assets/usePositioner-DcBnB2-O.js +1 -0
  568. package/frontend/client/assets/useQuery-BtUeFnRt.js +1 -0
  569. package/frontend/client/assets/useRender-BF5_Ad3C.js +1 -0
  570. package/frontend/client/assets/valueToPercent-LgbY_prH.js +1 -0
  571. package/frontend/server/assets/hydration-yaDCGSA8.js +109 -0
  572. package/frontend/server/assets/root-loader.server-Cwm-l9OS.js +15 -0
  573. package/frontend/server/assets/route-runtime.server-CjDbp5w6.js +51 -0
  574. package/frontend/server/assets/session-CSnQWUgx.js +8285 -0
  575. package/frontend/server/index.js +73407 -0
  576. package/package.json +33 -43
  577. package/dist/entrypoints/frontend/index.d.ts +0 -4
  578. package/dist/entrypoints/frontend/index.d.ts.map +0 -1
  579. package/dist/entrypoints/frontend/index.js +0 -2
  580. package/dist/entrypoints/frontend/index.js.map +0 -1
  581. package/dist/entrypoints/frontend/proxy.d.ts +0 -2
  582. package/dist/entrypoints/frontend/proxy.d.ts.map +0 -1
  583. package/dist/entrypoints/frontend/proxy.js +0 -2
  584. package/dist/entrypoints/frontend/proxy.js.map +0 -1
  585. package/dist/entrypoints/frontend/static.d.ts +0 -2
  586. package/dist/entrypoints/frontend/static.d.ts.map +0 -1
  587. package/dist/entrypoints/frontend/static.js +0 -2
  588. package/dist/entrypoints/frontend/static.js.map +0 -1
  589. package/dist/lib/config/frontend.d.ts +0 -12
  590. package/dist/lib/config/frontend.d.ts.map +0 -1
  591. package/dist/lib/config/frontend.js +0 -7
  592. package/dist/lib/config/frontend.js.map +0 -1
  593. package/dist/lib/frontend/proxy.d.ts +0 -24
  594. package/dist/lib/frontend/proxy.d.ts.map +0 -1
  595. package/dist/lib/frontend/proxy.js +0 -38
  596. package/dist/lib/frontend/proxy.js.map +0 -1
  597. package/dist/lib/frontend/static.d.ts +0 -21
  598. package/dist/lib/frontend/static.d.ts.map +0 -1
  599. package/dist/lib/frontend/static.js +0 -108
  600. package/dist/lib/frontend/static.js.map +0 -1
  601. package/dist/lib/interpolate-html.d.ts +0 -34
  602. package/dist/lib/interpolate-html.d.ts.map +0 -1
  603. package/dist/lib/interpolate-html.js +0 -61
  604. package/dist/lib/interpolate-html.js.map +0 -1
  605. package/public/assets/2fa-BowFczF7.js +0 -2
  606. package/public/assets/2fa-BowFczF7.js.map +0 -1
  607. package/public/assets/2fa-C_pA-n2i.js +0 -2
  608. package/public/assets/2fa-C_pA-n2i.js.map +0 -1
  609. package/public/assets/2fa-Cpfhakvn.js +0 -2
  610. package/public/assets/2fa-Cpfhakvn.js.map +0 -1
  611. package/public/assets/2fa-o1a13VHx.js +0 -2
  612. package/public/assets/2fa-o1a13VHx.js.map +0 -1
  613. package/public/assets/FieldControl-ShLuCjvG.js +0 -2
  614. package/public/assets/FieldControl-ShLuCjvG.js.map +0 -1
  615. package/public/assets/Separator-C6MmGAmP.js +0 -2
  616. package/public/assets/Separator-C6MmGAmP.js.map +0 -1
  617. package/public/assets/admin-_jFLs8Ve.js +0 -2
  618. package/public/assets/admin-_jFLs8Ve.js.map +0 -1
  619. package/public/assets/admin-shell-B91U4-Ro.js +0 -2
  620. package/public/assets/admin-shell-B91U4-Ro.js.map +0 -1
  621. package/public/assets/alert-D3aaK-_3.js +0 -2
  622. package/public/assets/alert-D3aaK-_3.js.map +0 -1
  623. package/public/assets/alert-kRxM1xsM.js +0 -2
  624. package/public/assets/alert-kRxM1xsM.js.map +0 -1
  625. package/public/assets/auth-choice-row-h4heOMHs.js +0 -2
  626. package/public/assets/auth-choice-row-h4heOMHs.js.map +0 -1
  627. package/public/assets/auth-field-BpJ4AHtU.js +0 -2
  628. package/public/assets/auth-field-BpJ4AHtU.js.map +0 -1
  629. package/public/assets/auth-footer-Du6S-oDG.js +0 -2
  630. package/public/assets/auth-footer-Du6S-oDG.js.map +0 -1
  631. package/public/assets/auth-layout-BdRRr0vT.js +0 -2
  632. package/public/assets/auth-layout-BdRRr0vT.js.map +0 -1
  633. package/public/assets/auth-page-header-ChaCNNrn.js +0 -2
  634. package/public/assets/auth-page-header-ChaCNNrn.js.map +0 -1
  635. package/public/assets/authorization-context-banner-zVxGX5e8.js +0 -2
  636. package/public/assets/authorization-context-banner-zVxGX5e8.js.map +0 -1
  637. package/public/assets/avatar-BxTPQIDp.js +0 -2
  638. package/public/assets/avatar-BxTPQIDp.js.map +0 -1
  639. package/public/assets/badge-B8D0Q2qq.js +0 -2
  640. package/public/assets/badge-B8D0Q2qq.js.map +0 -1
  641. package/public/assets/checkbox-DTPGfvmq.js +0 -2
  642. package/public/assets/checkbox-DTPGfvmq.js.map +0 -1
  643. package/public/assets/circle-check-Cnzuu7xR.js +0 -2
  644. package/public/assets/circle-check-Cnzuu7xR.js.map +0 -1
  645. package/public/assets/clients-DLqy7K3N.js +0 -5
  646. package/public/assets/clients-DLqy7K3N.js.map +0 -1
  647. package/public/assets/config-C18-l7z7.js +0 -2
  648. package/public/assets/config-C18-l7z7.js.map +0 -1
  649. package/public/assets/consent-BWniDzI3.js +0 -2
  650. package/public/assets/consent-BWniDzI3.js.map +0 -1
  651. package/public/assets/consent-r_tX8DTb.js +0 -2
  652. package/public/assets/consent-r_tX8DTb.js.map +0 -1
  653. package/public/assets/createLucideIcon-D-yizrWN.js +0 -2
  654. package/public/assets/createLucideIcon-D-yizrWN.js.map +0 -1
  655. package/public/assets/design-system-rich-text-B3NzIRoJ.js +0 -2
  656. package/public/assets/design-system-rich-text-B3NzIRoJ.js.map +0 -1
  657. package/public/assets/email-Bx9JlWp3.js +0 -2
  658. package/public/assets/email-Bx9JlWp3.js.map +0 -1
  659. package/public/assets/email-Cpfhakvn.js +0 -2
  660. package/public/assets/email-Cpfhakvn.js.map +0 -1
  661. package/public/assets/error-DDY8m_Px.js +0 -2
  662. package/public/assets/error-DDY8m_Px.js.map +0 -1
  663. package/public/assets/field-CsrUbl__.js +0 -3
  664. package/public/assets/field-CsrUbl__.js.map +0 -1
  665. package/public/assets/fingerprint-pattern-BwUoN1_w.js +0 -2
  666. package/public/assets/fingerprint-pattern-BwUoN1_w.js.map +0 -1
  667. package/public/assets/forgot-Cpfhakvn.js +0 -2
  668. package/public/assets/forgot-Cpfhakvn.js.map +0 -1
  669. package/public/assets/forgot-u52JMu6e.js +0 -2
  670. package/public/assets/forgot-u52JMu6e.js.map +0 -1
  671. package/public/assets/form-sJw-V9wb.js +0 -2
  672. package/public/assets/form-sJw-V9wb.js.map +0 -1
  673. package/public/assets/index-8mX6CKcW.css +0 -2
  674. package/public/assets/index-lTEyHSus.js +0 -11
  675. package/public/assets/index-lTEyHSus.js.map +0 -1
  676. package/public/assets/initial-avatar-WMjxW3Zz.js +0 -2
  677. package/public/assets/initial-avatar-WMjxW3Zz.js.map +0 -1
  678. package/public/assets/input-QvBxPgy5.js +0 -2
  679. package/public/assets/input-QvBxPgy5.js.map +0 -1
  680. package/public/assets/key-round-BxWppK6h.js +0 -2
  681. package/public/assets/key-round-BxWppK6h.js.map +0 -1
  682. package/public/assets/labeled-separator-DdkyYDWH.js +0 -2
  683. package/public/assets/labeled-separator-DdkyYDWH.js.map +0 -1
  684. package/public/assets/link-BHmn75Zo.js +0 -2
  685. package/public/assets/link-BHmn75Zo.js.map +0 -1
  686. package/public/assets/lock-8wpR2C78.js +0 -2
  687. package/public/assets/lock-8wpR2C78.js.map +0 -1
  688. package/public/assets/login-Cpfhakvn.js +0 -2
  689. package/public/assets/login-Cpfhakvn.js.map +0 -1
  690. package/public/assets/login-DRcHjJ2-.js +0 -2
  691. package/public/assets/login-DRcHjJ2-.js.map +0 -1
  692. package/public/assets/logout-Dphj1d_0.js +0 -2
  693. package/public/assets/logout-Dphj1d_0.js.map +0 -1
  694. package/public/assets/mail-DVP_XMUi.js +0 -2
  695. package/public/assets/mail-DVP_XMUi.js.map +0 -1
  696. package/public/assets/modal-JuaLVSyx.js +0 -2
  697. package/public/assets/modal-JuaLVSyx.js.map +0 -1
  698. package/public/assets/mutationOptions-Cv_vJkJn.js +0 -2
  699. package/public/assets/mutationOptions-Cv_vJkJn.js.map +0 -1
  700. package/public/assets/passkey-CObBlfKK.js +0 -2
  701. package/public/assets/passkey-CObBlfKK.js.map +0 -1
  702. package/public/assets/passkey-CWTjw19S.js +0 -2
  703. package/public/assets/passkey-CWTjw19S.js.map +0 -1
  704. package/public/assets/passkey-CavITajY.js +0 -2
  705. package/public/assets/passkey-CavITajY.js.map +0 -1
  706. package/public/assets/passkey-Cpfhakvn.js +0 -2
  707. package/public/assets/passkey-Cpfhakvn.js.map +0 -1
  708. package/public/assets/passkey-error-CZ26Ss-I.js +0 -2
  709. package/public/assets/passkey-error-CZ26Ss-I.js.map +0 -1
  710. package/public/assets/password-Cpfhakvn.js +0 -2
  711. package/public/assets/password-Cpfhakvn.js.map +0 -1
  712. package/public/assets/password-Dk8PwtZN.js +0 -2
  713. package/public/assets/password-Dk8PwtZN.js.map +0 -1
  714. package/public/assets/password-reset-BcFpGOop.js +0 -2
  715. package/public/assets/password-reset-BcFpGOop.js.map +0 -1
  716. package/public/assets/password-strength-Bgvy7kz6.js +0 -2
  717. package/public/assets/password-strength-Bgvy7kz6.js.map +0 -1
  718. package/public/assets/pin-input-DhsRO4Ei.js +0 -2
  719. package/public/assets/pin-input-DhsRO4Ei.js.map +0 -1
  720. package/public/assets/profile-PjXEnzA-.js +0 -2
  721. package/public/assets/profile-PjXEnzA-.js.map +0 -1
  722. package/public/assets/profile-k66ruDWl.js +0 -2
  723. package/public/assets/profile-k66ruDWl.js.map +0 -1
  724. package/public/assets/promise-OpBtq8tG.js +0 -2
  725. package/public/assets/promise-OpBtq8tG.js.map +0 -1
  726. package/public/assets/provider-mark-CeYazOfu.js +0 -2
  727. package/public/assets/provider-mark-CeYazOfu.js.map +0 -1
  728. package/public/assets/recovery-hdRyezmb.js +0 -2
  729. package/public/assets/recovery-hdRyezmb.js.map +0 -1
  730. package/public/assets/register-Cpfhakvn.js +0 -2
  731. package/public/assets/register-Cpfhakvn.js.map +0 -1
  732. package/public/assets/register-DMgKT_fm.js +0 -2
  733. package/public/assets/register-DMgKT_fm.js.map +0 -1
  734. package/public/assets/reset-Cpfhakvn.js +0 -2
  735. package/public/assets/reset-Cpfhakvn.js.map +0 -1
  736. package/public/assets/reset-DBu3wYpE.js +0 -2
  737. package/public/assets/reset-DBu3wYpE.js.map +0 -1
  738. package/public/assets/routes-CAIeH5mq.js +0 -2
  739. package/public/assets/routes-CAIeH5mq.js.map +0 -1
  740. package/public/assets/select-5LheSsRl.js +0 -2
  741. package/public/assets/select-5LheSsRl.js.map +0 -1
  742. package/public/assets/select-Cpfhakvn.js +0 -2
  743. package/public/assets/select-Cpfhakvn.js.map +0 -1
  744. package/public/assets/separator-CMGc2Y1q.js +0 -2
  745. package/public/assets/separator-CMGc2Y1q.js.map +0 -1
  746. package/public/assets/settings-BVe4k3kJ.js +0 -2
  747. package/public/assets/settings-BVe4k3kJ.js.map +0 -1
  748. package/public/assets/shell-header-bar-CdOEWmCT.js +0 -2
  749. package/public/assets/shell-header-bar-CdOEWmCT.js.map +0 -1
  750. package/public/assets/shield-check-DpYF8yeI.js +0 -2
  751. package/public/assets/shield-check-DpYF8yeI.js.map +0 -1
  752. package/public/assets/standard-schema-C50nwAaQ.js +0 -2
  753. package/public/assets/standard-schema-C50nwAaQ.js.map +0 -1
  754. package/public/assets/system-BoUqxc5h.js +0 -2
  755. package/public/assets/system-BoUqxc5h.js.map +0 -1
  756. package/public/assets/table-Dl89o43x.js +0 -2
  757. package/public/assets/table-Dl89o43x.js.map +0 -1
  758. package/public/assets/terms-B2wWfx1d.js +0 -2
  759. package/public/assets/terms-B2wWfx1d.js.map +0 -1
  760. package/public/assets/terms-COr3cDw5.js +0 -2
  761. package/public/assets/terms-COr3cDw5.js.map +0 -1
  762. package/public/assets/terms-checkbox-list-C9TkDC8Y.js +0 -2
  763. package/public/assets/terms-checkbox-list-C9TkDC8Y.js.map +0 -1
  764. package/public/assets/terms-k66ruDWl.js +0 -2
  765. package/public/assets/terms-k66ruDWl.js.map +0 -1
  766. package/public/assets/totp-BJycMMTC.js +0 -2
  767. package/public/assets/totp-BJycMMTC.js.map +0 -1
  768. package/public/assets/totp-BhElob6P.js +0 -2
  769. package/public/assets/totp-BhElob6P.js.map +0 -1
  770. package/public/assets/totp-C1ba10Is.js +0 -2
  771. package/public/assets/totp-C1ba10Is.js.map +0 -1
  772. package/public/assets/trash-2-B3NVE8pR.js +0 -2
  773. package/public/assets/trash-2-B3NVE8pR.js.map +0 -1
  774. package/public/assets/triangle-alert-DATO9o3k.js +0 -2
  775. package/public/assets/triangle-alert-DATO9o3k.js.map +0 -1
  776. package/public/assets/use-admin-selection-D2b7jnym.js +0 -2
  777. package/public/assets/use-admin-selection-D2b7jnym.js.map +0 -1
  778. package/public/assets/use-totp-setup-KOVNS2DC.js +0 -3
  779. package/public/assets/use-totp-setup-KOVNS2DC.js.map +0 -1
  780. package/public/assets/useAriaLabelledBy-CF3crxLc.js +0 -2
  781. package/public/assets/useAriaLabelledBy-CF3crxLc.js.map +0 -1
  782. package/public/assets/useMutation-DqIIIiBW.js +0 -2
  783. package/public/assets/useMutation-DqIIIiBW.js.map +0 -1
  784. package/public/assets/useQuery-CLr9TaKA.js +0 -2
  785. package/public/assets/useQuery-CLr9TaKA.js.map +0 -1
  786. package/public/assets/users-BQQQm353.js +0 -2
  787. package/public/assets/users-BQQQm353.js.map +0 -1
  788. package/public/assets/valueToPercent-LgbY_prH.js +0 -2
  789. package/public/assets/valueToPercent-LgbY_prH.js.map +0 -1
  790. package/public/assets/zod-Dszyrytb.js +0 -66
  791. package/public/assets/zod-Dszyrytb.js.map +0 -1
  792. package/public/index.html +0 -31
  793. /package/{public → frontend/client}/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  794. /package/{public → frontend/client}/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  795. /package/{public → frontend/client}/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  796. /package/{public → frontend/client}/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  797. /package/{public → frontend/client}/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  798. /package/{public → frontend/client}/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  799. /package/{public → frontend/client}/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  800. /package/{public → frontend/client}/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  801. /package/{public → frontend/client}/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  802. /package/{public → frontend/client}/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  803. /package/{public → frontend/client}/assets/ibm-plex-sans-cyrillic-ext-wght-normal-d45eAU9y.woff2 +0 -0
  804. /package/{public → frontend/client}/assets/ibm-plex-sans-cyrillic-wght-normal-BAAhND-U.woff2 +0 -0
  805. /package/{public → frontend/client}/assets/ibm-plex-sans-greek-wght-normal-CmyJS8uq.woff2 +0 -0
  806. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-400-normal-BLMYXIZq.woff2 +0 -0
  807. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-400-normal-DJrewyrW.woff +0 -0
  808. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-600-normal-B5S02aip.woff2 +0 -0
  809. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-600-normal-DP69BzJV.woff +0 -0
  810. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-700-normal-9JfFFKCo.woff +0 -0
  811. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-10-700-normal-Blnt0RhT.woff2 +0 -0
  812. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-400-normal-4_aXP0Hy.woff2 +0 -0
  813. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-400-normal-DsMZ2scz.woff +0 -0
  814. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-600-normal-Bolb9iqL.woff2 +0 -0
  815. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-600-normal-nIl-leH5.woff +0 -0
  816. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-700-normal-Bkd0xED8.woff +0 -0
  817. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-100-700-normal-CvaNbDMd.woff2 +0 -0
  818. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-400-normal-DoWmZlZj.woff +0 -0
  819. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-400-normal-y2nxydha.woff2 +0 -0
  820. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-600-normal-BKchJvlk.woff2 +0 -0
  821. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-600-normal-BrpHYkNm.woff +0 -0
  822. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-700-normal-CVueR0Vp.woff2 +0 -0
  823. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-101-700-normal-DJ1MIwHY.woff +0 -0
  824. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-400-normal-BQfFShQ1.woff2 +0 -0
  825. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-400-normal-Ca0txE7W.woff +0 -0
  826. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-600-normal-B1Puw4D2.woff2 +0 -0
  827. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-600-normal-CUZjz5v8.woff +0 -0
  828. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-700-normal-BkK1TRsE.woff2 +0 -0
  829. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-102-700-normal-ZVcO00Fl.woff +0 -0
  830. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-400-normal-DHwmA74W.woff +0 -0
  831. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-400-normal-DNs9Omj-.woff2 +0 -0
  832. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-600-normal-BW8Frffd.woff +0 -0
  833. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-600-normal-tN_-CKym.woff2 +0 -0
  834. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-700-normal-CXAkQppa.woff2 +0 -0
  835. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-103-700-normal-DNgJaILb.woff +0 -0
  836. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-400-normal-BmhZQdzl.woff +0 -0
  837. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-400-normal-CuKiid_t.woff2 +0 -0
  838. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-600-normal-2KjU-YTd.woff2 +0 -0
  839. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-600-normal-Duw986jf.woff +0 -0
  840. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-700-normal-CYzW5SnO.woff2 +0 -0
  841. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-104-700-normal-Vn6i4czv.woff +0 -0
  842. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-400-normal-BBf-_m9N.woff +0 -0
  843. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-400-normal-CHWaGU9J.woff2 +0 -0
  844. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-600-normal-CmUdXGK4.woff +0 -0
  845. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-600-normal-Eel3dN7e.woff2 +0 -0
  846. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-700-normal-Cv9j40LU.woff2 +0 -0
  847. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-105-700-normal-DWwtLgxy.woff +0 -0
  848. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-400-normal-CGlLvzZs.woff2 +0 -0
  849. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-400-normal-foxE5hHG.woff +0 -0
  850. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-600-normal-B1bzLzbH.woff2 +0 -0
  851. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-600-normal-tHp1RYGF.woff +0 -0
  852. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-700-normal-BtC5W1lQ.woff2 +0 -0
  853. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-106-700-normal-DuUOTgvs.woff +0 -0
  854. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-400-normal-2yW6cSNP.woff2 +0 -0
  855. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-400-normal-Dh4QR9Sa.woff +0 -0
  856. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-600-normal-3L-o-gNc.woff +0 -0
  857. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-600-normal-JAonwJOj.woff2 +0 -0
  858. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-700-normal-BPH5rI6C.woff +0 -0
  859. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-107-700-normal-Cr7-iFW7.woff2 +0 -0
  860. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-400-normal-BKXuaz7L.woff2 +0 -0
  861. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-400-normal-CMeK7Yoj.woff +0 -0
  862. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-600-normal-9ormcCnp.woff +0 -0
  863. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-600-normal-CIZc2z7F.woff2 +0 -0
  864. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-700-normal-BQqq_N37.woff +0 -0
  865. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-108-700-normal-DKrl9gDv.woff2 +0 -0
  866. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-400-normal-BYkYsUMr.woff +0 -0
  867. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-400-normal-DLZ5N3wZ.woff2 +0 -0
  868. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-600-normal-DgvmKVfh.woff +0 -0
  869. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-600-normal-J_8d2uPX.woff2 +0 -0
  870. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-700-normal-BKzoJI_l.woff +0 -0
  871. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-109-700-normal-CgGmrF-h.woff2 +0 -0
  872. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-400-normal-C0WskPfy.woff2 +0 -0
  873. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-400-normal-D4F8GONb.woff +0 -0
  874. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-600-normal-HVxl9urI.woff2 +0 -0
  875. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-600-normal-U3d7dgox.woff +0 -0
  876. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-700-normal-B_TMqNrG.woff +0 -0
  877. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-11-700-normal-DUhgBhd7.woff2 +0 -0
  878. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-400-normal-BiGMHdAV.woff2 +0 -0
  879. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-400-normal-CWciHSky.woff +0 -0
  880. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-600-normal-BXI508QN.woff2 +0 -0
  881. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-600-normal-C3nYbUvy.woff +0 -0
  882. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-700-normal-A9EL87rF.woff2 +0 -0
  883. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-110-700-normal-DjakDWxK.woff +0 -0
  884. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-400-normal-36IKJEvJ.woff +0 -0
  885. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-400-normal-DwkaZ2wL.woff2 +0 -0
  886. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-600-normal-B0FD3VdV.woff +0 -0
  887. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-600-normal-DjZCOVOv.woff2 +0 -0
  888. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-700-normal-B2j03kCB.woff2 +0 -0
  889. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-111-700-normal-Dv5sal4h.woff +0 -0
  890. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-400-normal-DD55zx92.woff +0 -0
  891. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-400-normal-DpWOC24h.woff2 +0 -0
  892. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-600-normal-BkM4GSUi.woff2 +0 -0
  893. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-600-normal-C2q6NvAJ.woff +0 -0
  894. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-700-normal-Ci_Zf1oH.woff +0 -0
  895. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-112-700-normal-Fyn9YqrR.woff2 +0 -0
  896. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-400-normal-C-SwPUxy.woff2 +0 -0
  897. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-400-normal-ngLrg9Ph.woff +0 -0
  898. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-600-normal-FVXa1K7W.woff2 +0 -0
  899. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-600-normal-pSsmDa5a.woff +0 -0
  900. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-700-normal-CmNR_-6d.woff2 +0 -0
  901. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-113-700-normal-kzCap4I7.woff +0 -0
  902. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-400-normal-D64L80iO.woff2 +0 -0
  903. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-400-normal-DkNQ39Bm.woff +0 -0
  904. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-600-normal-CfAYQkvR.woff +0 -0
  905. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-600-normal-DradD0b_.woff2 +0 -0
  906. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-700-normal-CXZm0WJV.woff +0 -0
  907. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-114-700-normal-DSXuAVj8.woff2 +0 -0
  908. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-400-normal-BA3oFlL7.woff +0 -0
  909. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-400-normal-DGp_yQCO.woff2 +0 -0
  910. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-600-normal-5l6N5_Bf.woff +0 -0
  911. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-600-normal-Bf5qTwLg.woff2 +0 -0
  912. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-700-normal-CCrS9Tpv.woff +0 -0
  913. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-115-700-normal-DhiQdU1x.woff2 +0 -0
  914. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-400-normal-BidJdmrW.woff +0 -0
  915. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-400-normal-DcXtXIIt.woff2 +0 -0
  916. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-600-normal-Bwb7m1tn.woff2 +0 -0
  917. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-600-normal-DShPLUNp.woff +0 -0
  918. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-700-normal-C1DXoU6t.woff2 +0 -0
  919. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-116-700-normal-C2BwbuD6.woff +0 -0
  920. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-400-normal-Bq_d-uLr.woff +0 -0
  921. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-400-normal-hyG31T85.woff2 +0 -0
  922. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-600-normal-CEeS0kan.woff +0 -0
  923. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-600-normal-DJWr9iDJ.woff2 +0 -0
  924. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-700-normal-C1ei5J70.woff2 +0 -0
  925. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-117-700-normal-zPjtn9S1.woff +0 -0
  926. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-400-normal-DFkHFeXA.woff2 +0 -0
  927. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-400-normal-TSsLEGdp.woff +0 -0
  928. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-600-normal-Cvx3jb5D.woff +0 -0
  929. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-600-normal-o_AOMkHJ.woff2 +0 -0
  930. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-700-normal-BRNin0K2.woff2 +0 -0
  931. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-118-700-normal-DGkqcNAf.woff +0 -0
  932. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-400-normal-BUYaH2_l.woff2 +0 -0
  933. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-400-normal-aBgyJQOx.woff +0 -0
  934. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-600-normal-55p1b1wa.woff +0 -0
  935. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-600-normal-BTu0jZJ-.woff2 +0 -0
  936. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-700-normal-3JOc_eI7.woff +0 -0
  937. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-119-700-normal-BjmfPyZf.woff2 +0 -0
  938. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-400-normal-BmG4MYox.woff +0 -0
  939. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-400-normal-quRUVnCJ.woff2 +0 -0
  940. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-600-normal-B-m8VoGm.woff2 +0 -0
  941. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-600-normal-CxDfRaaH.woff +0 -0
  942. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-700-normal-C3oRnDW6.woff2 +0 -0
  943. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-12-700-normal-Dv1Y6qdB.woff +0 -0
  944. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-400-normal-DBDHqw4h.woff2 +0 -0
  945. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-400-normal-QmPj_vZd.woff +0 -0
  946. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-600-normal-CedQxG0H.woff +0 -0
  947. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-600-normal-CgJUuraA.woff2 +0 -0
  948. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-700-normal-DNIRDidW.woff2 +0 -0
  949. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-13-700-normal-DolJGsV8.woff +0 -0
  950. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-400-normal-CP-jldkl.woff +0 -0
  951. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-400-normal-DPGCrf4O.woff2 +0 -0
  952. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-600-normal-36G4flWw.woff +0 -0
  953. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-600-normal-aLRf_2tU.woff2 +0 -0
  954. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-700-normal-CzLCWhzW.woff2 +0 -0
  955. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-14-700-normal-IrHxc9AN.woff +0 -0
  956. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-400-normal-D_ILNbWZ.woff2 +0 -0
  957. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-400-normal-DhL4usAp.woff +0 -0
  958. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-600-normal-CCiDkvZ0.woff +0 -0
  959. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-600-normal-Cm8uzUfS.woff2 +0 -0
  960. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-700-normal-CH_tD5KV.woff2 +0 -0
  961. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-15-700-normal-qiD6EjpF.woff +0 -0
  962. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-400-normal-CPpcNs7A.woff +0 -0
  963. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-400-normal-DJJG1Tuz.woff2 +0 -0
  964. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-600-normal-DN27F9tO.woff +0 -0
  965. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-600-normal-DZNod9fx.woff2 +0 -0
  966. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-700-normal-5x97iT4C.woff2 +0 -0
  967. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-16-700-normal-Cjf1zCyl.woff +0 -0
  968. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-400-normal-Cz201O_t.woff2 +0 -0
  969. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-400-normal-Xd0EQnSI.woff +0 -0
  970. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-600-normal-Dlo-tSr-.woff +0 -0
  971. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-600-normal-GFEV0OtD.woff2 +0 -0
  972. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-700-normal-CxMAaJ8J.woff +0 -0
  973. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-17-700-normal-pN8BDQje.woff2 +0 -0
  974. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-400-normal-BiRcNUnW.woff2 +0 -0
  975. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-400-normal-DcRwXlcA.woff +0 -0
  976. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-600-normal-DjoWpWpr.woff2 +0 -0
  977. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-600-normal-ZWO03fli.woff +0 -0
  978. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-700-normal-BRP-puz3.woff2 +0 -0
  979. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-18-700-normal-C9acO00v.woff +0 -0
  980. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-400-normal-BGI-mgYq.woff2 +0 -0
  981. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-400-normal-CAilAALt.woff +0 -0
  982. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-600-normal-DjYSyktj.woff2 +0 -0
  983. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-600-normal-ce3oirTN.woff +0 -0
  984. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-700-normal-D-Zw0iJQ.woff2 +0 -0
  985. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-19-700-normal-DDYMc675.woff +0 -0
  986. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-400-normal-2E5UN6VC.woff +0 -0
  987. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-400-normal-BQfFM2B0.woff2 +0 -0
  988. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-600-normal-CYRAtz-I.woff2 +0 -0
  989. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-600-normal-DwptQupD.woff +0 -0
  990. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-700-normal-80GIv_X2.woff +0 -0
  991. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-20-700-normal-Ca_HRr3E.woff2 +0 -0
  992. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-400-normal-BFnRtDEF.woff +0 -0
  993. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-400-normal-Zr4ScQUF.woff2 +0 -0
  994. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-600-normal-BA-omFPG.woff2 +0 -0
  995. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-600-normal-CVckMbS4.woff +0 -0
  996. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-700-normal-BPImLHVa.woff +0 -0
  997. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-21-700-normal-CytBm2Nt.woff2 +0 -0
  998. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-400-normal-IznGQDkP.woff2 +0 -0
  999. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-400-normal-qTFopCxn.woff +0 -0
  1000. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-600-normal-BWt9cZAr.woff2 +0 -0
  1001. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-600-normal-DuqSwCFh.woff +0 -0
  1002. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-700-normal--3UpG_YA.woff2 +0 -0
  1003. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-22-700-normal-DnloFB68.woff +0 -0
  1004. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-400-normal-Bdkhc9Iw.woff2 +0 -0
  1005. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-400-normal-BtixcB0-.woff +0 -0
  1006. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-600-normal-Dq8e8WbN.woff +0 -0
  1007. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-600-normal-O2srJ8a2.woff2 +0 -0
  1008. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-700-normal-C-Wvz07b.woff2 +0 -0
  1009. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-23-700-normal-QWySKNit.woff +0 -0
  1010. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-400-normal-B3OOo0lL.woff +0 -0
  1011. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-400-normal-McxyvMnV.woff2 +0 -0
  1012. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-600-normal-A46asPGd.woff +0 -0
  1013. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-600-normal-CTyo1FsZ.woff2 +0 -0
  1014. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-700-normal-Ira2Rc5z.woff2 +0 -0
  1015. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-24-700-normal-dhK6LPCU.woff +0 -0
  1016. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-400-normal-BFxbWz5n.woff +0 -0
  1017. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-400-normal-DFuJhyl7.woff2 +0 -0
  1018. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-600-normal-B2RU3Dvp.woff +0 -0
  1019. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-600-normal-DJ9_bhYp.woff2 +0 -0
  1020. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-700-normal-6YS9BiKL.woff +0 -0
  1021. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-25-700-normal-CpbQwqpL.woff2 +0 -0
  1022. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-400-normal-DNzE_dbG.woff2 +0 -0
  1023. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-400-normal-D_cpF5EA.woff +0 -0
  1024. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-600-normal-ByYIbTSk.woff +0 -0
  1025. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-600-normal-Dblu0l-8.woff2 +0 -0
  1026. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-700-normal-B-a8fp43.woff2 +0 -0
  1027. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-26-700-normal-oM62RKsO.woff +0 -0
  1028. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-400-normal-CG_CPqz1.woff +0 -0
  1029. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-400-normal-c2jdwsOE.woff2 +0 -0
  1030. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-600-normal-3axrvVxa.woff +0 -0
  1031. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-600-normal-CffTHcnn.woff2 +0 -0
  1032. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-700-normal-CFbifBY3.woff +0 -0
  1033. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-27-700-normal-MrPgyLwW.woff2 +0 -0
  1034. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-400-normal-C5RxoJ3V.woff +0 -0
  1035. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-400-normal-DXIBRRx0.woff2 +0 -0
  1036. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-600-normal-BHA5xHG-.woff2 +0 -0
  1037. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-600-normal-t8w8Pigz.woff +0 -0
  1038. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-700-normal-CfJC1veY.woff2 +0 -0
  1039. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-28-700-normal-DuTXC6M7.woff +0 -0
  1040. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-400-normal-4EOJmPpr.woff +0 -0
  1041. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-400-normal-DPDbHGRJ.woff2 +0 -0
  1042. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-600-normal-Ca71NnU-.woff +0 -0
  1043. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-600-normal-jeFY9Hf_.woff2 +0 -0
  1044. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-700-normal-C11KYH68.woff2 +0 -0
  1045. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-29-700-normal-CzNKW3WB.woff +0 -0
  1046. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-400-normal-BpFIRrIG.woff +0 -0
  1047. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-400-normal-CSnRHPqi.woff2 +0 -0
  1048. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-600-normal-C7pAJQf3.woff +0 -0
  1049. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-600-normal-SFbjSSXG.woff2 +0 -0
  1050. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-700-normal-57H5kXpk.woff +0 -0
  1051. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-3-700-normal-BrLJmDFd.woff2 +0 -0
  1052. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-400-normal-CE7Y9E5I.woff2 +0 -0
  1053. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-400-normal-CkxUuY_J.woff +0 -0
  1054. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-600-normal-B2Z1u9V0.woff +0 -0
  1055. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-600-normal-BNiX9WYe.woff2 +0 -0
  1056. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-700-normal-BEFP-jPj.woff2 +0 -0
  1057. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-30-700-normal-BarKnue-.woff +0 -0
  1058. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-400-normal-CaOERqUu.woff2 +0 -0
  1059. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-400-normal-DQ8k7O-z.woff +0 -0
  1060. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-600-normal-ChsH3Xz1.woff +0 -0
  1061. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-600-normal-DfrgvMVe.woff2 +0 -0
  1062. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-700-normal-9QmoGV7n.woff2 +0 -0
  1063. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-31-700-normal-uPx24aJ3.woff +0 -0
  1064. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-400-normal-DCgv6PbD.woff +0 -0
  1065. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-400-normal-oBOpBx6K.woff2 +0 -0
  1066. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-600-normal-BVvFPwh-.woff +0 -0
  1067. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-600-normal-C6iWVt4P.woff2 +0 -0
  1068. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-700-normal-BrzljjIv.woff +0 -0
  1069. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-32-700-normal-Ck00YIbi.woff2 +0 -0
  1070. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-400-normal-7syfOPuJ.woff +0 -0
  1071. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-400-normal-CRgD0sTN.woff2 +0 -0
  1072. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-600-normal-6C8BpThh.woff +0 -0
  1073. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-600-normal-Di883cZY.woff2 +0 -0
  1074. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-700-normal-BocR-vpi.woff +0 -0
  1075. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-33-700-normal-CQH8I4uz.woff2 +0 -0
  1076. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-400-normal-CW90qVjA.woff +0 -0
  1077. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-400-normal-DteAo9_1.woff2 +0 -0
  1078. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-600-normal-BBai0ku9.woff +0 -0
  1079. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-600-normal-BUBreiOx.woff2 +0 -0
  1080. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-700-normal-BQMQzFvO.woff2 +0 -0
  1081. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-34-700-normal-BYKYx0HK.woff +0 -0
  1082. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-400-normal-_GHhCQ5l.woff2 +0 -0
  1083. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-400-normal-oyHCgG2o.woff +0 -0
  1084. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-600-normal-B3Re-brg.woff +0 -0
  1085. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-600-normal-DSSj8dPk.woff2 +0 -0
  1086. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-700-normal-BoDC0KzR.woff2 +0 -0
  1087. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-35-700-normal-CvQah7db.woff +0 -0
  1088. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-400-normal-BizbVEtQ.woff2 +0 -0
  1089. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-400-normal-D7gQSpeq.woff +0 -0
  1090. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-600-normal-BiBUOoTN.woff +0 -0
  1091. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-600-normal-CVgRkKvZ.woff2 +0 -0
  1092. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-700-normal-Cx600hZn.woff +0 -0
  1093. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-36-700-normal-Dxydenfw.woff2 +0 -0
  1094. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-400-normal-B-iV2FCz.woff +0 -0
  1095. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-400-normal-CrxhJitf.woff2 +0 -0
  1096. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-600-normal-56davMJK.woff +0 -0
  1097. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-600-normal-BMpyr2ZA.woff2 +0 -0
  1098. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-700-normal-Cr4qQ6-_.woff2 +0 -0
  1099. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-37-700-normal-D6fQD8s2.woff +0 -0
  1100. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-400-normal-D1Vp2bgS.woff2 +0 -0
  1101. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-400-normal-DH9qOlQO.woff +0 -0
  1102. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-600-normal-BtzFMeyM.woff +0 -0
  1103. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-600-normal-DgBl-sfZ.woff2 +0 -0
  1104. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-700-normal-BnkgwyNC.woff2 +0 -0
  1105. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-38-700-normal-DrLlCQdP.woff +0 -0
  1106. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-400-normal-D5wsbWuV.woff2 +0 -0
  1107. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-400-normal-Dk7rkHeG.woff +0 -0
  1108. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-600-normal-CGMVkPUQ.woff +0 -0
  1109. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-600-normal-D_kp1-X0.woff2 +0 -0
  1110. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-700-normal-ADsZ937l.woff2 +0 -0
  1111. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-39-700-normal-tkFC4Fme.woff +0 -0
  1112. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-4-400-normal-mGIBpTDA.woff +0 -0
  1113. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-4-600-normal-ItZEXAoj.woff +0 -0
  1114. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-4-700-normal-B2Sn8ODt.woff +0 -0
  1115. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-400-normal-DRF-ZkFr.woff2 +0 -0
  1116. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-400-normal-Dye9yGvg.woff +0 -0
  1117. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-600-normal-DD0bpqGF.woff2 +0 -0
  1118. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-600-normal-DSxToWDI.woff +0 -0
  1119. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-700-normal-D9qdrR16.woff +0 -0
  1120. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-40-700-normal-DJ9uBiDw.woff2 +0 -0
  1121. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-400-normal-BqAaxgfH.woff2 +0 -0
  1122. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-400-normal-CsmxKILz.woff +0 -0
  1123. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-600-normal-BQOZ4bZi.woff2 +0 -0
  1124. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-600-normal-Jx8Bp44x.woff +0 -0
  1125. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-700-normal-BGJMzr3_.woff2 +0 -0
  1126. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-41-700-normal-UuW3VIUX.woff +0 -0
  1127. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-400-normal-Bwv1VfH1.woff +0 -0
  1128. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-400-normal-Dl6WfOX3.woff2 +0 -0
  1129. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-600-normal-Bpb5tt9_.woff +0 -0
  1130. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-600-normal-DIFsJkow.woff2 +0 -0
  1131. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-700-normal-BSSeJztI.woff +0 -0
  1132. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-42-700-normal-DSVZ1AdV.woff2 +0 -0
  1133. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-400-normal-BWVo0zWK.woff2 +0 -0
  1134. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-400-normal-d-ngL4VK.woff +0 -0
  1135. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-600-normal-BQhDNXpW.woff2 +0 -0
  1136. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-600-normal-BcvVxmDS.woff +0 -0
  1137. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-700-normal-BzUW0Dn4.woff +0 -0
  1138. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-43-700-normal-DKxEyxqG.woff2 +0 -0
  1139. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-400-normal-C6WuUhoa.woff2 +0 -0
  1140. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-400-normal-Dpw9oVkY.woff +0 -0
  1141. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-600-normal-BAOsDDVH.woff2 +0 -0
  1142. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-600-normal-Bt-5iAy-.woff +0 -0
  1143. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-700-normal-CKy2WdQj.woff2 +0 -0
  1144. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-44-700-normal-DWwfiF2R.woff +0 -0
  1145. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-400-normal-B9Y_v3iL.woff2 +0 -0
  1146. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-400-normal-Cw08yPg4.woff +0 -0
  1147. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-600-normal-C3VBxVTw.woff2 +0 -0
  1148. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-600-normal-CPG32_M5.woff +0 -0
  1149. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-700-normal-B2EBYgsw.woff2 +0 -0
  1150. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-45-700-normal-CBBnYnrG.woff +0 -0
  1151. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-400-normal-Bo2fKdUV.woff2 +0 -0
  1152. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-400-normal-Dya4Xg3C.woff +0 -0
  1153. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-600-normal-BZxPnU9z.woff +0 -0
  1154. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-600-normal-BwyRFFoW.woff2 +0 -0
  1155. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-700-normal-BWHZA6Va.woff +0 -0
  1156. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-46-700-normal-DGQdaffJ.woff2 +0 -0
  1157. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-400-normal-BaRCXue3.woff2 +0 -0
  1158. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-400-normal-DWeXBY63.woff +0 -0
  1159. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-600-normal-BJMJyZ3V.woff2 +0 -0
  1160. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-600-normal-CyutRTf1.woff +0 -0
  1161. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-700-normal-N6twIXlf.woff +0 -0
  1162. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-47-700-normal-_dAzPdKJ.woff2 +0 -0
  1163. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-400-normal-JS-IrZBF.woff +0 -0
  1164. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-400-normal-ezIou-vd.woff2 +0 -0
  1165. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-600-normal-BKUm06v8.woff +0 -0
  1166. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-600-normal-SLeRHHzg.woff2 +0 -0
  1167. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-700-normal-B5gMlKVs.woff2 +0 -0
  1168. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-48-700-normal-DQ5H61GM.woff +0 -0
  1169. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-400-normal-BGMyUOoF.woff2 +0 -0
  1170. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-400-normal-CpOmgEj1.woff +0 -0
  1171. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-600-normal-DASryXO5.woff2 +0 -0
  1172. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-600-normal-DyDLcZM_.woff +0 -0
  1173. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-700-normal-C2pGRKdb.woff2 +0 -0
  1174. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-49-700-normal-dsyop0xt.woff +0 -0
  1175. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-400-normal-CUIc6NHY.woff2 +0 -0
  1176. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-400-normal-D2dVMMqj.woff +0 -0
  1177. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-600-normal-7tGyeWfE.woff2 +0 -0
  1178. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-600-normal-LSwIbfT4.woff +0 -0
  1179. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-700-normal-4pOvaKVD.woff2 +0 -0
  1180. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-5-700-normal-BdZNxX81.woff +0 -0
  1181. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-400-normal-DDJncqjC.woff +0 -0
  1182. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-400-normal-DU9yuSzL.woff2 +0 -0
  1183. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-600-normal-KlXN5ii8.woff +0 -0
  1184. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-600-normal-bZ0wMfTu.woff2 +0 -0
  1185. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-700-normal-C3Bon6kP.woff +0 -0
  1186. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-50-700-normal-CKBR3dTc.woff2 +0 -0
  1187. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-400-normal-B6ntzhez.woff +0 -0
  1188. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-400-normal-DxvfHPiZ.woff2 +0 -0
  1189. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-600-normal-CxAqcrGJ.woff +0 -0
  1190. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-600-normal-ofakrDYw.woff2 +0 -0
  1191. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-700-normal-Bfs6gmfs.woff +0 -0
  1192. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-52-700-normal-D9sJhzsn.woff2 +0 -0
  1193. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-400-normal-BNzLW3gK.woff2 +0 -0
  1194. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-400-normal-arm4ZLbG.woff +0 -0
  1195. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-600-normal-BYo95wdR.woff2 +0 -0
  1196. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-600-normal-CTWAZiwT.woff +0 -0
  1197. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-700-normal-7icOh9fn.woff2 +0 -0
  1198. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-53-700-normal-CXC3RG0Y.woff +0 -0
  1199. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-400-normal-CXMVQbir.woff +0 -0
  1200. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-400-normal-CgSa9olG.woff2 +0 -0
  1201. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-600-normal-5IjjJd2s.woff2 +0 -0
  1202. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-600-normal-Dp8k-UQr.woff +0 -0
  1203. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-700-normal-eDLHHM6r.woff +0 -0
  1204. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-55-700-normal-ecLDx596.woff2 +0 -0
  1205. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-400-normal-BImwtP9C.woff2 +0 -0
  1206. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-400-normal-BikO35BJ.woff +0 -0
  1207. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-600-normal-DsSHHMYs.woff2 +0 -0
  1208. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-600-normal-fFxOmumy.woff +0 -0
  1209. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-700-normal-Dg77fDuG.woff2 +0 -0
  1210. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-56-700-normal-DiUSRVIQ.woff +0 -0
  1211. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-400-normal-Iyqdz6U_.woff +0 -0
  1212. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-400-normal-jeWDsIkS.woff2 +0 -0
  1213. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-600-normal-Bma8ReWy.woff2 +0 -0
  1214. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-600-normal-D3LkCFqf.woff +0 -0
  1215. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-700-normal-BgsgXhin.woff +0 -0
  1216. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-58-700-normal-DQNvf_Pi.woff2 +0 -0
  1217. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-400-normal-CkeNzekL.woff +0 -0
  1218. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-400-normal-D7J9HacT.woff2 +0 -0
  1219. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-600-normal-B0Hs_yqp.woff +0 -0
  1220. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-600-normal-y8o2u47q.woff2 +0 -0
  1221. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-700-normal-BEPxXZmH.woff2 +0 -0
  1222. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-59-700-normal-CqOqqrqQ.woff +0 -0
  1223. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-400-normal-CK1rBi2w.woff2 +0 -0
  1224. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-400-normal-DQz22aVW.woff +0 -0
  1225. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-600-normal-Bgp388lR.woff2 +0 -0
  1226. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-600-normal-DZtAE4NN.woff +0 -0
  1227. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-700-normal-BFaRWvXD.woff +0 -0
  1228. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-6-700-normal-UVZzLgo1.woff2 +0 -0
  1229. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-400-normal-Bc0pWfYQ.woff2 +0 -0
  1230. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-400-normal-DU4X4cgu.woff +0 -0
  1231. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-600-normal-D22FGjEf.woff +0 -0
  1232. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-600-normal-DGaJXlcP.woff2 +0 -0
  1233. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-700-normal-B4sph3s0.woff2 +0 -0
  1234. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-60-700-normal-DBfqpTpp.woff +0 -0
  1235. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-400-normal-BTqxO8KS.woff2 +0 -0
  1236. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-400-normal-BZ_Lvmfb.woff +0 -0
  1237. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-600-normal-BkIPCguy.woff +0 -0
  1238. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-600-normal-D_Q2U_HY.woff2 +0 -0
  1239. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-700-normal-BkfJ-_O-.woff +0 -0
  1240. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-61-700-normal-CwN3DFq1.woff2 +0 -0
  1241. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-400-normal-CRZQtL4e.woff +0 -0
  1242. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-400-normal-DSLFRuBi.woff2 +0 -0
  1243. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-600-normal-CAFV2WS-.woff2 +0 -0
  1244. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-600-normal-DRBwH2wC.woff +0 -0
  1245. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-700-normal-D9oj9FbO.woff +0 -0
  1246. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-62-700-normal-gTii6YIK.woff2 +0 -0
  1247. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-400-normal-BCOcqFvH.woff +0 -0
  1248. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-400-normal-NWeXooWt.woff2 +0 -0
  1249. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-600-normal-Dwsde-Vo.woff2 +0 -0
  1250. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-600-normal-rFqEK_Cq.woff +0 -0
  1251. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-700-normal-B4li38vl.woff +0 -0
  1252. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-63-700-normal-DYsI6Aeh.woff2 +0 -0
  1253. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-400-normal-DjS9hHaA.woff +0 -0
  1254. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-400-normal-DplHNRWf.woff2 +0 -0
  1255. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-600-normal-8FGNeBVO.woff +0 -0
  1256. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-600-normal-BE-tQzc4.woff2 +0 -0
  1257. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-700-normal-X_3qL3eD.woff +0 -0
  1258. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-64-700-normal-_sOvmSPU.woff2 +0 -0
  1259. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-400-normal-BIWHDE_t.woff2 +0 -0
  1260. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-400-normal-DNiOFlC5.woff +0 -0
  1261. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-600-normal-8ErTTni6.woff2 +0 -0
  1262. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-600-normal-Ckksq6Um.woff +0 -0
  1263. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-700-normal-9c1B3ugf.woff +0 -0
  1264. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-65-700-normal-C2SAUond.woff2 +0 -0
  1265. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-400-normal-BfKrnenI.woff +0 -0
  1266. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-400-normal-CNxVmlv6.woff2 +0 -0
  1267. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-600-normal-hyHZDzzP.woff2 +0 -0
  1268. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-600-normal-nq1zdTbH.woff +0 -0
  1269. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-700-normal-Ctdcjw58.woff +0 -0
  1270. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-66-700-normal-D_FuIz1A.woff2 +0 -0
  1271. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-400-normal-D3j6dBx3.woff +0 -0
  1272. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-400-normal-lzlrdx0G.woff2 +0 -0
  1273. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-600-normal-6KKBCWxa.woff2 +0 -0
  1274. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-600-normal-DgWoOUUg.woff +0 -0
  1275. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-700-normal-B3QY7F5h.woff2 +0 -0
  1276. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-67-700-normal-Bk31nBaz.woff +0 -0
  1277. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-400-normal-BpRgjvkz.woff +0 -0
  1278. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-400-normal-CfTKk1Ti.woff2 +0 -0
  1279. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-600-normal-BlYm4TE_.woff2 +0 -0
  1280. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-600-normal-DiY9dfka.woff +0 -0
  1281. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-700-normal-C6ZrhK66.woff +0 -0
  1282. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-68-700-normal-Cb_onqwe.woff2 +0 -0
  1283. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-400-normal-ClpMq853.woff2 +0 -0
  1284. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-400-normal-DIRwnaAC.woff +0 -0
  1285. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-600-normal-Bsq_ALiN.woff2 +0 -0
  1286. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-600-normal-D5M2jRxh.woff +0 -0
  1287. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-700-normal-D25giLXx.woff +0 -0
  1288. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-69-700-normal-DJ24ly1p.woff2 +0 -0
  1289. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-400-normal-BlNTLUxk.woff +0 -0
  1290. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-400-normal-Ce6XQT-X.woff2 +0 -0
  1291. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-600-normal-BIimYJ8p.woff2 +0 -0
  1292. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-600-normal-u7RE7Vcl.woff +0 -0
  1293. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-700-normal-BxRQ3DPg.woff +0 -0
  1294. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-7-700-normal-DK5zmmDo.woff2 +0 -0
  1295. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-400-normal-BQZWkZap.woff2 +0 -0
  1296. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-400-normal-BvYVJLC-.woff +0 -0
  1297. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-600-normal-COjhVT5P.woff +0 -0
  1298. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-600-normal-D_nkzVDi.woff2 +0 -0
  1299. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-700-normal-BJsNk892.woff +0 -0
  1300. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-70-700-normal-D0rsZ7c1.woff2 +0 -0
  1301. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-400-normal-BF8CoFgI.woff +0 -0
  1302. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-400-normal-HbsCI6VV.woff2 +0 -0
  1303. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-600-normal-CfPjA3xh.woff +0 -0
  1304. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-600-normal-ChBeHVSC.woff2 +0 -0
  1305. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-700-normal-B88Gnili.woff +0 -0
  1306. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-71-700-normal-D9HVw03N.woff2 +0 -0
  1307. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-400-normal-BKinYB31.woff +0 -0
  1308. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-400-normal-D3NTG_Qr.woff2 +0 -0
  1309. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-600-normal-BpU6wBwH.woff +0 -0
  1310. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-600-normal-rfJ4c39Q.woff2 +0 -0
  1311. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-700-normal-DClz9Dhe.woff +0 -0
  1312. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-72-700-normal-DnfTuI4o.woff2 +0 -0
  1313. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-400-normal-B9cHSeQ5.woff2 +0 -0
  1314. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-400-normal-HVPdCDZ0.woff +0 -0
  1315. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-600-normal-BL0EAwDJ.woff +0 -0
  1316. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-600-normal-CoMSI1sj.woff2 +0 -0
  1317. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-700-normal-5BseSrpV.woff +0 -0
  1318. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-73-700-normal-DW-mflD2.woff2 +0 -0
  1319. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-400-normal-BM6YwLsn.woff2 +0 -0
  1320. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-400-normal-BTWjvuog.woff +0 -0
  1321. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-600-normal-CxFvTzoC.woff2 +0 -0
  1322. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-600-normal-D51sy90d.woff +0 -0
  1323. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-700-normal-Bp0aGueO.woff2 +0 -0
  1324. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-74-700-normal-CQdRArtb.woff +0 -0
  1325. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-400-normal-DX0jfUHx.woff +0 -0
  1326. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-400-normal-DrNdqo4y.woff2 +0 -0
  1327. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-600-normal-DvAVPJPm.woff +0 -0
  1328. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-600-normal-DzUkgy6d.woff2 +0 -0
  1329. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-700-normal-BUGpoCPv.woff2 +0 -0
  1330. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-75-700-normal-CbVTJJOJ.woff +0 -0
  1331. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-400-normal-BtXAriso.woff2 +0 -0
  1332. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-400-normal-DvZrEIB3.woff +0 -0
  1333. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-600-normal-Bkns-GmL.woff +0 -0
  1334. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-600-normal-XH04BMqX.woff2 +0 -0
  1335. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-700-normal-BfaxMcpg.woff2 +0 -0
  1336. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-76-700-normal-DC5DjlVx.woff +0 -0
  1337. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-400-normal-C8x5jxqc.woff2 +0 -0
  1338. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-400-normal-DIwXWqjG.woff +0 -0
  1339. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-600-normal-Dst0n_2I.woff2 +0 -0
  1340. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-600-normal-TveJi30r.woff +0 -0
  1341. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-700-normal-BXcw4A5K.woff2 +0 -0
  1342. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-77-700-normal-C5mt5pwb.woff +0 -0
  1343. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-400-normal-DUw4O9kJ.woff2 +0 -0
  1344. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-400-normal-DdAHar7U.woff +0 -0
  1345. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-600-normal-CdDbCMo5.woff2 +0 -0
  1346. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-600-normal-WSGX5G5j.woff +0 -0
  1347. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-700-normal-BX4TFa2_.woff2 +0 -0
  1348. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-78-700-normal-DQFNc6DE.woff +0 -0
  1349. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-400-normal-CHV4cTl6.woff2 +0 -0
  1350. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-400-normal-DKXEv0-8.woff +0 -0
  1351. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-600-normal-BwemUgt7.woff2 +0 -0
  1352. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-600-normal-jqoE6MSf.woff +0 -0
  1353. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-700-normal-C7dv3Yp1.woff +0 -0
  1354. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-79-700-normal-Dc8--5xr.woff2 +0 -0
  1355. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-400-normal-SmEnIkYa.woff +0 -0
  1356. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-400-normal-tFiGs3IA.woff2 +0 -0
  1357. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-600-normal-BXRUM-0I.woff2 +0 -0
  1358. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-600-normal-G3AQr80e.woff +0 -0
  1359. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-700-normal-BJ-eyJFM.woff2 +0 -0
  1360. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-8-700-normal-D8XNQCXr.woff +0 -0
  1361. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-400-normal-B1EBYabM.woff +0 -0
  1362. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-400-normal-boMeGYwE.woff2 +0 -0
  1363. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-600-normal-5_89urOt.woff +0 -0
  1364. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-600-normal-Cn0IXtFE.woff2 +0 -0
  1365. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-700-normal-BOd0bDGO.woff +0 -0
  1366. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-80-700-normal-C26YuVxL.woff2 +0 -0
  1367. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-400-normal-BRtTCfUk.woff +0 -0
  1368. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-400-normal-D32P0Vtu.woff2 +0 -0
  1369. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-600-normal-BrNo5bPi.woff2 +0 -0
  1370. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-600-normal-ic2OowiW.woff +0 -0
  1371. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-700-normal-CVYiHbL6.woff +0 -0
  1372. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-81-700-normal-u-vEkTpG.woff2 +0 -0
  1373. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-400-normal-BQWp4BEz.woff +0 -0
  1374. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-400-normal-DDpDjsGx.woff2 +0 -0
  1375. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-600-normal-DajH-4xp.woff2 +0 -0
  1376. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-600-normal-icuQ__PU.woff +0 -0
  1377. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-700-normal-ClV-zSDt.woff +0 -0
  1378. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-82-700-normal-CnyrRvpH.woff2 +0 -0
  1379. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-400-normal-Bw_rXMEi.woff2 +0 -0
  1380. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-400-normal-yc2U6i4H.woff +0 -0
  1381. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-600-normal-C2uell5V.woff +0 -0
  1382. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-600-normal-DsLbRz3E.woff2 +0 -0
  1383. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-700-normal-2GacE3N5.woff +0 -0
  1384. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-83-700-normal-EpYP79Ha.woff2 +0 -0
  1385. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-400-normal-C14BeeRx.woff2 +0 -0
  1386. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-400-normal-C_JCm1wG.woff +0 -0
  1387. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-600-normal-CCq3cWfr.woff2 +0 -0
  1388. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-600-normal-CNKfBGzf.woff +0 -0
  1389. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-700-normal-DvPwdAi9.woff +0 -0
  1390. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-84-700-normal-bReT13VI.woff2 +0 -0
  1391. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-400-normal-CxNRCaXC.woff +0 -0
  1392. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-400-normal-DIfXns4-.woff2 +0 -0
  1393. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-600-normal-8jj6aRvF.woff2 +0 -0
  1394. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-600-normal-DlyOX1Qf.woff +0 -0
  1395. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-700-normal-D8sN10Nm.woff +0 -0
  1396. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-85-700-normal-og8bjehs.woff2 +0 -0
  1397. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-400-normal-Bb5ShdOk.woff +0 -0
  1398. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-400-normal-Dwyie3Iv.woff2 +0 -0
  1399. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-600-normal-CdiZE1rm.woff2 +0 -0
  1400. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-600-normal-sZuKvaH0.woff +0 -0
  1401. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-700-normal-BTXGcZ1f.woff2 +0 -0
  1402. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-86-700-normal-BfB1Adps.woff +0 -0
  1403. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-400-normal-9iA5aW6B.woff2 +0 -0
  1404. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-400-normal-BlQLoLxo.woff +0 -0
  1405. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-600-normal-CuP_sqvk.woff +0 -0
  1406. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-600-normal-DJDdt009.woff2 +0 -0
  1407. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-700-normal-T5FoFJ7Z.woff +0 -0
  1408. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-87-700-normal-ZAIr8xfv.woff2 +0 -0
  1409. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-400-normal-47Y8c3gi.woff +0 -0
  1410. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-400-normal-Ce6Hc4-O.woff2 +0 -0
  1411. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-600-normal-C0xzysV4.woff +0 -0
  1412. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-600-normal-R7ba6CXY.woff2 +0 -0
  1413. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-700-normal-BhgGw4mN.woff +0 -0
  1414. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-88-700-normal-DqgQgYzO.woff2 +0 -0
  1415. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-400-normal-BQ1quosg.woff +0 -0
  1416. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-400-normal-DWWwgYkQ.woff2 +0 -0
  1417. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-600-normal-C2tA-5LU.woff +0 -0
  1418. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-600-normal-DhA0Dlsd.woff2 +0 -0
  1419. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-700-normal-BhPAGixe.woff2 +0 -0
  1420. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-89-700-normal-Q4Ct26U-.woff +0 -0
  1421. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-400-normal--2P0gMaE.woff2 +0 -0
  1422. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-400-normal-DOuCM5BV.woff +0 -0
  1423. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-600-normal-BWVUGdkT.woff2 +0 -0
  1424. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-600-normal-DKQ7A1j0.woff +0 -0
  1425. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-700-normal-CeF5ynVi.woff +0 -0
  1426. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-9-700-normal-U3Fi3Xkr.woff2 +0 -0
  1427. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-400-normal-CfqeE6EG.woff +0 -0
  1428. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-400-normal-D_k1n-D_.woff2 +0 -0
  1429. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-600-normal-Bwsph-Eg.woff +0 -0
  1430. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-600-normal-DhhMI-5X.woff2 +0 -0
  1431. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-700-normal-B0dGlL2-.woff +0 -0
  1432. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-90-700-normal-C8Hbz-dX.woff2 +0 -0
  1433. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-400-normal-Ciy4dQcd.woff +0 -0
  1434. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-400-normal-Dqn0gBBY.woff2 +0 -0
  1435. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-600-normal-CMZZHiYs.woff2 +0 -0
  1436. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-600-normal-D3h_qbuq.woff +0 -0
  1437. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-700-normal-B1DETJv2.woff2 +0 -0
  1438. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-91-700-normal-M5nVKp2A.woff +0 -0
  1439. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-400-normal-BfkGgwSg.woff2 +0 -0
  1440. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-400-normal-DoNv6QKI.woff +0 -0
  1441. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-600-normal-9-dsEf5V.woff2 +0 -0
  1442. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-600-normal-cJ6s0u50.woff +0 -0
  1443. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-700-normal-ByHPz9kn.woff +0 -0
  1444. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-92-700-normal-D6FBL1WO.woff2 +0 -0
  1445. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-400-normal-B6WlHkvJ.woff +0 -0
  1446. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-400-normal-CXc_m19k.woff2 +0 -0
  1447. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-600-normal-BSK1xVrb.woff2 +0 -0
  1448. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-600-normal-OQ8utWzT.woff +0 -0
  1449. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-700-normal-B6i_9_xV.woff2 +0 -0
  1450. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-93-700-normal-C0PiAt94.woff +0 -0
  1451. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-400-normal-B4bajS3c.woff2 +0 -0
  1452. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-400-normal-FBGzvyjM.woff +0 -0
  1453. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-600-normal-Cl_ZMZu8.woff2 +0 -0
  1454. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-600-normal-pqZtpQem.woff +0 -0
  1455. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-700-normal-BhojjqGx.woff2 +0 -0
  1456. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-94-700-normal-DWNWPMXr.woff +0 -0
  1457. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-400-normal-BaY9CSq2.woff +0 -0
  1458. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-400-normal-DPH1GVj3.woff2 +0 -0
  1459. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-600-normal-BcydLyYe.woff +0 -0
  1460. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-600-normal-DqzXikSS.woff2 +0 -0
  1461. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-700-normal-0cKlfajM.woff +0 -0
  1462. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-95-700-normal-BNFDc8MW.woff2 +0 -0
  1463. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-400-normal-CXuQ_R0S.woff +0 -0
  1464. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-400-normal-OCME7gOK.woff2 +0 -0
  1465. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-600-normal-BgkVLddD.woff +0 -0
  1466. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-600-normal-GzZNxGhs.woff2 +0 -0
  1467. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-700-normal-Qh65nqz2.woff +0 -0
  1468. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-96-700-normal-a40eS-gV.woff2 +0 -0
  1469. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-400-normal-4k_rP24C.woff2 +0 -0
  1470. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-400-normal-CP6Nx25U.woff +0 -0
  1471. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-600-normal-CIqUzk_a.woff2 +0 -0
  1472. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-600-normal-DCSYk_Yh.woff +0 -0
  1473. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-700-normal-DnbCIk-O.woff +0 -0
  1474. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-97-700-normal-zgPUJYJw.woff2 +0 -0
  1475. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-400-normal-B515X6p6.woff2 +0 -0
  1476. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-400-normal-Cf7sm02w.woff +0 -0
  1477. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-600-normal-DugMp3FI.woff +0 -0
  1478. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-600-normal-pBxafNws.woff2 +0 -0
  1479. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-700-normal-7KdM18gu.woff +0 -0
  1480. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-98-700-normal-CMi4ZY-h.woff2 +0 -0
  1481. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-400-normal-BcrT9Fgn.woff +0 -0
  1482. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-400-normal-DmQyl23y.woff2 +0 -0
  1483. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-600-normal-CeMMRcA6.woff +0 -0
  1484. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-600-normal-DnK7T1fc.woff2 +0 -0
  1485. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-700-normal-CINNKEoN.woff +0 -0
  1486. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-99-700-normal-sDTGjBrk.woff2 +0 -0
  1487. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-400-normal-B9g1Ctqd.woff2 +0 -0
  1488. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-400-normal-DJG00D-p.woff +0 -0
  1489. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-600-normal-B4enfOPB.woff +0 -0
  1490. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-600-normal-DCQl7zAm.woff2 +0 -0
  1491. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-700-normal-CqLTajqw.woff2 +0 -0
  1492. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-cyrillic-700-normal-hKVirjqK.woff +0 -0
  1493. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-400-normal-CDdMl-oX.woff2 +0 -0
  1494. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-400-normal-D5LEXcjN.woff +0 -0
  1495. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-600-normal-DmCaZeJ-.woff2 +0 -0
  1496. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-600-normal-Ds_Fb90o.woff +0 -0
  1497. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-700-normal-8D2N3nxA.woff +0 -0
  1498. /package/{public → frontend/client}/assets/ibm-plex-sans-jp-latin-700-normal-BTYOjzj6.woff2 +0 -0
  1499. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-400-normal-COdVePwF.woff2 +0 -0
  1500. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-400-normal-DEF_oZFa.woff +0 -0
  1501. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-600-normal-DLXpb0hq.woff +0 -0
  1502. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-600-normal-DuzcAQdo.woff2 +0 -0
  1503. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-700-normal-BKXIEbM-.woff +0 -0
  1504. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-0-700-normal-C-cy4WQL.woff2 +0 -0
  1505. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-400-normal-BOnpTeYv.woff2 +0 -0
  1506. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-400-normal-CRn7_mZz.woff +0 -0
  1507. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-600-normal-BAjKvcG-.woff2 +0 -0
  1508. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-600-normal-DIq7Gv9V.woff +0 -0
  1509. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-700-normal-CO8B564V.woff +0 -0
  1510. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-10-700-normal-CYiGY1Yb.woff2 +0 -0
  1511. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-400-normal-3DeNbFry.woff2 +0 -0
  1512. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-400-normal-BQdwTqgb.woff +0 -0
  1513. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-600-normal-CcI0wmDd.woff2 +0 -0
  1514. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-600-normal-ZYmKSXu1.woff +0 -0
  1515. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-700-normal-BzrrxQTg.woff2 +0 -0
  1516. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-100-700-normal-CMsSAe0_.woff +0 -0
  1517. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-400-normal-CwhtzdGH.woff2 +0 -0
  1518. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-400-normal-DQN8MKOE.woff +0 -0
  1519. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-600-normal-Cf7HWvBM.woff2 +0 -0
  1520. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-600-normal-DOUVV8ig.woff +0 -0
  1521. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-700-normal-CByVAW_A.woff2 +0 -0
  1522. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-101-700-normal-VIPXB5Il.woff +0 -0
  1523. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-400-normal-BC0mCFX2.woff2 +0 -0
  1524. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-400-normal-DHfan8x-.woff +0 -0
  1525. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-600-normal-BIIL4Btv.woff +0 -0
  1526. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-600-normal-CN8RaHGd.woff2 +0 -0
  1527. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-700-normal-BMMLfFhV.woff2 +0 -0
  1528. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-102-700-normal-DmfLM_GL.woff +0 -0
  1529. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-400-normal-BQNnzD7b.woff +0 -0
  1530. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-400-normal-CYHfi_5o.woff2 +0 -0
  1531. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-600-normal-8oNp3a_g.woff2 +0 -0
  1532. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-600-normal-BKXxr4Vf.woff +0 -0
  1533. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-700-normal-BcdoKDVA.woff +0 -0
  1534. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-103-700-normal-Dxy_7wWe.woff2 +0 -0
  1535. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-400-normal-BrHR60F5.woff2 +0 -0
  1536. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-400-normal-kn3L8mkz.woff +0 -0
  1537. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-600-normal-DHHBh9NH.woff2 +0 -0
  1538. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-600-normal-DbfrFOKo.woff +0 -0
  1539. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-700-normal-BBQprcoA.woff +0 -0
  1540. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-104-700-normal-DIYBHFGo.woff2 +0 -0
  1541. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-400-normal-BY6JiZG_.woff2 +0 -0
  1542. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-400-normal-D20hKn8x.woff +0 -0
  1543. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-600-normal-Bdo6QjXy.woff2 +0 -0
  1544. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-600-normal-DU6215sy.woff +0 -0
  1545. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-700-normal-CNeD7cKc.woff +0 -0
  1546. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-105-700-normal-D4WgQZhf.woff2 +0 -0
  1547. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-400-normal-CKM4EqLH.woff2 +0 -0
  1548. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-400-normal-DRimGseV.woff +0 -0
  1549. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-600-normal-CIkK4pwL.woff +0 -0
  1550. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-600-normal-o84Tuavw.woff2 +0 -0
  1551. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-700-normal-DKK03KYp.woff2 +0 -0
  1552. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-106-700-normal-Sq9FhKgR.woff +0 -0
  1553. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-400-normal-9_m442uC.woff +0 -0
  1554. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-400-normal-DFBsPAhk.woff2 +0 -0
  1555. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-600-normal-Bj6Oga3u.woff2 +0 -0
  1556. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-600-normal-IB6GFZTf.woff +0 -0
  1557. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-700-normal-BPp3kOId.woff2 +0 -0
  1558. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-107-700-normal-CXE0S75n.woff +0 -0
  1559. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-400-normal-D7nsD7Wm.woff +0 -0
  1560. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-400-normal-DbmD_Owd.woff2 +0 -0
  1561. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-600-normal-C5FnASlc.woff +0 -0
  1562. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-600-normal-Cz9v4gjx.woff2 +0 -0
  1563. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-700-normal-BeBTa0LV.woff2 +0 -0
  1564. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-108-700-normal-DblVcY4a.woff +0 -0
  1565. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-400-normal-Ch-uxywT.woff +0 -0
  1566. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-400-normal-ChZ2CLi-.woff2 +0 -0
  1567. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-600-normal-BkGpNJKI.woff2 +0 -0
  1568. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-600-normal-CG9-PeCF.woff +0 -0
  1569. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-700-normal-CZW29fAQ.woff +0 -0
  1570. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-109-700-normal-CkMuXuOj.woff2 +0 -0
  1571. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-400-normal-CN_UQa3U.woff +0 -0
  1572. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-400-normal-DY57wkwV.woff2 +0 -0
  1573. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-600-normal-BUarw7E5.woff +0 -0
  1574. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-600-normal-Ds-mjTNk.woff2 +0 -0
  1575. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-700-normal-BntN_kys.woff2 +0 -0
  1576. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-11-700-normal-DoPFrHSK.woff +0 -0
  1577. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-400-normal-D259vsJ_.woff +0 -0
  1578. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-400-normal-DvUF8GMi.woff2 +0 -0
  1579. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-600-normal-CisRgCMg.woff2 +0 -0
  1580. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-600-normal-ReaqIn5m.woff +0 -0
  1581. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-700-normal-BIiZFSUQ.woff2 +0 -0
  1582. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-110-700-normal-BylngM58.woff +0 -0
  1583. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-400-normal-BqppHOeA.woff +0 -0
  1584. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-400-normal-DaCXFUcH.woff2 +0 -0
  1585. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-600-normal-2DkYfPPb.woff +0 -0
  1586. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-600-normal-DN6cN55_.woff2 +0 -0
  1587. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-700-normal-DjiLTpOV.woff +0 -0
  1588. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-111-700-normal-zUtSBhiX.woff2 +0 -0
  1589. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-400-normal-B8TcbMdb.woff +0 -0
  1590. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-400-normal-BJLUyYDo.woff2 +0 -0
  1591. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-600-normal-lS3UdozO.woff +0 -0
  1592. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-600-normal-nFX-cMXi.woff2 +0 -0
  1593. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-700-normal-DYzxzB3U.woff +0 -0
  1594. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-112-700-normal-NT-G-2lC.woff2 +0 -0
  1595. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-400-normal-CEDRAc_f.woff2 +0 -0
  1596. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-400-normal-DlThbTsi.woff +0 -0
  1597. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-600-normal-C_RUWM8I.woff +0 -0
  1598. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-600-normal-Dhfyy0ky.woff2 +0 -0
  1599. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-700-normal-CdI89zbS.woff2 +0 -0
  1600. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-113-700-normal-DRor3NKv.woff +0 -0
  1601. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-400-normal-5bMSGSar.woff +0 -0
  1602. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-400-normal-Bpqw4_PX.woff2 +0 -0
  1603. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-600-normal-BKj6RBZ7.woff +0 -0
  1604. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-600-normal-CjRp-Iz4.woff2 +0 -0
  1605. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-700-normal-BXC27J9C.woff +0 -0
  1606. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-114-700-normal-JtZooioR.woff2 +0 -0
  1607. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-400-normal-6-qa9Uj4.woff2 +0 -0
  1608. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-400-normal-CM7tVCiU.woff +0 -0
  1609. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-600-normal-CokKDsRY.woff2 +0 -0
  1610. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-600-normal-c6nUiZEv.woff +0 -0
  1611. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-700-normal-BCRYVYbj.woff +0 -0
  1612. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-115-700-normal-C4o110v7.woff2 +0 -0
  1613. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-400-normal-BCjvaIwI.woff +0 -0
  1614. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-400-normal-CPQAppG5.woff2 +0 -0
  1615. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-600-normal-2NuQXMn5.woff +0 -0
  1616. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-600-normal-pwYieqoq.woff2 +0 -0
  1617. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-700-normal-DTiOP-RD.woff +0 -0
  1618. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-116-700-normal-J2K8ygE7.woff2 +0 -0
  1619. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-400-normal-Bqi1rgUh.woff2 +0 -0
  1620. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-400-normal-CAkrqKEd.woff +0 -0
  1621. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-600-normal-BUVowAmE.woff +0 -0
  1622. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-600-normal-CVV1AoIy.woff2 +0 -0
  1623. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-700-normal-B_WqVFu8.woff2 +0 -0
  1624. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-117-700-normal-C-GRhBDF.woff +0 -0
  1625. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-400-normal-BvkVX0xm.woff +0 -0
  1626. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-400-normal-CPvF_U24.woff2 +0 -0
  1627. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-600-normal-BKNr8HaE.woff +0 -0
  1628. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-600-normal-SYUuQfwq.woff2 +0 -0
  1629. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-700-normal-6t-D5P6M.woff +0 -0
  1630. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-118-700-normal-Cwb_HiV8.woff2 +0 -0
  1631. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-400-normal-BVAYXEqw.woff +0 -0
  1632. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-400-normal-CF0EWuft.woff2 +0 -0
  1633. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-600-normal-CSej5QVJ.woff +0 -0
  1634. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-600-normal-CWNURXbv.woff2 +0 -0
  1635. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-700-normal-DqmD0X2I.woff +0 -0
  1636. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-119-700-normal-DvZpuW9q.woff2 +0 -0
  1637. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-400-normal-AF35YmmH.woff2 +0 -0
  1638. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-400-normal-J5xWG5gS.woff +0 -0
  1639. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-600-normal-Ba8rnT7_.woff2 +0 -0
  1640. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-600-normal-Cdi7mG90.woff +0 -0
  1641. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-700-normal-4ZbirUQU.woff2 +0 -0
  1642. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-12-700-normal-Coj3Y2Vv.woff +0 -0
  1643. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-400-normal-CpXdOOTc.woff2 +0 -0
  1644. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-400-normal-eM8eMXyQ.woff +0 -0
  1645. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-600-normal-DXBEl0OU.woff +0 -0
  1646. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-600-normal-ON8tPSnT.woff2 +0 -0
  1647. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-700-normal-Bbz7lyAG.woff2 +0 -0
  1648. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-13-700-normal-DfbGPVVb.woff +0 -0
  1649. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-400-normal-C-oyfrUa.woff2 +0 -0
  1650. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-400-normal-DPe2AXol.woff +0 -0
  1651. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-600-normal-BEKBLOkr.woff2 +0 -0
  1652. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-600-normal-BZRywIXe.woff +0 -0
  1653. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-700-normal-DChZSEXi.woff2 +0 -0
  1654. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-14-700-normal-JLAmA7_6.woff +0 -0
  1655. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-400-normal-CBiEIaz5.woff2 +0 -0
  1656. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-400-normal-D-mZ9inR.woff +0 -0
  1657. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-600-normal-CAapLUyl.woff2 +0 -0
  1658. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-600-normal-Dl-orC8M.woff +0 -0
  1659. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-700-normal-JEDfv4vZ.woff2 +0 -0
  1660. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-15-700-normal-xL2psWlD.woff +0 -0
  1661. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-400-normal-CKSk9toV.woff2 +0 -0
  1662. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-400-normal-DNGmaJIL.woff +0 -0
  1663. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-600-normal-DDZagcz1.woff +0 -0
  1664. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-600-normal-DloGa7SL.woff2 +0 -0
  1665. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-700-normal-Bv7EAOP1.woff +0 -0
  1666. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-16-700-normal-CCA2fInu.woff2 +0 -0
  1667. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-400-normal-BDhrvRnL.woff2 +0 -0
  1668. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-400-normal-BOjgDpon.woff +0 -0
  1669. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-600-normal-BeTmwP_K.woff2 +0 -0
  1670. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-600-normal-uD_8VqjX.woff +0 -0
  1671. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-700-normal-C-NBohiT.woff2 +0 -0
  1672. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-17-700-normal-sVUIRMKd.woff +0 -0
  1673. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-400-normal-BTtbRNyU.woff +0 -0
  1674. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-400-normal-Bs1zlN0G.woff2 +0 -0
  1675. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-600-normal-3CkcYQgr.woff2 +0 -0
  1676. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-600-normal-C0tjZHt0.woff +0 -0
  1677. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-700-normal-DjrHhANL.woff +0 -0
  1678. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-18-700-normal-UPAurMge.woff2 +0 -0
  1679. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-400-normal-CCVU2G9b.woff2 +0 -0
  1680. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-400-normal-dcW_ilWW.woff +0 -0
  1681. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-600-normal-DcS6irVl.woff2 +0 -0
  1682. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-600-normal-w0hsbhoe.woff +0 -0
  1683. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-700-normal-CazBSycC.woff2 +0 -0
  1684. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-19-700-normal-CvRuq6Vw.woff +0 -0
  1685. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-400-normal-CnxhIj-f.woff2 +0 -0
  1686. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-400-normal-ZCEqhetZ.woff +0 -0
  1687. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-600-normal-BBWiOGe2.woff +0 -0
  1688. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-600-normal-i3phtpOA.woff2 +0 -0
  1689. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-700-normal-DO0ByKpJ.woff2 +0 -0
  1690. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-2-700-normal-Dei1Gj2q.woff +0 -0
  1691. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-400-normal-2BRpmgCV.woff2 +0 -0
  1692. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-400-normal-B2cWSh78.woff +0 -0
  1693. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-600-normal-CKeHRgKb.woff +0 -0
  1694. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-600-normal-CXFU6tjk.woff2 +0 -0
  1695. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-700-normal-CTtpPuSd.woff2 +0 -0
  1696. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-20-700-normal-N5V03xjS.woff +0 -0
  1697. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-400-normal-Cv3FeIij.woff2 +0 -0
  1698. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-400-normal-Dml5TFym.woff +0 -0
  1699. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-600-normal-CJHvMuEH.woff2 +0 -0
  1700. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-600-normal-ChXV0eBj.woff +0 -0
  1701. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-700-normal-BR1fDv7I.woff +0 -0
  1702. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-21-700-normal-kWux5vbT.woff2 +0 -0
  1703. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-400-normal-3CnvMMD7.woff2 +0 -0
  1704. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-400-normal-TNl1bUeL.woff +0 -0
  1705. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-600-normal-B4PQFGba.woff2 +0 -0
  1706. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-600-normal-bBSJai_o.woff +0 -0
  1707. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-700-normal-BAbSphgc.woff2 +0 -0
  1708. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-22-700-normal-HHyMEHBJ.woff +0 -0
  1709. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-400-normal-CUhld-kf.woff2 +0 -0
  1710. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-400-normal-DTBYTMn7.woff +0 -0
  1711. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-600-normal-CR-CWSvQ.woff2 +0 -0
  1712. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-600-normal-Cq5mpPr_.woff +0 -0
  1713. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-700-normal-D-oyN10X.woff +0 -0
  1714. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-23-700-normal-DQNF9HpE.woff2 +0 -0
  1715. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-400-normal-BCEQWDh5.woff2 +0 -0
  1716. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-400-normal-DDVUYQLq.woff +0 -0
  1717. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-600-normal-DL0LF1av.woff +0 -0
  1718. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-600-normal-DyaIQrhK.woff2 +0 -0
  1719. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-700-normal-B0AxqRZO.woff2 +0 -0
  1720. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-24-700-normal-Inz-d5-8.woff +0 -0
  1721. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-400-normal-C5hUXC4y.woff2 +0 -0
  1722. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-400-normal-CSCHltyB.woff +0 -0
  1723. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-600-normal-ClJ2q6nT.woff +0 -0
  1724. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-600-normal-CpgWTSx7.woff2 +0 -0
  1725. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-700-normal-BSArHqh9.woff2 +0 -0
  1726. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-25-700-normal-BVRIUm2S.woff +0 -0
  1727. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-400-normal-BDNWBg-b.woff +0 -0
  1728. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-400-normal-BnV7FV79.woff2 +0 -0
  1729. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-600-normal-BQpAkNz5.woff2 +0 -0
  1730. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-600-normal-bxA4bluv.woff +0 -0
  1731. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-700-normal-95lB4fwA.woff +0 -0
  1732. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-26-700-normal-VgtqRBM7.woff2 +0 -0
  1733. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-400-normal-B5ZhKYLO.woff2 +0 -0
  1734. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-400-normal-Dy5-YEOY.woff +0 -0
  1735. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-600-normal-C07c5If1.woff +0 -0
  1736. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-600-normal-C6bVD75P.woff2 +0 -0
  1737. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-700-normal-_7qWVHie.woff2 +0 -0
  1738. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-27-700-normal-h3oxUHXv.woff +0 -0
  1739. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-400-normal-Bwghrgjh.woff2 +0 -0
  1740. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-400-normal-DNnelfuN.woff +0 -0
  1741. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-600-normal-BBQsSgWd.woff2 +0 -0
  1742. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-600-normal-BeDPvyp8.woff +0 -0
  1743. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-700-normal-Cjg_wNSB.woff +0 -0
  1744. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-28-700-normal-DY_bvrHQ.woff2 +0 -0
  1745. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-400-normal-Dj7VksMf.woff +0 -0
  1746. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-400-normal-gP3qcvie.woff2 +0 -0
  1747. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-600-normal-B0Nsm10J.woff +0 -0
  1748. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-600-normal-Dn9kzegM.woff2 +0 -0
  1749. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-700-normal-BaagHPlF.woff2 +0 -0
  1750. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-29-700-normal-sM5sErEE.woff +0 -0
  1751. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-400-normal-01r-uCGK.woff +0 -0
  1752. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-400-normal-MpgNCYqt.woff2 +0 -0
  1753. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-600-normal-CuyoBBEp.woff2 +0 -0
  1754. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-600-normal-OOnXi3dj.woff +0 -0
  1755. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-700-normal-GjYjPFRF.woff +0 -0
  1756. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-3-700-normal-Vr7CPe4d.woff2 +0 -0
  1757. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-400-normal-4H84KBjL.woff +0 -0
  1758. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-400-normal-D9W6fT0U.woff2 +0 -0
  1759. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-600-normal-CHYuKtvD.woff +0 -0
  1760. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-600-normal-DAX8ENIb.woff2 +0 -0
  1761. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-700-normal-DvDs5GHe.woff2 +0 -0
  1762. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-30-700-normal-kGpxnFlG.woff +0 -0
  1763. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-400-normal-BnpH2dyr.woff +0 -0
  1764. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-400-normal-DhPplA2S.woff2 +0 -0
  1765. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-600-normal-BDIwmQD2.woff +0 -0
  1766. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-600-normal-DWFfqfVJ.woff2 +0 -0
  1767. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-700-normal-BEM3LLr5.woff +0 -0
  1768. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-31-700-normal-BH_9UzMR.woff2 +0 -0
  1769. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-400-normal-BkNndOiq.woff2 +0 -0
  1770. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-400-normal-GRBsq_TQ.woff +0 -0
  1771. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-600-normal-Dc31ixSD.woff2 +0 -0
  1772. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-600-normal-qBGKeeZh.woff +0 -0
  1773. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-700-normal-CKh4-8lS.woff +0 -0
  1774. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-32-700-normal-SEF2IUu4.woff2 +0 -0
  1775. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-400-normal-BEJcB5Pj.woff +0 -0
  1776. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-400-normal-DOnua0XC.woff2 +0 -0
  1777. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-600-normal-Dk43PWfK.woff +0 -0
  1778. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-600-normal-_9rnVtrt.woff2 +0 -0
  1779. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-700-normal-BkaB_Reu.woff +0 -0
  1780. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-33-700-normal-DbnutdYp.woff2 +0 -0
  1781. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-400-normal-BFI-kcuc.woff +0 -0
  1782. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-400-normal-b_F-aCuz.woff2 +0 -0
  1783. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-600-normal-BwgNjnnm.woff2 +0 -0
  1784. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-600-normal-Dkhx4lxu.woff +0 -0
  1785. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-700-normal-UpohLQJI.woff2 +0 -0
  1786. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-34-700-normal-Yul5WPNb.woff +0 -0
  1787. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-400-normal-CHpiv9C7.woff2 +0 -0
  1788. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-400-normal-D8XpW-jV.woff +0 -0
  1789. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-600-normal-CD4ArYzM.woff2 +0 -0
  1790. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-600-normal-M066d6gr.woff +0 -0
  1791. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-700-normal-DV4atPPn.woff2 +0 -0
  1792. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-35-700-normal-hjVn7kub.woff +0 -0
  1793. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-400-normal-BT6SwwtR.woff2 +0 -0
  1794. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-400-normal-Cd-eoA5H.woff +0 -0
  1795. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-600-normal-DsGroCqE.woff +0 -0
  1796. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-600-normal-kFFPHZH9.woff2 +0 -0
  1797. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-700-normal-CO6mIiJi.woff +0 -0
  1798. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-36-700-normal-DfKrXTUN.woff2 +0 -0
  1799. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-400-normal-BiWBJPQ7.woff2 +0 -0
  1800. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-400-normal-Bj7jp-Iz.woff +0 -0
  1801. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-600-normal-CnPg-4RZ.woff2 +0 -0
  1802. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-600-normal-Cvgtdz7H.woff +0 -0
  1803. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-700-normal-BtF0jwlF.woff +0 -0
  1804. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-37-700-normal-C4IDZ9L-.woff2 +0 -0
  1805. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-400-normal-B4UIE9Zj.woff +0 -0
  1806. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-400-normal-CLr3K58D.woff2 +0 -0
  1807. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-600-normal-Dln3mVPi.woff +0 -0
  1808. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-600-normal-Uy8tuoQH.woff2 +0 -0
  1809. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-700-normal-DClAUGO7.woff +0 -0
  1810. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-38-700-normal-DHBmduQt.woff2 +0 -0
  1811. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-400-normal-BzR2eDWi.woff2 +0 -0
  1812. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-400-normal-WTG9_11D.woff +0 -0
  1813. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-600-normal-DHmemGdc.woff +0 -0
  1814. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-600-normal-DxNgVy70.woff2 +0 -0
  1815. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-700-normal-B7V6NyLX.woff +0 -0
  1816. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-39-700-normal-CijZ21_m.woff2 +0 -0
  1817. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-400-normal-1GfpLFeR.woff +0 -0
  1818. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-400-normal-BSOJFi3M.woff2 +0 -0
  1819. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-600-normal-BGAcZoa5.woff +0 -0
  1820. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-600-normal-DP-OzMv8.woff2 +0 -0
  1821. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-700-normal-BTl2LovL.woff +0 -0
  1822. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-4-700-normal-PLU2uOG6.woff2 +0 -0
  1823. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-400-normal-BJCaISym.woff +0 -0
  1824. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-400-normal-DxlOKNb6.woff2 +0 -0
  1825. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-600-normal-D79iYZbh.woff +0 -0
  1826. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-600-normal-DyMFY3yG.woff2 +0 -0
  1827. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-700-normal-BOSqPgLZ.woff2 +0 -0
  1828. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-40-700-normal-Bs7eQneK.woff +0 -0
  1829. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-400-normal-Ce6_8B6O.woff +0 -0
  1830. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-400-normal-THO3jy3s.woff2 +0 -0
  1831. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-600-normal-Ck2K5Ulf.woff2 +0 -0
  1832. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-600-normal-Df3Wep6L.woff +0 -0
  1833. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-700-normal-B-9pR0B0.woff2 +0 -0
  1834. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-41-700-normal-vrmrQol7.woff +0 -0
  1835. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-400-normal-Cgyyi6Mk.woff2 +0 -0
  1836. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-400-normal-mWRC9cE4.woff +0 -0
  1837. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-600-normal-BIw3yp_o.woff +0 -0
  1838. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-600-normal-CgHlrSUg.woff2 +0 -0
  1839. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-700-normal-CE4g_Vnr.woff2 +0 -0
  1840. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-42-700-normal-OHitFFYG.woff +0 -0
  1841. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-400-normal-DofKP3XM.woff2 +0 -0
  1842. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-400-normal-rklqUmDh.woff +0 -0
  1843. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-600-normal-BPJjrS1c.woff2 +0 -0
  1844. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-600-normal-Dl6BB-Lj.woff +0 -0
  1845. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-700-normal-B4zrRhmq.woff2 +0 -0
  1846. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-43-700-normal-Vq2Xt21W.woff +0 -0
  1847. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-400-normal-BPQ_BGOm.woff +0 -0
  1848. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-400-normal-BvoXxhh-.woff2 +0 -0
  1849. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-600-normal-B1scqjS5.woff2 +0 -0
  1850. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-600-normal-B1vhjtxY.woff +0 -0
  1851. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-700-normal-CdiYya7N.woff +0 -0
  1852. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-44-700-normal-CizxTCTp.woff2 +0 -0
  1853. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-400-normal-BN1x-JCl.woff +0 -0
  1854. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-400-normal-DMKz6H_F.woff2 +0 -0
  1855. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-600-normal-D74kcLg1.woff +0 -0
  1856. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-600-normal-DNXvxDIf.woff2 +0 -0
  1857. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-700-normal-BdAAndOM.woff2 +0 -0
  1858. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-45-700-normal-DeYHlTSC.woff +0 -0
  1859. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-400-normal-K8yMYku4.woff +0 -0
  1860. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-400-normal-Z0YZvJMA.woff2 +0 -0
  1861. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-600-normal-CfEBl86K.woff2 +0 -0
  1862. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-600-normal-Yu7W5Ur_.woff +0 -0
  1863. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-700-normal-C2i6qX8o.woff2 +0 -0
  1864. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-46-700-normal-Ck28wpb6.woff +0 -0
  1865. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-400-normal-BHD-6hCF.woff +0 -0
  1866. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-400-normal-DapCxPvn.woff2 +0 -0
  1867. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-600-normal-CxMB4f1K.woff +0 -0
  1868. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-600-normal-tmv6xC_z.woff2 +0 -0
  1869. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-700-normal-ByTiuiZy.woff +0 -0
  1870. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-47-700-normal-C_LnNwcx.woff2 +0 -0
  1871. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-400-normal-5VJWa5C8.woff +0 -0
  1872. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-400-normal-CBCdCJJN.woff2 +0 -0
  1873. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-600-normal-DAbbVYEi.woff +0 -0
  1874. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-600-normal-QEQJ2vNg.woff2 +0 -0
  1875. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-700-normal-D9NnIF6F.woff2 +0 -0
  1876. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-48-700-normal-gCAr-9Ui.woff +0 -0
  1877. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-400-normal-BENNdZwd.woff2 +0 -0
  1878. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-400-normal-DrUErJVA.woff +0 -0
  1879. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-600-normal-B9kwAyIi.woff2 +0 -0
  1880. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-600-normal-DHvPm2NF.woff +0 -0
  1881. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-700-normal-C7LprN_f.woff2 +0 -0
  1882. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-49-700-normal-C80RxHso.woff +0 -0
  1883. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-400-normal-B1Nb7Dqt.woff +0 -0
  1884. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-400-normal-BBWPbJ8R.woff2 +0 -0
  1885. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-600-normal-BV1Q-ya9.woff2 +0 -0
  1886. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-600-normal-vSSmYEgt.woff +0 -0
  1887. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-700-normal-88k3u19j.woff2 +0 -0
  1888. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-5-700-normal-Bm4AIB4W.woff +0 -0
  1889. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-400-normal-DSyr09Pi.woff +0 -0
  1890. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-400-normal-wVEmJJbn.woff2 +0 -0
  1891. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-600-normal-CNwgbPME.woff2 +0 -0
  1892. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-600-normal-DwlyYo3O.woff +0 -0
  1893. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-700-normal-BpuC-Ja2.woff2 +0 -0
  1894. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-50-700-normal-DJ4qrNjm.woff +0 -0
  1895. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-400-normal-CI8zKOiq.woff2 +0 -0
  1896. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-400-normal-Nb_ATV55.woff +0 -0
  1897. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-600-normal-D1q9iZG9.woff2 +0 -0
  1898. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-600-normal-DCKOx3do.woff +0 -0
  1899. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-700-normal-CDxcnlps.woff2 +0 -0
  1900. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-51-700-normal-CrbVhrAy.woff +0 -0
  1901. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-400-normal-DgbfUacv.woff +0 -0
  1902. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-400-normal-Dqrwgacb.woff2 +0 -0
  1903. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-600-normal-DpEHO2lx.woff +0 -0
  1904. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-600-normal-HtoGXJPD.woff2 +0 -0
  1905. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-700-normal-6UeGb2y_.woff +0 -0
  1906. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-52-700-normal-Cj2MbqkN.woff2 +0 -0
  1907. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-400-normal-BPlmQmyN.woff +0 -0
  1908. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-400-normal-uFBOSatZ.woff2 +0 -0
  1909. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-600-normal-3e73VLox.woff2 +0 -0
  1910. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-600-normal-CHFWjDbo.woff +0 -0
  1911. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-700-normal-BtF7lJZ6.woff2 +0 -0
  1912. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-53-700-normal-D1_BFs6r.woff +0 -0
  1913. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-400-normal-B_JBM8HP.woff2 +0 -0
  1914. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-400-normal-DShvO3nx.woff +0 -0
  1915. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-600-normal-CIir-_6C.woff2 +0 -0
  1916. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-600-normal-HSAnxCQg.woff +0 -0
  1917. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-700-normal-DOcpS_k9.woff2 +0 -0
  1918. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-54-700-normal-DR_NIHG9.woff +0 -0
  1919. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-400-normal-BIBVbLNo.woff2 +0 -0
  1920. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-400-normal-DACpgdpL.woff +0 -0
  1921. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-600-normal-ByArDHHI.woff2 +0 -0
  1922. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-600-normal-CNKcN-Ig.woff +0 -0
  1923. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-700-normal-9BGvVFJG.woff +0 -0
  1924. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-55-700-normal-DCUUt7cX.woff2 +0 -0
  1925. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-400-normal-D6a133Nk.woff +0 -0
  1926. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-400-normal-E_0UP4jm.woff2 +0 -0
  1927. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-600-normal-DScuu4Uu.woff2 +0 -0
  1928. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-600-normal-hzikha37.woff +0 -0
  1929. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-700-normal-BCQXFjgs.woff +0 -0
  1930. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-56-700-normal-CfjdYZM4.woff2 +0 -0
  1931. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-400-normal-CBQftTJt.woff +0 -0
  1932. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-400-normal-F8LL-J5_.woff2 +0 -0
  1933. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-600-normal-BR6Du0PQ.woff +0 -0
  1934. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-600-normal-CQ1redVd.woff2 +0 -0
  1935. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-700-normal-DQEJ1-LS.woff2 +0 -0
  1936. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-57-700-normal-FH-ttKed.woff +0 -0
  1937. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-400-normal-DqIzdKrV.woff +0 -0
  1938. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-400-normal-i71EDyfV.woff2 +0 -0
  1939. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-600-normal-Bpgq8MX2.woff +0 -0
  1940. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-600-normal-Bqgrv0lo.woff2 +0 -0
  1941. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-700-normal-Bj2HnGEw.woff +0 -0
  1942. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-58-700-normal-DYsLBu1T.woff2 +0 -0
  1943. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-400-normal-B-8F2Uet.woff +0 -0
  1944. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-400-normal-BHAiqXEM.woff2 +0 -0
  1945. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-600-normal-B-CGe3sL.woff2 +0 -0
  1946. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-600-normal-BuQf4YmM.woff +0 -0
  1947. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-700-normal-BZ9z_FHx.woff +0 -0
  1948. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-59-700-normal-CWSgjf9c.woff2 +0 -0
  1949. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-400-normal-AY_mybA2.woff +0 -0
  1950. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-400-normal-CTPxjOYB.woff2 +0 -0
  1951. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-600-normal-CdfPYwdk.woff2 +0 -0
  1952. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-600-normal-oGadQOpD.woff +0 -0
  1953. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-700-normal-DLe2ZT_Q.woff2 +0 -0
  1954. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-6-700-normal-bXRUCZKE.woff +0 -0
  1955. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-400-normal-CEDE9rS0.woff +0 -0
  1956. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-400-normal-z5dDoQx9.woff2 +0 -0
  1957. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-600-normal-Bl94dFYa.woff2 +0 -0
  1958. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-600-normal-OLqttnKu.woff +0 -0
  1959. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-700-normal-CYME5EXY.woff2 +0 -0
  1960. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-60-700-normal-I1XysYDt.woff +0 -0
  1961. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-400-normal-Ci1tC2DE.woff +0 -0
  1962. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-400-normal-DnyFjM_B.woff2 +0 -0
  1963. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-600-normal-BZxjTCO5.woff +0 -0
  1964. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-600-normal-ChG7s6jj.woff2 +0 -0
  1965. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-700-normal-Bi5bgOa-.woff +0 -0
  1966. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-61-700-normal-CCHPFSSV.woff2 +0 -0
  1967. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-400-normal-BIF8JT4K.woff2 +0 -0
  1968. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-400-normal-BMQQOADr.woff +0 -0
  1969. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-600-normal-BwPZY4No.woff +0 -0
  1970. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-600-normal-CCy9m1Yi.woff2 +0 -0
  1971. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-700-normal-CUKZrRn4.woff +0 -0
  1972. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-62-700-normal-PUE26tsV.woff2 +0 -0
  1973. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-400-normal-Bi-DePsy.woff +0 -0
  1974. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-400-normal-DbEg4X6i.woff2 +0 -0
  1975. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-600-normal-B_hznMYb.woff2 +0 -0
  1976. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-600-normal-DXp5U46T.woff +0 -0
  1977. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-700-normal-CdRKaRR8.woff +0 -0
  1978. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-63-700-normal-d_p4qgBI.woff2 +0 -0
  1979. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-400-normal-BoOvEFVR.woff2 +0 -0
  1980. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-400-normal-DhttFBeF.woff +0 -0
  1981. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-600-normal-DdDi5wpQ.woff2 +0 -0
  1982. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-600-normal-DnHS-nmP.woff +0 -0
  1983. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-700-normal-DvcYr3Tg.woff2 +0 -0
  1984. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-64-700-normal-Z-oKOpcu.woff +0 -0
  1985. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-65-600-normal-CuB_ApqX.woff2 +0 -0
  1986. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-65-700-normal-OQGIHpUr.woff2 +0 -0
  1987. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-400-normal-CDkAi-IU.woff2 +0 -0
  1988. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-400-normal-VZ_YUdPy.woff +0 -0
  1989. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-600-normal-CeGVp1rD.woff +0 -0
  1990. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-600-normal-Dh7JSXz4.woff2 +0 -0
  1991. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-700-normal-C-GGubNS.woff +0 -0
  1992. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-7-700-normal-DkDnzNv2.woff2 +0 -0
  1993. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-400-normal-BmMhoS32.woff2 +0 -0
  1994. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-400-normal-Ci0W5IWz.woff +0 -0
  1995. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-600-normal-B0rxBWNc.woff2 +0 -0
  1996. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-600-normal-BJjl00Le.woff +0 -0
  1997. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-700-normal-5jYiHHRz.woff2 +0 -0
  1998. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-8-700-normal-BEKQdV0c.woff +0 -0
  1999. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-400-normal-CeBwsqAD.woff +0 -0
  2000. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-400-normal-DJinq116.woff2 +0 -0
  2001. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-600-normal-DWoOSbq5.woff +0 -0
  2002. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-600-normal-DraA-1Zl.woff2 +0 -0
  2003. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-700-normal-BkZ1vv2G.woff +0 -0
  2004. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-9-700-normal-CymJjnAS.woff2 +0 -0
  2005. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-400-normal-5J6UR9CM.woff2 +0 -0
  2006. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-400-normal-Cdi-IBra.woff +0 -0
  2007. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-600-normal-4KzAAJzD.woff +0 -0
  2008. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-600-normal-C3ObUrek.woff2 +0 -0
  2009. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-700-normal-BEo_xrjH.woff +0 -0
  2010. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-93-700-normal-DYlKYBEL.woff2 +0 -0
  2011. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-400-normal-CLS33fqM.woff +0 -0
  2012. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-400-normal-CsJn1kPf.woff2 +0 -0
  2013. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-600-normal-BqkCATJS.woff2 +0 -0
  2014. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-600-normal-DGs8D_d9.woff +0 -0
  2015. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-700-normal-BcAowvjY.woff2 +0 -0
  2016. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-94-700-normal-Rande0GP.woff +0 -0
  2017. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-400-normal-DqxPcneT.woff2 +0 -0
  2018. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-400-normal-m9r3xH18.woff +0 -0
  2019. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-600-normal-E6j9XpvP.woff +0 -0
  2020. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-600-normal-qnNrW3Df.woff2 +0 -0
  2021. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-700-normal-D_kcIWRN.woff +0 -0
  2022. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-96-700-normal-DafuQoH3.woff2 +0 -0
  2023. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-400-normal-DOlHHts_.woff2 +0 -0
  2024. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-400-normal-TWLDWHgL.woff +0 -0
  2025. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-600-normal-CHxkMEAU.woff2 +0 -0
  2026. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-600-normal-CXVo40nf.woff +0 -0
  2027. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-700-normal-BdFpzIjS.woff2 +0 -0
  2028. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-97-700-normal-C5vPlSUB.woff +0 -0
  2029. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-400-normal-CyxDRXqs.woff2 +0 -0
  2030. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-400-normal-D-_zohjb.woff +0 -0
  2031. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-600-normal-CizO16Ew.woff +0 -0
  2032. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-600-normal-D-SBD5Hk.woff2 +0 -0
  2033. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-700-normal-BArUuixv.woff2 +0 -0
  2034. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-98-700-normal-O_rp84MR.woff +0 -0
  2035. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-99-400-normal-COuj214s.woff2 +0 -0
  2036. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-99-600-normal-j_ccRvHi.woff2 +0 -0
  2037. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-99-700-normal-BGCe6SPX.woff2 +0 -0
  2038. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-400-normal-7kwLL-e3.woff +0 -0
  2039. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-400-normal-Bc7vhvxM.woff2 +0 -0
  2040. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-600-normal-n-2PV5Ut.woff2 +0 -0
  2041. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-600-normal-yks4z4wu.woff +0 -0
  2042. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-700-normal-Bj41MRxQ.woff +0 -0
  2043. /package/{public → frontend/client}/assets/ibm-plex-sans-kr-latin-700-normal-CIbXnLaA.woff2 +0 -0
  2044. /package/{public → frontend/client}/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
  2045. /package/{public → frontend/client}/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
  2046. /package/{public → frontend/client}/assets/ibm-plex-sans-vietnamese-wght-normal-Dg1JeJN0.woff2 +0 -0
  2047. /package/{public → frontend/client}/issuary-app-icon-512.png +0 -0
  2048. /package/{public → frontend/client}/issuary-app-icon.svg +0 -0
@@ -1,2 +0,0 @@
1
- import{K as e,X as t,Z as n,et as r,i,n as a,r as o,s,t as c}from"./createLucideIcon-D-yizrWN.js";import{Ar as l,In as u,i as d,n as f,r as p,t as m}from"./config-C18-l7z7.js";import{t as h}from"./mutationOptions-Cv_vJkJn.js";import{t as g}from"./useMutation-DqIIIiBW.js";import{Dt as _,n as v,o as y,q as b,t as x}from"./shell-header-bar-CdOEWmCT.js";import{t as S}from"./useQuery-CLr9TaKA.js";import{a as C,i as w,n as T,r as E,t as D}from"./use-totp-setup-KOVNS2DC.js";import{t as O}from"./auth-field-BpJ4AHtU.js";import{t as k}from"./fingerprint-pattern-BwUoN1_w.js";import{t as A}from"./key-round-BxWppK6h.js";import{n as j,t as M}from"./provider-mark-CeYazOfu.js";import{n as N,r as ee,t as te}from"./logout-Dphj1d_0.js";import{t as P}from"./shield-check-DpYF8yeI.js";import{t as F}from"./trash-2-B3NVE8pR.js";import{t as I}from"./triangle-alert-DATO9o3k.js";import{t as L}from"./zod-Dszyrytb.js";import{D as ne,E as R,G as z,H as B,O as re,T as ie,U as ae,k as oe}from"./index-lTEyHSus.js";import{t as V}from"./badge-B8D0Q2qq.js";import{t as se}from"./auth-page-header-ChaCNNrn.js";import{t as H}from"./alert-D3aaK-_3.js";import{t as ce}from"./initial-avatar-WMjxW3Zz.js";import{t as U}from"./form-sJw-V9wb.js";import{n as W,t as G}from"./modal-JuaLVSyx.js";import{t as K}from"./promise-OpBtq8tG.js";import{a as le,i as ue,n as de,r as fe}from"./passkey-CWTjw19S.js";import{r as q,t as J}from"./standard-schema-C50nwAaQ.js";import{n as pe,r as me}from"./totp-BhElob6P.js";var he=c(`cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]),ge=c(`link-2-off`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7`,key:`10o201`}],[`path`,{d:`M15 7h2a5 5 0 0 1 4 8`,key:`1d3206`}],[`line`,{x1:`8`,x2:`12`,y1:`12`,y2:`12`,key:`rvw6j4`}],[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}]]),_e=c(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),ve=c(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),Y=r(n(),1),X=t();function ye({isConfigManaged:e,isDeletionEnabled:t,onDeleteClick:n}){let{t:r}=i();return t?(0,X.jsxs)(z.Root,{className:`border-tinyrack-danger-border bg-tinyrack-danger-surface`,variant:`outlined`,children:[(0,X.jsxs)(z.Header,{className:`border-tinyrack-danger-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,X.jsx)(I,{"aria-hidden":!0,className:`size-tinyrack-lg text-tinyrack-danger-foreground`}),(0,X.jsx)(z.Title,{className:`text-tinyrack-danger-foreground`,children:r(`profile.dangerZone.title`)})]}),(0,X.jsx)(z.Description,{children:r(`profile.dangerZone.description`)})]}),(0,X.jsx)(z.Content,{className:`px-tinyrack-lg py-tinyrack-md`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-tinyrack-lg`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-tinyrack-3xs`,children:[(0,X.jsx)(a,{as:`p`,variant:`bodySm`,weight:`medium`,children:r(`profile.deleteAccount.title`)}),(0,X.jsx)(a,{as:`p`,color:`muted`,variant:`caption`,children:r(e?`profile.deleteAccount.configManaged`:`profile.deleteAccount.description`)})]}),(0,X.jsxs)(s,{appearance:`outline`,"data-testid":`profile-delete-account`,disabled:e,intent:`danger`,onClick:n,type:`button`,uiSize:`sm`,children:[(0,X.jsx)(F,{"aria-hidden":!0,className:`size-tinyrack-lg`}),r(`profile.deleteAccount.button`)]})]})})]}):null}function be({providerId:e,iconUrl:t,className:n=`size-tinyrack-xl`}){return e===`google`||e===`github`||e===`apple`?(0,X.jsx)(M,{"aria-hidden":!0,className:n,provider:e}):t?(0,X.jsx)(`img`,{alt:``,className:n,src:t}):(0,X.jsx)(j,{"aria-hidden":!0,className:n})}function Z({icon:e,active:t,title:n,status:r,note:i,actions:o}){let s;return s=(0,Y.isValidElement)(e)?e:(0,X.jsx)(e,{"aria-hidden":!0,className:`size-tinyrack-lg ${t?`text-tinyrack-success-foreground`:`text-tinyrack-text-muted`}`}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-tinyrack-lg p-tinyrack-lg`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-tinyrack-md`,children:[(0,X.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-tinyrack-md ${t?`bg-tinyrack-success-surface`:`bg-tinyrack-surface-muted`}`,children:s}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-tinyrack-3xs`,children:[(0,X.jsx)(a,{as:`div`,variant:`bodySm`,weight:`medium`,children:n}),(0,X.jsx)(a,{as:`div`,color:`muted`,variant:`caption`,children:r}),i]})]}),o&&(0,X.jsx)(`div`,{className:`flex shrink-0 flex-wrap justify-end gap-tinyrack-xs`,children:o})]})}function xe({providers:e,unlinkingProvider:t,getAuthorizeUrl:n,onUnlinkRequest:r}){let{t:a}=i();return e.length===0?null:(0,X.jsxs)(z.Root,{variant:`outlined`,children:[(0,X.jsxs)(z.Header,{className:`border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md`,children:[(0,X.jsx)(z.Title,{children:a(`profile.linkedAccounts.title`)}),(0,X.jsx)(z.Description,{children:a(`profile.linkedAccounts.description`)})]}),(0,X.jsx)(z.Content,{className:`divide-y divide-tinyrack-border p-0`,children:e.map(e=>(0,X.jsx)(Z,{actions:e.linked?(0,X.jsx)(s,{appearance:`ghost`,intent:`danger`,loading:t===e.id,loadingLabel:a(`profile.linkedAccounts.unlinking`),onClick:()=>r(e),type:`button`,uiSize:`sm`,children:t===e.id?void 0:a(`profile.linkedAccounts.unlink`)}):(0,X.jsx)(ae,{appearance:`outline`,intent:`neutral`,render:(0,X.jsx)(`a`,{href:n(e.id,`link`,`/profile`)}),uiSize:`sm`,children:a(`profile.linkedAccounts.link`)}),active:e.linked,icon:(0,X.jsx)(be,{className:`size-tinyrack-lg`,iconUrl:e.icon_url,providerId:e.id}),status:e.linked?a(`profile.linkedAccounts.connected`):a(`profile.linkedAccounts.notConnected`),title:e.display_name},e.id))})]})}function Se({passkeyCount:e,onOpenModal:t}){let{t:n}=i(),r=e>0;return(0,X.jsx)(Z,{actions:(0,X.jsx)(s,{appearance:`ghost`,intent:`primary`,onClick:()=>t(r?`manage`:`setup`),type:`button`,uiSize:`sm`,children:n(r?`profile.passkey.manage`:`profile.passkey.add`)}),active:r,icon:k,status:r?n(`profile.passkey.status.enabled`,{count:e}):n(`profile.passkey.status.disabled`),title:n(`profile.passkey.title`)})}function Ce({hasPassword:e,hasLinkedOAuth:t,isConfigManaged:n,hasSecondFactorOnly:r,onOpenModal:o}){let{t:c}=i();return(0,X.jsx)(Z,{actions:n?void 0:e?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-password-change`,intent:`primary`,onClick:()=>o(`change`),type:`button`,uiSize:`sm`,children:c(`profile.password.change`)}),t?(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-password-remove`,intent:`danger`,onClick:()=>o(`remove`),type:`button`,uiSize:`sm`,children:c(`profile.password.remove`)}):null,!t&&r&&(0,X.jsxs)(v.Root,{children:[(0,X.jsx)(v.Trigger,{render:(0,X.jsx)(s,{appearance:`ghost`,disabled:!0,type:`button`,uiSize:`sm`,children:c(`profile.password.remove`)})}),(0,X.jsx)(v.Portal,{children:(0,X.jsx)(v.Positioner,{children:(0,X.jsx)(v.Popup,{className:`max-w-tinyrack-measure-lg rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface p-tinyrack-md text-tinyrack-text text-tinyrack-xs shadow-tinyrack-overlay`,children:(0,X.jsxs)(`div`,{className:`flex items-start gap-tinyrack-sm`,children:[(0,X.jsx)(C,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-warning-foreground`}),(0,X.jsx)(a,{as:`div`,variant:`caption`,children:c(`profile.password.removeDisabledReason`)})]})})})})]})]}):(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-password-set`,intent:`primary`,onClick:()=>o(`set`),type:`button`,uiSize:`sm`,children:c(`profile.password.set`)}),active:e,icon:A,note:n?(0,X.jsxs)(a,{as:`div`,className:`flex items-center gap-tinyrack-xs`,color:`muted`,variant:`caption`,children:[(0,X.jsx)(N,{"aria-hidden":!0,className:`size-tinyrack-md shrink-0`}),(0,X.jsx)(a,{as:`span`,color:`muted`,variant:`caption`,children:c(`profile.password.configManaged`)})]}):void 0,status:c(e?`profile.password.status.set`:`profile.password.status.notSet`),title:c(`profile.password.title`)})}function we({totpEnabled:e,recoveryCodesMissing:t,onOpenModal:n}){let{t:r}=i();return(0,X.jsx)(Z,{actions:e?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-totp-regenerate`,intent:`primary`,onClick:()=>n(`regenerate`),type:`button`,uiSize:`sm`,children:r(`profile.totp.regenerate`)}),(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-totp-disable`,intent:`danger`,onClick:()=>n(`disable`),type:`button`,uiSize:`sm`,children:r(`profile.totp.disable`)})]}):(0,X.jsx)(s,{appearance:`ghost`,"data-testid":`profile-totp-enable`,intent:`primary`,onClick:()=>n(`setup`),type:`button`,uiSize:`sm`,children:r(`profile.totp.enable`)}),active:e,icon:P,status:r(e?t?`profile.totp.status.recoveryCodesMissing`:`profile.totp.status.enabled`:`profile.totp.status.disabled`),title:r(`profile.totp.title`)})}var Te={error:B,warning:I,info:C};function Q({variant:e,children:t}){return(0,X.jsx)(H,{"data-testid":`alert-banner-${e}`,icon:Te[e],type:e,children:t})}function Ee({isOpen:e,onClose:t,providerName:n,isPending:r,onConfirm:a}){let{t:o}=i(),[c,l]=(0,Y.useState)(null),u=()=>{r||(l(null),t())};return(0,X.jsx)(G,{description:o(`profile.linkedAccounts.unlinkModal.description`,{provider:n}),icon:ge,isOpen:e,onClose:u,preventClose:r,title:o(`profile.linkedAccounts.unlinkModal.title`),variant:`destructive`,children:(0,X.jsxs)(`div`,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,children:[(0,X.jsx)(Q,{variant:`warning`,children:o(`profile.linkedAccounts.unlinkModal.warning`,{provider:n})}),c&&(0,X.jsx)(Q,{variant:`error`,children:c}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`unlink-oauth-cancel`,disabled:r,intent:`neutral`,onClick:u,type:`button`,uiSize:`sm`,children:o(`profile.linkedAccounts.unlinkModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`unlink-oauth-unlink`,disabled:r,intent:`danger`,loading:r,loadingLabel:o(`profile.linkedAccounts.unlinking`),onClick:async()=>{l(null);try{await a(),u()}catch{l(o(`profile.linkedAccounts.unlinkError`))}},type:`button`,uiSize:`sm`,children:o(`profile.linkedAccounts.unlink`)})]})]})})}function $({label:e,value:t}){return(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-tinyrack-lg px-tinyrack-lg py-tinyrack-md`,children:[(0,X.jsx)(a,{className:`shrink-0`,color:`muted`,variant:`caption`,children:e}),(0,X.jsx)(a,{truncate:!0,variant:`bodySm`,weight:`medium`,children:t})]})}function De({user:e}){let{t}=i();return(0,X.jsxs)(z.Root,{variant:`outlined`,children:[(0,X.jsxs)(z.Header,{className:`border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md`,children:[(0,X.jsx)(z.Title,{children:t(`profile.account.title`)}),(0,X.jsx)(z.Description,{children:t(`profile.account.description`)})]}),(0,X.jsxs)(z.Content,{className:`divide-y divide-tinyrack-border p-0`,children:[(0,X.jsx)($,{label:t(`profile.id.label`),value:e.sub}),(0,X.jsx)($,{label:t(`profile.email.label`),value:e.email})]})]})}function Oe({children:e,headerActions:t}){return(0,X.jsxs)(`div`,{className:`flex min-h-dvh flex-col bg-tinyrack-surface`,children:[(0,X.jsx)(b,{}),(0,X.jsx)(x,{actions:t,brand:!0}),(0,X.jsx)(`main`,{className:`flex flex-1 justify-center px-tinyrack-lg py-tinyrack-xl`,children:(0,X.jsx)(`div`,{className:`auth-enter flex w-full max-w-tinyrack-overlay-width-md flex-col gap-tinyrack-xl`,children:e})}),(0,X.jsx)(y,{})]})}var ke=h({mutationFn:async e=>d(await p.api.user.password.$post({json:e}))}),Ae=h({mutationFn:async e=>d(await p.api.user.password.$put({json:e}))}),je=h({mutationFn:async e=>d(await p.api.user.password.$delete({json:e}))});function Me({isOpen:e,onClose:t}){let{t:n}=i(),r=l(),{data:a}=_(m),c=a.auth.password.policy,u=q({resolver:J((0,Y.useMemo)(()=>L.object({currentPassword:L.string().min(1,n(`validation.password.required`)),newPassword:L.string().min(c.min_length,n(`validation.password.min`,{count:c.min_length})).max(c.max_length,n(`validation.password.max`,{count:c.max_length})),confirmPassword:L.string()}).refine(e=>e.newPassword===e.confirmPassword,{message:n(`validation.confirmPassword.mismatch`),path:[`confirmPassword`]}),[c.max_length,c.min_length,n])),defaultValues:{currentPassword:``,newPassword:``,confirmPassword:``}}),d=g({...Ae,onSuccess:()=>{r.invalidateQueries({queryKey:R.queryKey}),f()}}),f=()=>{u.reset(),t()},p=u.handleSubmit(async e=>{try{await d.mutateAsync({current_password:e.currentPassword,new_password:e.newPassword})}catch(e){e instanceof o&&e.code===`INVALID_CURRENT_PASSWORD`?u.setError(`currentPassword`,{message:n(`profile.password.changeModal.invalidCurrent`)}):u.setError(`root`,{message:n(`profile.password.changeModal.error`)})}});return(0,X.jsx)(G,{description:n(`profile.password.changeModal.description`),icon:A,isOpen:e,onClose:f,title:n(`profile.password.changeModal.title`),children:(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:p,children:[(0,X.jsx)(O,{error:u.formState.errors.currentPassword,errorTestId:`change-password-error-currentPassword`,id:`current-password`,label:n(`profile.password.changeModal.currentPassword`),placeholder:n(`profile.password.changeModal.currentPasswordPlaceholder`),...u.register(`currentPassword`),type:`password`}),(0,X.jsx)(O,{error:u.formState.errors.newPassword,errorTestId:`change-password-error-newPassword`,id:`new-password-change`,label:n(`profile.password.changeModal.newPassword`),placeholder:n(`profile.password.changeModal.newPasswordPlaceholder`),...u.register(`newPassword`),type:`password`}),(0,X.jsx)(O,{error:u.formState.errors.confirmPassword,errorTestId:`change-password-error-confirmPassword`,id:`confirm-password-change`,label:n(`profile.password.changeModal.confirmPassword`),placeholder:n(`profile.password.changeModal.confirmPasswordPlaceholder`),...u.register(`confirmPassword`),type:`password`}),u.formState.errors.root&&(0,X.jsx)(Q,{variant:`error`,children:u.formState.errors.root.message}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`change-password-cancel`,disabled:d.isPending,intent:`neutral`,onClick:f,type:`button`,uiSize:`sm`,children:n(`profile.password.changeModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`change-password-submit`,disabled:d.isPending,intent:`primary`,loading:d.isPending,loadingLabel:n(`profile.password.changeModal.submitting`),type:`submit`,uiSize:`sm`,children:d.isPending?void 0:n(`profile.password.changeModal.submit`)})]})]})})}var Ne=h({mutationFn:async()=>d(await p.api.user.$delete())});function Pe({isOpen:e,onClose:t,retentionDays:n}){let{t:r}=i(),o=u(),c=l(),d=q({resolver:J((0,Y.useMemo)(()=>L.object({confirmation:L.string().refine(e=>e.toLowerCase()===r(`profile.deleteAccount.modal.confirmPlaceholder`).toLowerCase(),{message:r(`validation.confirmText.mismatch`)})}),[r])),defaultValues:{confirmation:``}}),f=g({...Ne,onSuccess:async()=>{c.setQueryData(R.queryKey,{user:null}),await K(),o.navigate({to:`/login`})}}),p=()=>{f.isPending||(d.reset(),t())},m=d.handleSubmit(async()=>{try{await f.mutateAsync()}catch{d.setError(`root`,{message:r(`profile.deleteAccount.error`)})}});return(0,X.jsx)(G,{icon:F,isOpen:e,onClose:p,preventClose:f.isPending,title:r(`profile.deleteAccount.modal.title`),variant:`destructive`,children:(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:m,children:[(0,X.jsxs)(Q,{variant:`error`,children:[(0,X.jsx)(a,{as:`span`,variant:`bodySm`,children:r(`profile.deleteAccount.modal.description`,{days:n})}),(0,X.jsx)(`br`,{}),(0,X.jsx)(a,{as:`span`,className:`opacity-tinyrack-hover`,variant:`caption`,children:r(`profile.deleteAccount.modal.warning`)})]}),(0,X.jsx)(O,{autoComplete:`off`,error:d.formState.errors.confirmation,errorTestId:`delete-account-error`,id:`delete-confirmation`,label:r(`profile.deleteAccount.modal.confirmLabel`),placeholder:r(`profile.deleteAccount.modal.confirmPlaceholder`),...d.register(`confirmation`),type:`text`}),d.formState.errors.root&&(0,X.jsx)(Q,{variant:`error`,children:d.formState.errors.root.message}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`delete-account-cancel`,disabled:f.isPending,intent:`neutral`,onClick:p,type:`button`,uiSize:`sm`,children:r(`profile.deleteAccount.modal.cancel`)}),(0,X.jsx)(s,{"data-testid":`delete-account-submit`,disabled:f.isPending,intent:`danger`,loading:f.isPending,loadingLabel:r(`profile.deleteAccount.modal.confirming`),type:`submit`,uiSize:`sm`,children:f.isPending?void 0:r(`profile.deleteAccount.modal.confirm`)})]})]})})}function Fe({isOpen:e,onClose:t}){let{t:n}=i(),r=l(),a=q({resolver:J((0,Y.useMemo)(()=>L.object({code:L.string().length(6,n(`validation.totp.length`)).regex(/^\d{6}$/,n(`validation.totp.digits`))}),[n])),defaultValues:{code:``}}),c=g({...pe,onSuccess:()=>{r.invalidateQueries({queryKey:R.queryKey}),u()}}),u=()=>{a.reset(),t()},d=a.handleSubmit(async e=>{try{await c.mutateAsync({code:e.code})}catch(e){if(e instanceof o&&e.code===`CANNOT_REMOVE_LAST_SECOND_FACTOR`){a.setError(`code`,{message:n(`profile.totp.disableModal.cannotRemoveLastSecondFactor`)});return}a.setError(`code`,{message:n(`profile.totp.disableModal.error`)})}});return(0,X.jsx)(G,{description:n(`profile.totp.disableModal.description`),icon:P,isOpen:e,onClose:u,title:n(`profile.totp.disableModal.title`),variant:`destructive`,children:(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:d,children:[(0,X.jsx)(Q,{variant:`warning`,children:n(`profile.totp.disableModal.warning`)}),(0,X.jsx)(O,{autoComplete:`one-time-code`,error:a.formState.errors.code,errorTestId:`disable-totp-error`,id:`disable-totp-code`,inputMode:`numeric`,label:n(`profile.totp.disableModal.codeLabel`),maxLength:6,pattern:`[0-9]*`,placeholder:`000000`,...a.register(`code`),type:`text`}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`disable-totp-cancel`,disabled:c.isPending,intent:`neutral`,onClick:u,type:`button`,uiSize:`sm`,children:n(`profile.totp.disableModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`disable-totp-submit`,disabled:c.isPending,intent:`danger`,loading:c.isPending,loadingLabel:n(`profile.totp.disableModal.disabling`),type:`submit`,uiSize:`sm`,children:c.isPending?void 0:n(`profile.totp.disableModal.disable`)})]})]})})}function Ie({isOpen:t,onClose:n,onAddNew:r}){let{t:c}=i(),u=l(),[d,p]=(0,Y.useState)(null),[m,h]=(0,Y.useState)(null),[_,v]=(0,Y.useState)(null),[y,b]=(0,Y.useState)(null),{data:x,isLoading:C}=S({...fe,enabled:t}),w=g({...de,onSuccess:()=>{u.invalidateQueries({queryKey:f.passkeys()}),u.invalidateQueries({queryKey:R.queryKey})},onSettled:()=>{h(null)}}),T=(0,Y.useCallback)(()=>{p(null),h(null),v(null),b(null),n()},[n]),E=e=>{v(e.id),b(null)},D=()=>{v(null),b(null)},O=async e=>{h(e.id),v(null);try{await w.mutateAsync({id:e.id})}catch(e){if(e instanceof o&&e.code===`CANNOT_REMOVE_LAST_SECOND_FACTOR`){b(c(`profile.passkey.manageModal.cannotRemoveLastSecondFactor`));return}b(c(`profile.passkey.manageModal.deleteError`))}},A=e=>new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`}),j=x?.passkeys||[];return(0,X.jsxs)(G,{icon:k,isOpen:t,onClose:T,size:`lg`,title:c(`profile.passkey.manageModal.title`),children:[(0,X.jsxs)(`div`,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-sm`,children:[y&&(0,X.jsx)(Q,{variant:`error`,children:y}),C&&(0,X.jsx)(`div`,{className:`flex justify-center py-tinyrack-xl`,children:(0,X.jsx)(e,{uiSize:`md`})}),!C&&j.length===0&&(0,X.jsx)(a,{align:`center`,className:`py-tinyrack-xl`,color:`muted`,"data-testid":`passkeys-empty`,variant:`bodySm`,children:c(`profile.passkey.manageModal.noPasskeys`)}),!C&&j.length>0&&(0,X.jsx)(`div`,{className:`flex flex-col gap-tinyrack-sm`,children:j.map(e=>(0,X.jsx)(Le,{formatDate:A,isConfirmingDelete:_===e.id,isDeleting:m===e.id,isEditing:d?.id===e.id,onCancelDelete:D,onCancelEdit:()=>p(null),onConfirmDelete:()=>O(e),onEdit:()=>p(e),onRequestDelete:()=>E(e),passkey:e},e.id))})]}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`manage-passkeys-close`,intent:`neutral`,onClick:T,type:`button`,uiSize:`sm`,children:c(`profile.passkey.manageModal.close`)}),(0,X.jsx)(s,{"data-testid":`manage-passkeys-add-new`,intent:`primary`,onClick:()=>{T(),r()},type:`button`,uiSize:`sm`,children:c(`profile.passkey.manageModal.addNew`)})]})]})}function Le({passkey:e,isDeleting:t,isEditing:n,isConfirmingDelete:r,onEdit:o,onCancelEdit:c,onRequestDelete:u,onConfirmDelete:d,onCancelDelete:p,formatDate:m}){let{t:h}=i(),_=l(),v=q({resolver:J((0,Y.useMemo)(()=>L.object({name:L.string().min(1,h(`validation.passkey.name.required`)).max(100,h(`validation.passkey.name.max`))}),[h])),defaultValues:{name:e.name||``}}),y=g({...le,onSuccess:()=>{_.invalidateQueries({queryKey:f.passkeys()}),c()}}),b=v.handleSubmit(async t=>{try{await y.mutateAsync({id:e.id,name:t.name})}catch{v.setError(`name`,{message:h(`profile.passkey.manageModal.renameError`)})}});return n?(0,X.jsxs)(U,{className:`flex flex-col gap-tinyrack-xs rounded-tinyrack-md bg-tinyrack-surface-muted p-tinyrack-sm`,onSubmit:b,children:[(0,X.jsx)(O,{"data-testid":`passkey-rename-input`,error:v.formState.errors.name,errorTestId:`passkey-rename-error`,hideLabel:!0,label:h(`profile.passkey.manageModal.nameLabel`),placeholder:h(`profile.passkey.manageModal.namePlaceholder`),...v.register(`name`),type:`text`}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-tinyrack-xs`,children:[(0,X.jsx)(s,{appearance:`ghost`,disabled:y.isPending,onClick:()=>{v.reset(),c()},type:`button`,uiSize:`sm`,children:h(`profile.passkey.manageModal.cancelEdit`)}),(0,X.jsx)(s,{disabled:y.isPending,intent:`primary`,type:`submit`,uiSize:`sm`,children:y.isPending?h(`profile.passkey.manageModal.saving`):h(`profile.passkey.manageModal.save`)})]})]}):r?(0,X.jsxs)(`div`,{className:`flex items-center justify-between rounded-tinyrack-md border border-tinyrack-danger-border bg-tinyrack-danger-surface p-tinyrack-sm text-tinyrack-danger-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,X.jsx)(F,{className:`size-tinyrack-lg`}),(0,X.jsx)(a,{color:`danger`,variant:`caption`,children:h(`profile.passkey.manageModal.deleteConfirmInline`)})]}),(0,X.jsxs)(`div`,{className:`flex gap-tinyrack-xs`,children:[(0,X.jsx)(s,{appearance:`ghost`,onClick:p,type:`button`,uiSize:`sm`,children:h(`profile.passkey.manageModal.cancelEdit`)}),(0,X.jsx)(s,{intent:`danger`,onClick:d,type:`button`,uiSize:`sm`,children:h(`profile.passkey.manageModal.delete`)})]})]}):(0,X.jsxs)(`div`,{className:`flex items-center justify-between rounded-tinyrack-md bg-tinyrack-surface-muted p-tinyrack-sm`,"data-testid":`passkey-item`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[e.device_type===`multiDevice`?(0,X.jsx)(he,{className:`size-tinyrack-lg text-tinyrack-primary-foreground`}):(0,X.jsx)(ve,{className:`size-tinyrack-lg text-tinyrack-primary-foreground`}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(a,{as:`div`,variant:`caption`,weight:`medium`,children:e.name||h(`profile.passkey.manageModal.unnamedPasskey`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-tinyrack-xs`,children:[(0,X.jsx)(a,{color:`muted`,variant:`caption`,children:h(`profile.passkey.manageModal.createdAt`,{date:m(e.created_at)})}),e.backed_up&&(0,X.jsx)(V,{uiSize:`md`,variant:`success`,children:h(`profile.passkey.manageModal.backedUp`)})]})]})]}),(0,X.jsxs)(`div`,{className:`flex gap-tinyrack-xs`,children:[(0,X.jsx)(s,{appearance:`ghost`,"aria-label":h(`profile.passkey.manageModal.rename`),onClick:o,type:`button`,uiSize:`sm`,children:(0,X.jsx)(_e,{className:`size-tinyrack-lg`})}),(0,X.jsx)(s,{appearance:`ghost`,"aria-label":h(`profile.passkey.manageModal.delete`),disabled:t,intent:`danger`,loading:t,onClick:u,type:`button`,uiSize:`sm`,children:t?void 0:(0,X.jsx)(F,{className:`size-tinyrack-lg`})})]})]})}function Re({isOpen:e,onClose:t}){let{t:n}=i(),r=u(),a=l(),{data:s}=_(m),[c,d]=(0,Y.useState)(`verify`),[f,p]=(0,Y.useState)(null),[h,v]=(0,Y.useState)(null),y=g({...me,onSuccess:async e=>{p(e),d(`recovery`),await a.invalidateQueries({queryKey:R.queryKey})}}),b=(0,Y.useCallback)(()=>{d(`verify`),p(null),v(null),y.reset()},[y]),x=(0,Y.useCallback)(()=>{b(),t()},[t,b]),S=(0,Y.useCallback)(async e=>{v(null);try{await y.mutateAsync({code:e})}catch(e){if(e instanceof o){if(e.code===`INVALID_TOTP_CODE`)throw e;if(e.code===`UNAUTHORIZED`){a.setQueryData(R.queryKey,{user:null}),await K(),r.navigate({to:`/login`});return}if(e.code===`TOTP_NOT_ENABLED`||e.code===`VALIDATION_ERROR`){await a.invalidateQueries({queryKey:R.queryKey}),x();return}}v(n(`profile.totp.regenerateModal.unexpectedError`))}},[x,y,a,r,n]);return s.auth.password.totp.enabled?(0,X.jsx)(G,{description:n(c===`verify`?`profile.totp.regenerateModal.description`:`profile.totp.regenerateModal.recoveryDescription`),icon:P,isOpen:e,onClose:x,preventClose:c===`recovery`,size:`sm`,title:n(c===`verify`?`profile.totp.regenerateModal.title`:`profile.totp.regenerateModal.recoveryTitle`),children:c===`verify`?(0,X.jsxs)(`div`,{className:`mt-tinyrack-lg`,children:[h&&(0,X.jsx)(`div`,{className:`mb-tinyrack-md`,children:(0,X.jsx)(Q,{variant:`error`,children:h})}),(0,X.jsx)(E,{invalidMessage:n(`profile.totp.regenerateModal.error`),isPending:y.isPending,onSubmit:S,pendingText:n(`profile.totp.regenerateModal.submitting`),submitLabel:n(`profile.totp.regenerateModal.submit`)})]}):(0,X.jsx)(`div`,{className:`mt-tinyrack-lg`,children:(0,X.jsx)(w,{onConfirm:x,recoveryCodes:f?.recovery_codes??[]})})}):null}function ze({isOpen:e,onClose:t}){let{t:n}=i(),r=l(),a=q({resolver:J((0,Y.useMemo)(()=>L.object({currentPassword:L.string().min(1,n(`validation.password.required`))}),[n])),defaultValues:{currentPassword:``}}),c=g({...je,onSuccess:()=>{r.invalidateQueries({queryKey:R.queryKey}),u()}}),u=()=>{a.reset(),t()},d=a.handleSubmit(async e=>{try{await c.mutateAsync({current_password:e.currentPassword})}catch(e){if(e instanceof o){if(e.code===`INVALID_CURRENT_PASSWORD`){a.setError(`currentPassword`,{message:n(`profile.password.removeModal.invalidCurrent`)});return}if(e.code===`CANNOT_REMOVE_LAST_AUTH_METHOD`){a.setError(`root`,{message:n(`profile.password.removeModal.noOAuth`)});return}if(e.code===`CANNOT_REMOVE_PASSWORD_WITH_SECOND_FACTOR_ONLY`){a.setError(`root`,{message:n(`profile.password.removeModal.noOAuthWith2FA`)});return}}a.setError(`root`,{message:n(`profile.password.removeModal.error`)})}});return(0,X.jsx)(G,{description:n(`profile.password.removeModal.description`),icon:A,isOpen:e,onClose:u,title:n(`profile.password.removeModal.title`),variant:`destructive`,children:(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:d,children:[(0,X.jsx)(O,{error:a.formState.errors.currentPassword,errorTestId:`remove-password-error`,id:`current-password-remove`,label:n(`profile.password.removeModal.currentPassword`),placeholder:n(`profile.password.removeModal.currentPasswordPlaceholder`),...a.register(`currentPassword`),type:`password`}),a.formState.errors.root&&(0,X.jsx)(Q,{variant:`error`,children:a.formState.errors.root.message}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`remove-password-cancel`,disabled:c.isPending,intent:`neutral`,onClick:u,type:`button`,uiSize:`sm`,children:n(`profile.password.removeModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`remove-password-submit`,disabled:c.isPending,intent:`danger`,loading:c.isPending,loadingLabel:n(`profile.password.removeModal.submitting`),type:`submit`,uiSize:`sm`,children:c.isPending?void 0:n(`profile.password.removeModal.submit`)})]})]})})}function Be({isOpen:e,onClose:t}){let{t:n}=i(),r=l(),{data:a}=_(m),o=a.auth.password.policy,c=q({resolver:J((0,Y.useMemo)(()=>L.object({password:L.string().min(o.min_length,n(`validation.password.min`,{count:o.min_length})).max(o.max_length,n(`validation.password.max`,{count:o.max_length})),confirmPassword:L.string()}).refine(e=>e.password===e.confirmPassword,{message:n(`validation.confirmPassword.mismatch`),path:[`confirmPassword`]}),[o.max_length,o.min_length,n])),defaultValues:{password:``,confirmPassword:``}}),u=g({...ke,onSuccess:()=>{r.invalidateQueries({queryKey:R.queryKey}),d()}}),d=()=>{c.reset(),t()},f=c.handleSubmit(async e=>{try{await u.mutateAsync({password:e.password})}catch{c.setError(`root`,{message:n(`profile.password.setModal.error`)})}});return(0,X.jsx)(G,{description:n(`profile.password.setModal.description`),icon:A,isOpen:e,onClose:d,title:n(`profile.password.setModal.title`),children:(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:f,children:[(0,X.jsx)(O,{error:c.formState.errors.password,errorTestId:`set-password-error-password`,id:`new-password`,label:n(`profile.password.setModal.newPassword`),placeholder:n(`profile.password.setModal.newPasswordPlaceholder`),...c.register(`password`),type:`password`}),(0,X.jsx)(O,{error:c.formState.errors.confirmPassword,errorTestId:`set-password-error-confirmPassword`,id:`confirm-password`,label:n(`profile.password.setModal.confirmPassword`),placeholder:n(`profile.password.setModal.confirmPasswordPlaceholder`),...c.register(`confirmPassword`),type:`password`}),c.formState.errors.root&&(0,X.jsx)(Q,{variant:`error`,children:c.formState.errors.root.message}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`set-password-cancel`,disabled:u.isPending,intent:`neutral`,onClick:d,type:`button`,uiSize:`sm`,children:n(`profile.password.setModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`set-password-submit`,disabled:u.isPending,intent:`primary`,loading:u.isPending,loadingLabel:n(`profile.password.setModal.submitting`),type:`submit`,uiSize:`sm`,children:u.isPending?void 0:n(`profile.password.setModal.submit`)})]})]})})}function Ve({isOpen:t,onClose:n,isRequired:r=!1,canSwitchToTotp:o=!1,onSwitchToTotp:c}){let{t:u}=i(),d=l(),[p,m]=(0,Y.useState)(`name`),[h,_]=(0,Y.useState)(null),v=q({resolver:J((0,Y.useMemo)(()=>L.object({name:L.string().max(100,u(`validation.passkey.name.max`)).optional().transform(e=>e?.trim()||void 0)}),[u])),defaultValues:{name:``}}),y=g({...ue,onSuccess:()=>{d.invalidateQueries({queryKey:f.passkeys()}),d.invalidateQueries({queryKey:R.queryKey}),b()},onError:e=>{m(`name`),e.name===`NotAllowedError`?_(u(`profile.passkey.setupModal.cancelled`)):_(u(`profile.passkey.setupModal.error`))}}),b=(0,Y.useCallback)(()=>{v.reset(),m(`name`),_(null),n()},[v,n]),x=v.handleSubmit(async e=>{m(`register`),_(null);try{await y.mutateAsync({name:e.name})}catch{}}),S=y.isPending;return(0,X.jsxs)(G,{description:r?u(`profile.passkey.setupModal.requiredDescription`):void 0,icon:k,isOpen:t,onClose:b,preventClose:r,size:`sm`,title:u(`profile.passkey.setupModal.title`),children:[p===`name`&&(0,X.jsxs)(U,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,onSubmit:x,children:[(0,X.jsx)(a,{as:`p`,color:`muted`,variant:`caption`,children:u(`profile.passkey.setupModal.description`)}),h&&(0,X.jsx)(Q,{variant:`error`,children:h}),(0,X.jsx)(O,{error:v.formState.errors.name,errorTestId:`setup-passkey-error`,hint:u(`profile.passkey.setupModal.nameHint`),id:`passkey-name`,label:u(`profile.passkey.setupModal.nameLabel`),placeholder:u(`profile.passkey.setupModal.namePlaceholder`),...v.register(`name`),type:`text`}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,"data-testid":`setup-passkey-cancel`,intent:`neutral`,onClick:b,type:`button`,uiSize:`sm`,children:u(`profile.passkey.setupModal.cancel`)}),(0,X.jsx)(s,{"data-testid":`setup-passkey-continue`,intent:`primary`,type:`submit`,uiSize:`sm`,children:u(`profile.passkey.setupModal.continue`)})]}),o&&c&&(0,X.jsx)(a,{align:`center`,as:`p`,className:`mt-tinyrack-sm`,variant:`caption`,children:(0,X.jsx)(s,{appearance:`ghost`,intent:`primary`,onClick:c,type:`button`,uiSize:`sm`,children:u(`profile.passkey.setupModal.switchToTotp`)})})]}),p===`register`&&(0,X.jsxs)(`div`,{className:`mt-tinyrack-lg`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-tinyrack-md py-tinyrack-xl`,"data-testid":`setup-passkey-loading`,children:[(0,X.jsx)(e,{uiSize:`md`}),(0,X.jsx)(a,{align:`center`,as:`p`,color:`muted`,variant:`caption`,children:u(`profile.passkey.setupModal.waitingForDevice`)})]}),(0,X.jsx)(W,{children:(0,X.jsx)(s,{appearance:`outline`,"data-testid":`setup-passkey-cancel`,disabled:S,intent:`neutral`,onClick:b,type:`button`,uiSize:`sm`,children:u(`profile.passkey.setupModal.cancel`)})})]})]})}function He({isOpen:t,onClose:n,isRequired:r=!1,canSwitchToPasskey:o=!1,onSwitchToPasskey:c}){let{t:l}=i(),{step:u,setupData:d,recoveryCodes:f,isSetupPending:p,isVerifyPending:m,isConfirmPending:h,startSetup:g,verify:_,goToVerify:v,goToQr:y,confirmRecoveryCodes:b,reset:x}=D({autoStart:!1,onConfirmSuccess:()=>{x(),n()}}),S=(0,Y.useCallback)(()=>{x(),n()},[n,x]),C=(0,Y.useCallback)(()=>{!d&&!p&&g()},[d,p,g]);t&&!d&&!p&&u!==`error`&&C();let O=(0,Y.useCallback)(async e=>{await _(e)},[_]),k=l(u===`recovery`?`setupTotp.recoveryCodes.title`:`profile.totp.setupModal.title`);return(0,X.jsxs)(G,{description:r?l(`profile.totp.setupModal.requiredDescription`):void 0,icon:P,isOpen:t,onClose:S,preventClose:r||u===`recovery`,size:`sm`,title:k,children:[p&&(0,X.jsx)(`div`,{className:`flex justify-center py-tinyrack-xl`,"data-testid":`setup-totp-loading`,children:(0,X.jsx)(e,{uiSize:`md`})}),u===`error`&&(0,X.jsxs)(`div`,{className:`mt-tinyrack-lg flex flex-col gap-tinyrack-md`,children:[(0,X.jsx)(Q,{variant:`error`,children:l(`profile.totp.setupModal.setupError`)}),(0,X.jsxs)(W,{children:[(0,X.jsx)(s,{appearance:`outline`,intent:`neutral`,onClick:S,type:`button`,uiSize:`sm`,children:l(`profile.totp.setupModal.cancel`)}),(0,X.jsx)(s,{intent:`primary`,onClick:g,type:`button`,uiSize:`sm`,children:l(`profile.totp.setupModal.retry`)})]})]}),d&&u===`qr`&&(0,X.jsx)(`div`,{className:`mt-tinyrack-lg`,children:(0,X.jsx)(T,{additionalActions:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(W,{children:(0,X.jsx)(s,{appearance:`outline`,intent:`neutral`,onClick:S,type:`button`,uiSize:`sm`,children:l(`profile.totp.setupModal.cancel`)})}),o&&c&&(0,X.jsx)(a,{align:`center`,as:`p`,className:`mt-tinyrack-sm`,variant:`caption`,children:(0,X.jsx)(s,{appearance:`ghost`,intent:`primary`,onClick:c,type:`button`,uiSize:`sm`,children:l(`profile.totp.setupModal.switchToPasskey`)})})]}),onNext:v,setupData:d})}),d&&u===`verify`&&(0,X.jsx)(`div`,{className:`mt-tinyrack-lg`,children:(0,X.jsx)(E,{isPending:m,onBack:y,onSubmit:O})}),u===`recovery`&&f.length>0&&(0,X.jsx)(`div`,{className:`mt-tinyrack-lg`,children:(0,X.jsx)(w,{isLoading:h,onConfirm:b,recoveryCodes:f})})]})}var Ue={access_denied:`oauth.error.accessDenied`,temporarily_unavailable:`oauth.error.temporarilyUnavailable`,server_error:`oauth.error.serverError`};function We(){let{t:e}=i(),t=u(),n=l(),r=ie.useSearch().oauth_error,o=r?e(Ue[r]??`oauth.error.failed`):void 0,[c,d]=(0,Y.useState)(null),[f,p]=(0,Y.useState)(null),[h,v]=(0,Y.useState)(null),[y,b]=(0,Y.useState)(null),[x,S]=(0,Y.useState)(null),[C,w]=(0,Y.useState)(!1),{data:T}=_(R),{data:E}=_(re),{data:D}=_(m),O=g({...te,onSuccess:async()=>{n.setQueryData(R.queryKey,{user:null}),await K(),t.navigate({to:`/login`})},onSettled:()=>{n.invalidateQueries({queryKey:R.queryKey})}}),k=g({...oe,onSuccess:()=>{n.invalidateQueries({queryKey:re.queryKey})},onSettled:()=>{d(null)}}),A=async()=>{f&&(d(f.id),await k.mutateAsync(f.id))};if(!T.user)return null;let j=T.user,M=E.available_providers,N=M.some(e=>e.linked),P=j.managed_by===`config`,F=D.auth.password,I=D.auth.passkey,L=F.totp.enabled,ae=I.enabled,V=D.account_deletion.enabled,U=D.account_deletion.retention,W=(()=>{let e=U.match(/^(\d+)([dmy])$/);if(!e)return 30;let t=parseInt(e[1],10);switch(e[2]){case`d`:return t;case`m`:return t*30;case`y`:return t*365;default:return 30}})(),G=!P&&L,le=!P&&ae,ue=M.length>0;return(0,X.jsxs)(Oe,{headerActions:(0,X.jsx)(s,{appearance:`ghost`,"aria-label":e(`profile.logout`),"data-testid":`profile-logout`,disabled:O.isPending,loading:O.isPending,onClick:()=>O.mutate(),type:`button`,uiSize:`sm`,children:O.isPending?void 0:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ee,{"aria-hidden":!0,className:`size-tinyrack-lg`}),(0,X.jsx)(a,{as:`span`,className:`hidden sm:inline`,variant:`bodySm`,children:e(`profile.logout`)})]})}),children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-tinyrack-lg`,children:[(0,X.jsx)(ce,{email:j.email,size:`lg`}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-tinyrack-3xs`,children:[(0,X.jsx)(se,{title:e(`profile.title`)}),(0,X.jsx)(a,{as:`p`,color:`muted`,"data-testid":`profile-user-email`,truncate:!0,variant:`bodySm`,children:j.email})]})]}),o&&(0,X.jsx)(H,{icon:B,type:`error`,children:o}),j&&(0,X.jsx)(De,{user:j}),(0,X.jsxs)(z.Root,{variant:`outlined`,children:[(0,X.jsxs)(z.Header,{className:`border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md`,children:[(0,X.jsx)(z.Title,{children:e(`profile.security.title`)}),(0,X.jsx)(z.Description,{children:e(`profile.security.description`)})]}),G&&j.totp_recovery_codes_missing&&(0,X.jsx)(`div`,{className:`border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md`,"data-testid":`profile-totp-recovery-warning`,children:(0,X.jsx)(H,{icon:B,type:`warning`,children:e(`profile.totp.recoveryCodesMissing`)})}),(0,X.jsxs)(z.Content,{className:`divide-y divide-tinyrack-border p-0`,children:[(0,X.jsx)(Ce,{hasLinkedOAuth:N,hasPassword:j.has_password,hasSecondFactorOnly:j.has_password&&!N&&(j.totp_registered||j.passkey_count>0),isConfigManaged:P,onOpenModal:v}),G&&(0,X.jsx)(we,{onOpenModal:b,recoveryCodesMissing:j.totp_recovery_codes_missing,totpEnabled:j.totp_registered}),le&&(0,X.jsx)(Se,{onOpenModal:S,passkeyCount:j.passkey_count})]})]}),ue&&(0,X.jsx)(xe,{getAuthorizeUrl:ne,onUnlinkRequest:e=>p({id:e.id,name:e.display_name}),providers:M,unlinkingProvider:c}),(0,X.jsx)(ye,{isConfigManaged:P,isDeletionEnabled:V,onDeleteClick:()=>w(!0)}),(0,X.jsx)(Be,{isOpen:h===`set`,onClose:()=>v(null)}),(0,X.jsx)(Me,{isOpen:h===`change`,onClose:()=>v(null)}),(0,X.jsx)(ze,{isOpen:h===`remove`,onClose:()=>v(null)}),(0,X.jsx)(He,{isOpen:y===`setup`,onClose:()=>b(null)}),(0,X.jsx)(Fe,{isOpen:y===`disable`,onClose:()=>b(null)}),(0,X.jsx)(Re,{isOpen:y===`regenerate`,onClose:()=>b(null)}),(0,X.jsx)(Ve,{isOpen:x===`setup`,onClose:()=>S(null)}),(0,X.jsx)(Ie,{isOpen:x===`manage`,onAddNew:()=>S(`setup`),onClose:()=>S(null)}),(0,X.jsx)(Ee,{isOpen:f!==null,isPending:k.isPending,onClose:()=>p(null),onConfirm:A,providerName:f?.name??``}),(0,X.jsx)(Pe,{isOpen:C,onClose:()=>w(!1),retentionDays:W})]})}export{We as component};
2
- //# sourceMappingURL=profile-PjXEnzA-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile-PjXEnzA-.js","names":["__iconNode","__iconNode","__iconNode","useMutation","useQueryClient","useSuspenseQuery","useRouter","TRButton","TRCard","TRText","CircleAlertIcon","LogOutIcon","useState","useTranslation","AuthPageHeader","DangerZoneSection","LinkedAccountsSection","PasskeySection","PasswordSection","TotpSection","UnlinkOAuthModal","UserInfoSection","Alert","InitialAvatar","AppLayout","ChangePasswordModal","DeleteAccountModal","DisableTotpModal","ManagePasskeysModal","RegenerateTotpRecoveryCodesModal","RemovePasswordModal","SetPasswordModal","SetupPasskeyModal","SetupTotpModal","tick","appConfigQueryOptions","logoutMutationOptions","getOAuthAuthorizeUrl","oauthAccountsQueryOptions","unlinkOAuthMutationOptions","getSessionQueryOptions","PasswordModalType","TotpModalType","PasskeyModalType","OAUTH_ERROR_I18N_MAP","Record","access_denied","temporarily_unavailable","server_error","Route","Profile","t","router","queryClient","search","useSearch","oauthError","oauth_error","oauthErrorMessage","undefined","unlinkingProvider","setUnlinkingProvider","unlinkModal","setUnlinkModal","id","name","passwordModal","setPasswordModal","totpModal","setTotpModal","passkeyModal","setPasskeyModal","showDeleteModal","setShowDeleteModal","data","session","oauthAccountsData","appConfig","logoutMutation","onSuccess","setQueryData","queryKey","user","navigate","to","onSettled","invalidateQueries","unlinkMutation","handleUnlinkConfirm","mutateAsync","availableProviders","available_providers","hasLinkedOAuth","some","p","linked","isConfigManaged","managed_by","passwordAuthMethod","auth","password","passkeyAuthMethod","passkey","totpEnabled","totp","enabled","passkeyEnabled","accountDeletionEnabled","account_deletion","retentionPeriod","retention","retentionDays","match","value","parseInt","unit","showPasswordSection","showTotpSection","showPasskeySection","showLinkedAccounts","length","hasSecurityOptions","isPending","mutate","email","totp_recovery_codes_missing","has_password","totp_registered","passkey_count","provider","display_name","component"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/cloud.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/link-2-off.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/pencil.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/smartphone.mjs","../../../frontend/src/components/profile/danger-zone-section.tsx","../../../frontend/src/components/auth/provider-logos.tsx","../../../frontend/src/components/profile/security-row.tsx","../../../frontend/src/components/profile/linked-accounts-section.tsx","../../../frontend/src/components/profile/passkey-section.tsx","../../../frontend/src/components/profile/password-section.tsx","../../../frontend/src/components/profile/totp-section.tsx","../../../frontend/src/components/ui/alert-banner.tsx","../../../frontend/src/components/profile/unlink-oauth-modal.tsx","../../../frontend/src/components/profile/user-info-section.tsx","../../../frontend/src/features/layout/app-layout.tsx","../../../frontend/src/queries/password.ts","../../../frontend/src/features/profile/change-password-modal.tsx","../../../frontend/src/queries/account.ts","../../../frontend/src/features/profile/delete-account-modal.tsx","../../../frontend/src/features/profile/disable-totp-modal.tsx","../../../frontend/src/features/profile/manage-passkeys-modal.tsx","../../../frontend/src/features/profile/regenerate-totp-recovery-codes-modal.tsx","../../../frontend/src/features/profile/remove-password-modal.tsx","../../../frontend/src/features/profile/set-password-modal.tsx","../../../frontend/src/features/profile/setup-passkey-modal.tsx","../../../frontend/src/features/profile/setup-totp-modal.tsx","../../../frontend/src/routes/profile/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 [\"path\", { d: \"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\", key: \"p7xjir\" }]\n];\nconst Cloud = createLucideIcon(\"cloud\", __iconNode);\n\nexport { __iconNode, Cloud as default };\n//# sourceMappingURL=cloud.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 [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7\", key: \"10o201\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 0 1 4 8\", key: \"1d3206\" }],\n [\"line\", { x1: \"8\", x2: \"12\", y1: \"12\", y2: \"12\", key: \"rvw6j4\" }],\n [\"line\", { x1: \"2\", x2: \"22\", y1: \"2\", y2: \"22\", key: \"a6p6uj\" }]\n];\nconst Link2Off = createLucideIcon(\"link-2-off\", __iconNode);\n\nexport { __iconNode, Link2Off as default };\n//# sourceMappingURL=link-2-off.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 [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.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 [\"rect\", { width: \"14\", height: \"20\", x: \"5\", y: \"2\", rx: \"2\", ry: \"2\", key: \"1yt0o3\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }]\n];\nconst Smartphone = createLucideIcon(\"smartphone\", __iconNode);\n\nexport { __iconNode, Smartphone as default };\n//# sourceMappingURL=smartphone.mjs.map\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { Trash2Icon, TriangleAlertIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\n\ninterface DangerZoneSectionProps {\n isConfigManaged: boolean;\n isDeletionEnabled: boolean;\n onDeleteClick: () => void;\n}\n\nexport function DangerZoneSection({\n isConfigManaged,\n isDeletionEnabled,\n onDeleteClick,\n}: DangerZoneSectionProps) {\n const { t } = useTranslation();\n\n if (!isDeletionEnabled) {\n return null;\n }\n\n return (\n <TRCard.Root\n className=\"border-tinyrack-danger-border bg-tinyrack-danger-surface\"\n variant=\"outlined\"\n >\n <TRCard.Header className=\"border-tinyrack-danger-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\">\n <div className=\"flex items-center gap-tinyrack-sm\">\n <TriangleAlertIcon\n aria-hidden\n className=\"size-tinyrack-lg text-tinyrack-danger-foreground\"\n />\n <TRCard.Title className=\"text-tinyrack-danger-foreground\">\n {t('profile.dangerZone.title')}\n </TRCard.Title>\n </div>\n <TRCard.Description>\n {t('profile.dangerZone.description')}\n </TRCard.Description>\n </TRCard.Header>\n <TRCard.Content className=\"px-tinyrack-lg py-tinyrack-md\">\n <div className=\"flex items-center justify-between gap-tinyrack-lg\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-tinyrack-3xs\">\n <TRText as=\"p\" variant=\"bodySm\" weight=\"medium\">\n {t('profile.deleteAccount.title')}\n </TRText>\n <TRText as=\"p\" color=\"muted\" variant=\"caption\">\n {isConfigManaged\n ? t('profile.deleteAccount.configManaged')\n : t('profile.deleteAccount.description')}\n </TRText>\n </div>\n <TRButton\n appearance=\"outline\"\n data-testid=\"profile-delete-account\"\n disabled={isConfigManaged}\n intent=\"danger\"\n onClick={onDeleteClick}\n type=\"button\"\n uiSize=\"sm\"\n >\n <Trash2Icon aria-hidden className=\"size-tinyrack-lg\" />\n {t('profile.deleteAccount.button')}\n </TRButton>\n </div>\n </TRCard.Content>\n </TRCard.Root>\n );\n}\n","import { TRProviderMark } from '@tinyrack/ui/components/provider-mark';\nimport { LinkIcon } from 'lucide-react';\n\n/**\n * Brand marks for the built-in identity providers.\n *\n * Built-in provider marks come from the design system so their official brand\n * geometry and colors stay encapsulated upstream. Custom deployments can\n * still supply their own provider image.\n *\n * Each renders at the caller's `className` size and is decorative: the\n * accessible name comes from the surrounding button label.\n */\n\ntype ProviderMarkProps = {\n /** Configured provider id. Built-in providers use their own name. */\n providerId: string;\n /** Deployment-supplied icon, used for providers with no built-in mark. */\n iconUrl?: string;\n className?: string;\n};\n\n/**\n * The mark for a configured provider, however it is identified.\n *\n * Profile's provider list carries an id and an optional icon URL but no\n * provider type, so this resolves by id first — which is what the built-in\n * providers are named — then the deployment's own icon, then a generic link\n * glyph for an unrecognised custom provider.\n */\nexport function ProviderMark({\n providerId,\n iconUrl,\n className = 'size-tinyrack-xl',\n}: ProviderMarkProps) {\n if (\n providerId === 'google' ||\n providerId === 'github' ||\n providerId === 'apple'\n ) {\n return (\n <TRProviderMark aria-hidden className={className} provider={providerId} />\n );\n }\n if (iconUrl) {\n return <img alt=\"\" className={className} src={iconUrl} />;\n }\n return <LinkIcon aria-hidden className={className} />;\n}\n","import { TRText } from '@tinyrack/ui/components/text';\nimport type { LucideIcon } from 'lucide-react';\nimport { isValidElement, type ReactNode } from 'react';\n\ntype SecurityRowProps = {\n /**\n * A lucide glyph, which gets tinted with the row's state, or a ready-made\n * node for marks that carry their own colour — a provider's brand logo.\n */\n icon: LucideIcon | ReactNode;\n /** Tints the icon tile. \"Configured\" rather than \"enabled\" — a linked OAuth\n * account and a set password are both active states. */\n active: boolean;\n title: string;\n status: string;\n /** Secondary line under the status, e.g. a config-managed caveat. */\n note?: ReactNode;\n /** Trailing controls. */\n actions?: ReactNode;\n};\n\n/**\n * One credential the account has, or does not.\n *\n * Password, TOTP, passkeys, and each linked provider were four copies of the\n * same row — a tinted icon tile, a title, a status line, a trailing action\n * cluster — which is how they drifted into three different paddings.\n */\nexport function SecurityRow({\n icon,\n active,\n title,\n status,\n note,\n actions,\n}: SecurityRowProps) {\n /*\n Discriminated by `isValidElement`, not `typeof … === 'function'`: lucide\n icons are `forwardRef` objects, so a typeof check reads them as data and\n React then throws on rendering `{$$typeof, render}` as a child. An\n already-rendered mark is an element; a component is not.\n */\n let mark: ReactNode;\n if (isValidElement(icon)) {\n mark = icon;\n } else {\n const Icon = icon as LucideIcon;\n mark = (\n <Icon\n aria-hidden\n className={`size-tinyrack-lg ${\n active\n ? 'text-tinyrack-success-foreground'\n : 'text-tinyrack-text-muted'\n }`}\n />\n );\n }\n\n return (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural credential row; all visible copy uses TRText. */\n <div className=\"flex items-center justify-between gap-tinyrack-lg p-tinyrack-lg\">\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural leading-content group. */}\n <div className=\"flex min-w-0 flex-1 items-center gap-tinyrack-md\">\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural icon host. */}\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-tinyrack-md ${\n active ? 'bg-tinyrack-success-surface' : 'bg-tinyrack-surface-muted'\n }`}\n >\n {mark}\n </div>\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural TRText stack with an optional DS note. */}\n <div className=\"flex min-w-0 flex-1 flex-col gap-tinyrack-3xs\">\n <TRText as=\"div\" variant=\"bodySm\" weight=\"medium\">\n {title}\n </TRText>\n <TRText as=\"div\" color=\"muted\" variant=\"caption\">\n {status}\n </TRText>\n {note}\n </div>\n </div>\n {actions && (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural action slot. */\n <div className=\"flex shrink-0 flex-wrap justify-end gap-tinyrack-xs\">\n {actions}\n </div>\n )}\n </div>\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCard } from '@tinyrack/ui/components/card';\nimport { TRLinkButton } from '@tinyrack/ui/components/link-button';\nimport { useTranslation } from 'react-i18next';\nimport { ProviderMark } from '#frontend/components/auth/provider-logos.tsx';\nimport { SecurityRow } from '#frontend/components/profile/security-row.tsx';\n\ninterface OAuthProvider {\n id: string;\n display_name: string;\n icon_url?: string;\n linked: boolean;\n}\n\ninterface LinkedAccountsSectionProps {\n providers: OAuthProvider[];\n unlinkingProvider: string | null;\n getAuthorizeUrl: (\n providerId: string,\n mode?: 'login' | 'register' | 'link',\n returnUrl?: string,\n ) => string;\n onUnlinkRequest: (provider: OAuthProvider) => void;\n}\n\nexport function LinkedAccountsSection({\n providers,\n unlinkingProvider,\n getAuthorizeUrl,\n onUnlinkRequest,\n}: LinkedAccountsSectionProps) {\n const { t } = useTranslation();\n\n if (providers.length === 0) {\n return null;\n }\n\n return (\n <TRCard.Root variant=\"outlined\">\n <TRCard.Header className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\">\n <TRCard.Title>{t('profile.linkedAccounts.title')}</TRCard.Title>\n <TRCard.Description>\n {t('profile.linkedAccounts.description')}\n </TRCard.Description>\n </TRCard.Header>\n <TRCard.Content className=\"divide-y divide-tinyrack-border p-0\">\n {providers.map((provider) => (\n <SecurityRow\n actions={\n provider.linked ? (\n <TRButton\n appearance=\"ghost\"\n intent=\"danger\"\n loading={unlinkingProvider === provider.id}\n loadingLabel={t('profile.linkedAccounts.unlinking')}\n onClick={() => onUnlinkRequest(provider)}\n type=\"button\"\n uiSize=\"sm\"\n >\n {unlinkingProvider !== provider.id\n ? t('profile.linkedAccounts.unlink')\n : undefined}\n </TRButton>\n ) : (\n <TRLinkButton\n appearance=\"outline\"\n intent=\"neutral\"\n render={\n <a\n href={getAuthorizeUrl(provider.id, 'link', '/profile')}\n />\n }\n uiSize=\"sm\"\n >\n {t('profile.linkedAccounts.link')}\n </TRLinkButton>\n )\n }\n active={provider.linked}\n /*\n The real brand mark, not a generic link glyph. The sign-in screen\n shows the Google logo; showing a chain link for the same provider\n on a screen the user reaches minutes later reads as a different\n product.\n */\n icon={\n <ProviderMark\n className=\"size-tinyrack-lg\"\n iconUrl={provider.icon_url}\n providerId={provider.id}\n />\n }\n key={provider.id}\n status={\n provider.linked\n ? t('profile.linkedAccounts.connected')\n : t('profile.linkedAccounts.notConnected')\n }\n title={provider.display_name}\n />\n ))}\n </TRCard.Content>\n </TRCard.Root>\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { FingerprintIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { SecurityRow } from '#frontend/components/profile/security-row.tsx';\n\ntype PasskeyModalType = 'setup' | 'manage' | null;\n\ninterface PasskeySectionProps {\n passkeyCount: number;\n onOpenModal: (type: PasskeyModalType) => void;\n}\n\nexport function PasskeySection({\n passkeyCount,\n onOpenModal,\n}: PasskeySectionProps) {\n const { t } = useTranslation();\n const hasPasskeys = passkeyCount > 0;\n\n return (\n <SecurityRow\n actions={\n <TRButton\n appearance=\"ghost\"\n intent=\"primary\"\n onClick={() => onOpenModal(hasPasskeys ? 'manage' : 'setup')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {hasPasskeys ? t('profile.passkey.manage') : t('profile.passkey.add')}\n </TRButton>\n }\n active={hasPasskeys}\n icon={FingerprintIcon}\n status={\n hasPasskeys\n ? t('profile.passkey.status.enabled', { count: passkeyCount })\n : t('profile.passkey.status.disabled')\n }\n title={t('profile.passkey.title')}\n />\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { TRTooltip } from '@tinyrack/ui/components/tooltip';\nimport { InfoIcon, KeyRoundIcon, SettingsIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { SecurityRow } from '#frontend/components/profile/security-row.tsx';\n\ntype PasswordModalType = 'set' | 'change' | 'remove' | null;\n\ninterface PasswordSectionProps {\n hasPassword: boolean;\n hasLinkedOAuth: boolean;\n isConfigManaged: boolean;\n hasSecondFactorOnly: boolean;\n onOpenModal: (type: PasswordModalType) => void;\n}\n\nexport function PasswordSection({\n hasPassword,\n hasLinkedOAuth,\n isConfigManaged,\n hasSecondFactorOnly,\n onOpenModal,\n}: PasswordSectionProps) {\n const { t } = useTranslation();\n\n return (\n <SecurityRow\n actions={\n isConfigManaged ? undefined : hasPassword ? (\n <>\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-password-change\"\n intent=\"primary\"\n onClick={() => onOpenModal('change')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.change')}\n </TRButton>\n {hasLinkedOAuth ? (\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-password-remove\"\n intent=\"danger\"\n onClick={() => onOpenModal('remove')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.remove')}\n </TRButton>\n ) : null}\n {!hasLinkedOAuth && hasSecondFactorOnly && (\n <TRTooltip.Root>\n <TRTooltip.Trigger\n render={\n <TRButton\n appearance=\"ghost\"\n disabled\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.remove')}\n </TRButton>\n }\n />\n <TRTooltip.Portal>\n <TRTooltip.Positioner>\n <TRTooltip.Popup className=\"max-w-tinyrack-measure-lg rounded-tinyrack-md border border-tinyrack-border bg-tinyrack-surface p-tinyrack-md text-tinyrack-text text-tinyrack-xs shadow-tinyrack-overlay\">\n <div className=\"flex items-start gap-tinyrack-sm\">\n <InfoIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-warning-foreground\"\n />\n <TRText as=\"div\" variant=\"caption\">\n {t('profile.password.removeDisabledReason')}\n </TRText>\n </div>\n </TRTooltip.Popup>\n </TRTooltip.Positioner>\n </TRTooltip.Portal>\n </TRTooltip.Root>\n )}\n </>\n ) : (\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-password-set\"\n intent=\"primary\"\n onClick={() => onOpenModal('set')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.set')}\n </TRButton>\n )\n }\n active={hasPassword}\n icon={KeyRoundIcon}\n note={\n isConfigManaged ? (\n <TRText\n as=\"div\"\n className=\"flex items-center gap-tinyrack-xs\"\n color=\"muted\"\n variant=\"caption\"\n >\n <SettingsIcon aria-hidden className=\"size-tinyrack-md shrink-0\" />\n <TRText as=\"span\" color=\"muted\" variant=\"caption\">\n {t('profile.password.configManaged')}\n </TRText>\n </TRText>\n ) : undefined\n }\n status={\n hasPassword\n ? t('profile.password.status.set')\n : t('profile.password.status.notSet')\n }\n title={t('profile.password.title')}\n />\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { ShieldCheckIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { SecurityRow } from '#frontend/components/profile/security-row.tsx';\n\ntype TotpModalType = 'setup' | 'disable' | 'regenerate' | null;\n\ninterface TotpSectionProps {\n totpEnabled: boolean;\n recoveryCodesMissing: boolean;\n onOpenModal: (type: TotpModalType) => void;\n}\n\nexport function TotpSection({\n totpEnabled,\n recoveryCodesMissing,\n onOpenModal,\n}: TotpSectionProps) {\n const { t } = useTranslation();\n\n return (\n <SecurityRow\n actions={\n totpEnabled ? (\n <>\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-totp-regenerate\"\n intent=\"primary\"\n onClick={() => onOpenModal('regenerate')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.regenerate')}\n </TRButton>\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-totp-disable\"\n intent=\"danger\"\n onClick={() => onOpenModal('disable')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.disable')}\n </TRButton>\n </>\n ) : (\n <TRButton\n appearance=\"ghost\"\n data-testid=\"profile-totp-enable\"\n intent=\"primary\"\n onClick={() => onOpenModal('setup')}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.enable')}\n </TRButton>\n )\n }\n active={totpEnabled}\n icon={ShieldCheckIcon}\n status={\n totpEnabled\n ? recoveryCodesMissing\n ? t('profile.totp.status.recoveryCodesMissing')\n : t('profile.totp.status.enabled')\n : t('profile.totp.status.disabled')\n }\n title={t('profile.totp.title')}\n />\n );\n}\n","import { CircleAlertIcon, InfoIcon, TriangleAlertIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\n\ntype AlertBannerVariant = 'error' | 'warning' | 'info';\n\ninterface AlertBannerProps {\n variant: AlertBannerVariant;\n children: ReactNode;\n}\n\nconst variantIcons: Record<AlertBannerVariant, typeof TriangleAlertIcon> = {\n error: CircleAlertIcon,\n warning: TriangleAlertIcon,\n info: InfoIcon,\n};\n\n/**\n * Status banner built on the design system's {@link Alert} (which wraps\n * `TRAlert`). Kept as a thin alias so existing call sites and the\n * `alert-banner-*` test ids stay stable while the visuals come from\n * `@tinyrack/ui`.\n */\nexport function AlertBanner({ variant, children }: AlertBannerProps) {\n return (\n <Alert\n data-testid={`alert-banner-${variant}`}\n icon={variantIcons[variant]}\n type={variant}\n >\n {children}\n </Alert>\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { Link2OffIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\n\ninterface UnlinkOAuthModalProps {\n isOpen: boolean;\n onClose: () => void;\n providerName: string;\n isPending: boolean;\n onConfirm: () => Promise<void>;\n}\n\nexport function UnlinkOAuthModal({\n isOpen,\n onClose,\n providerName,\n isPending,\n onConfirm,\n}: UnlinkOAuthModalProps) {\n const { t } = useTranslation();\n const [error, setError] = useState<string | null>(null);\n\n const handleClose = () => {\n if (isPending) return;\n setError(null);\n onClose();\n };\n\n const handleConfirm = async () => {\n setError(null);\n try {\n await onConfirm();\n handleClose();\n } catch {\n setError(t('profile.linkedAccounts.unlinkError'));\n }\n };\n\n return (\n <Modal\n description={t('profile.linkedAccounts.unlinkModal.description', {\n provider: providerName,\n })}\n icon={Link2OffIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isPending}\n title={t('profile.linkedAccounts.unlinkModal.title')}\n variant=\"destructive\"\n >\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural modal stack containing DS alerts and actions. */}\n <div className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\">\n <AlertBanner variant=\"warning\">\n {t('profile.linkedAccounts.unlinkModal.warning', {\n provider: providerName,\n })}\n </AlertBanner>\n\n {error && <AlertBanner variant=\"error\">{error}</AlertBanner>}\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"unlink-oauth-cancel\"\n disabled={isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.linkedAccounts.unlinkModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"unlink-oauth-unlink\"\n disabled={isPending}\n intent=\"danger\"\n loading={isPending}\n loadingLabel={t('profile.linkedAccounts.unlinking')}\n onClick={handleConfirm}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.linkedAccounts.unlink')}\n </TRButton>\n </ModalActions>\n </div>\n </Modal>\n );\n}\n","import { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { useTranslation } from 'react-i18next';\n\nfunction InfoRow({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex items-center justify-between gap-tinyrack-lg px-tinyrack-lg py-tinyrack-md\">\n <TRText className=\"shrink-0\" color=\"muted\" variant=\"caption\">\n {label}\n </TRText>\n <TRText truncate variant=\"bodySm\" weight=\"medium\">\n {value}\n </TRText>\n </div>\n );\n}\n\ninterface UserInfoSectionProps {\n user: {\n sub: string;\n email: string;\n };\n}\n\nexport function UserInfoSection({ user }: UserInfoSectionProps) {\n const { t } = useTranslation();\n\n return (\n <TRCard.Root variant=\"outlined\">\n <TRCard.Header className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\">\n <TRCard.Title>{t('profile.account.title')}</TRCard.Title>\n <TRCard.Description>\n {t('profile.account.description')}\n </TRCard.Description>\n </TRCard.Header>\n <TRCard.Content className=\"divide-y divide-tinyrack-border p-0\">\n <InfoRow label={t('profile.id.label')} value={user.sub} />\n <InfoRow label={t('profile.email.label')} value={user.email} />\n </TRCard.Content>\n </TRCard.Root>\n );\n}\n","import { Toaster } from '#frontend/components/ui/toaster.tsx';\nimport { ShellFooter } from '#frontend/features/layout/shell-footer.tsx';\nimport { ShellHeaderBar } from '#frontend/features/layout/shell-header-bar.tsx';\n\ntype AppLayoutProps = {\n children: React.ReactNode;\n /** Trailing header action — the profile's sign-out. */\n headerActions?: React.ReactNode;\n};\n\n/**\n * The shell for signed-in screens that are not the admin console.\n *\n * Shares the auth surface's vocabulary — the canvas, the header bar, the\n * entrance, the token-owned rhythm — but drops the brand panel and runs full\n * width. A settings page is a list of cards to work through, not a single task\n * to focus on, so surrendering the leading columns to a permanent brand column\n * would be paying prime space for decoration.\n *\n * Deliberately not extracted into a wrapper shared with `AuthLayout`: that one\n * is a twelve-column grid because it has a panel to place, and its content\n * stack carries a mobile-only card that would be a box inside a box here.\n * The genuinely shared piece is `ShellHeaderBar`.\n */\nexport function AppLayout({ children, headerActions }: AppLayoutProps) {\n return (\n // tinyrack-check-ignore-next-line components/no-native-text -- Structural application shell; page content owns descendant typography.\n <div className=\"flex min-h-dvh flex-col bg-tinyrack-surface\">\n {/*\n Profile hosts the TOTP recovery-codes step, which confirms a copy with\n a toast. Without a viewport here that confirmation would go nowhere on\n the one screen where losing the codes is unrecoverable.\n */}\n <Toaster />\n <ShellHeaderBar actions={headerActions} brand />\n <main className=\"flex flex-1 justify-center px-tinyrack-lg py-tinyrack-xl\">\n {/*\n The stack owns vertical rhythm so screens compose as a flat list of\n blocks instead of each one hand-rolling margins that drift apart.\n */}\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural content stack; page content owns descendant typography. */}\n <div className=\"auth-enter flex w-full max-w-tinyrack-overlay-width-md flex-col gap-tinyrack-xl\">\n {children}\n </div>\n </main>\n <ShellFooter />\n </div>\n );\n}\n","import { mutationOptions } from '@tanstack/react-query';\nimport type { InferRequestType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\n/**\n * Set password for OAuth-only users\n */\nexport type SetPasswordParams = InferRequestType<\n (typeof client.api.user.password)['$post']\n>['json'];\n\nexport const setPasswordMutationOptions = mutationOptions({\n mutationFn: async (values: SetPasswordParams) => {\n const res = await client.api.user.password.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Change password for users who already have a password\n */\nexport type ChangePasswordParams = InferRequestType<\n (typeof client.api.user.password)['$put']\n>['json'];\n\nexport const changePasswordMutationOptions = mutationOptions({\n mutationFn: async (values: ChangePasswordParams) => {\n const res = await client.api.user.password.$put({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Remove password (only if user has at least one\n * OAuth account linked)\n */\nexport type RemovePasswordParams = InferRequestType<\n (typeof client.api.user.password)['$delete']\n>['json'];\n\nexport const removePasswordMutationOptions = mutationOptions({\n mutationFn: async (values: RemovePasswordParams) => {\n const res = await client.api.user.password.$delete({\n json: values,\n });\n return jsonOk(res);\n },\n});\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { KeyRoundIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { changePasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface ChangePasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function ChangePasswordModal({\n isOpen,\n onClose,\n}: ChangePasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { data: configData } = useSuspenseQuery(appConfigQueryOptions);\n const passwordPolicy = configData.auth.password.policy;\n\n const schema = useMemo(\n () =>\n z\n .object({\n currentPassword: z.string().min(1, t('validation.password.required')),\n newPassword: z\n .string()\n .min(\n passwordPolicy.min_length,\n t('validation.password.min', {\n count: passwordPolicy.min_length,\n }),\n )\n .max(\n passwordPolicy.max_length,\n t('validation.password.max', {\n count: passwordPolicy.max_length,\n }),\n ),\n confirmPassword: z.string(),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: t('validation.confirmPassword.mismatch'),\n path: ['confirmPassword'],\n }),\n [passwordPolicy.max_length, passwordPolicy.min_length, t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n },\n });\n\n const mutation = useMutation({\n ...changePasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({\n current_password: data.currentPassword,\n new_password: data.newPassword,\n });\n } catch (err) {\n if (\n err instanceof IssuaryError &&\n err.code === 'INVALID_CURRENT_PASSWORD'\n ) {\n form.setError('currentPassword', {\n message: t('profile.password.changeModal.invalidCurrent'),\n });\n } else {\n form.setError('root', {\n message: t('profile.password.changeModal.error'),\n });\n }\n }\n });\n\n return (\n <Modal\n description={t('profile.password.changeModal.description')}\n icon={KeyRoundIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.changeModal.title')}\n >\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleSubmit}\n >\n <AuthField\n error={form.formState.errors.currentPassword}\n errorTestId=\"change-password-error-currentPassword\"\n id=\"current-password\"\n label={t('profile.password.changeModal.currentPassword')}\n placeholder={t(\n 'profile.password.changeModal.currentPasswordPlaceholder',\n )}\n {...form.register('currentPassword')}\n type=\"password\"\n />\n <AuthField\n error={form.formState.errors.newPassword}\n errorTestId=\"change-password-error-newPassword\"\n id=\"new-password-change\"\n label={t('profile.password.changeModal.newPassword')}\n placeholder={t('profile.password.changeModal.newPasswordPlaceholder')}\n {...form.register('newPassword')}\n type=\"password\"\n />\n <AuthField\n error={form.formState.errors.confirmPassword}\n errorTestId=\"change-password-error-confirmPassword\"\n id=\"confirm-password-change\"\n label={t('profile.password.changeModal.confirmPassword')}\n placeholder={t(\n 'profile.password.changeModal.confirmPasswordPlaceholder',\n )}\n {...form.register('confirmPassword')}\n type=\"password\"\n />\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"change-password-cancel\"\n disabled={mutation.isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.changeModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"change-password-submit\"\n disabled={mutation.isPending}\n intent=\"primary\"\n loading={mutation.isPending}\n loadingLabel={t('profile.password.changeModal.submitting')}\n type=\"submit\"\n uiSize=\"sm\"\n >\n {mutation.isPending\n ? undefined\n : t('profile.password.changeModal.submit')}\n </TRButton>\n </ModalActions>\n </TRForm>\n </Modal>\n );\n}\n","import { mutationOptions } from '@tanstack/react-query';\nimport type { InferResponseType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\nexport type AccountDeletionResponse = InferResponseType<\n (typeof client.api.user)['$delete'],\n 200\n>;\n\nexport const deleteAccountMutationOptions = mutationOptions({\n mutationFn: async () => {\n const res = await client.api.user.$delete();\n return jsonOk(res);\n },\n});\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useRouter } from '@tanstack/react-router';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { Trash2Icon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { deleteAccountMutationOptions } from '#frontend/queries/account.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface DeleteAccountModalProps {\n isOpen: boolean;\n onClose: () => void;\n retentionDays: number;\n}\n\nexport function DeleteAccountModal({\n isOpen,\n onClose,\n retentionDays,\n}: DeleteAccountModalProps) {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n confirmation: z\n .string()\n .refine(\n (val) =>\n val.toLowerCase() ===\n t('profile.deleteAccount.modal.confirmPlaceholder').toLowerCase(),\n { message: t('validation.confirmText.mismatch') },\n ),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { confirmation: '' },\n });\n\n const mutation = useMutation({\n ...deleteAccountMutationOptions,\n onSuccess: async () => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({ to: '/login' });\n },\n });\n\n const handleClose = () => {\n if (mutation.isPending) return;\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async () => {\n try {\n await mutation.mutateAsync();\n } catch {\n form.setError('root', {\n message: t('profile.deleteAccount.error'),\n });\n }\n });\n\n return (\n <Modal\n icon={Trash2Icon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={mutation.isPending}\n title={t('profile.deleteAccount.modal.title')}\n variant=\"destructive\"\n >\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleSubmit}\n >\n <AlertBanner variant=\"error\">\n <TRText as=\"span\" variant=\"bodySm\">\n {t('profile.deleteAccount.modal.description', {\n days: retentionDays,\n })}\n </TRText>\n <br />\n <TRText\n as=\"span\"\n className=\"opacity-tinyrack-hover\"\n variant=\"caption\"\n >\n {t('profile.deleteAccount.modal.warning')}\n </TRText>\n </AlertBanner>\n\n <AuthField\n autoComplete=\"off\"\n error={form.formState.errors.confirmation}\n errorTestId=\"delete-account-error\"\n id=\"delete-confirmation\"\n label={t('profile.deleteAccount.modal.confirmLabel')}\n placeholder={t('profile.deleteAccount.modal.confirmPlaceholder')}\n {...form.register('confirmation')}\n type=\"text\"\n />\n\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"delete-account-cancel\"\n disabled={mutation.isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.deleteAccount.modal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"delete-account-submit\"\n disabled={mutation.isPending}\n intent=\"danger\"\n loading={mutation.isPending}\n loadingLabel={t('profile.deleteAccount.modal.confirming')}\n type=\"submit\"\n uiSize=\"sm\"\n >\n {mutation.isPending\n ? undefined\n : t('profile.deleteAccount.modal.confirm')}\n </TRButton>\n </ModalActions>\n </TRForm>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { ShieldCheckIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport { disableTotpMutationOptions } from '#frontend/queries/totp.ts';\n\ninterface DisableTotpModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function DisableTotpModal({ isOpen, onClose }: DisableTotpModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n code: z\n .string()\n .length(6, t('validation.totp.length'))\n .regex(/^\\d{6}$/, t('validation.totp.digits')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { code: '' },\n });\n\n const mutation = useMutation({\n ...disableTotpMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({ code: data.code });\n } catch (error) {\n if (error instanceof IssuaryError) {\n if (error.code === 'CANNOT_REMOVE_LAST_SECOND_FACTOR') {\n form.setError('code', {\n message: t(\n 'profile.totp.disableModal.cannotRemoveLastSecondFactor',\n ),\n });\n return;\n }\n }\n form.setError('code', {\n message: t('profile.totp.disableModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.totp.disableModal.description')}\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.totp.disableModal.title')}\n variant=\"destructive\"\n >\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleSubmit}\n >\n <AlertBanner variant=\"warning\">\n {t('profile.totp.disableModal.warning')}\n </AlertBanner>\n\n <AuthField\n autoComplete=\"one-time-code\"\n error={form.formState.errors.code}\n errorTestId=\"disable-totp-error\"\n id=\"disable-totp-code\"\n inputMode=\"numeric\"\n label={t('profile.totp.disableModal.codeLabel')}\n maxLength={6}\n pattern=\"[0-9]*\"\n placeholder=\"000000\"\n {...form.register('code')}\n type=\"text\"\n />\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"disable-totp-cancel\"\n disabled={mutation.isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.disableModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"disable-totp-submit\"\n disabled={mutation.isPending}\n intent=\"danger\"\n loading={mutation.isPending}\n loadingLabel={t('profile.totp.disableModal.disabling')}\n type=\"submit\"\n uiSize=\"sm\"\n >\n {mutation.isPending\n ? undefined\n : t('profile.totp.disableModal.disable')}\n </TRButton>\n </ModalActions>\n </TRForm>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { TRBadge } from '@tinyrack/ui/components/badge';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { TRSpinner } from '@tinyrack/ui/components/spinner';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport {\n CloudIcon,\n FingerprintIcon,\n PencilIcon,\n SmartphoneIcon,\n Trash2Icon,\n} from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport { queryKeys } from '#frontend/queries/keys.ts';\nimport {\n deletePasskeyMutationOptions,\n getPasskeysQueryOptions,\n type PasskeyInfo,\n renamePasskeyMutationOptions,\n} from '#frontend/queries/passkey.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface ManagePasskeysModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddNew: () => void;\n}\n\nexport function ManagePasskeysModal({\n isOpen,\n onClose,\n onAddNew,\n}: ManagePasskeysModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [editingPasskey, setEditingPasskey] = useState<PasskeyInfo | null>(\n null,\n );\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [confirmingDeleteId, setConfirmingDeleteId] = useState<string | null>(\n null,\n );\n const [deleteError, setDeleteError] = useState<string | null>(null);\n\n const { data: passkeysData, isLoading } = useQuery({\n ...getPasskeysQueryOptions,\n enabled: isOpen,\n });\n\n const deleteMutation = useMutation({\n ...deletePasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n onSettled: () => {\n setDeletingId(null);\n },\n });\n\n const handleClose = useCallback(() => {\n setEditingPasskey(null);\n setDeletingId(null);\n setConfirmingDeleteId(null);\n setDeleteError(null);\n onClose();\n }, [onClose]);\n\n const handleRequestDelete = (passkey: PasskeyInfo) => {\n setConfirmingDeleteId(passkey.id);\n setDeleteError(null);\n };\n\n const handleCancelDelete = () => {\n setConfirmingDeleteId(null);\n setDeleteError(null);\n };\n\n const handleConfirmDelete = async (passkey: PasskeyInfo) => {\n setDeletingId(passkey.id);\n setConfirmingDeleteId(null);\n try {\n await deleteMutation.mutateAsync({ id: passkey.id });\n } catch (error) {\n if (error instanceof IssuaryError) {\n if (error.code === 'CANNOT_REMOVE_LAST_SECOND_FACTOR') {\n setDeleteError(\n t('profile.passkey.manageModal.cannotRemoveLastSecondFactor'),\n );\n return;\n }\n }\n setDeleteError(t('profile.passkey.manageModal.deleteError'));\n }\n };\n\n const formatDate = (dateString: string) => {\n return new Date(dateString).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n };\n\n const passkeys = passkeysData?.passkeys || [];\n\n return (\n <Modal\n icon={FingerprintIcon}\n isOpen={isOpen}\n onClose={handleClose}\n size=\"lg\"\n title={t('profile.passkey.manageModal.title')}\n >\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural modal body containing DS feedback and passkey rows. */}\n <div className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-sm\">\n {deleteError && (\n <AlertBanner variant=\"error\">{deleteError}</AlertBanner>\n )}\n\n {isLoading && (\n <div className=\"flex justify-center py-tinyrack-xl\">\n <TRSpinner uiSize=\"md\" />\n </div>\n )}\n\n {!isLoading && passkeys.length === 0 && (\n <TRText\n align=\"center\"\n className=\"py-tinyrack-xl\"\n color=\"muted\"\n data-testid=\"passkeys-empty\"\n variant=\"bodySm\"\n >\n {t('profile.passkey.manageModal.noPasskeys')}\n </TRText>\n )}\n\n {!isLoading && passkeys.length > 0 && (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural list containing PasskeyItem components. */\n <div className=\"flex flex-col gap-tinyrack-sm\">\n {passkeys.map((passkey) => (\n <PasskeyItem\n formatDate={formatDate}\n isConfirmingDelete={confirmingDeleteId === passkey.id}\n isDeleting={deletingId === passkey.id}\n isEditing={editingPasskey?.id === passkey.id}\n key={passkey.id}\n onCancelDelete={handleCancelDelete}\n onCancelEdit={() => setEditingPasskey(null)}\n onConfirmDelete={() => handleConfirmDelete(passkey)}\n onEdit={() => setEditingPasskey(passkey)}\n onRequestDelete={() => handleRequestDelete(passkey)}\n passkey={passkey}\n />\n ))}\n </div>\n )}\n </div>\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"manage-passkeys-close\"\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.manageModal.close')}\n </TRButton>\n <TRButton\n data-testid=\"manage-passkeys-add-new\"\n intent=\"primary\"\n onClick={() => {\n handleClose();\n onAddNew();\n }}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.manageModal.addNew')}\n </TRButton>\n </ModalActions>\n </Modal>\n );\n}\n\ninterface PasskeyItemProps {\n passkey: PasskeyInfo;\n isDeleting: boolean;\n isEditing: boolean;\n isConfirmingDelete: boolean;\n onEdit: () => void;\n onCancelEdit: () => void;\n onRequestDelete: () => void;\n onConfirmDelete: () => void;\n onCancelDelete: () => void;\n formatDate: (dateString: string) => string;\n}\n\nfunction PasskeyItem({\n passkey,\n isDeleting,\n isEditing,\n isConfirmingDelete,\n onEdit,\n onCancelEdit,\n onRequestDelete,\n onConfirmDelete,\n onCancelDelete,\n formatDate,\n}: PasskeyItemProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n name: z\n .string()\n .min(1, t('validation.passkey.name.required'))\n .max(100, t('validation.passkey.name.max')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { name: passkey.name || '' },\n });\n\n const renameMutation = useMutation({\n ...renamePasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n onCancelEdit();\n },\n });\n\n const handleRename = form.handleSubmit(async (data) => {\n try {\n await renameMutation.mutateAsync({ id: passkey.id, name: data.name });\n } catch {\n form.setError('name', {\n message: t('profile.passkey.manageModal.renameError'),\n });\n }\n });\n\n if (isEditing) {\n return (\n <TRForm\n className=\"flex flex-col gap-tinyrack-xs rounded-tinyrack-md bg-tinyrack-surface-muted p-tinyrack-sm\"\n onSubmit={handleRename}\n >\n <AuthField\n data-testid=\"passkey-rename-input\"\n error={form.formState.errors.name}\n errorTestId=\"passkey-rename-error\"\n hideLabel\n label={t('profile.passkey.manageModal.nameLabel')}\n placeholder={t('profile.passkey.manageModal.namePlaceholder')}\n {...form.register('name')}\n type=\"text\"\n />\n <div className=\"flex justify-end gap-tinyrack-xs\">\n <TRButton\n appearance=\"ghost\"\n disabled={renameMutation.isPending}\n onClick={() => {\n form.reset();\n onCancelEdit();\n }}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.manageModal.cancelEdit')}\n </TRButton>\n <TRButton\n disabled={renameMutation.isPending}\n intent=\"primary\"\n type=\"submit\"\n uiSize=\"sm\"\n >\n {renameMutation.isPending\n ? t('profile.passkey.manageModal.saving')\n : t('profile.passkey.manageModal.save')}\n </TRButton>\n </div>\n </TRForm>\n );\n }\n\n if (isConfirmingDelete) {\n return (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural inline confirmation row; copy uses TRText and actions are DS controls. */\n <div className=\"flex items-center justify-between rounded-tinyrack-md border border-tinyrack-danger-border bg-tinyrack-danger-surface p-tinyrack-sm text-tinyrack-danger-foreground\">\n <div className=\"flex items-center gap-tinyrack-sm\">\n <Trash2Icon className=\"size-tinyrack-lg\" />\n <TRText color=\"danger\" variant=\"caption\">\n {t('profile.passkey.manageModal.deleteConfirmInline')}\n </TRText>\n </div>\n <div className=\"flex gap-tinyrack-xs\">\n <TRButton\n appearance=\"ghost\"\n onClick={onCancelDelete}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.manageModal.cancelEdit')}\n </TRButton>\n <TRButton\n intent=\"danger\"\n onClick={onConfirmDelete}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.manageModal.delete')}\n </TRButton>\n </div>\n </div>\n );\n }\n\n return (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural passkey row; visible copy uses TRText. */\n <div\n className=\"flex items-center justify-between rounded-tinyrack-md bg-tinyrack-surface-muted p-tinyrack-sm\"\n data-testid=\"passkey-item\"\n >\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural passkey identity group. */}\n <div className=\"flex items-center gap-tinyrack-sm\">\n {passkey.device_type === 'multiDevice' ? (\n <CloudIcon className=\"size-tinyrack-lg text-tinyrack-primary-foreground\" />\n ) : (\n <SmartphoneIcon className=\"size-tinyrack-lg text-tinyrack-primary-foreground\" />\n )}\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural identity stack containing TRText parts. */}\n <div>\n <TRText as=\"div\" variant=\"caption\" weight=\"medium\">\n {passkey.name || t('profile.passkey.manageModal.unnamedPasskey')}\n </TRText>\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural metadata row containing TRText and an optional badge. */}\n <div className=\"flex items-center gap-tinyrack-xs\">\n <TRText color=\"muted\" variant=\"caption\">\n {t('profile.passkey.manageModal.createdAt', {\n date: formatDate(passkey.created_at),\n })}\n </TRText>\n {passkey.backed_up && (\n <TRBadge uiSize=\"md\" variant=\"success\">\n {t('profile.passkey.manageModal.backedUp')}\n </TRBadge>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-tinyrack-xs\">\n <TRButton\n appearance=\"ghost\"\n aria-label={t('profile.passkey.manageModal.rename')}\n onClick={onEdit}\n type=\"button\"\n uiSize=\"sm\"\n >\n <PencilIcon className=\"size-tinyrack-lg\" />\n </TRButton>\n <TRButton\n appearance=\"ghost\"\n aria-label={t('profile.passkey.manageModal.delete')}\n disabled={isDeleting}\n intent=\"danger\"\n loading={isDeleting}\n onClick={onRequestDelete}\n type=\"button\"\n uiSize=\"sm\"\n >\n {isDeleting ? undefined : <Trash2Icon className=\"size-tinyrack-lg\" />}\n </TRButton>\n </div>\n </div>\n );\n}\n","import {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { useRouter } from '@tanstack/react-router';\nimport { ShieldCheckIcon } from 'lucide-react';\nimport { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RecoveryCodesStep } from '#frontend/components/totp/recovery-codes-step.tsx';\nimport { VerifyStep } from '#frontend/components/totp/verify-step.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal } from '#frontend/components/ui/modal.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n type RegenerateTotpRecoveryCodesResponse,\n regenerateTotpRecoveryCodesMutationOptions,\n} from '#frontend/queries/totp.ts';\n\ninterface RegenerateTotpRecoveryCodesModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype RegenerateStep = 'verify' | 'recovery';\n\nexport function RegenerateTotpRecoveryCodesModal({\n isOpen,\n onClose,\n}: RegenerateTotpRecoveryCodesModalProps) {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n const [step, setStep] = useState<RegenerateStep>('verify');\n const [response, setResponse] =\n useState<RegenerateTotpRecoveryCodesResponse | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const mutation = useMutation({\n ...regenerateTotpRecoveryCodesMutationOptions,\n onSuccess: async (data) => {\n setResponse(data);\n setStep('recovery');\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const reset = useCallback(() => {\n setStep('verify');\n setResponse(null);\n setErrorMessage(null);\n mutation.reset();\n }, [mutation]);\n\n const handleClose = useCallback(() => {\n reset();\n onClose();\n }, [onClose, reset]);\n\n const handleVerify = useCallback(\n async (code: string) => {\n setErrorMessage(null);\n\n try {\n await mutation.mutateAsync({ code });\n } catch (error) {\n if (error instanceof IssuaryError) {\n if (error.code === 'INVALID_TOTP_CODE') {\n throw error;\n }\n\n if (error.code === 'UNAUTHORIZED') {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({ to: '/login' });\n return;\n }\n\n if (\n error.code === 'TOTP_NOT_ENABLED' ||\n error.code === 'VALIDATION_ERROR'\n ) {\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n return;\n }\n }\n\n setErrorMessage(t('profile.totp.regenerateModal.unexpectedError'));\n }\n },\n [handleClose, mutation, queryClient, router, t],\n );\n\n if (!appConfig.auth.password.totp.enabled) {\n return null;\n }\n\n return (\n <Modal\n description={\n step === 'verify'\n ? t('profile.totp.regenerateModal.description')\n : t('profile.totp.regenerateModal.recoveryDescription')\n }\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={step === 'recovery'}\n size=\"sm\"\n title={\n step === 'verify'\n ? t('profile.totp.regenerateModal.title')\n : t('profile.totp.regenerateModal.recoveryTitle')\n }\n >\n {step === 'verify' ? (\n /* tinyrack-check-ignore-next-line components/no-native-text -- Structural verification-step host containing DS alert and form components. */\n <div className=\"mt-tinyrack-lg\">\n {errorMessage && (\n <div className=\"mb-tinyrack-md\">\n <AlertBanner variant=\"error\">{errorMessage}</AlertBanner>\n </div>\n )}\n <VerifyStep\n invalidMessage={t('profile.totp.regenerateModal.error')}\n isPending={mutation.isPending}\n onSubmit={handleVerify}\n pendingText={t('profile.totp.regenerateModal.submitting')}\n submitLabel={t('profile.totp.regenerateModal.submit')}\n />\n </div>\n ) : (\n <div className=\"mt-tinyrack-lg\">\n <RecoveryCodesStep\n onConfirm={handleClose}\n recoveryCodes={response?.recovery_codes ?? []}\n />\n </div>\n )}\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { KeyRoundIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { IssuaryError } from '#frontend/libs/error.ts';\nimport { removePasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface RemovePasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function RemovePasswordModal({\n isOpen,\n onClose,\n}: RemovePasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n currentPassword: z.string().min(1, t('validation.password.required')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { currentPassword: '' },\n });\n\n const mutation = useMutation({\n ...removePasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({\n current_password: data.currentPassword,\n });\n } catch (err) {\n if (err instanceof IssuaryError) {\n if (err.code === 'INVALID_CURRENT_PASSWORD') {\n form.setError('currentPassword', {\n message: t('profile.password.removeModal.invalidCurrent'),\n });\n return;\n }\n if (err.code === 'CANNOT_REMOVE_LAST_AUTH_METHOD') {\n form.setError('root', {\n message: t('profile.password.removeModal.noOAuth'),\n });\n return;\n }\n if (err.code === 'CANNOT_REMOVE_PASSWORD_WITH_SECOND_FACTOR_ONLY') {\n form.setError('root', {\n message: t('profile.password.removeModal.noOAuthWith2FA'),\n });\n return;\n }\n }\n form.setError('root', {\n message: t('profile.password.removeModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.password.removeModal.description')}\n icon={KeyRoundIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.removeModal.title')}\n variant=\"destructive\"\n >\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleSubmit}\n >\n <AuthField\n error={form.formState.errors.currentPassword}\n errorTestId=\"remove-password-error\"\n id=\"current-password-remove\"\n label={t('profile.password.removeModal.currentPassword')}\n placeholder={t(\n 'profile.password.removeModal.currentPasswordPlaceholder',\n )}\n {...form.register('currentPassword')}\n type=\"password\"\n />\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"remove-password-cancel\"\n disabled={mutation.isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.removeModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"remove-password-submit\"\n disabled={mutation.isPending}\n intent=\"danger\"\n loading={mutation.isPending}\n loadingLabel={t('profile.password.removeModal.submitting')}\n type=\"submit\"\n uiSize=\"sm\"\n >\n {mutation.isPending\n ? undefined\n : t('profile.password.removeModal.submit')}\n </TRButton>\n </ModalActions>\n </TRForm>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { KeyRoundIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { setPasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface SetPasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function SetPasswordModal({ isOpen, onClose }: SetPasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { data: configData } = useSuspenseQuery(appConfigQueryOptions);\n const passwordPolicy = configData.auth.password.policy;\n\n const schema = useMemo(\n () =>\n z\n .object({\n password: z\n .string()\n .min(\n passwordPolicy.min_length,\n t('validation.password.min', {\n count: passwordPolicy.min_length,\n }),\n )\n .max(\n passwordPolicy.max_length,\n t('validation.password.max', {\n count: passwordPolicy.max_length,\n }),\n ),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: t('validation.confirmPassword.mismatch'),\n path: ['confirmPassword'],\n }),\n [passwordPolicy.max_length, passwordPolicy.min_length, t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { password: '', confirmPassword: '' },\n });\n\n const mutation = useMutation({\n ...setPasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({ password: data.password });\n } catch (error) {\n void error;\n form.setError('root', {\n message: t('profile.password.setModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.password.setModal.description')}\n icon={KeyRoundIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.setModal.title')}\n >\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleSubmit}\n >\n <AuthField\n error={form.formState.errors.password}\n errorTestId=\"set-password-error-password\"\n id=\"new-password\"\n label={t('profile.password.setModal.newPassword')}\n placeholder={t('profile.password.setModal.newPasswordPlaceholder')}\n {...form.register('password')}\n type=\"password\"\n />\n <AuthField\n error={form.formState.errors.confirmPassword}\n errorTestId=\"set-password-error-confirmPassword\"\n id=\"confirm-password\"\n label={t('profile.password.setModal.confirmPassword')}\n placeholder={t(\n 'profile.password.setModal.confirmPasswordPlaceholder',\n )}\n {...form.register('confirmPassword')}\n type=\"password\"\n />\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"set-password-cancel\"\n disabled={mutation.isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.password.setModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"set-password-submit\"\n disabled={mutation.isPending}\n intent=\"primary\"\n loading={mutation.isPending}\n loadingLabel={t('profile.password.setModal.submitting')}\n type=\"submit\"\n uiSize=\"sm\"\n >\n {mutation.isPending\n ? undefined\n : t('profile.password.setModal.submit')}\n </TRButton>\n </ModalActions>\n </TRForm>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRForm } from '@tinyrack/ui/components/form';\nimport { TRSpinner } from '@tinyrack/ui/components/spinner';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { FingerprintIcon } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AuthField } from '#frontend/components/auth/auth-field.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { queryKeys } from '#frontend/queries/keys.ts';\nimport { registerPasskeyMutationOptions } from '#frontend/queries/passkey.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface SetupPasskeyModalProps {\n isOpen: boolean;\n onClose: () => void;\n isRequired?: boolean;\n canSwitchToTotp?: boolean;\n onSwitchToTotp?: () => void;\n}\n\ntype SetupStep = 'name' | 'register';\n\nexport function SetupPasskeyModal({\n isOpen,\n onClose,\n isRequired = false,\n canSwitchToTotp = false,\n onSwitchToTotp,\n}: SetupPasskeyModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [step, setStep] = useState<SetupStep>('name');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const schema = useMemo(\n () =>\n z.object({\n name: z\n .string()\n .max(100, t('validation.passkey.name.max'))\n .optional()\n .transform((val) => val?.trim() || undefined),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { name: '' },\n });\n\n const registerMutation = useMutation({\n ...registerPasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n onError: (error) => {\n setStep('name');\n if (error.name === 'NotAllowedError') {\n setErrorMessage(t('profile.passkey.setupModal.cancelled'));\n } else {\n setErrorMessage(t('profile.passkey.setupModal.error'));\n }\n },\n });\n\n const handleClose = useCallback(() => {\n form.reset();\n setStep('name');\n setErrorMessage(null);\n onClose();\n }, [form, onClose]);\n\n const handleRegister = form.handleSubmit(async (data) => {\n setStep('register');\n setErrorMessage(null);\n try {\n await registerMutation.mutateAsync({ name: data.name });\n } catch {\n // Error handling is done via mutation callbacks\n }\n });\n\n const isPending = registerMutation.isPending;\n\n return (\n <Modal\n description={\n isRequired\n ? t('profile.passkey.setupModal.requiredDescription')\n : undefined\n }\n icon={FingerprintIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isRequired}\n size=\"sm\"\n title={t('profile.passkey.setupModal.title')}\n >\n {step === 'name' && (\n <TRForm\n className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\"\n onSubmit={handleRegister}\n >\n <TRText as=\"p\" color=\"muted\" variant=\"caption\">\n {t('profile.passkey.setupModal.description')}\n </TRText>\n\n {errorMessage && (\n <AlertBanner variant=\"error\">{errorMessage}</AlertBanner>\n )}\n\n <AuthField\n error={form.formState.errors.name}\n errorTestId=\"setup-passkey-error\"\n hint={t('profile.passkey.setupModal.nameHint')}\n id=\"passkey-name\"\n label={t('profile.passkey.setupModal.nameLabel')}\n placeholder={t('profile.passkey.setupModal.namePlaceholder')}\n {...form.register('name')}\n type=\"text\"\n />\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"setup-passkey-cancel\"\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.setupModal.cancel')}\n </TRButton>\n <TRButton\n data-testid=\"setup-passkey-continue\"\n intent=\"primary\"\n type=\"submit\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.setupModal.continue')}\n </TRButton>\n </ModalActions>\n {canSwitchToTotp && onSwitchToTotp && (\n <TRText\n align=\"center\"\n as=\"p\"\n className=\"mt-tinyrack-sm\"\n variant=\"caption\"\n >\n <TRButton\n appearance=\"ghost\"\n intent=\"primary\"\n onClick={onSwitchToTotp}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.setupModal.switchToTotp')}\n </TRButton>\n </TRText>\n )}\n </TRForm>\n )}\n\n {step === 'register' && (\n <div className=\"mt-tinyrack-lg\">\n <div\n className=\"flex flex-col items-center gap-tinyrack-md py-tinyrack-xl\"\n data-testid=\"setup-passkey-loading\"\n >\n <TRSpinner uiSize=\"md\" />\n <TRText align=\"center\" as=\"p\" color=\"muted\" variant=\"caption\">\n {t('profile.passkey.setupModal.waitingForDevice')}\n </TRText>\n </div>\n\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n data-testid=\"setup-passkey-cancel\"\n disabled={isPending}\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.passkey.setupModal.cancel')}\n </TRButton>\n </ModalActions>\n </div>\n )}\n </Modal>\n );\n}\n","import { TRButton } from '@tinyrack/ui/components/button';\nimport { TRSpinner } from '@tinyrack/ui/components/spinner';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { ShieldCheckIcon } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { QrStep } from '#frontend/components/totp/qr-step.tsx';\nimport { RecoveryCodesStep } from '#frontend/components/totp/recovery-codes-step.tsx';\nimport { VerifyStep } from '#frontend/components/totp/verify-step.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { useTotpSetup } from '#frontend/features/totp/use-totp-setup.ts';\n\ninterface SetupTotpModalProps {\n isOpen: boolean;\n onClose: () => void;\n isRequired?: boolean;\n canSwitchToPasskey?: boolean;\n onSwitchToPasskey?: () => void;\n}\n\nexport function SetupTotpModal({\n isOpen,\n onClose,\n isRequired = false,\n canSwitchToPasskey = false,\n onSwitchToPasskey,\n}: SetupTotpModalProps) {\n const { t } = useTranslation();\n\n const {\n step,\n setupData,\n recoveryCodes,\n isSetupPending,\n isVerifyPending,\n isConfirmPending,\n startSetup,\n verify,\n goToVerify,\n goToQr,\n confirmRecoveryCodes,\n reset,\n } = useTotpSetup({\n autoStart: false,\n onConfirmSuccess: () => {\n reset();\n onClose();\n },\n });\n\n const handleClose = useCallback(() => {\n reset();\n onClose();\n }, [onClose, reset]);\n\n const handleModalOpen = useCallback(() => {\n if (!setupData && !isSetupPending) {\n startSetup();\n }\n }, [setupData, isSetupPending, startSetup]);\n\n if (isOpen && !setupData && !isSetupPending && step !== 'error') {\n handleModalOpen();\n }\n\n const handleVerify = useCallback(\n async (code: string) => {\n await verify(code);\n },\n [verify],\n );\n\n const modalTitle =\n step === 'recovery'\n ? t('setupTotp.recoveryCodes.title')\n : t('profile.totp.setupModal.title');\n\n return (\n <Modal\n description={\n isRequired\n ? t('profile.totp.setupModal.requiredDescription')\n : undefined\n }\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isRequired || step === 'recovery'}\n size=\"sm\"\n title={modalTitle}\n >\n {isSetupPending && (\n <div\n className=\"flex justify-center py-tinyrack-xl\"\n data-testid=\"setup-totp-loading\"\n >\n <TRSpinner uiSize=\"md\" />\n </div>\n )}\n\n {step === 'error' && (\n <div className=\"mt-tinyrack-lg flex flex-col gap-tinyrack-md\">\n <AlertBanner variant=\"error\">\n {t('profile.totp.setupModal.setupError')}\n </AlertBanner>\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.setupModal.cancel')}\n </TRButton>\n <TRButton\n intent=\"primary\"\n onClick={startSetup}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.setupModal.retry')}\n </TRButton>\n </ModalActions>\n </div>\n )}\n\n {setupData && step === 'qr' && (\n <div className=\"mt-tinyrack-lg\">\n <QrStep\n additionalActions={\n <>\n <ModalActions>\n <TRButton\n appearance=\"outline\"\n intent=\"neutral\"\n onClick={handleClose}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.setupModal.cancel')}\n </TRButton>\n </ModalActions>\n {canSwitchToPasskey && onSwitchToPasskey && (\n <TRText\n align=\"center\"\n as=\"p\"\n className=\"mt-tinyrack-sm\"\n variant=\"caption\"\n >\n <TRButton\n appearance=\"ghost\"\n intent=\"primary\"\n onClick={onSwitchToPasskey}\n type=\"button\"\n uiSize=\"sm\"\n >\n {t('profile.totp.setupModal.switchToPasskey')}\n </TRButton>\n </TRText>\n )}\n </>\n }\n onNext={goToVerify}\n setupData={setupData}\n />\n </div>\n )}\n\n {setupData && step === 'verify' && (\n <div className=\"mt-tinyrack-lg\">\n <VerifyStep\n isPending={isVerifyPending}\n onBack={goToQr}\n onSubmit={handleVerify}\n />\n </div>\n )}\n\n {step === 'recovery' && recoveryCodes.length > 0 && (\n <div className=\"mt-tinyrack-lg\">\n <RecoveryCodesStep\n isLoading={isConfirmPending}\n onConfirm={confirmRecoveryCodes}\n recoveryCodes={recoveryCodes}\n />\n </div>\n )}\n </Modal>\n );\n}\n","import {\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 { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { CircleAlertIcon, LogOutIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { DangerZoneSection } from '#frontend/components/profile/danger-zone-section.tsx';\nimport { LinkedAccountsSection } from '#frontend/components/profile/linked-accounts-section.tsx';\nimport { PasskeySection } from '#frontend/components/profile/passkey-section.tsx';\nimport { PasswordSection } from '#frontend/components/profile/password-section.tsx';\nimport { TotpSection } from '#frontend/components/profile/totp-section.tsx';\nimport { UnlinkOAuthModal } from '#frontend/components/profile/unlink-oauth-modal.tsx';\nimport { UserInfoSection } from '#frontend/components/profile/user-info-section.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { InitialAvatar } from '#frontend/components/ui/initial-avatar.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AppLayout } from '#frontend/features/layout/app-layout.tsx';\nimport { ChangePasswordModal } from '#frontend/features/profile/change-password-modal.tsx';\nimport { DeleteAccountModal } from '#frontend/features/profile/delete-account-modal.tsx';\nimport { DisableTotpModal } from '#frontend/features/profile/disable-totp-modal.tsx';\nimport { ManagePasskeysModal } from '#frontend/features/profile/manage-passkeys-modal.tsx';\nimport { RegenerateTotpRecoveryCodesModal } from '#frontend/features/profile/regenerate-totp-recovery-codes-modal.tsx';\nimport { RemovePasswordModal } from '#frontend/features/profile/remove-password-modal.tsx';\nimport { SetPasswordModal } from '#frontend/features/profile/set-password-modal.tsx';\nimport { SetupPasskeyModal } from '#frontend/features/profile/setup-passkey-modal.tsx';\nimport { SetupTotpModal } from '#frontend/features/profile/setup-totp-modal.tsx';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { logoutMutationOptions } from '#frontend/queries/logout.ts';\nimport {\n getOAuthAuthorizeUrl,\n oauthAccountsQueryOptions,\n unlinkOAuthMutationOptions,\n} from '#frontend/queries/oauth.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ntype PasswordModalType = 'set' | 'change' | 'remove' | null;\ntype TotpModalType = 'setup' | 'disable' | 'regenerate' | null;\ntype PasskeyModalType = 'setup' | 'manage' | null;\n\nconst SearchSchema = z.object({\n oauth_error: z.string().optional(),\n oauth_error_description: z.string().optional(),\n});\n\nconst OAUTH_ERROR_I18N_MAP: Record<string, string> = {\n access_denied: 'oauth.error.accessDenied',\n temporarily_unavailable: 'oauth.error.temporarilyUnavailable',\n server_error: 'oauth.error.serverError',\n};\n\nfunction ProfileError(props: ErrorComponentProps) {\n return (\n <RouteErrorFallback\n {...props}\n onUnauthorized={() => {\n window.location.href = '/login';\n }}\n />\n );\n}\n\nexport const Route = createFileRoute('/profile/')({\n component: Profile,\n errorComponent: ProfileError,\n validateSearch: SearchSchema,\n beforeLoad: async ({ context }) => {\n if (!context.user) {\n throw redirect({\n to: '/login',\n });\n }\n },\n loader: async ({ context }) => {\n await Promise.all([\n context.queryClient.ensureQueryData(getSessionQueryOptions),\n context.queryClient.ensureQueryData(oauthAccountsQueryOptions),\n context.queryClient.ensureQueryData(appConfigQueryOptions),\n ]);\n },\n});\n\nfunction Profile() {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n\n const oauthError = search.oauth_error;\n const oauthErrorMessage = oauthError\n ? t(OAUTH_ERROR_I18N_MAP[oauthError] ?? 'oauth.error.failed')\n : undefined;\n const [unlinkingProvider, setUnlinkingProvider] = useState<string | null>(\n null,\n );\n const [unlinkModal, setUnlinkModal] = useState<{\n id: string;\n name: string;\n } | null>(null);\n const [passwordModal, setPasswordModal] = useState<PasswordModalType>(null);\n const [totpModal, setTotpModal] = useState<TotpModalType>(null);\n const [passkeyModal, setPasskeyModal] = useState<PasskeyModalType>(null);\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n\n const { data: session } = useSuspenseQuery(getSessionQueryOptions);\n const { data: oauthAccountsData } = useSuspenseQuery(\n oauthAccountsQueryOptions,\n );\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n\n const logoutMutation = useMutation({\n ...logoutMutationOptions,\n onSuccess: async () => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({\n to: '/login',\n });\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const unlinkMutation = useMutation({\n ...unlinkOAuthMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: oauthAccountsQueryOptions.queryKey,\n });\n },\n onSettled: () => {\n setUnlinkingProvider(null);\n },\n });\n\n const handleUnlinkConfirm = async () => {\n if (!unlinkModal) return;\n setUnlinkingProvider(unlinkModal.id);\n await unlinkMutation.mutateAsync(unlinkModal.id);\n };\n\n if (!session.user) {\n return null;\n }\n\n const user = session.user;\n const availableProviders = oauthAccountsData.available_providers;\n const hasLinkedOAuth = availableProviders.some((p) => p.linked);\n const isConfigManaged = user.managed_by === 'config';\n\n const passwordAuthMethod = appConfig.auth.password;\n const passkeyAuthMethod = appConfig.auth.passkey;\n const totpEnabled = passwordAuthMethod.totp.enabled;\n const passkeyEnabled = passkeyAuthMethod.enabled;\n\n const accountDeletionEnabled = appConfig.account_deletion.enabled;\n const retentionPeriod = appConfig.account_deletion.retention;\n\n const retentionDays = (() => {\n const match = retentionPeriod.match(/^(\\d+)([dmy])$/);\n if (!match) return 30;\n const value = parseInt(match[1], 10);\n const unit = match[2];\n switch (unit) {\n case 'd':\n return value;\n case 'm':\n return value * 30;\n case 'y':\n return value * 365;\n default:\n return 30;\n }\n })();\n\n const showPasswordSection = true;\n const showTotpSection = !isConfigManaged && totpEnabled;\n const showPasskeySection = !isConfigManaged && passkeyEnabled;\n const showLinkedAccounts = availableProviders.length > 0;\n const hasSecurityOptions =\n showPasswordSection || showTotpSection || showPasskeySection;\n\n return (\n <AppLayout\n headerActions={\n <TRButton\n appearance=\"ghost\"\n /*\n The visible label collapses below `sm:`, which would leave the\n control unnamed on a phone. `profile.logout` is the same string\n the label renders, so this does not shadow it.\n */\n aria-label={t('profile.logout')}\n data-testid=\"profile-logout\"\n disabled={logoutMutation.isPending}\n loading={logoutMutation.isPending}\n onClick={() => logoutMutation.mutate()}\n type=\"button\"\n uiSize=\"sm\"\n >\n {logoutMutation.isPending ? undefined : (\n <>\n <LogOutIcon aria-hidden className=\"size-tinyrack-lg\" />\n <TRText as=\"span\" className=\"hidden sm:inline\" variant=\"bodySm\">\n {t('profile.logout')}\n </TRText>\n </>\n )}\n </TRButton>\n }\n >\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural profile identity row; descendants own visible typography. */}\n <div className=\"flex items-center gap-tinyrack-lg\">\n <InitialAvatar email={user.email} size=\"lg\" />\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural profile heading group; descendants own visible typography. */}\n <div className=\"flex min-w-0 flex-col gap-tinyrack-3xs\">\n <AuthPageHeader title={t('profile.title')} />\n {/*\n Rendered here rather than as the header's `subtitle`: this node\n carries a testid and needs to truncate, neither of which the\n shared header does, and growing its API for one non-auth caller\n would be the wrong trade.\n */}\n <TRText\n as=\"p\"\n color=\"muted\"\n data-testid=\"profile-user-email\"\n truncate\n variant=\"bodySm\"\n >\n {user.email}\n </TRText>\n </div>\n </div>\n\n {oauthErrorMessage && (\n <Alert icon={CircleAlertIcon} type=\"error\">\n {oauthErrorMessage}\n </Alert>\n )}\n\n {user && <UserInfoSection user={user} />}\n\n {hasSecurityOptions && (\n <TRCard.Root variant=\"outlined\">\n <TRCard.Header className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\">\n <TRCard.Title>{t('profile.security.title')}</TRCard.Title>\n <TRCard.Description>\n {t('profile.security.description')}\n </TRCard.Description>\n </TRCard.Header>\n {showTotpSection && user.totp_recovery_codes_missing && (\n <div\n className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\"\n data-testid=\"profile-totp-recovery-warning\"\n >\n <Alert icon={CircleAlertIcon} type=\"warning\">\n {t('profile.totp.recoveryCodesMissing')}\n </Alert>\n </div>\n )}\n <TRCard.Content className=\"divide-y divide-tinyrack-border p-0\">\n {showPasswordSection && (\n <PasswordSection\n hasLinkedOAuth={hasLinkedOAuth}\n hasPassword={user.has_password}\n hasSecondFactorOnly={\n user.has_password &&\n !hasLinkedOAuth &&\n (user.totp_registered || user.passkey_count > 0)\n }\n isConfigManaged={isConfigManaged}\n onOpenModal={setPasswordModal}\n />\n )}\n {showTotpSection && (\n <TotpSection\n onOpenModal={setTotpModal}\n recoveryCodesMissing={user.totp_recovery_codes_missing}\n totpEnabled={user.totp_registered}\n />\n )}\n {showPasskeySection && (\n <PasskeySection\n onOpenModal={setPasskeyModal}\n passkeyCount={user.passkey_count}\n />\n )}\n </TRCard.Content>\n </TRCard.Root>\n )}\n\n {showLinkedAccounts && (\n <LinkedAccountsSection\n getAuthorizeUrl={getOAuthAuthorizeUrl}\n onUnlinkRequest={(provider) =>\n setUnlinkModal({\n id: provider.id,\n name: provider.display_name,\n })\n }\n providers={availableProviders}\n unlinkingProvider={unlinkingProvider}\n />\n )}\n\n <DangerZoneSection\n isConfigManaged={isConfigManaged}\n isDeletionEnabled={accountDeletionEnabled}\n onDeleteClick={() => setShowDeleteModal(true)}\n />\n\n <SetPasswordModal\n isOpen={passwordModal === 'set'}\n onClose={() => setPasswordModal(null)}\n />\n <ChangePasswordModal\n isOpen={passwordModal === 'change'}\n onClose={() => setPasswordModal(null)}\n />\n <RemovePasswordModal\n isOpen={passwordModal === 'remove'}\n onClose={() => setPasswordModal(null)}\n />\n\n <SetupTotpModal\n isOpen={totpModal === 'setup'}\n onClose={() => setTotpModal(null)}\n />\n <DisableTotpModal\n isOpen={totpModal === 'disable'}\n onClose={() => setTotpModal(null)}\n />\n <RegenerateTotpRecoveryCodesModal\n isOpen={totpModal === 'regenerate'}\n onClose={() => setTotpModal(null)}\n />\n\n <SetupPasskeyModal\n isOpen={passkeyModal === 'setup'}\n onClose={() => setPasskeyModal(null)}\n />\n <ManagePasskeysModal\n isOpen={passkeyModal === 'manage'}\n onAddNew={() => setPasskeyModal('setup')}\n onClose={() => setPasskeyModal(null)}\n />\n\n <UnlinkOAuthModal\n isOpen={unlinkModal !== null}\n isPending={unlinkMutation.isPending}\n onClose={() => setUnlinkModal(null)}\n onConfirm={handleUnlinkConfirm}\n providerName={unlinkModal?.name ?? ''}\n />\n\n <DeleteAccountModal\n isOpen={showDeleteModal}\n onClose={() => setShowDeleteModal(false)}\n retentionDays={retentionDays}\n />\n </AppLayout>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{X as e}from"./createLucideIcon-D-yizrWN.js";import{B as t}from"./index-lTEyHSus.js";var n=e();function r(e){return(0,n.jsx)(t,{...e,onUnauthorized:()=>{window.location.href=`/login`}})}export{r as errorComponent};
2
- //# sourceMappingURL=profile-k66ruDWl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile-k66ruDWl.js","names":["RouteErrorFallback","PasswordModalType","TotpModalType","PasskeyModalType","ProfileError","props","ErrorComponentProps","window","location","href","errorComponent"],"sources":["../../../frontend/src/routes/profile/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import {\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 { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { CircleAlertIcon, LogOutIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { DangerZoneSection } from '#frontend/components/profile/danger-zone-section.tsx';\nimport { LinkedAccountsSection } from '#frontend/components/profile/linked-accounts-section.tsx';\nimport { PasskeySection } from '#frontend/components/profile/passkey-section.tsx';\nimport { PasswordSection } from '#frontend/components/profile/password-section.tsx';\nimport { TotpSection } from '#frontend/components/profile/totp-section.tsx';\nimport { UnlinkOAuthModal } from '#frontend/components/profile/unlink-oauth-modal.tsx';\nimport { UserInfoSection } from '#frontend/components/profile/user-info-section.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { InitialAvatar } from '#frontend/components/ui/initial-avatar.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AppLayout } from '#frontend/features/layout/app-layout.tsx';\nimport { ChangePasswordModal } from '#frontend/features/profile/change-password-modal.tsx';\nimport { DeleteAccountModal } from '#frontend/features/profile/delete-account-modal.tsx';\nimport { DisableTotpModal } from '#frontend/features/profile/disable-totp-modal.tsx';\nimport { ManagePasskeysModal } from '#frontend/features/profile/manage-passkeys-modal.tsx';\nimport { RegenerateTotpRecoveryCodesModal } from '#frontend/features/profile/regenerate-totp-recovery-codes-modal.tsx';\nimport { RemovePasswordModal } from '#frontend/features/profile/remove-password-modal.tsx';\nimport { SetPasswordModal } from '#frontend/features/profile/set-password-modal.tsx';\nimport { SetupPasskeyModal } from '#frontend/features/profile/setup-passkey-modal.tsx';\nimport { SetupTotpModal } from '#frontend/features/profile/setup-totp-modal.tsx';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { logoutMutationOptions } from '#frontend/queries/logout.ts';\nimport {\n getOAuthAuthorizeUrl,\n oauthAccountsQueryOptions,\n unlinkOAuthMutationOptions,\n} from '#frontend/queries/oauth.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ntype PasswordModalType = 'set' | 'change' | 'remove' | null;\ntype TotpModalType = 'setup' | 'disable' | 'regenerate' | null;\ntype PasskeyModalType = 'setup' | 'manage' | null;\n\nconst SearchSchema = z.object({\n oauth_error: z.string().optional(),\n oauth_error_description: z.string().optional(),\n});\n\nconst OAUTH_ERROR_I18N_MAP: Record<string, string> = {\n access_denied: 'oauth.error.accessDenied',\n temporarily_unavailable: 'oauth.error.temporarilyUnavailable',\n server_error: 'oauth.error.serverError',\n};\n\nfunction ProfileError(props: ErrorComponentProps) {\n return (\n <RouteErrorFallback\n {...props}\n onUnauthorized={() => {\n window.location.href = '/login';\n }}\n />\n );\n}\n\nexport const Route = createFileRoute('/profile/')({\n component: Profile,\n errorComponent: ProfileError,\n validateSearch: SearchSchema,\n beforeLoad: async ({ context }) => {\n if (!context.user) {\n throw redirect({\n to: '/login',\n });\n }\n },\n loader: async ({ context }) => {\n await Promise.all([\n context.queryClient.ensureQueryData(getSessionQueryOptions),\n context.queryClient.ensureQueryData(oauthAccountsQueryOptions),\n context.queryClient.ensureQueryData(appConfigQueryOptions),\n ]);\n },\n});\n\nfunction Profile() {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n\n const oauthError = search.oauth_error;\n const oauthErrorMessage = oauthError\n ? t(OAUTH_ERROR_I18N_MAP[oauthError] ?? 'oauth.error.failed')\n : undefined;\n const [unlinkingProvider, setUnlinkingProvider] = useState<string | null>(\n null,\n );\n const [unlinkModal, setUnlinkModal] = useState<{\n id: string;\n name: string;\n } | null>(null);\n const [passwordModal, setPasswordModal] = useState<PasswordModalType>(null);\n const [totpModal, setTotpModal] = useState<TotpModalType>(null);\n const [passkeyModal, setPasskeyModal] = useState<PasskeyModalType>(null);\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n\n const { data: session } = useSuspenseQuery(getSessionQueryOptions);\n const { data: oauthAccountsData } = useSuspenseQuery(\n oauthAccountsQueryOptions,\n );\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n\n const logoutMutation = useMutation({\n ...logoutMutationOptions,\n onSuccess: async () => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({\n to: '/login',\n });\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const unlinkMutation = useMutation({\n ...unlinkOAuthMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: oauthAccountsQueryOptions.queryKey,\n });\n },\n onSettled: () => {\n setUnlinkingProvider(null);\n },\n });\n\n const handleUnlinkConfirm = async () => {\n if (!unlinkModal) return;\n setUnlinkingProvider(unlinkModal.id);\n await unlinkMutation.mutateAsync(unlinkModal.id);\n };\n\n if (!session.user) {\n return null;\n }\n\n const user = session.user;\n const availableProviders = oauthAccountsData.available_providers;\n const hasLinkedOAuth = availableProviders.some((p) => p.linked);\n const isConfigManaged = user.managed_by === 'config';\n\n const passwordAuthMethod = appConfig.auth.password;\n const passkeyAuthMethod = appConfig.auth.passkey;\n const totpEnabled = passwordAuthMethod.totp.enabled;\n const passkeyEnabled = passkeyAuthMethod.enabled;\n\n const accountDeletionEnabled = appConfig.account_deletion.enabled;\n const retentionPeriod = appConfig.account_deletion.retention;\n\n const retentionDays = (() => {\n const match = retentionPeriod.match(/^(\\d+)([dmy])$/);\n if (!match) return 30;\n const value = parseInt(match[1], 10);\n const unit = match[2];\n switch (unit) {\n case 'd':\n return value;\n case 'm':\n return value * 30;\n case 'y':\n return value * 365;\n default:\n return 30;\n }\n })();\n\n const showPasswordSection = true;\n const showTotpSection = !isConfigManaged && totpEnabled;\n const showPasskeySection = !isConfigManaged && passkeyEnabled;\n const showLinkedAccounts = availableProviders.length > 0;\n const hasSecurityOptions =\n showPasswordSection || showTotpSection || showPasskeySection;\n\n return (\n <AppLayout\n headerActions={\n <TRButton\n appearance=\"ghost\"\n /*\n The visible label collapses below `sm:`, which would leave the\n control unnamed on a phone. `profile.logout` is the same string\n the label renders, so this does not shadow it.\n */\n aria-label={t('profile.logout')}\n data-testid=\"profile-logout\"\n disabled={logoutMutation.isPending}\n loading={logoutMutation.isPending}\n onClick={() => logoutMutation.mutate()}\n type=\"button\"\n uiSize=\"sm\"\n >\n {logoutMutation.isPending ? undefined : (\n <>\n <LogOutIcon aria-hidden className=\"size-tinyrack-lg\" />\n <TRText as=\"span\" className=\"hidden sm:inline\" variant=\"bodySm\">\n {t('profile.logout')}\n </TRText>\n </>\n )}\n </TRButton>\n }\n >\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural profile identity row; descendants own visible typography. */}\n <div className=\"flex items-center gap-tinyrack-lg\">\n <InitialAvatar email={user.email} size=\"lg\" />\n {/* tinyrack-check-ignore-next-line components/no-native-text -- Structural profile heading group; descendants own visible typography. */}\n <div className=\"flex min-w-0 flex-col gap-tinyrack-3xs\">\n <AuthPageHeader title={t('profile.title')} />\n {/*\n Rendered here rather than as the header's `subtitle`: this node\n carries a testid and needs to truncate, neither of which the\n shared header does, and growing its API for one non-auth caller\n would be the wrong trade.\n */}\n <TRText\n as=\"p\"\n color=\"muted\"\n data-testid=\"profile-user-email\"\n truncate\n variant=\"bodySm\"\n >\n {user.email}\n </TRText>\n </div>\n </div>\n\n {oauthErrorMessage && (\n <Alert icon={CircleAlertIcon} type=\"error\">\n {oauthErrorMessage}\n </Alert>\n )}\n\n {user && <UserInfoSection user={user} />}\n\n {hasSecurityOptions && (\n <TRCard.Root variant=\"outlined\">\n <TRCard.Header className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\">\n <TRCard.Title>{t('profile.security.title')}</TRCard.Title>\n <TRCard.Description>\n {t('profile.security.description')}\n </TRCard.Description>\n </TRCard.Header>\n {showTotpSection && user.totp_recovery_codes_missing && (\n <div\n className=\"border-tinyrack-border border-b-tinyrack-default px-tinyrack-lg py-tinyrack-md\"\n data-testid=\"profile-totp-recovery-warning\"\n >\n <Alert icon={CircleAlertIcon} type=\"warning\">\n {t('profile.totp.recoveryCodesMissing')}\n </Alert>\n </div>\n )}\n <TRCard.Content className=\"divide-y divide-tinyrack-border p-0\">\n {showPasswordSection && (\n <PasswordSection\n hasLinkedOAuth={hasLinkedOAuth}\n hasPassword={user.has_password}\n hasSecondFactorOnly={\n user.has_password &&\n !hasLinkedOAuth &&\n (user.totp_registered || user.passkey_count > 0)\n }\n isConfigManaged={isConfigManaged}\n onOpenModal={setPasswordModal}\n />\n )}\n {showTotpSection && (\n <TotpSection\n onOpenModal={setTotpModal}\n recoveryCodesMissing={user.totp_recovery_codes_missing}\n totpEnabled={user.totp_registered}\n />\n )}\n {showPasskeySection && (\n <PasskeySection\n onOpenModal={setPasskeyModal}\n passkeyCount={user.passkey_count}\n />\n )}\n </TRCard.Content>\n </TRCard.Root>\n )}\n\n {showLinkedAccounts && (\n <LinkedAccountsSection\n getAuthorizeUrl={getOAuthAuthorizeUrl}\n onUnlinkRequest={(provider) =>\n setUnlinkModal({\n id: provider.id,\n name: provider.display_name,\n })\n }\n providers={availableProviders}\n unlinkingProvider={unlinkingProvider}\n />\n )}\n\n <DangerZoneSection\n isConfigManaged={isConfigManaged}\n isDeletionEnabled={accountDeletionEnabled}\n onDeleteClick={() => setShowDeleteModal(true)}\n />\n\n <SetPasswordModal\n isOpen={passwordModal === 'set'}\n onClose={() => setPasswordModal(null)}\n />\n <ChangePasswordModal\n isOpen={passwordModal === 'change'}\n onClose={() => setPasswordModal(null)}\n />\n <RemovePasswordModal\n isOpen={passwordModal === 'remove'}\n onClose={() => setPasswordModal(null)}\n />\n\n <SetupTotpModal\n isOpen={totpModal === 'setup'}\n onClose={() => setTotpModal(null)}\n />\n <DisableTotpModal\n isOpen={totpModal === 'disable'}\n onClose={() => setTotpModal(null)}\n />\n <RegenerateTotpRecoveryCodesModal\n isOpen={totpModal === 'regenerate'}\n onClose={() => setTotpModal(null)}\n />\n\n <SetupPasskeyModal\n isOpen={passkeyModal === 'setup'}\n onClose={() => setPasskeyModal(null)}\n />\n <ManagePasskeysModal\n isOpen={passkeyModal === 'manage'}\n onAddNew={() => setPasskeyModal('setup')}\n onClose={() => setPasskeyModal(null)}\n />\n\n <UnlinkOAuthModal\n isOpen={unlinkModal !== null}\n isPending={unlinkMutation.isPending}\n onClose={() => setUnlinkModal(null)}\n onConfirm={handleUnlinkConfirm}\n providerName={unlinkModal?.name ?? ''}\n />\n\n <DeleteAccountModal\n isOpen={showDeleteModal}\n onClose={() => setShowDeleteModal(false)}\n retentionDays={retentionDays}\n />\n </AppLayout>\n );\n}\n"],"mappings":"qGAgEA,SAASI,EAAaC,EAA4B,CAChD,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,GAAIA,EACJ,mBAAsB,CACpBE,OAAOC,SAASC,KAAO,QACzB,CAAE,CAAA,CAGR"}
@@ -1,2 +0,0 @@
1
- var e=()=>new Promise(e=>setTimeout(e,0));export{e as t};
2
- //# sourceMappingURL=promise-OpBtq8tG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promise-OpBtq8tG.js","names":[],"sources":["../../../frontend/src/libs/promise.ts"],"sourcesContent":["export const tick = () => new Promise((resolve) => setTimeout(resolve, 0));\n"],"mappings":"AAAA,IAAa,MAAa,IAAI,QAAS,GAAY,WAAW,EAAS,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- import{X as e,q as t,t as n}from"./createLucideIcon-D-yizrWN.js";var r=n(`link`,[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]),i=e();function a({"aria-label":e,className:n,provider:r,...a}){return(0,i.jsxs)(`svg`,{...a,"aria-hidden":e===void 0?`true`:void 0,"aria-label":e,className:t(`tr-provider-mark`,n),"data-provider":r,role:e===void 0?void 0:`img`,viewBox:`0 0 24 24`,children:[r===`google`?(0,i.jsx)(o,{}):null,r===`github`?(0,i.jsx)(s,{}):null,r===`apple`?(0,i.jsx)(c,{}):null]})}function o(){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`path`,{d:`M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z`,fill:`#4285F4`}),(0,i.jsx)(`path`,{d:`M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z`,fill:`#34A853`}),(0,i.jsx)(`path`,{d:`M5.84 14.1a6.6 6.6 0 0 1 0-4.2V7.06H2.18a11 11 0 0 0 0 9.88l3.66-2.84Z`,fill:`#FBBC05`}),(0,i.jsx)(`path`,{d:`M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1a11 11 0 0 0-9.82 6.06l3.66 2.84c.87-2.6 3.3-4.52 6.16-4.52Z`,fill:`#EA4335`})]})}function s(){return(0,i.jsx)(`path`,{d:`M12 .5A11.5 11.5 0 0 0 .5 12a11.5 11.5 0 0 0 7.86 10.92c.58.1.79-.25.79-.56v-2.17c-3.2.7-3.88-1.36-3.88-1.36-.53-1.34-1.29-1.7-1.29-1.7-1.05-.71.08-.7.08-.7 1.16.08 1.77 1.2 1.77 1.2 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.56-.29-5.25-1.28-5.25-5.7 0-1.26.45-2.29 1.19-3.1-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11 11 0 0 1 5.79 0c2.2-1.5 3.17-1.18 3.17-1.18.63 1.59.24 2.76.12 3.05.74.81 1.19 1.84 1.19 3.1 0 4.43-2.7 5.4-5.27 5.69.42.36.79 1.07.79 2.15v3.19c0 .31.2.67.8.55A11.5 11.5 0 0 0 23.5 12 11.5 11.5 0 0 0 12 .5Z`})}function c(){return(0,i.jsx)(`path`,{d:`M17.05 12.74c-.03-2.7 2.2-4 2.3-4.06-1.25-1.83-3.2-2.08-3.9-2.11-1.66-.17-3.24.98-4.08.98-.84 0-2.14-.96-3.52-.93-1.81.03-3.48 1.05-4.41 2.67-1.88 3.27-.48 8.1 1.35 10.75.9 1.3 1.96 2.75 3.36 2.7 1.35-.06 1.86-.87 3.49-.87 1.63 0 2.09.87 3.51.84 1.45-.02 2.37-1.32 3.26-2.63 1.03-1.5 1.45-2.96 1.47-3.04-.03-.01-2.82-1.08-2.85-4.3ZM14.4 4.8c.74-.9 1.24-2.15 1.1-3.4-1.07.05-2.36.72-3.13 1.61-.68.79-1.28 2.06-1.12 3.28 1.19.09 2.41-.61 3.15-1.5Z`})}export{r as n,a as t};
2
- //# sourceMappingURL=provider-mark-CeYazOfu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider-mark-CeYazOfu.js","names":["Fragment"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/link.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.31.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.4.2_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/provider-mark/provider-mark.js"],"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 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\", key: \"1cjeqo\" }],\n [\"path\", { d: \"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\", key: \"19qd67\" }]\n];\nconst Link = createLucideIcon(\"link\", __iconNode);\n\nexport { __iconNode, Link as default };\n//# sourceMappingURL=link.mjs.map\n","import { mergeClassNames } from \"../../internal/component-class-name.js\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/components/provider-mark/provider-mark.tsx\nfunction TRProviderMark({ \"aria-label\": ariaLabel, className, provider, ...props }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\t...props,\n\t\t\"aria-hidden\": ariaLabel === void 0 ? \"true\" : void 0,\n\t\t\"aria-label\": ariaLabel,\n\t\tclassName: mergeClassNames(\"tr-provider-mark\", className),\n\t\t\"data-provider\": provider,\n\t\trole: ariaLabel === void 0 ? void 0 : \"img\",\n\t\tviewBox: \"0 0 24 24\",\n\t\tchildren: [\n\t\t\tprovider === \"google\" ? /* @__PURE__ */ jsx(GooglePaths, {}) : null,\n\t\t\tprovider === \"github\" ? /* @__PURE__ */ jsx(GithubPath, {}) : null,\n\t\t\tprovider === \"apple\" ? /* @__PURE__ */ jsx(ApplePath, {}) : null\n\t\t]\n\t});\n}\nfunction GooglePaths() {\n\treturn /* @__PURE__ */ jsxs(Fragment, { children: [\n\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z\",\n\t\t\tfill: \"#4285F4\"\n\t\t}),\n\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z\",\n\t\t\tfill: \"#34A853\"\n\t\t}),\n\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M5.84 14.1a6.6 6.6 0 0 1 0-4.2V7.06H2.18a11 11 0 0 0 0 9.88l3.66-2.84Z\",\n\t\t\tfill: \"#FBBC05\"\n\t\t}),\n\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1a11 11 0 0 0-9.82 6.06l3.66 2.84c.87-2.6 3.3-4.52 6.16-4.52Z\",\n\t\t\tfill: \"#EA4335\"\n\t\t})\n\t] });\n}\nfunction GithubPath() {\n\treturn /* @__PURE__ */ jsx(\"path\", { d: \"M12 .5A11.5 11.5 0 0 0 .5 12a11.5 11.5 0 0 0 7.86 10.92c.58.1.79-.25.79-.56v-2.17c-3.2.7-3.88-1.36-3.88-1.36-.53-1.34-1.29-1.7-1.29-1.7-1.05-.71.08-.7.08-.7 1.16.08 1.77 1.2 1.77 1.2 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.56-.29-5.25-1.28-5.25-5.7 0-1.26.45-2.29 1.19-3.1-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11 11 0 0 1 5.79 0c2.2-1.5 3.17-1.18 3.17-1.18.63 1.59.24 2.76.12 3.05.74.81 1.19 1.84 1.19 3.1 0 4.43-2.7 5.4-5.27 5.69.42.36.79 1.07.79 2.15v3.19c0 .31.2.67.8.55A11.5 11.5 0 0 0 23.5 12 11.5 11.5 0 0 0 12 .5Z\" });\n}\nfunction ApplePath() {\n\treturn /* @__PURE__ */ jsx(\"path\", { d: \"M17.05 12.74c-.03-2.7 2.2-4 2.3-4.06-1.25-1.83-3.2-2.08-3.9-2.11-1.66-.17-3.24.98-4.08.98-.84 0-2.14-.96-3.52-.93-1.81.03-3.48 1.05-4.41 2.67-1.88 3.27-.48 8.1 1.35 10.75.9 1.3 1.96 2.75 3.36 2.7 1.35-.06 1.86-.87 3.49-.87 1.63 0 2.09.87 3.51.84 1.45-.02 2.37-1.32 3.26-2.63 1.03-1.5 1.45-2.96 1.47-3.04-.03-.01-2.82-1.08-2.85-4.3ZM14.4 4.8c.74-.9 1.24-2.15 1.1-3.4-1.07.05-2.36.72-3.13 1.61-.68.79-1.28 2.06-1.12 3.28 1.19.09 2.41-.61 3.15-1.5Z\" });\n}\n//#endregion\nexport { TRProviderMark };\n\n//# sourceMappingURL=provider-mark.js.map"],"x_google_ignoreList":[0,1],"mappings":"iEAaA,IAAM,EAAO,EAAiB,OAAQ,CAHpC,CAAC,OAAQ,CAAE,EAAG,8DAA+D,IAAK,QAAS,CAAC,EAC5F,CAAC,OAAQ,CAAE,EAAG,+DAAgE,IAAK,QAAS,CAAC,CAEzD,CAAU,QCVhD,SAAS,EAAe,CAAE,aAAc,EAAW,YAAW,WAAU,GAAG,GAAS,CACnF,OAAuB,EAAA,EAAA,KAAA,CAAK,MAAO,CAClC,GAAG,EACH,cAAe,IAAc,IAAK,GAAI,OAAS,IAAK,GACpD,aAAc,EACd,UAAW,EAAgB,mBAAoB,CAAS,EACxD,gBAAiB,EACjB,KAAM,IAAc,IAAK,GAAI,IAAK,GAAI,MACtC,QAAS,YACT,SAAU,CACT,IAAa,UAA2B,EAAA,EAAA,IAAA,CAAI,EAAa,CAAC,CAAC,EAAI,KAC/D,IAAa,UAA2B,EAAA,EAAA,IAAA,CAAI,EAAY,CAAC,CAAC,EAAI,KAC9D,IAAa,SAA0B,EAAA,EAAA,IAAA,CAAI,EAAW,CAAC,CAAC,EAAI,IAC7D,CACD,CAAC,CACF,CACA,SAAS,GAAc,CACtB,OAAuB,EAAA,EAAA,KAAA,CAAKA,EAAAA,SAAU,CAAE,SAAU,EACjC,EAAA,EAAA,IAAA,CAAI,OAAQ,CAC3B,EAAG,oHACH,KAAM,SACP,CAAC,GACe,EAAA,EAAA,IAAA,CAAI,OAAQ,CAC3B,EAAG,kIACH,KAAM,SACP,CAAC,GACe,EAAA,EAAA,IAAA,CAAI,OAAQ,CAC3B,EAAG,yEACH,KAAM,SACP,CAAC,GACe,EAAA,EAAA,IAAA,CAAI,OAAQ,CAC3B,EAAG,kIACH,KAAM,SACP,CAAC,CACF,CAAE,CAAC,CACJ,CACA,SAAS,GAAa,CACrB,OAAuB,EAAA,EAAA,IAAA,CAAI,OAAQ,CAAE,EAAG,8hBAA+hB,CAAC,CACzkB,CACA,SAAS,GAAY,CACpB,OAAuB,EAAA,EAAA,IAAA,CAAI,OAAQ,CAAE,EAAG,+bAAgc,CAAC,CAC1e"}
@@ -1,2 +0,0 @@
1
- import{X as e,Z as t,et as n,i as r,n as i,r as a,s as o}from"./createLucideIcon-D-yizrWN.js";import{An as s,Ar as c,In as l}from"./config-C18-l7z7.js";import{t as u}from"./useMutation-DqIIIiBW.js";import{c as d,o as f}from"./zod-Dszyrytb.js";import{E as p,F as m,H as h,L as g,t as _,z as v}from"./index-lTEyHSus.js";import{t as y}from"./auth-page-header-ChaCNNrn.js";import{t as b}from"./alert-D3aaK-_3.js";import{t as x}from"./auth-layout-BdRRr0vT.js";import{t as S}from"./form-sJw-V9wb.js";import{t as C}from"./field-CsrUbl__.js";import{t as w}from"./input-QvBxPgy5.js";import{t as T}from"./promise-OpBtq8tG.js";import{n as E,t as D}from"./auth-footer-Du6S-oDG.js";import{r as O,t as k}from"./standard-schema-C50nwAaQ.js";import{a as A}from"./totp-BhElob6P.js";import{t as j}from"./labeled-separator-DdkyYDWH.js";var M=n(t()),N=e(),P={SECOND_FACTOR_SESSION_EXPIRED:`SECOND_FACTOR_SESSION_EXPIRED`,INVALID_RECOVERY_CODE:`INVALID_RECOVERY_CODE`,NO_RECOVERY_CODES_AVAILABLE:`NO_RECOVERY_CODES_AVAILABLE`,TOTP_NOT_ENABLED:`TOTP_NOT_ENABLED`},F=5;function I(){let{t:e}=r(),t=l(),n=c(),I=_.useSearch(),L=(0,M.useRef)(null),[R,z]=(0,M.useState)(!1),[B,V]=(0,M.useState)(F),H=(0,M.useMemo)(()=>f({code:d().transform(e=>e.toUpperCase()).pipe(d().regex(/^[A-HJ-NP-TV-Z2-9]{4}(?:-[A-HJ-NP-TV-Z2-9]{4}){3}$/,e(`verifyRecovery.error.invalid`)))}),[e]),U=u({...A,onSuccess:async e=>{n.setQueryData(p.queryKey,{user:e.user}),await T(),v(I)?window.location.href=m(I):t.navigate({to:`/profile`})},onSettled:()=>{n.invalidateQueries({queryKey:p.queryKey})}}),{register:W,setError:G,handleSubmit:K,setValue:q,formState:{errors:J}}=O({defaultValues:{code:``},resolver:k(H)}),Y=(0,M.useCallback)(()=>{t.navigate({to:`/login`,search:g(I)})},[t,I]);(0,M.useEffect)(()=>{if(!R)return;let e=setInterval(()=>{V(t=>t<=1?(clearInterval(e),Y(),0):t-1)},1e3);return()=>clearInterval(e)},[R,Y]);let X=async t=>{try{await U.mutateAsync(t)}catch(t){if(t instanceof a)switch(t.code){case P.SECOND_FACTOR_SESSION_EXPIRED:z(!0),V(F);return;case P.TOTP_NOT_ENABLED:Y();return;case P.NO_RECOVERY_CODES_AVAILABLE:G(`code`,{type:`manual`,message:e(`verifyRecovery.error.noCodesAvailable`)}),q(`code`,``),L.current?.focus();return;case P.INVALID_RECOVERY_CODE:G(`code`,{type:`manual`,message:e(`verifyRecovery.error.invalid`)}),q(`code`,``),L.current?.focus();return}G(`code`,{type:`manual`,message:e(`verifyRecovery.error.invalid`)}),q(`code`,``),L.current?.focus()}},{ref:Z,...Q}=W(`code`);return(0,N.jsxs)(x,{children:[(0,N.jsx)(y,{subtitle:e(`verifyRecovery.subtitle`),title:e(`verifyRecovery.title`)}),R&&(0,N.jsx)(b,{"data-testid":`recovery-session-expired`,icon:h,type:`warning`,children:(0,N.jsxs)(`div`,{className:`flex flex-col items-start gap-tinyrack-3xs`,children:[(0,N.jsx)(i,{as:`span`,variant:`bodySm`,children:e(`verifyRecovery.error.expired`)}),(0,N.jsx)(i,{as:`span`,color:`muted`,variant:`caption`,children:e(`verifyRecovery.redirecting`,{seconds:B})}),(0,N.jsx)(o,{appearance:`ghost`,intent:`neutral`,onClick:Y,type:`button`,uiSize:`sm`,children:e(`verifyRecovery.redirectNow`)})]})}),(0,N.jsxs)(S,{className:`flex flex-col gap-tinyrack-lg`,onSubmit:K(X),children:[(0,N.jsxs)(C.Root,{children:[(0,N.jsx)(w,{...Q,autoComplete:`off`,className:`w-full text-center font-tinyrack-mono`,"data-testid":`recovery-code-input`,disabled:R,placeholder:e(`verifyRecovery.placeholder`),ref:e=>{Z(e),L.current=e},type:`text`,uiSize:`lg`}),(0,N.jsx)(C.Error,{"data-testid":`recovery-error`,match:!!J.code,children:J.code?.message})]}),R?(0,N.jsx)(o,{className:`w-full`,disabled:!0,intent:`primary`,type:`button`,uiSize:`lg`,children:e(`verifyRecovery.submit`)}):(0,N.jsx)(o,{className:`w-full`,intent:`primary`,loading:U.isPending,loadingLabel:e(`verifyRecovery.submitting`),type:`submit`,uiSize:`lg`,children:e(`verifyRecovery.submit`)})]}),(0,N.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-md`,children:[(0,N.jsx)(j,{label:e(`common.or`)}),(0,N.jsx)(o,{appearance:`ghost`,className:`w-full`,"data-testid":`recovery-back-to-totp`,intent:`neutral`,onClick:()=>t.navigate({to:`/verify/totp`,search:g(I)}),type:`button`,uiSize:`lg`,children:e(`verifyRecovery.backToTotp`)})]}),(0,N.jsx)(D,{children:(0,N.jsx)(E,{link:(0,N.jsx)(s,{search:g(I),to:`/login`,children:e(`verifyRecovery.backToLogin`)})})})]})}export{I as component};
2
- //# sourceMappingURL=recovery-hdRyezmb.js.map