@tinyrack/issuary-server 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entities/terms-content.entity.d.ts +9 -0
- package/dist/entities/terms-content.entity.d.ts.map +1 -1
- package/dist/entities/terms.entity.d.ts +9 -0
- package/dist/entities/terms.entity.d.ts.map +1 -1
- package/dist/entities/terms.entity.js +4 -0
- package/dist/entities/terms.entity.js.map +1 -1
- package/dist/entities/user-terms-consent.entity.d.ts +9 -0
- package/dist/entities/user-terms-consent.entity.d.ts.map +1 -1
- package/dist/entrypoints/app.d.ts +598 -3
- package/dist/entrypoints/app.d.ts.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts +19 -16
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.js +133 -76
- package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +19 -16
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.js +133 -76
- package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
- package/dist/lib/config/branding.d.ts +5 -0
- package/dist/lib/config/branding.d.ts.map +1 -1
- package/dist/lib/config/branding.js +23 -1
- package/dist/lib/config/branding.js.map +1 -1
- package/dist/lib/config/resolved.d.ts +3 -0
- package/dist/lib/config/resolved.d.ts.map +1 -1
- package/dist/lib/interpolate-html.d.ts +3 -3
- package/dist/lib/interpolate-html.js +3 -3
- package/dist/lib/interpolate-html.js.map +1 -1
- package/dist/migrations/postgres/Migration20260827090000_archive_terms.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260827090000_archive_terms.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260827090000_archive_terms.js +12 -0
- package/dist/migrations/postgres/Migration20260827090000_archive_terms.js.map +1 -0
- package/dist/migrations/postgres/index.d.ts.map +1 -1
- package/dist/migrations/postgres/index.js +2 -0
- package/dist/migrations/postgres/index.js.map +1 -1
- package/dist/migrations/sqlite/Migration20260827090000_archive_terms.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260827090000_archive_terms.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260827090000_archive_terms.js +12 -0
- package/dist/migrations/sqlite/Migration20260827090000_archive_terms.js.map +1 -0
- package/dist/migrations/sqlite/index.d.ts.map +1 -1
- package/dist/migrations/sqlite/index.js +2 -0
- package/dist/migrations/sqlite/index.js.map +1 -1
- package/dist/repositories/terms.repository.d.ts.map +1 -1
- package/dist/repositories/terms.repository.js +1 -1
- package/dist/repositories/terms.repository.js.map +1 -1
- package/dist/routes/api/admin/console/index.d.ts +523 -0
- package/dist/routes/api/admin/console/index.d.ts.map +1 -0
- package/dist/routes/api/admin/console/index.js +212 -0
- package/dist/routes/api/admin/console/index.js.map +1 -0
- package/dist/routes/api/admin/index.d.ts +584 -0
- package/dist/routes/api/admin/index.d.ts.map +1 -1
- package/dist/routes/api/admin/index.js +3 -1
- package/dist/routes/api/admin/index.js.map +1 -1
- package/dist/routes/api/admin/users/index.d.ts +64 -0
- package/dist/routes/api/admin/users/index.d.ts.map +1 -1
- package/dist/routes/api/admin/users/index.js +47 -0
- package/dist/routes/api/admin/users/index.js.map +1 -1
- package/dist/routes/api/config/get.d.ts +10 -3
- package/dist/routes/api/config/get.d.ts.map +1 -1
- package/dist/routes/api/config/get.js +3 -0
- package/dist/routes/api/config/get.js.map +1 -1
- package/dist/routes/api/config/index.d.ts +10 -3
- package/dist/routes/api/config/index.d.ts.map +1 -1
- package/dist/routes/api/index.d.ts +594 -3
- package/dist/routes/api/index.d.ts.map +1 -1
- package/dist/routes/index.d.ts +594 -3
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/schemas/response.d.ts +4 -1
- package/dist/schemas/response.d.ts.map +1 -1
- package/dist/schemas/response.js +11 -2
- package/dist/schemas/response.js.map +1 -1
- package/dist/services/admin-console.service.d.ts +407 -0
- package/dist/services/admin-console.service.d.ts.map +1 -0
- package/dist/services/admin-console.service.js +377 -0
- package/dist/services/admin-console.service.js.map +1 -0
- package/dist/services/container.d.ts +5 -0
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +3 -0
- package/dist/services/container.js.map +1 -1
- package/dist/services/user.service.d.ts +21 -0
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +65 -1
- package/dist/services/user.service.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/2fa-BowFczF7.js +2 -0
- package/public/assets/2fa-BowFczF7.js.map +1 -0
- package/public/assets/2fa-C_pA-n2i.js +2 -0
- package/public/assets/{2fa-DFTcWEMb.js.map → 2fa-C_pA-n2i.js.map} +1 -1
- package/public/assets/2fa-Cpfhakvn.js +2 -0
- package/public/assets/{2fa-huNZDYU9.js.map → 2fa-Cpfhakvn.js.map} +1 -1
- package/public/assets/2fa-o1a13VHx.js +2 -0
- package/public/assets/2fa-o1a13VHx.js.map +1 -0
- package/public/assets/FieldControl-ShLuCjvG.js +2 -0
- package/public/assets/FieldControl-ShLuCjvG.js.map +1 -0
- package/public/assets/Separator-C6MmGAmP.js +2 -0
- package/public/assets/Separator-C6MmGAmP.js.map +1 -0
- package/public/assets/admin-_jFLs8Ve.js +2 -0
- package/public/assets/admin-_jFLs8Ve.js.map +1 -0
- package/public/assets/admin-shell-B91U4-Ro.js +2 -0
- package/public/assets/admin-shell-B91U4-Ro.js.map +1 -0
- package/public/assets/alert-D3aaK-_3.js +2 -0
- package/public/assets/alert-D3aaK-_3.js.map +1 -0
- package/public/assets/alert-kRxM1xsM.js +2 -0
- package/public/assets/alert-kRxM1xsM.js.map +1 -0
- package/public/assets/auth-choice-row-h4heOMHs.js +2 -0
- package/public/assets/auth-choice-row-h4heOMHs.js.map +1 -0
- package/public/assets/auth-field-BpJ4AHtU.js +2 -0
- package/public/assets/{auth-field-CWyXGKoC.js.map → auth-field-BpJ4AHtU.js.map} +1 -1
- package/public/assets/auth-footer-Du6S-oDG.js +2 -0
- package/public/assets/auth-footer-Du6S-oDG.js.map +1 -0
- package/public/assets/auth-layout-BdRRr0vT.js +2 -0
- package/public/assets/auth-layout-BdRRr0vT.js.map +1 -0
- package/public/assets/auth-page-header-ChaCNNrn.js +2 -0
- package/public/assets/{auth-page-header-DgGAaIiP.js.map → auth-page-header-ChaCNNrn.js.map} +1 -1
- package/public/assets/authorization-context-banner-zVxGX5e8.js +2 -0
- package/public/assets/{authorization-context-banner-DznMDPOX.js.map → authorization-context-banner-zVxGX5e8.js.map} +1 -1
- package/public/assets/avatar-BxTPQIDp.js +2 -0
- package/public/assets/{avatar-D-FRGa1m.js.map → avatar-BxTPQIDp.js.map} +1 -1
- package/public/assets/badge-B8D0Q2qq.js +2 -0
- package/public/assets/{badge-CsOfUji0.js.map → badge-B8D0Q2qq.js.map} +1 -1
- package/public/assets/checkbox-DTPGfvmq.js +2 -0
- package/public/assets/{checkbox-C90dDDza.js.map → checkbox-DTPGfvmq.js.map} +1 -1
- package/public/assets/{circle-check-6QTLhwM_.js → circle-check-Cnzuu7xR.js} +2 -2
- package/public/assets/{circle-check-6QTLhwM_.js.map → circle-check-Cnzuu7xR.js.map} +1 -1
- package/public/assets/clients-DLqy7K3N.js +5 -0
- package/public/assets/clients-DLqy7K3N.js.map +1 -0
- package/public/assets/config-C18-l7z7.js +2 -0
- package/public/assets/config-C18-l7z7.js.map +1 -0
- package/public/assets/{consent-RtCi_85E.js → consent-BWniDzI3.js} +2 -2
- package/public/assets/{consent-RtCi_85E.js.map → consent-BWniDzI3.js.map} +1 -1
- package/public/assets/consent-r_tX8DTb.js +2 -0
- package/public/assets/{consent-B9sQEyO8.js.map → consent-r_tX8DTb.js.map} +1 -1
- package/public/assets/{createLucideIcon-BPpAIXR_.js → createLucideIcon-D-yizrWN.js} +2 -2
- package/public/assets/{createLucideIcon-BPpAIXR_.js.map → createLucideIcon-D-yizrWN.js.map} +1 -1
- package/public/assets/design-system-rich-text-B3NzIRoJ.js +2 -0
- package/public/assets/design-system-rich-text-B3NzIRoJ.js.map +1 -0
- package/public/assets/email-Bx9JlWp3.js +2 -0
- package/public/assets/email-Bx9JlWp3.js.map +1 -0
- package/public/assets/email-Cpfhakvn.js +2 -0
- package/public/assets/email-Cpfhakvn.js.map +1 -0
- package/public/assets/error-DDY8m_Px.js +2 -0
- package/public/assets/error-DDY8m_Px.js.map +1 -0
- package/public/assets/field-CsrUbl__.js +3 -0
- package/public/assets/field-CsrUbl__.js.map +1 -0
- package/public/assets/{fingerprint-pattern-DP62Vk8x.js → fingerprint-pattern-BwUoN1_w.js} +2 -2
- package/public/assets/{fingerprint-pattern-DP62Vk8x.js.map → fingerprint-pattern-BwUoN1_w.js.map} +1 -1
- package/public/assets/forgot-Cpfhakvn.js +2 -0
- package/public/assets/forgot-Cpfhakvn.js.map +1 -0
- package/public/assets/forgot-u52JMu6e.js +2 -0
- package/public/assets/forgot-u52JMu6e.js.map +1 -0
- package/public/assets/form-sJw-V9wb.js +2 -0
- package/public/assets/form-sJw-V9wb.js.map +1 -0
- package/public/assets/index-8mX6CKcW.css +2 -0
- package/public/assets/index-lTEyHSus.js +11 -0
- package/public/assets/index-lTEyHSus.js.map +1 -0
- package/public/assets/initial-avatar-WMjxW3Zz.js +2 -0
- package/public/assets/initial-avatar-WMjxW3Zz.js.map +1 -0
- package/public/assets/input-QvBxPgy5.js +2 -0
- package/public/assets/{input-CxVeC8Pn.js.map → input-QvBxPgy5.js.map} +1 -1
- package/public/assets/{key-round-CdvHb8vT.js → key-round-BxWppK6h.js} +2 -2
- package/public/assets/{key-round-CdvHb8vT.js.map → key-round-BxWppK6h.js.map} +1 -1
- package/public/assets/labeled-separator-DdkyYDWH.js +2 -0
- package/public/assets/labeled-separator-DdkyYDWH.js.map +1 -0
- package/public/assets/link-BHmn75Zo.js +2 -0
- package/public/assets/{link-C-WdTj3F.js.map → link-BHmn75Zo.js.map} +1 -1
- package/public/assets/{lock-7NRyvXBS.js → lock-8wpR2C78.js} +2 -2
- package/public/assets/{lock-7NRyvXBS.js.map → lock-8wpR2C78.js.map} +1 -1
- package/public/assets/login-Cpfhakvn.js +2 -0
- package/public/assets/login-Cpfhakvn.js.map +1 -0
- package/public/assets/login-DRcHjJ2-.js +2 -0
- package/public/assets/login-DRcHjJ2-.js.map +1 -0
- package/public/assets/logout-Dphj1d_0.js +2 -0
- package/public/assets/logout-Dphj1d_0.js.map +1 -0
- package/public/assets/{mail-D0B_1Dzd.js → mail-DVP_XMUi.js} +2 -2
- package/public/assets/{mail-D0B_1Dzd.js.map → mail-DVP_XMUi.js.map} +1 -1
- package/public/assets/modal-JuaLVSyx.js +2 -0
- package/public/assets/modal-JuaLVSyx.js.map +1 -0
- package/public/assets/mutationOptions-Cv_vJkJn.js +2 -0
- package/public/assets/{mutationOptions-DyYFUbyn.js.map → mutationOptions-Cv_vJkJn.js.map} +1 -1
- package/public/assets/passkey-CObBlfKK.js +2 -0
- package/public/assets/passkey-CObBlfKK.js.map +1 -0
- package/public/assets/{passkey-J1qnYp9A.js → passkey-CWTjw19S.js} +2 -2
- package/public/assets/{passkey-J1qnYp9A.js.map → passkey-CWTjw19S.js.map} +1 -1
- package/public/assets/passkey-CavITajY.js +2 -0
- package/public/assets/passkey-CavITajY.js.map +1 -0
- package/public/assets/passkey-Cpfhakvn.js +2 -0
- package/public/assets/passkey-Cpfhakvn.js.map +1 -0
- package/public/assets/{passkey-error-ZqqPQUta.js → passkey-error-CZ26Ss-I.js} +2 -2
- package/public/assets/{passkey-error-ZqqPQUta.js.map → passkey-error-CZ26Ss-I.js.map} +1 -1
- package/public/assets/password-Cpfhakvn.js +2 -0
- package/public/assets/password-Cpfhakvn.js.map +1 -0
- package/public/assets/password-Dk8PwtZN.js +2 -0
- package/public/assets/password-Dk8PwtZN.js.map +1 -0
- package/public/assets/password-reset-BcFpGOop.js +2 -0
- package/public/assets/{password-reset-sU5KkBKi.js.map → password-reset-BcFpGOop.js.map} +1 -1
- package/public/assets/password-strength-Bgvy7kz6.js +2 -0
- package/public/assets/{password-strength-BIPcWiM_.js.map → password-strength-Bgvy7kz6.js.map} +1 -1
- package/public/assets/pin-input-DhsRO4Ei.js +2 -0
- package/public/assets/{pin-input-CITrr-Yc.js.map → pin-input-DhsRO4Ei.js.map} +1 -1
- package/public/assets/profile-PjXEnzA-.js +2 -0
- package/public/assets/profile-PjXEnzA-.js.map +1 -0
- package/public/assets/profile-k66ruDWl.js +2 -0
- package/public/assets/{profile-BHPL9Px_.js.map → profile-k66ruDWl.js.map} +1 -1
- package/public/assets/provider-mark-CeYazOfu.js +2 -0
- package/public/assets/provider-mark-CeYazOfu.js.map +1 -0
- package/public/assets/recovery-hdRyezmb.js +2 -0
- package/public/assets/recovery-hdRyezmb.js.map +1 -0
- package/public/assets/register-Cpfhakvn.js +2 -0
- package/public/assets/register-Cpfhakvn.js.map +1 -0
- package/public/assets/register-DMgKT_fm.js +2 -0
- package/public/assets/register-DMgKT_fm.js.map +1 -0
- package/public/assets/reset-Cpfhakvn.js +2 -0
- package/public/assets/reset-Cpfhakvn.js.map +1 -0
- package/public/assets/reset-DBu3wYpE.js +2 -0
- package/public/assets/reset-DBu3wYpE.js.map +1 -0
- package/public/assets/select-5LheSsRl.js +2 -0
- package/public/assets/select-5LheSsRl.js.map +1 -0
- package/public/assets/select-Cpfhakvn.js +2 -0
- package/public/assets/{select-huNZDYU9.js.map → select-Cpfhakvn.js.map} +1 -1
- package/public/assets/separator-CMGc2Y1q.js +2 -0
- package/public/assets/separator-CMGc2Y1q.js.map +1 -0
- package/public/assets/settings-BVe4k3kJ.js +2 -0
- package/public/assets/settings-BVe4k3kJ.js.map +1 -0
- package/public/assets/shell-header-bar-CdOEWmCT.js +2 -0
- package/public/assets/shell-header-bar-CdOEWmCT.js.map +1 -0
- package/public/assets/{shield-check-D_p8H0ni.js → shield-check-DpYF8yeI.js} +2 -2
- package/public/assets/{shield-check-D_p8H0ni.js.map → shield-check-DpYF8yeI.js.map} +1 -1
- package/public/assets/standard-schema-C50nwAaQ.js +2 -0
- package/public/assets/{standard-schema-e8gtSzGE.js.map → standard-schema-C50nwAaQ.js.map} +1 -1
- package/public/assets/system-BoUqxc5h.js +2 -0
- package/public/assets/system-BoUqxc5h.js.map +1 -0
- package/public/assets/table-Dl89o43x.js +2 -0
- package/public/assets/table-Dl89o43x.js.map +1 -0
- package/public/assets/terms-B2wWfx1d.js +2 -0
- package/public/assets/terms-B2wWfx1d.js.map +1 -0
- package/public/assets/terms-COr3cDw5.js +2 -0
- package/public/assets/terms-COr3cDw5.js.map +1 -0
- package/public/assets/terms-checkbox-list-C9TkDC8Y.js +2 -0
- package/public/assets/terms-checkbox-list-C9TkDC8Y.js.map +1 -0
- package/public/assets/terms-k66ruDWl.js +2 -0
- package/public/assets/terms-k66ruDWl.js.map +1 -0
- package/public/assets/totp-BJycMMTC.js +2 -0
- package/public/assets/totp-BJycMMTC.js.map +1 -0
- package/public/assets/{totp-BNZ904Zm.js → totp-BhElob6P.js} +2 -2
- package/public/assets/{totp-BNZ904Zm.js.map → totp-BhElob6P.js.map} +1 -1
- package/public/assets/totp-C1ba10Is.js +2 -0
- package/public/assets/totp-C1ba10Is.js.map +1 -0
- package/public/assets/{trash-2-DZdKBLvC.js → trash-2-B3NVE8pR.js} +2 -2
- package/public/assets/{trash-2-DZdKBLvC.js.map → trash-2-B3NVE8pR.js.map} +1 -1
- package/public/assets/{triangle-alert-CqNn0kPs.js → triangle-alert-DATO9o3k.js} +2 -2
- package/public/assets/{triangle-alert-CqNn0kPs.js.map → triangle-alert-DATO9o3k.js.map} +1 -1
- package/public/assets/use-admin-selection-D2b7jnym.js +2 -0
- package/public/assets/use-admin-selection-D2b7jnym.js.map +1 -0
- package/public/assets/use-totp-setup-KOVNS2DC.js +3 -0
- package/public/assets/use-totp-setup-KOVNS2DC.js.map +1 -0
- package/public/assets/useAriaLabelledBy-CF3crxLc.js +2 -0
- package/public/assets/{useAriaLabelledBy-IIwdHUss.js.map → useAriaLabelledBy-CF3crxLc.js.map} +1 -1
- package/public/assets/useMutation-DqIIIiBW.js +2 -0
- package/public/assets/{useMutation-BWZ0G4Td.js.map → useMutation-DqIIIiBW.js.map} +1 -1
- package/public/assets/useQuery-CLr9TaKA.js +2 -0
- package/public/assets/{useQuery-Ccv_nzQl.js.map → useQuery-CLr9TaKA.js.map} +1 -1
- package/public/assets/users-BQQQm353.js +2 -0
- package/public/assets/users-BQQQm353.js.map +1 -0
- package/public/assets/{zod-C87S6Tec.js → zod-Dszyrytb.js} +2 -2
- package/public/assets/{zod-C87S6Tec.js.map → zod-Dszyrytb.js.map} +1 -1
- package/public/index.html +6 -6
- package/public/issuary-app-icon-512.png +0 -0
- package/public/issuary-app-icon.svg +8 -0
- package/public/assets/2fa-C9wUlSBS.js +0 -2
- package/public/assets/2fa-C9wUlSBS.js.map +0 -1
- package/public/assets/2fa-DFTcWEMb.js +0 -2
- package/public/assets/2fa-TtshNxXv.js +0 -2
- package/public/assets/2fa-TtshNxXv.js.map +0 -1
- package/public/assets/2fa-huNZDYU9.js +0 -2
- package/public/assets/DialogHandle-DICBMcjK.js +0 -2
- package/public/assets/DialogHandle-DICBMcjK.js.map +0 -1
- package/public/assets/FieldItemContext-BeNfhOsU.js +0 -2
- package/public/assets/FieldItemContext-BeNfhOsU.js.map +0 -1
- package/public/assets/admin-CFZaO1bM.js +0 -2
- package/public/assets/admin-CFZaO1bM.js.map +0 -1
- package/public/assets/admin-users-BK_BN8jm.js +0 -2
- package/public/assets/admin-users-BK_BN8jm.js.map +0 -1
- package/public/assets/alert-leqyvHOp.js +0 -2
- package/public/assets/alert-leqyvHOp.js.map +0 -1
- package/public/assets/auth-choice-row-CXuyJgkR.js +0 -2
- package/public/assets/auth-choice-row-CXuyJgkR.js.map +0 -1
- package/public/assets/auth-field-CWyXGKoC.js +0 -2
- package/public/assets/auth-footer-Cz5ivsDc.js +0 -2
- package/public/assets/auth-footer-Cz5ivsDc.js.map +0 -1
- package/public/assets/auth-layout-CiNn2-Nb.js +0 -2
- package/public/assets/auth-layout-CiNn2-Nb.js.map +0 -1
- package/public/assets/auth-page-header-DgGAaIiP.js +0 -2
- package/public/assets/authorization-context-banner-DznMDPOX.js +0 -2
- package/public/assets/avatar-D-FRGa1m.js +0 -2
- package/public/assets/badge-CsOfUji0.js +0 -2
- package/public/assets/checkbox-C90dDDza.js +0 -2
- package/public/assets/chevron-right-CN0jUyV0.js +0 -2
- package/public/assets/chevron-right-CN0jUyV0.js.map +0 -1
- package/public/assets/config-DTQCUlfZ.js +0 -2
- package/public/assets/config-DTQCUlfZ.js.map +0 -1
- package/public/assets/consent-B9sQEyO8.js +0 -2
- package/public/assets/email-8RKQzeig.js +0 -2
- package/public/assets/email-8RKQzeig.js.map +0 -1
- package/public/assets/email-huNZDYU9.js +0 -2
- package/public/assets/email-huNZDYU9.js.map +0 -1
- package/public/assets/error-BYe3gUMO.js +0 -2
- package/public/assets/error-BYe3gUMO.js.map +0 -1
- package/public/assets/field-BMT214_m.js +0 -3
- package/public/assets/field-BMT214_m.js.map +0 -1
- package/public/assets/forgot-BenoOUxC.js +0 -2
- package/public/assets/forgot-BenoOUxC.js.map +0 -1
- package/public/assets/forgot-huNZDYU9.js +0 -2
- package/public/assets/forgot-huNZDYU9.js.map +0 -1
- package/public/assets/index-CKpnrw9M.js +0 -11
- package/public/assets/index-CKpnrw9M.js.map +0 -1
- package/public/assets/index-Ct9o0oCZ.css +0 -2
- package/public/assets/initial-avatar-E5DK9Igm.js +0 -2
- package/public/assets/initial-avatar-E5DK9Igm.js.map +0 -1
- package/public/assets/input-CxVeC8Pn.js +0 -2
- package/public/assets/labeled-separator-CV7nb0XW.js +0 -2
- package/public/assets/labeled-separator-CV7nb0XW.js.map +0 -1
- package/public/assets/link-C-WdTj3F.js +0 -2
- package/public/assets/login-1YuiZD30.js +0 -2
- package/public/assets/login-1YuiZD30.js.map +0 -1
- package/public/assets/login-huNZDYU9.js +0 -2
- package/public/assets/login-huNZDYU9.js.map +0 -1
- package/public/assets/logout-B5T52P8u.js +0 -2
- package/public/assets/logout-B5T52P8u.js.map +0 -1
- package/public/assets/modal-tByFpy18.js +0 -2
- package/public/assets/modal-tByFpy18.js.map +0 -1
- package/public/assets/mutationOptions-DyYFUbyn.js +0 -2
- package/public/assets/passkey-CgAHaQ1p.js +0 -2
- package/public/assets/passkey-CgAHaQ1p.js.map +0 -1
- package/public/assets/passkey-huNZDYU9.js +0 -2
- package/public/assets/passkey-huNZDYU9.js.map +0 -1
- package/public/assets/passkey-v9Pzv-4A.js +0 -2
- package/public/assets/passkey-v9Pzv-4A.js.map +0 -1
- package/public/assets/password-Cuh9Hnjp.js +0 -2
- package/public/assets/password-Cuh9Hnjp.js.map +0 -1
- package/public/assets/password-huNZDYU9.js +0 -2
- package/public/assets/password-huNZDYU9.js.map +0 -1
- package/public/assets/password-reset-sU5KkBKi.js +0 -2
- package/public/assets/password-strength-BIPcWiM_.js +0 -2
- package/public/assets/pin-input-CITrr-Yc.js +0 -2
- package/public/assets/plus-DSBBSrgj.js +0 -2
- package/public/assets/plus-DSBBSrgj.js.map +0 -1
- package/public/assets/profile-BHPL9Px_.js +0 -2
- package/public/assets/profile-C8KaELVe.js +0 -2
- package/public/assets/profile-C8KaELVe.js.map +0 -1
- package/public/assets/provider-logos-u1YURWQr.js +0 -2
- package/public/assets/provider-logos-u1YURWQr.js.map +0 -1
- package/public/assets/recovery-CVROV9nj.js +0 -2
- package/public/assets/recovery-CVROV9nj.js.map +0 -1
- package/public/assets/register-cpxjX3qr.js +0 -2
- package/public/assets/register-cpxjX3qr.js.map +0 -1
- package/public/assets/register-huNZDYU9.js +0 -2
- package/public/assets/register-huNZDYU9.js.map +0 -1
- package/public/assets/reset-huNZDYU9.js +0 -2
- package/public/assets/reset-huNZDYU9.js.map +0 -1
- package/public/assets/reset-iNqYdsoa.js +0 -2
- package/public/assets/reset-iNqYdsoa.js.map +0 -1
- package/public/assets/select-DdjQtcLJ.js +0 -2
- package/public/assets/select-DdjQtcLJ.js.map +0 -1
- package/public/assets/select-huNZDYU9.js +0 -2
- package/public/assets/separator-B0Bvh1he.js +0 -2
- package/public/assets/separator-B0Bvh1he.js.map +0 -1
- package/public/assets/shell-header-bar-JcFhS7mb.js +0 -2
- package/public/assets/shell-header-bar-JcFhS7mb.js.map +0 -1
- package/public/assets/standard-schema-e8gtSzGE.js +0 -2
- package/public/assets/terms-BHPL9Px_.js +0 -2
- package/public/assets/terms-BHPL9Px_.js.map +0 -1
- package/public/assets/terms-BjwMWDFp.js +0 -2
- package/public/assets/terms-BjwMWDFp.js.map +0 -1
- package/public/assets/terms-checkbox-list-DNOq4Pb2.js +0 -2
- package/public/assets/terms-checkbox-list-DNOq4Pb2.js.map +0 -1
- package/public/assets/totp-D_EWG1h8.js +0 -2
- package/public/assets/totp-D_EWG1h8.js.map +0 -1
- package/public/assets/totp-DetFwOkk.js +0 -2
- package/public/assets/totp-DetFwOkk.js.map +0 -1
- package/public/assets/use-totp-setup-DtlgPUPJ.js +0 -3
- package/public/assets/use-totp-setup-DtlgPUPJ.js.map +0 -1
- package/public/assets/useAriaLabelledBy-IIwdHUss.js +0 -2
- package/public/assets/useMutation-BWZ0G4Td.js +0 -2
- package/public/assets/useQuery-Ccv_nzQl.js +0 -2
- package/public/assets/users-B1gvPM_x.js +0 -2
- package/public/assets/users-B1gvPM_x.js.map +0 -1
- package/public/vite.svg +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{X as e,Z as t,et as n,n as r}from"./createLucideIcon-D-yizrWN.js";import{W as i}from"./index-lTEyHSus.js";import{t as a}from"./link-BHmn75Zo.js";var o=n(t(),1),s=e(),c=new Set([`script`,`style`,`template`]),l=new Set([`http:`,`https:`,`mailto:`,`tel:`]);function u(e){let t=e.trim();if(t.length!==0)try{let e=new URL(t,`https://issuary.invalid`);return l.has(e.protocol)?t:void 0}catch{return}}function d(e,t){return Array.from(e.childNodes,(e,n)=>(0,s.jsx)(o.Fragment,{children:p(e,t)},n))}function f(e,t){switch(e){case`h1`:return(0,s.jsx)(r,{as:`h1`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`headingLg`,weight:`heading`,children:t});case`h2`:return(0,s.jsx)(r,{as:`h2`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`headingMd`,weight:`heading`,children:t});case`h3`:return(0,s.jsx)(r,{as:`h3`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`headingSm`,weight:`heading`,children:t});case`h4`:return(0,s.jsx)(r,{as:`h4`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`body`,weight:`heading`,children:t});case`h5`:return(0,s.jsx)(r,{as:`h5`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`bodySm`,weight:`heading`,children:t});default:return(0,s.jsx)(r,{as:`h6`,className:`mt-tinyrack-lg mb-tinyrack-sm`,variant:`caption`,weight:`heading`,children:t})}}function p(e,t){if(e.nodeType===Node.TEXT_NODE)return e.textContent;if(!(e instanceof Element))return null;let n=e.tagName.toLowerCase();if(c.has(n))return null;let o=d(e,t);if(/^h[1-6]$/u.test(n))return f(n,o);switch(n){case`p`:return(0,s.jsx)(r,{as:`p`,className:t===`document`?`mb-tinyrack-md`:void 0,color:t===`notice`?`muted`:`default`,variant:t===`notice`?`caption`:`body`,children:o});case`code`:return(0,s.jsx)(i,{children:o});case`a`:{let t=u(e.getAttribute(`href`)??``);if(t===void 0)return o;let n=e.getAttribute(`target`)===`_blank`;return(0,s.jsx)(a,{href:t,rel:n?`noopener noreferrer`:void 0,target:n?`_blank`:void 0,children:o})}case`ul`:return(0,s.jsx)(`ul`,{className:`mb-tinyrack-md list-disc ps-tinyrack-lg`,children:o});case`ol`:return(0,s.jsx)(`ol`,{className:`mb-tinyrack-md list-decimal ps-tinyrack-lg`,children:o});case`li`:return(0,s.jsx)(r,{as:`li`,variant:t===`notice`?`caption`:`body`,children:o});case`strong`:return(0,s.jsx)(`strong`,{children:o});case`em`:return(0,s.jsx)(`em`,{children:o});case`br`:return(0,s.jsx)(`br`,{});default:return o}}function m({className:e,html:t,variant:n=`document`}){return(0,s.jsx)(`section`,{className:e,children:(0,o.useMemo)(()=>d(new DOMParser().parseFromString(t,`text/html`).body,n),[t,n])})}export{m as t};
|
|
2
|
+
//# sourceMappingURL=design-system-rich-text-B3NzIRoJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-system-rich-text-B3NzIRoJ.js","names":[],"sources":["../../../frontend/src/components/ui/design-system-rich-text.tsx"],"sourcesContent":["import { TRCode } from '@tinyrack/ui/components/code';\nimport { TRLink } from '@tinyrack/ui/components/link';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { Fragment, type ReactNode, useMemo } from 'react';\n\ntype DesignSystemRichTextVariant = 'notice' | 'document';\n\ntype DesignSystemRichTextProps = {\n className?: string;\n html: string;\n variant?: DesignSystemRichTextVariant;\n};\n\nconst BLOCKED_ELEMENTS = new Set(['script', 'style', 'template']);\nconst SAFE_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\nfunction safeHref(value: string): string | undefined {\n const trimmedValue = value.trim();\n if (trimmedValue.length === 0) return undefined;\n\n try {\n const url = new URL(trimmedValue, 'https://issuary.invalid');\n return SAFE_PROTOCOLS.has(url.protocol) ? trimmedValue : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction renderChildren(\n node: Node,\n variant: DesignSystemRichTextVariant,\n): ReactNode[] {\n return Array.from(node.childNodes, (child, index) => (\n <Fragment key={index}>{renderNode(child, variant)}</Fragment>\n ));\n}\n\nfunction renderHeading(level: string, children: ReactNode[]): ReactNode {\n switch (level) {\n case 'h1':\n return (\n <TRText\n as=\"h1\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"headingLg\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n case 'h2':\n return (\n <TRText\n as=\"h2\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"headingMd\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n case 'h3':\n return (\n <TRText\n as=\"h3\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"headingSm\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n case 'h4':\n return (\n <TRText\n as=\"h4\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"body\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n case 'h5':\n return (\n <TRText\n as=\"h5\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"bodySm\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n default:\n return (\n <TRText\n as=\"h6\"\n className=\"mt-tinyrack-lg mb-tinyrack-sm\"\n variant=\"caption\"\n weight=\"heading\"\n >\n {children}\n </TRText>\n );\n }\n}\n\nfunction renderNode(\n node: Node,\n variant: DesignSystemRichTextVariant,\n): ReactNode {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent;\n if (!(node instanceof Element)) return null;\n\n const tagName = node.tagName.toLowerCase();\n if (BLOCKED_ELEMENTS.has(tagName)) return null;\n const children = renderChildren(node, variant);\n\n if (/^h[1-6]$/u.test(tagName)) return renderHeading(tagName, children);\n\n switch (tagName) {\n case 'p':\n return (\n <TRText\n as=\"p\"\n className={variant === 'document' ? 'mb-tinyrack-md' : undefined}\n color={variant === 'notice' ? 'muted' : 'default'}\n variant={variant === 'notice' ? 'caption' : 'body'}\n >\n {children}\n </TRText>\n );\n case 'code':\n return <TRCode>{children}</TRCode>;\n case 'a': {\n const href = safeHref(node.getAttribute('href') ?? '');\n if (href === undefined) return children;\n const opensNewWindow = node.getAttribute('target') === '_blank';\n return (\n <TRLink\n href={href}\n rel={opensNewWindow ? 'noopener noreferrer' : undefined}\n target={opensNewWindow ? '_blank' : undefined}\n >\n {children}\n </TRLink>\n );\n }\n case 'ul':\n return (\n <ul className=\"mb-tinyrack-md list-disc ps-tinyrack-lg\">{children}</ul>\n );\n case 'ol':\n return (\n <ol className=\"mb-tinyrack-md list-decimal ps-tinyrack-lg\">\n {children}\n </ol>\n );\n case 'li':\n return (\n <TRText as=\"li\" variant={variant === 'notice' ? 'caption' : 'body'}>\n {children}\n </TRText>\n );\n case 'strong':\n return <strong>{children}</strong>;\n case 'em':\n return <em>{children}</em>;\n case 'br':\n return <br />;\n default:\n return children;\n }\n}\n\nexport function DesignSystemRichText({\n className,\n html,\n variant = 'document',\n}: DesignSystemRichTextProps) {\n const content = useMemo(() => {\n const document = new DOMParser().parseFromString(html, 'text/html');\n return renderChildren(document.body, variant);\n }, [html, variant]);\n\n return <section className={className}>{content}</section>;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{K as e,X as t,Z as n,et as r,i,n as a,s as o}from"./createLucideIcon-D-yizrWN.js";import{Ar as s,f as c,i as l,r as u,t as d}from"./config-C18-l7z7.js";import{t as f}from"./mutationOptions-Cv_vJkJn.js";import{t as p}from"./useMutation-DqIIIiBW.js";import{Dt as m}from"./shell-header-bar-CdOEWmCT.js";import{t as h}from"./circle-check-Cnzuu7xR.js";import{t as g}from"./auth-field-BpJ4AHtU.js";import{t as _}from"./key-round-BxWppK6h.js";import{t as v}from"./mail-DVP_XMUi.js";import{c as y,o as b}from"./zod-Dszyrytb.js";import{E as x,F as S,K as C,L as w,V as T,_ as E,z as D}from"./index-lTEyHSus.js";import{t as O}from"./auth-page-header-ChaCNNrn.js";import{t as k}from"./alert-D3aaK-_3.js";import{t as A}from"./auth-layout-BdRRr0vT.js";import{t as j}from"./form-sJw-V9wb.js";import{t as M}from"./promise-OpBtq8tG.js";import{r as N,t as P}from"./standard-schema-C50nwAaQ.js";import{t as F}from"./labeled-separator-DdkyYDWH.js";var I=r(n()),ee=f({mutationFn:async e=>l(await u.api.auth.email.verify.$post({json:e}))}),L=f({mutationFn:async e=>l(await u.api.auth.email.resend.$post({json:e,header:{}}))}),R=t();function z(){let{t}=i(),n=C(),r=s(),l=E.useSearch(),{token:u,email:f}=l,[z,B]=(0,I.useState)(!1),[V,H]=(0,I.useState)(!1),U=c.useToastManager(),{data:W}=m(d),G=(0,I.useMemo)(()=>b({token:y().min(1,t(`validation.token.required`))}),[t]),K=p({...ee,onSuccess:async e=>{let t=e.user;if(r.setQueryData(x.queryKey,{user:t}),await M(),t.second_factor_required){let e=[];return W.auth.password.totp.enabled&&e.push(`totp`),W.auth.passkey.enabled&&e.push(`passkey`),e.length===1?e[0]===`totp`?n({to:`/setup/totp`,search:w(l)}):n({to:`/setup/passkey`,search:w(l)}):n({to:`/setup/2fa`,search:w(l)})}D(l)?window.location.href=S(l):B(!0)},onSettled:()=>{r.invalidateQueries({queryKey:x.queryKey})}}),q=p({...L,onSuccess:()=>{U.add({title:t(`verifyEmail.resendSuccess`),type:`success`}),H(!0),setTimeout(()=>H(!1),5e3)}}),{register:J,setError:Y,handleSubmit:X,formState:{errors:Z}}=N({defaultValues:{token:u||``},resolver:P(G)}),Q=async e=>{try{await K.mutateAsync(e)}catch{Y(`token`,{type:`manual`,message:t(`verifyEmail.error.invalidToken`)})}},$=async()=>{if(f)try{await q.mutateAsync({email:f})}catch{}};return z?(0,R.jsx)(A,{children:(0,R.jsx)(`div`,{"data-testid":`alert-success`,children:(0,R.jsx)(T,{description:(0,R.jsxs)(R.Fragment,{children:[t(`verifyEmail.success.subtitle`),(0,R.jsx)(`br`,{}),t(`verifyEmail.success.description`)]}),icon:h,title:t(`verifyEmail.success.title`),tone:`success`,children:(0,R.jsx)(o,{className:`w-full`,"data-testid":`email-verify-go-profile`,intent:`primary`,onClick:()=>n({to:`/profile`}),type:`button`,uiSize:`lg`,children:t(`verifyEmail.success.goToProfile`)})})})}):(0,R.jsxs)(A,{children:[(0,R.jsx)(O,{subtitle:t(`verifyEmail.subtitle`),title:t(`verifyEmail.title`)}),f&&(0,R.jsx)(k,{icon:v,type:`info`,children:(0,R.jsxs)(`span`,{className:`flex flex-col gap-tinyrack-3xs text-left`,children:[(0,R.jsx)(a,{variant:`body`,weight:`strong`,children:t(`register.success.subtitle`)}),(0,R.jsx)(a,{color:`muted`,variant:`caption`,children:t(`register.success.description`,{email:f})})]})}),(0,R.jsxs)(j,{className:`flex flex-col gap-tinyrack-lg`,onSubmit:X(Q),children:[(0,R.jsx)(g,{error:Z.token,icon:_,label:t(`verifyEmail.token.label`),placeholder:t(`verifyEmail.token.placeholder`),...J(`token`),type:`text`}),(0,R.jsx)(o,{className:`w-full`,intent:`primary`,loading:K.isPending,loadingLabel:t(`verifyEmail.submitting`),type:`submit`,uiSize:`lg`,children:t(`verifyEmail.submit`)})]}),f&&(0,R.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-md`,children:[(0,R.jsx)(F,{}),(0,R.jsx)(o,{appearance:`ghost`,className:`w-full`,"data-testid":`email-verify-resend`,disabled:q.isPending||V,intent:`neutral`,onClick:$,type:`button`,uiSize:`lg`,children:q.isPending?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(e,{uiSize:`sm`}),t(`verifyEmail.resending`)]}):t(`verifyEmail.resend`)})]})]})}export{z as component};
|
|
2
|
+
//# sourceMappingURL=email-Bx9JlWp3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-Bx9JlWp3.js","names":["standardSchemaResolver","useMutation","useQueryClient","useSuspenseQuery","useNavigate","TRButton","TRForm","TRSpinner","TRText","TRToast","CircleCheckIcon","KeyRoundIcon","MailIcon","useMemo","useState","useForm","useTranslation","z","AuthField","AuthOutcome","AuthPageHeader","Alert","LabeledSeparator","AuthLayout","buildAuthenticatedAuthorizeUrl","extractOAuthParams","isOAuthFlow","tick","appConfigQueryOptions","getSessionQueryOptions","resendVerificationMutationOptions","verifyEmailMutationOptions","Route","VerifyEmailFormValues","token","VerifyEmail","t","navigate","queryClient","search","useSearch","queryToken","email","verified","setVerified","resendCooldown","setResendCooldown","toast","useToastManager","data","appConfig","verifyEmailSchema","object","string","min","verifyEmailMutation","onSuccess","user","setQueryData","queryKey","second_factor_required","available_2fa_methods","SecondFactorMethod","auth","password","totp","enabled","push","passkey","length","method","to","window","location","href","onSettled","invalidateQueries","resendVerificationMutation","add","title","type","setTimeout","register","setError","handleSubmit","formState","errors","defaultValues","resolver","onSubmit","values","mutateAsync","_error","message","handleResend","isPending","component"],"sources":["../../../frontend/src/queries/verify-email.ts","../../../frontend/src/routes/verify/email/index.tsx?tsr-split=component"],"sourcesContent":["import { mutationOptions } from '@tanstack/react-query';\nimport type { InferRequestType, InferResponseType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\nexport type VerifyEmailParams = InferRequestType<\n (typeof client.api.auth.email.verify)['$post']\n>['json'];\n\nexport type VerifyEmailResponse = InferResponseType<\n (typeof client.api.auth.email.verify)['$post'],\n 200\n>;\n\nexport const verifyEmailMutationOptions = mutationOptions({\n mutationFn: async (values: VerifyEmailParams) => {\n const res = await client.api.auth.email.verify.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\nexport type ResendVerificationParams = InferRequestType<\n (typeof client.api.auth.email.resend)['$post']\n>['json'];\n\nexport type ResendVerificationResponse = InferResponseType<\n (typeof client.api.auth.email.resend)['$post'],\n 200\n>;\n\nexport const resendVerificationMutationOptions = mutationOptions({\n mutationFn: async (values: ResendVerificationParams) => {\n const res = await client.api.auth.email.resend.$post({\n json: values,\n header: {},\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 { createFileRoute, redirect, useNavigate } from '@tanstack/react-router';\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 { TRToast } from '@tinyrack/ui/components/toast';\nimport { CircleCheckIcon, KeyRoundIcon, MailIcon } from 'lucide-react';\nimport { 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 { AuthOutcome } from '#frontend/components/auth/auth-outcome.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { LabeledSeparator } from '#frontend/components/ui/labeled-separator.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\n\nimport {\n buildAuthenticatedAuthorizeUrl,\n extractOAuthParams,\n isOAuthFlow,\n OAuthSearchSchema,\n type SecondFactorMethod,\n} from '#frontend/libs/oauth-search.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n resendVerificationMutationOptions,\n verifyEmailMutationOptions,\n} from '#frontend/queries/verify-email.ts';\n\nconst SearchSchema = z.object({\n ...OAuthSearchSchema.shape,\n token: z.string().default(''),\n email: z.string().default(''),\n});\n\nexport const Route = createFileRoute('/verify/email/')({\n component: VerifyEmail,\n errorComponent: RouteErrorFallback,\n validateSearch: SearchSchema,\n beforeLoad: async ({ context }) => {\n const config = await context.queryClient.ensureQueryData(\n appConfigQueryOptions,\n );\n const isPasswordAuthEnabled = config.auth.password.enabled;\n if (!isPasswordAuthEnabled) {\n throw redirect({ to: '/login' });\n }\n },\n loader: async ({ context }) => {\n await context.queryClient.ensureQueryData(appConfigQueryOptions);\n },\n});\n\ntype VerifyEmailFormValues = {\n token: string;\n};\n\nfunction VerifyEmail() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n const { token: queryToken, email } = search;\n const [verified, setVerified] = useState(false);\n const [resendCooldown, setResendCooldown] = useState(false);\n const toast = TRToast.useToastManager();\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n\n const verifyEmailSchema = useMemo(\n () =>\n z.object({\n token: z.string().min(1, t('validation.token.required')),\n }),\n [t],\n );\n\n const verifyEmailMutation = useMutation({\n ...verifyEmailMutationOptions,\n onSuccess: async (data) => {\n const user = data.user;\n\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: user,\n });\n await tick();\n\n if (user.second_factor_required) {\n const available_2fa_methods: SecondFactorMethod[] = [];\n if (appConfig.auth.password.totp.enabled) {\n available_2fa_methods.push('totp');\n }\n if (appConfig.auth.passkey.enabled) {\n available_2fa_methods.push('passkey');\n }\n\n if (available_2fa_methods.length === 1) {\n const method = available_2fa_methods[0];\n if (method === 'totp') {\n return navigate({\n to: '/setup/totp',\n search: extractOAuthParams(search),\n });\n } else {\n return navigate({\n to: '/setup/passkey',\n search: extractOAuthParams(search),\n });\n }\n } else {\n return navigate({\n to: '/setup/2fa',\n search: extractOAuthParams(search),\n });\n }\n }\n\n if (isOAuthFlow(search)) {\n window.location.href = buildAuthenticatedAuthorizeUrl(search);\n } else {\n setVerified(true);\n }\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const resendVerificationMutation = useMutation({\n ...resendVerificationMutationOptions,\n onSuccess: () => {\n toast.add({ title: t('verifyEmail.resendSuccess'), type: 'success' });\n // Separate from the message: a short cooldown so the button cannot be\n // used to spam the address with mail.\n setResendCooldown(true);\n setTimeout(() => setResendCooldown(false), 5000);\n },\n });\n\n const {\n register,\n setError,\n handleSubmit,\n formState: { errors },\n } = useForm<VerifyEmailFormValues>({\n defaultValues: {\n token: queryToken || '',\n },\n resolver: standardSchemaResolver(verifyEmailSchema),\n });\n\n const onSubmit = async (values: VerifyEmailFormValues) => {\n try {\n await verifyEmailMutation.mutateAsync(values);\n } catch (_error) {\n setError('token', {\n type: 'manual',\n message: t('verifyEmail.error.invalidToken'),\n });\n }\n };\n\n const handleResend = async () => {\n if (!email) {\n return;\n }\n try {\n await resendVerificationMutation.mutateAsync({ email });\n } catch (_error) {}\n };\n\n if (verified) {\n return (\n <AuthLayout>\n {/*\n The testid stays on a wrapper: e2e treats \"the success alert\" as the\n whole terminal state, which is now the outcome block rather than a\n banner stacked above a header.\n */}\n <div data-testid=\"alert-success\">\n <AuthOutcome\n description={\n <>\n {t('verifyEmail.success.subtitle')}\n <br />\n {t('verifyEmail.success.description')}\n </>\n }\n icon={CircleCheckIcon}\n title={t('verifyEmail.success.title')}\n tone=\"success\"\n >\n <TRButton\n className=\"w-full\"\n data-testid=\"email-verify-go-profile\"\n intent=\"primary\"\n onClick={() => navigate({ to: '/profile' })}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('verifyEmail.success.goToProfile')}\n </TRButton>\n </AuthOutcome>\n </div>\n </AuthLayout>\n );\n }\n\n return (\n <AuthLayout>\n <AuthPageHeader\n subtitle={t('verifyEmail.subtitle')}\n title={t('verifyEmail.title')}\n />\n\n {email && (\n <Alert icon={MailIcon} type=\"info\">\n <span className=\"flex flex-col gap-tinyrack-3xs text-left\">\n <TRText variant=\"body\" weight=\"strong\">\n {t('register.success.subtitle')}\n </TRText>\n <TRText color=\"muted\" variant=\"caption\">\n {t('register.success.description', { email })}\n </TRText>\n </span>\n </Alert>\n )}\n\n <TRForm\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <AuthField\n error={errors.token}\n icon={KeyRoundIcon}\n label={t('verifyEmail.token.label')}\n placeholder={t('verifyEmail.token.placeholder')}\n {...register('token')}\n type=\"text\"\n />\n\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={verifyEmailMutation.isPending}\n loadingLabel={t('verifyEmail.submitting')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('verifyEmail.submit')}\n </TRButton>\n </TRForm>\n\n {email && (\n <div className=\"flex flex-col gap-tinyrack-md\">\n <LabeledSeparator />\n\n <TRButton\n appearance=\"ghost\"\n className=\"w-full\"\n data-testid=\"email-verify-resend\"\n disabled={resendVerificationMutation.isPending || resendCooldown}\n intent=\"neutral\"\n onClick={handleResend}\n type=\"button\"\n uiSize=\"lg\"\n >\n {resendVerificationMutation.isPending ? (\n <>\n <TRSpinner uiSize=\"sm\" />\n {t('verifyEmail.resending')}\n </>\n ) : (\n t('verifyEmail.resend')\n )}\n </TRButton>\n </div>\n )}\n </AuthLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-Cpfhakvn.js","names":["RouteErrorFallback","VerifyEmailFormValues","token","SplitErrorComponent","errorComponent"],"sources":["../../../frontend/src/routes/verify/email/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { createFileRoute, redirect, useNavigate } from '@tanstack/react-router';\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 { TRToast } from '@tinyrack/ui/components/toast';\nimport { CircleCheckIcon, KeyRoundIcon, MailIcon } from 'lucide-react';\nimport { 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 { AuthOutcome } from '#frontend/components/auth/auth-outcome.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { LabeledSeparator } from '#frontend/components/ui/labeled-separator.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\n\nimport {\n buildAuthenticatedAuthorizeUrl,\n extractOAuthParams,\n isOAuthFlow,\n OAuthSearchSchema,\n type SecondFactorMethod,\n} from '#frontend/libs/oauth-search.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n resendVerificationMutationOptions,\n verifyEmailMutationOptions,\n} from '#frontend/queries/verify-email.ts';\n\nconst SearchSchema = z.object({\n ...OAuthSearchSchema.shape,\n token: z.string().default(''),\n email: z.string().default(''),\n});\n\nexport const Route = createFileRoute('/verify/email/')({\n component: VerifyEmail,\n errorComponent: RouteErrorFallback,\n validateSearch: SearchSchema,\n beforeLoad: async ({ context }) => {\n const config = await context.queryClient.ensureQueryData(\n appConfigQueryOptions,\n );\n const isPasswordAuthEnabled = config.auth.password.enabled;\n if (!isPasswordAuthEnabled) {\n throw redirect({ to: '/login' });\n }\n },\n loader: async ({ context }) => {\n await context.queryClient.ensureQueryData(appConfigQueryOptions);\n },\n});\n\ntype VerifyEmailFormValues = {\n token: string;\n};\n\nfunction VerifyEmail() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n const { token: queryToken, email } = search;\n const [verified, setVerified] = useState(false);\n const [resendCooldown, setResendCooldown] = useState(false);\n const toast = TRToast.useToastManager();\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n\n const verifyEmailSchema = useMemo(\n () =>\n z.object({\n token: z.string().min(1, t('validation.token.required')),\n }),\n [t],\n );\n\n const verifyEmailMutation = useMutation({\n ...verifyEmailMutationOptions,\n onSuccess: async (data) => {\n const user = data.user;\n\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: user,\n });\n await tick();\n\n if (user.second_factor_required) {\n const available_2fa_methods: SecondFactorMethod[] = [];\n if (appConfig.auth.password.totp.enabled) {\n available_2fa_methods.push('totp');\n }\n if (appConfig.auth.passkey.enabled) {\n available_2fa_methods.push('passkey');\n }\n\n if (available_2fa_methods.length === 1) {\n const method = available_2fa_methods[0];\n if (method === 'totp') {\n return navigate({\n to: '/setup/totp',\n search: extractOAuthParams(search),\n });\n } else {\n return navigate({\n to: '/setup/passkey',\n search: extractOAuthParams(search),\n });\n }\n } else {\n return navigate({\n to: '/setup/2fa',\n search: extractOAuthParams(search),\n });\n }\n }\n\n if (isOAuthFlow(search)) {\n window.location.href = buildAuthenticatedAuthorizeUrl(search);\n } else {\n setVerified(true);\n }\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const resendVerificationMutation = useMutation({\n ...resendVerificationMutationOptions,\n onSuccess: () => {\n toast.add({ title: t('verifyEmail.resendSuccess'), type: 'success' });\n // Separate from the message: a short cooldown so the button cannot be\n // used to spam the address with mail.\n setResendCooldown(true);\n setTimeout(() => setResendCooldown(false), 5000);\n },\n });\n\n const {\n register,\n setError,\n handleSubmit,\n formState: { errors },\n } = useForm<VerifyEmailFormValues>({\n defaultValues: {\n token: queryToken || '',\n },\n resolver: standardSchemaResolver(verifyEmailSchema),\n });\n\n const onSubmit = async (values: VerifyEmailFormValues) => {\n try {\n await verifyEmailMutation.mutateAsync(values);\n } catch (_error) {\n setError('token', {\n type: 'manual',\n message: t('verifyEmail.error.invalidToken'),\n });\n }\n };\n\n const handleResend = async () => {\n if (!email) {\n return;\n }\n try {\n await resendVerificationMutation.mutateAsync({ email });\n } catch (_error) {}\n };\n\n if (verified) {\n return (\n <AuthLayout>\n {/*\n The testid stays on a wrapper: e2e treats \"the success alert\" as the\n whole terminal state, which is now the outcome block rather than a\n banner stacked above a header.\n */}\n <div data-testid=\"alert-success\">\n <AuthOutcome\n description={\n <>\n {t('verifyEmail.success.subtitle')}\n <br />\n {t('verifyEmail.success.description')}\n </>\n }\n icon={CircleCheckIcon}\n title={t('verifyEmail.success.title')}\n tone=\"success\"\n >\n <TRButton\n className=\"w-full\"\n data-testid=\"email-verify-go-profile\"\n intent=\"primary\"\n onClick={() => navigate({ to: '/profile' })}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('verifyEmail.success.goToProfile')}\n </TRButton>\n </AuthOutcome>\n </div>\n </AuthLayout>\n );\n }\n\n return (\n <AuthLayout>\n <AuthPageHeader\n subtitle={t('verifyEmail.subtitle')}\n title={t('verifyEmail.title')}\n />\n\n {email && (\n <Alert icon={MailIcon} type=\"info\">\n <span className=\"flex flex-col gap-tinyrack-3xs text-left\">\n <TRText variant=\"body\" weight=\"strong\">\n {t('register.success.subtitle')}\n </TRText>\n <TRText color=\"muted\" variant=\"caption\">\n {t('register.success.description', { email })}\n </TRText>\n </span>\n </Alert>\n )}\n\n <TRForm\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <AuthField\n error={errors.token}\n icon={KeyRoundIcon}\n label={t('verifyEmail.token.label')}\n placeholder={t('verifyEmail.token.placeholder')}\n {...register('token')}\n type=\"text\"\n />\n\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={verifyEmailMutation.isPending}\n loadingLabel={t('verifyEmail.submitting')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('verifyEmail.submit')}\n </TRButton>\n </TRForm>\n\n {email && (\n <div className=\"flex flex-col gap-tinyrack-md\">\n <LabeledSeparator />\n\n <TRButton\n appearance=\"ghost\"\n className=\"w-full\"\n data-testid=\"email-verify-resend\"\n disabled={resendVerificationMutation.isPending || resendCooldown}\n intent=\"neutral\"\n onClick={handleResend}\n type=\"button\"\n uiSize=\"lg\"\n >\n {resendVerificationMutation.isPending ? (\n <>\n <TRSpinner uiSize=\"sm\" />\n {t('verifyEmail.resending')}\n </>\n ) : (\n t('verifyEmail.resend')\n )}\n </TRButton>\n </div>\n )}\n </AuthLayout>\n );\n}\n"],"mappings":"wCAkEE,IAAAG,EA5COH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{X as e,i as t,n,s as r}from"./createLucideIcon-D-yizrWN.js";import{An as i,Mn as a}from"./config-C18-l7z7.js";import{H as o,U as s,V as c,W as l}from"./index-lTEyHSus.js";import{t as u}from"./auth-layout-BdRRr0vT.js";import{n as d,t as f}from"./auth-footer-Du6S-oDG.js";var p=e();function m(){let{t:e}=t(),m=a({from:`/error/`}),h=m.code||`UNKNOWN_ERROR`;return(0,p.jsxs)(u,{children:[(0,p.jsxs)(c,{description:m.message||e(`error.defaultMessage`),icon:o,title:e(`error.subtitle`),tone:`danger`,children:[(0,p.jsxs)(n,{color:`muted`,variant:`caption`,children:[e(`error.codeLabel`),` `,(0,p.jsx)(l,{"data-testid":`error-code`,children:h})]}),(0,p.jsx)(s,{className:`w-full`,intent:`primary`,render:(0,p.jsx)(i,{to:`/login`}),uiSize:`lg`,children:e(`error.goToLogin`)}),(0,p.jsx)(r,{appearance:`ghost`,className:`w-full`,intent:`neutral`,onClick:()=>window.history.back(),type:`button`,uiSize:`lg`,children:e(`error.goBack`)})]}),(0,p.jsx)(f,{children:(0,p.jsx)(d,{link:(0,p.jsx)(`a`,{href:`mailto:support@example.com`,children:e(`error.footer.contactSupport`)}),text:e(`error.footer.needHelp`)})})]})}export{m as component};
|
|
2
|
+
//# sourceMappingURL=error-DDY8m_Px.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-DDY8m_Px.js","names":["Link","useSearch","TRButton","TRCode","TRLinkButton","TRText","CircleAlertIcon","useTranslation","AuthFooter","AuthFooterLink","AuthOutcome","AuthLayout","ErrorPage","t","search","from","errorCode","code","errorMessage","message","window","history","back","component"],"sources":["../../../frontend/src/routes/error/index.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute, Link, useSearch } from '@tanstack/react-router';\nimport { TRButton } from '@tinyrack/ui/components/button';\nimport { TRCode } from '@tinyrack/ui/components/code';\nimport { TRLinkButton } from '@tinyrack/ui/components/link-button';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { CircleAlertIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport {\n AuthFooter,\n AuthFooterLink,\n} from '#frontend/components/auth/auth-footer.tsx';\nimport { AuthOutcome } from '#frontend/components/auth/auth-outcome.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\n\nconst errorSearchSchema = z.object({\n code: z.string().optional(),\n message: z.string().optional(),\n});\n\nexport const Route = createFileRoute('/error/')({\n component: ErrorPage,\n validateSearch: errorSearchSchema,\n});\n\nfunction ErrorPage() {\n const { t } = useTranslation();\n const search = useSearch({ from: '/error/' });\n\n const errorCode = search.code || 'UNKNOWN_ERROR';\n const errorMessage = search.message || t('error.defaultMessage');\n\n return (\n <AuthLayout>\n {/*\n Nothing to do here but report what happened, so this is the shared\n terminal-state composition rather than an alert stacked on a header.\n */}\n <AuthOutcome\n description={errorMessage}\n icon={CircleAlertIcon}\n title={t('error.subtitle')}\n tone=\"danger\"\n >\n {/*\n Mono on the code itself, not the label: a font utility on `TRText`\n loses to the component's own per-variant `font-family` rule, and only\n the identifier needs fixed-width anyway.\n */}\n <TRText color=\"muted\" variant=\"caption\">\n {t('error.codeLabel')}{' '}\n <TRCode data-testid=\"error-code\">{errorCode}</TRCode>\n </TRText>\n\n <TRLinkButton\n className=\"w-full\"\n intent=\"primary\"\n render={<Link to=\"/login\" />}\n uiSize=\"lg\"\n >\n {t('error.goToLogin')}\n </TRLinkButton>\n <TRButton\n appearance=\"ghost\"\n className=\"w-full\"\n intent=\"neutral\"\n onClick={() => window.history.back()}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('error.goBack')}\n </TRButton>\n </AuthOutcome>\n\n <AuthFooter>\n <AuthFooterLink\n link={\n <a href=\"mailto:support@example.com\">\n {t('error.footer.contactSupport')}\n </a>\n }\n text={t('error.footer.needHelp')}\n />\n </AuthFooter>\n </AuthLayout>\n );\n}\n"],"mappings":"+RAyBA,SAASY,GAAY,CACnB,GAAM,CAAEC,KAAMN,EAAe,EACvBO,EAASb,EAAU,CAAEc,KAAM,SAAU,CAAC,EAEtCC,EAAYF,EAAOG,MAAQ,gBAGjC,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EAKE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,YATeH,EAAOK,SAAWN,EAAE,sBAAsB,EAUzD,KAAMP,EACN,MAAOO,EAAE,gBAAgB,EACzB,KAAK,kBAJP,EAWE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,mBAA9B,CACGA,EAAE,iBAAiB,EAAG,KACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,cAAY,sBAAcG,CAAkB,CAAA,CAC9C,KAER,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,SACV,OAAO,UACP,QAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAG,QAAQ,CAAA,EACzB,OAAO,cAENH,EAAE,iBAAiB,CACR,CAAA,GACd,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAW,QACX,UAAU,SACV,OAAO,UACP,YAAeO,OAAOC,QAAQC,KAAK,EACnC,KAAK,SACL,OAAO,cAENT,EAAE,cAAc,CACT,CAAA,CACC,KAEb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,KAAK,sCACLA,EAAE,6BAA6B,CAC/B,CAAA,EAEL,KAAMA,EAAE,uBAAuB,CAAE,CAAA,CAEzB,CAAA,CACF,CAAA,CAAA,CAEhB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{C as e,J as t,S as n,T as r,X as i,Z as a,c as o,d as s,et as c,w as l,x as u}from"./createLucideIcon-D-yizrWN.js";import{On as d,St as f,kn as p,vn as m,vt as h}from"./config-C18-l7z7.js";import{F as g,H as _,L as v,O as y,R as b,U as x,V as S,W as C,xt as w,z as T}from"./shell-header-bar-CdOEWmCT.js";import{n as E,r as D}from"./form-sJw-V9wb.js";import{t as O}from"./FieldControl-ShLuCjvG.js";var k=i(),A=c(a(),1),j=A.createContext(void 0);function M(e=!1){let t=A.useContext(j);if(!t&&!e)throw Error(u(86));return t}var N=function(e){let t=T(),n=e.controlId===void 0?t:e.controlId,[i,a]=A.useState(n),[o,s]=A.useState(e.labelId),[c,u]=A.useState([]),d=r(()=>new Map),{messageIds:f}=b(),p=l((e,t)=>{let n=d.current;if(t===void 0){n.delete(e);return}n.set(e,t),a(e=>{if(n.size===0)return;let t;for(let r of n.values()){if(e!==void 0&&r===e)return e;t===void 0&&(t=r)}return t})}),m=A.useCallback(e=>{let t=e[`aria-describedby`]?e[`aria-describedby`].split(` `):[];return t.push(...f,...c),{...e,"aria-describedby":Array.from(new Set(t)).join(` `)||void 0}},[f,c]),h=A.useMemo(()=>({controlId:i,registerControlId:p,labelId:o,setLabelId:s,messageIds:c,setMessageIds:u,getDescriptionProps:m}),[i,p,o,s,c,u,m]);return(0,k.jsx)(v.Provider,{value:h,children:e.children})};function P(e,t){return{...e,state:{...e.state,valid:!t&&e.state.valid}}}var F=Object.keys(x);function I(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t?!0:e.form===null&&!e.hasAttribute(`form`)}function L(e,t){let n=null;for(let r of e.keys())if(I(r,t)){if(!r.validity.valid)return r;n??=r}return n}function R(e,t){for(let e of t.keys())e.setCustomValidity(``);e?.setCustomValidity(``)}function ee(e){let{elementRef:t,formRef:i}=g(),{setValidityData:a,validate:o,validityData:c,validationDebounceTime:u,invalid:d,markedDirtyRef:f,state:p,shouldValidateOnChange:h,registeredFieldIdRef:_}=e,{controlId:v,getDescriptionProps:y}=b(),S=m(),C=A.useRef(null),w=r(()=>new Map).current,T=A.useRef(0),E=A.useCallback((e,t)=>(w.set(e,t),()=>{w.delete(e)}),[w]),D=l(()=>{let e=L(w,t.current);return e&&w.get(e)?.controlRef.current||null}),O=l(async(e,n=!1)=>{T.current+=1;let r=T.current;function s(e,t=d){let n=_.current??v;if(n==null)return;let r=i.current.fields.get(n);if(!r)return;let a=P(e,t);i.current.fields.set(n,{...r,validityData:a})}function l(t,n){let r={value:e,state:{...x,valid:!0},error:``,errors:[],initialValue:c.initialValue};R(t,w),s(r,n),a(r)}let u=w.size>0?L(w,t.current):C.current;if(n){if(p.valid!==!1||!u)return;let e=u.validity;if(!e.valueMissing){l(u,!1);return}for(let t of F)if(t!==`valid`&&t!==`valueMissing`&&t!==`customError`&&e[t])return}function m(e){let t=F.reduce((t,n)=>(t[n]=e.validity[n],t),{}),n=!1;for(let e of F)if(e!==`valid`){if(e===`valueMissing`&&t[e])n=!0;else if(t[e])return t}return n&&!f.current&&(t.valid=!0,t.valueMissing=!1),t}S.clear();let g=null,y=[],b=u?m(u):{...x,valid:!0},E,D=h();if(u&&u.validationMessage&&!D)E=u.validationMessage,y=[u.validationMessage];else{let t=Array.from(i.current.fields.values()).reduce((e,t)=>(t.name&&(e[t.name]=t.getValue()),e),{}),n=o(e,t);if(typeof n==`object`&&n&&`then`in n){if(g=await n,r!==T.current)return}else g=n;g===null?D&&(R(u,w),b.customError=!1,u&&u.validationMessage?(E=u.validationMessage,y=[u.validationMessage]):(!u||u.validity.valid)&&!b.valid&&(b.valid=!0)):(b.valid=!1,b.customError=!0,Array.isArray(g)?(y=g,u?.setCustomValidity(g.join(`
|
|
2
|
+
`))):g&&(y=[g],u?.setCustomValidity(g)))}let O={value:e,state:b,error:E??(Array.isArray(g)?g[0]:g??``),errors:y,initialValue:c.initialValue};s(O),a(O)}),k=l(e=>{S.clear();let t=h();t&&e!==``&&u?(T.current+=1,S.start(u,()=>{O(e)})):O(e,!t)}),j=A.useCallback((e,t={})=>n(y(t),p.valid===!1&&!p.disabled&&!e?{"aria-invalid":!0}:s),[y,p.disabled,p.valid]);return A.useMemo(()=>({getValidationProps:j,inputRef:C,registeredInputs:w,registerInput:E,getInputControl:D,commit:O,change:k}),[j,w,E,D,O,k])}function te(t){let{commit:n,invalid:r,markedDirtyRef:i,name:a,setRegisteredFieldName:o,registeredFieldIdRef:s,setValidityData:c,validityData:u}=t,{formRef:d}=g(),f=A.useRef(null),p=A.useRef(null),m=A.useRef(!1),h=l(()=>{let e=p.current;if(e)return e.getValue?e.getValue():e.value});function _(e){return e.value===void 0?h():e.value}let v=l(()=>{let e=p.current;if(i.current=!0,!e){n(u.value);return}n(_(e))});function y(){let e=p.current;!e||!e.id||d.current.fields.set(e.id,{getValue:h,name:a??e.name,controlRef:e.controlRef,validityData:P(u,r),validate:v})}function b(e=p.current?.id){e&&d.current.fields.delete(e)}function x(e){if(m.current)return;m.current=!0;let t=_(e);c(e=>e.initialValue===t?e:{...e,initialValue:t})}return e(()=>{let e=p.current;!e||!e.id||(o(a?void 0:e.name),d.current.fields.set(e.id,{getValue:h,name:a??e.name,controlRef:e.controlRef,validityData:P(u,r),validate:v}))},[d,h,r,a,o,v,u]),e(()=>{let e=d.current.fields;return()=>{let t=p.current?.id;t&&e.delete(t)}},[d]),[v,l((e,t)=>{if(!t){f.current===e&&(f.current=null,b(),p.current=null,o(void 0),s.current=void 0);return}let n=p.current?.id;f.current=e,p.current=t,a||o(t.name),s.current=t.id,n&&n!==t.id&&b(n),x(t),y()})]}var z=A.forwardRef(function(t,n){let{errors:r,validationMode:i,submitAttemptedRef:a}=g(),{render:s,className:c,validate:u,validationDebounceTime:d=0,validationMode:f=i,name:p,disabled:m=!1,invalid:h,dirty:_,touched:v,actionsRef:y,style:b,...w}=t,T=M(!0)?.disabled,E=l(u||(()=>null)),D=T||m,[O,j]=A.useState(!1),[N,P]=A.useState(!1),[F,I]=A.useState(!1),[L,R]=A.useState(!1),z=_??N,B=v??O,V=A.useRef(z),H=A.useRef(void 0),[U,ne]=A.useState(),W=p??U;e(()=>{_!==void 0&&(V.current=_)},[_]);let G=l(e=>{_===void 0&&(e&&(V.current=!0),P(e))}),K=l(e=>{v===void 0&&j(e)}),q=l(()=>f===`onChange`||f===`onSubmit`&&a.current),J=W&&Object.hasOwn(r,W)?r[W]:null,re=!!(Array.isArray(J)?J.length:J),Y=h===!0||re,[X,Z]=A.useState({state:x,error:``,errors:[],value:null,initialValue:null}),ie=!Y&&(D?null:X.state.valid),Q=A.useMemo(()=>({disabled:D,touched:B,dirty:z,valid:ie,filled:F,focused:L}),[D,B,z,ie,F,L]),$=ee({setValidityData:Z,validate:E,validityData:X,validationDebounceTime:d,invalid:Y,markedDirtyRef:V,state:Q,shouldValidateOnChange:q,registeredFieldIdRef:H}),[ae,oe]=te({commit:$.commit,invalid:Y,markedDirtyRef:V,name:p,setRegisteredFieldName:ne,registeredFieldIdRef:H,setValidityData:Z,validityData:X});A.useImperativeHandle(y,()=>({validate:ae}),[ae]);let se=A.useMemo(()=>({invalid:Y,name:W,validityData:X,setValidityData:Z,disabled:D,setTouched:K,setDirty:G,setFilled:I,setFocused:R,validationMode:f,shouldValidateOnChange:q,state:Q,registerFieldControl:oe,validation:$}),[Y,W,X,D,K,G,I,R,f,q,Q,oe,$]),ce=o(`div`,t,{ref:n,state:Q,props:w,stateAttributesMapping:C});return(0,k.jsx)(S.Provider,{value:se,children:ce})}),B=A.forwardRef(function(e,t){return(0,k.jsx)(N,{children:(0,k.jsx)(z,{...e,ref:t})})}),V=A.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,nativeLabel:s=!0,...c}=e,l=_(!1),u=D(),{labelId:d}=b(),f={...l.state,disabled:l.disabled||u.disabled},p=A.useRef(null),m=y({id:d??a,native:s});return o(`label`,e,{ref:[t,p],state:f,props:[m,c],stateAttributesMapping:C})}),H={...C,...f},U=A.forwardRef(function(t,n){let{render:r,id:i,className:a,match:s,style:c,...l}=t,u=T(i),{validityData:d,state:f,name:p}=_(!1),{setMessageIds:m}=b(),{errors:v}=g(),y=p&&Object.hasOwn(v,p)?v[p]:null,x=!!(Array.isArray(y)?y.length:y),S=typeof s==`string`,C=!1;C=s===!0?!0:f.disabled?!1:S?!!d.state[s]:x||d.state.valid===!1;let{mounted:E,transitionStatus:D,setMounted:O}=w(C);e(()=>{if(!(!C||!u))return m(e=>e.concat(u)),()=>{m(e=>e.filter(e=>e!==u))}},[C,u,m]);let j=A.useRef(null),[M,N]=A.useState(null),[P,F]=A.useState(null),I=d.error;!S&&x?I=y:d.errors.length>1&&(I=d.errors);let L=I;Array.isArray(I)&&(L=I.length>1?(0,k.jsx)(`ul`,{children:I.map(e=>(0,k.jsx)(`li`,{children:e},e))}):I[0]);let R=Array.isArray(I)?JSON.stringify(I):I;C&&R!==P&&(F(R),N(L)),h({open:C,ref:j,onComplete(){C||O(!1)}});let ee={...f,transitionStatus:D},te=o(`div`,t,{ref:[n,j],state:ee,props:[{id:u,children:C?L:M},l],stateAttributesMapping:H,enabled:E});return E?te:null}),ne=A.forwardRef(function(t,n){let{render:r,id:i,className:a,style:s,...c}=t,l=T(i),u=_(!1),d=D(),{setMessageIds:f}=b(),p={...u.state,disabled:u.disabled||d.disabled};return e(()=>{if(l)return f(e=>e.concat(l)),()=>{f(e=>e.filter(e=>e!==l))}},[l,f]),o(`p`,t,{ref:n,state:p,props:[{id:l},c],stateAttributesMapping:C})}),W=function(e){let{children:t}=e,{validityData:n,invalid:r}=_(!1),i=A.useMemo(()=>P(n,r),[n,r]),{transitionStatus:a}=w(i.state.valid===!1),o=A.useMemo(()=>({...i,validity:i.state,transitionStatus:a}),[i,a]);return(0,k.jsx)(A.Fragment,{children:t(o)})},G=A.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,...s}=e,{state:c,disabled:l}=_(!1),u=l||a,d={...c,disabled:u},f=A.useMemo(()=>({disabled:u}),[u]),p=o(`div`,e,{ref:t,state:d,props:s,stateAttributesMapping:C});return(0,k.jsx)(N,{children:(0,k.jsx)(E.Provider,{value:f,children:p})})});function K({className:e,uiSize:n=`md`,...r}){return p(),(0,k.jsx)(O,{...r,className:t(`tr-field-control`,e),"data-ui-size":n})}var q=d(ne,`tr-field-description`),J=d(U,`tr-field-error`),re=d(G,`tr-field-item`),Y=d(V,`tr-label`);function X({className:e,...n}){return(0,k.jsx)(B,{...n,className:t(`tr-field`,e)})}var Z={Root:X,Label:Y,Error:J,Description:q,Control:K,Validity:d(W,`tr-field-validity`),Item:re};export{j as n,M as r,Z as t};
|
|
3
|
+
//# sourceMappingURL=field-CsrUbl__.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-CsrUbl__.js","names":["_formatErrorMessage","Field.Control","Field.Description","Field.Error","Field.Item","Field.Label","Field.Root","Field.Validity"],"sources":["../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/fieldset/root/FieldsetRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/labelable-provider/LabelableProvider.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/utils/getCombinedFieldValidityData.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/root/useFieldValidation.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/internals/field-register-control/useFieldControlRegistration.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/root/FieldRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/label/FieldLabel.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/error/FieldError.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/description/FieldDescription.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/validity/FieldValidity.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/item/FieldItem.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/field/field-control.js","../../../../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/field/field-description.js","../../../../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/field/field-error.js","../../../../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/field/field-item.js","../../../../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/field/field-label.js","../../../../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/field/field-root.js","../../../../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/field/field-validity.js","../../../../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/field/index.js"],"sourcesContent":["'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const FieldsetRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") FieldsetRootContext.displayName = \"FieldsetRootContext\";\nexport function useFieldsetRootContext(optional = false) {\n const context = React.useContext(FieldsetRootContext);\n if (!context && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: FieldsetRootContext is missing. Fieldset parts must be placed within <Fieldset.Root>.' : _formatErrorMessage(86));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { useBaseUiId } from \"../useBaseUiId.mjs\";\nimport { LabelableContext, useLabelableContext } from \"./LabelableContext.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const LabelableProvider = function LabelableProvider(props) {\n const defaultId = useBaseUiId();\n const initialControlId = props.controlId === undefined ? defaultId : props.controlId;\n const [controlId, setControlIdState] = React.useState(initialControlId);\n const [labelId, setLabelId] = React.useState(props.labelId);\n const [messageIds, setMessageIds] = React.useState([]);\n const registrationsRef = useRefWithInit(() => new Map());\n const {\n messageIds: parentMessageIds\n } = useLabelableContext();\n const registerControlId = useStableCallback((source, nextId) => {\n const registrations = registrationsRef.current;\n if (nextId === undefined) {\n registrations.delete(source);\n return;\n }\n registrations.set(source, nextId);\n\n // Only flush when registering, not when unregistering.\n // This prevents loops during rapid unmount/remount cycles (e.g. React Activity).\n // The next registration will pick up the correct state.\n setControlIdState(prev => {\n if (registrations.size === 0) {\n return undefined;\n }\n let nextControlId;\n for (const id of registrations.values()) {\n if (prev !== undefined && id === prev) {\n return prev;\n }\n if (nextControlId === undefined) {\n nextControlId = id;\n }\n }\n return nextControlId;\n });\n });\n const getDescriptionProps = React.useCallback(externalProps => {\n const ids = externalProps['aria-describedby'] ? externalProps['aria-describedby'].split(' ') : [];\n ids.push(...parentMessageIds, ...messageIds);\n return {\n ...externalProps,\n 'aria-describedby': Array.from(new Set(ids)).join(' ') || undefined\n };\n }, [parentMessageIds, messageIds]);\n const contextValue = React.useMemo(() => ({\n controlId,\n registerControlId,\n labelId,\n setLabelId,\n messageIds,\n setMessageIds,\n getDescriptionProps\n }), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]);\n return /*#__PURE__*/_jsx(LabelableContext.Provider, {\n value: contextValue,\n children: props.children\n });\n};\nif (process.env.NODE_ENV !== \"production\") LabelableProvider.displayName = \"LabelableProvider\";","/**\n * Combines the field's client-side, stateful validity data with the external invalid state to\n * determine the field's true validity.\n */\nexport function getCombinedFieldValidityData(validityData, invalid) {\n return {\n ...validityData,\n state: {\n ...validityData.state,\n valid: !invalid && validityData.state.valid\n }\n };\n}","'use client';\n\nimport * as React from 'react';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { mergeProps } from \"../../merge-props/index.mjs\";\nimport { DEFAULT_VALIDITY_STATE } from \"../../internals/field-constants/constants.mjs\";\nimport { useFormContext } from \"../../internals/form-context/FormContext.mjs\";\nimport { getCombinedFieldValidityData } from \"../utils/getCombinedFieldValidityData.mjs\";\nconst validityKeys = Object.keys(DEFAULT_VALIDITY_STATE);\n/**\n * Whether an input participates in the surrounding Base UI Form. Inputs that are effectively\n * disabled, or whose `form` attribute explicitly associates them with another form, are excluded.\n * DOM position only matters when it associates the input with a different form. Otherwise, field\n * registration is context-driven, so portaled inputs (for example inside a dialog) still belong to\n * the form for both validation and values projected into `onFormSubmit`.\n */\nexport function isEligibleInput(input, formElement) {\n if (input.matches(':disabled')) {\n return false;\n }\n if (!formElement || input.form === formElement) {\n return true;\n }\n\n // React context crosses portal boundaries. An unassociated portaled input still participates in\n // contextual validation, unless an explicit `form` attribute opts it out of the surrounding Form.\n return input.form === null && !input.hasAttribute('form');\n}\n\n/**\n * Picks the input whose native validity should represent a field that owns several inputs (such as a\n * checkbox or radio group). Prefers the first eligible currently-invalid input, where \"first\" follows\n * registration order (mount order), and otherwise returns the first eligible input.\n */\nfunction findRepresentativeInput(inputs, formElement) {\n let fallback = null;\n for (const input of inputs.keys()) {\n if (!isEligibleInput(input, formElement)) {\n continue;\n }\n if (!input.validity.valid) {\n return input;\n }\n fallback ??= input;\n }\n return fallback;\n}\nfunction clearCustomValidity(element, inputs) {\n for (const input of inputs.keys()) {\n input.setCustomValidity('');\n }\n element?.setCustomValidity('');\n}\nexport function useFieldValidation(params) {\n const {\n elementRef,\n formRef\n } = useFormContext();\n const {\n setValidityData,\n validate,\n validityData,\n validationDebounceTime,\n invalid,\n markedDirtyRef,\n state,\n shouldValidateOnChange,\n registeredFieldIdRef\n } = params;\n const {\n controlId,\n getDescriptionProps\n } = useLabelableContext();\n const timeout = useTimeout();\n const inputRef = React.useRef(null);\n const registeredInputs = useRefWithInit(() => new Map()).current;\n const validationCommitIdRef = React.useRef(0);\n\n // Groups register several inputs against a single field so focus, validation, and form-value\n // projection can use the same live controls. This also ensures a `required` checkbox can't be\n // satisfied by another input in the group, matching native per-checkbox behavior.\n const registerInput = React.useCallback((element, registration) => {\n registeredInputs.set(element, registration);\n return () => {\n registeredInputs.delete(element);\n };\n }, [registeredInputs]);\n const getInputControl = useStableCallback(() => {\n const element = findRepresentativeInput(registeredInputs, elementRef.current);\n return element && registeredInputs.get(element)?.controlRef.current || null;\n });\n const commit = useStableCallback(async (value, revalidate = false) => {\n validationCommitIdRef.current += 1;\n const validationCommitId = validationCommitIdRef.current;\n function updateRegisteredFieldValidity(nextValidityData, externalInvalid = invalid) {\n const fieldId = registeredFieldIdRef.current ?? controlId;\n if (fieldId == null) {\n return;\n }\n const currentFieldData = formRef.current.fields.get(fieldId);\n if (!currentFieldData) {\n return;\n }\n const validityDataWithFormErrors = getCombinedFieldValidityData(nextValidityData, externalInvalid);\n formRef.current.fields.set(fieldId, {\n ...currentFieldData,\n validityData: validityDataWithFormErrors\n });\n }\n function publishAllValid(input, externalInvalid) {\n const nextValidityData = {\n value,\n state: {\n ...DEFAULT_VALIDITY_STATE,\n valid: true\n },\n error: '',\n errors: [],\n initialValue: validityData.initialValue\n };\n clearCustomValidity(input, registeredInputs);\n updateRegisteredFieldValidity(nextValidityData, externalInvalid);\n setValidityData(nextValidityData);\n }\n\n // A field can own several inputs (such as a checkbox or radio group), but only the last-mounted\n // one wins the shared `inputRef`. Validate against the registry instead so every input counts;\n // `inputRef` is the fallback only when no inputs are registered.\n const element = registeredInputs.size > 0 ? findRepresentativeInput(registeredInputs, elementRef.current) : inputRef.current;\n // A field with no eligible input has no native constraint, but its custom validator still\n // applies to the logical value at the configured validation boundary.\n\n if (revalidate) {\n if (state.valid !== false || !element) {\n return;\n }\n const currentNativeValidity = element.validity;\n if (!currentNativeValidity.valueMissing) {\n // The 'valueMissing' (required) condition has been resolved by the user typing.\n // Temporarily mark the field as valid for this onChange event.\n // Other native errors (e.g., typeMismatch) will be caught by full validation on blur or submit.\n // The required value is now present; ignore stale external invalid state for this pass.\n publishAllValid(element, false);\n return;\n }\n\n // A stale custom error can coexist with valueMissing, but defer any other native errors.\n for (const key of validityKeys) {\n if (key !== 'valid' && key !== 'valueMissing' && key !== 'customError' && currentNativeValidity[key]) {\n return;\n }\n }\n\n // Value is still missing: publish the current native state so valueMissing and the changed\n // value are observable immediately. Full custom validation still waits for its boundary.\n }\n function getState(el) {\n const computedState = validityKeys.reduce((acc, key) => {\n acc[key] = el.validity[key];\n return acc;\n }, {});\n let hasOnlyValueMissingError = false;\n for (const key of validityKeys) {\n if (key === 'valid') {\n continue;\n }\n if (key === 'valueMissing' && computedState[key]) {\n hasOnlyValueMissingError = true;\n } else if (computedState[key]) {\n return computedState;\n }\n }\n\n // Only make `valueMissing` mark the field invalid if it's been changed\n // to reduce error noise.\n if (hasOnlyValueMissingError && !markedDirtyRef.current) {\n computedState.valid = true;\n computedState.valueMissing = false;\n }\n return computedState;\n }\n timeout.clear();\n let result = null;\n let validationErrors = [];\n\n // With no representative input the field carries no native constraint, so start from an\n // all-valid native state and let the custom `validate` result below decide the outcome.\n const nextState = element ? getState(element) : {\n ...DEFAULT_VALIDITY_STATE,\n valid: true\n };\n let defaultValidationMessage;\n const isValidatingOnChange = shouldValidateOnChange();\n if (element && element.validationMessage && !isValidatingOnChange) {\n // not validating on change, if there is a `validationMessage` from\n // native validity, set errors and skip calling the custom validate fn\n defaultValidationMessage = element.validationMessage;\n validationErrors = [element.validationMessage];\n } else {\n // call the validate function because either\n // - validating on change, or\n // - native constraint validations passed, custom validity check is next\n const formValues = Array.from(formRef.current.fields.values()).reduce((acc, field) => {\n if (field.name) {\n acc[field.name] = field.getValue();\n }\n return acc;\n }, {});\n const resultOrPromise = validate(value, formValues);\n if (typeof resultOrPromise === 'object' && resultOrPromise !== null && 'then' in resultOrPromise) {\n result = await resultOrPromise;\n if (validationCommitId !== validationCommitIdRef.current) {\n return;\n }\n } else {\n result = resultOrPromise;\n }\n if (result !== null) {\n nextState.valid = false;\n nextState.customError = true;\n if (Array.isArray(result)) {\n validationErrors = result;\n element?.setCustomValidity(result.join('\\n'));\n } else if (result) {\n validationErrors = [result];\n element?.setCustomValidity(result);\n }\n } else if (isValidatingOnChange) {\n // validate function returned no errors, if validating on change\n // we need to clear the custom validity state\n clearCustomValidity(element, registeredInputs);\n nextState.customError = false;\n if (element && element.validationMessage) {\n defaultValidationMessage = element.validationMessage;\n validationErrors = [element.validationMessage];\n } else if ((!element || element.validity.valid) && !nextState.valid) {\n nextState.valid = true;\n }\n }\n }\n const nextValidityData = {\n value,\n state: nextState,\n error: defaultValidationMessage ?? (Array.isArray(result) ? result[0] : result ?? ''),\n errors: validationErrors,\n initialValue: validityData.initialValue\n };\n\n // Keep Form-level errors part of overall field validity for submit blocking/focus logic.\n updateRegisteredFieldValidity(nextValidityData);\n setValidityData(nextValidityData);\n });\n const change = useStableCallback(value => {\n timeout.clear();\n const validateOnChange = shouldValidateOnChange();\n if (validateOnChange && value !== '' && validationDebounceTime) {\n validationCommitIdRef.current += 1;\n timeout.start(validationDebounceTime, () => {\n commit(value);\n });\n } else {\n commit(value, !validateOnChange);\n }\n });\n const getValidationProps = React.useCallback((disabled, externalProps = {}) => mergeProps(getDescriptionProps(externalProps), state.valid === false && !state.disabled && !disabled ? {\n 'aria-invalid': true\n } : EMPTY_OBJECT), [getDescriptionProps, state.disabled, state.valid]);\n return React.useMemo(() => ({\n getValidationProps,\n inputRef,\n registeredInputs,\n registerInput,\n getInputControl,\n commit,\n change\n }), [getValidationProps, registeredInputs, registerInput, getInputControl, commit, change]);\n}","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { getCombinedFieldValidityData } from \"../../field/utils/getCombinedFieldValidityData.mjs\";\nimport { useFormContext } from \"../form-context/FormContext.mjs\";\nexport function useFieldControlRegistration(params) {\n const {\n commit,\n invalid,\n markedDirtyRef,\n name,\n setRegisteredFieldName,\n registeredFieldIdRef,\n setValidityData,\n validityData\n } = params;\n const {\n formRef\n } = useFormContext();\n const activeFieldControlSourceRef = React.useRef(null);\n const registrationRef = React.useRef(null);\n const initialValueCapturedRef = React.useRef(false);\n const getValueForForm = useStableCallback(() => {\n const registration = registrationRef.current;\n if (!registration) {\n return undefined;\n }\n if (registration.getValue) {\n return registration.getValue();\n }\n return registration.value;\n });\n function getRegistrationValue(registration) {\n return registration.value === undefined ? getValueForForm() : registration.value;\n }\n const validate = useStableCallback(() => {\n const registration = registrationRef.current;\n markedDirtyRef.current = true;\n if (!registration) {\n commit(validityData.value);\n return;\n }\n commit(getRegistrationValue(registration));\n });\n function refreshRegistration() {\n const registration = registrationRef.current;\n if (!registration || !registration.id) {\n return;\n }\n formRef.current.fields.set(registration.id, {\n getValue: getValueForForm,\n name: name ?? registration.name,\n controlRef: registration.controlRef,\n validityData: getCombinedFieldValidityData(validityData, invalid),\n validate\n });\n }\n function deleteRegistration(id = registrationRef.current?.id) {\n if (id) {\n formRef.current.fields.delete(id);\n }\n }\n\n // The baseline belongs to the field, not to a control instance: registration re-runs on every\n // value change, and a control that unmounts and remounts (or is swapped for another one) comes\n // back as a brand new registration. Capturing more than once would turn whichever value the\n // control happens to hold at that point into the initial value, so a modified field would read\n // pristine and its real initial value would read dirty. Consumers that want a fresh baseline\n // remount or key `<Field.Root>` itself.\n function captureInitialValue(registration) {\n if (initialValueCapturedRef.current) {\n return;\n }\n initialValueCapturedRef.current = true;\n const initialValue = getRegistrationValue(registration);\n setValidityData(prev => prev.initialValue === initialValue ? prev : {\n ...prev,\n initialValue\n });\n }\n useIsoLayoutEffect(() => {\n const registration = registrationRef.current;\n if (!registration || !registration.id) {\n return;\n }\n setRegisteredFieldName(name ? undefined : registration.name);\n formRef.current.fields.set(registration.id, {\n getValue: getValueForForm,\n name: name ?? registration.name,\n controlRef: registration.controlRef,\n validityData: getCombinedFieldValidityData(validityData, invalid),\n validate\n });\n }, [formRef, getValueForForm, invalid, name, setRegisteredFieldName, validate, validityData]);\n useIsoLayoutEffect(() => {\n const fields = formRef.current.fields;\n return () => {\n const id = registrationRef.current?.id;\n if (id) {\n fields.delete(id);\n }\n };\n }, [formRef]);\n const register = useStableCallback((source, registration) => {\n if (!registration) {\n if (activeFieldControlSourceRef.current === source) {\n activeFieldControlSourceRef.current = null;\n deleteRegistration();\n registrationRef.current = null;\n setRegisteredFieldName(undefined);\n registeredFieldIdRef.current = undefined;\n }\n return;\n }\n const previousId = registrationRef.current?.id;\n activeFieldControlSourceRef.current = source;\n registrationRef.current = registration;\n if (!name) {\n setRegisteredFieldName(registration.name);\n }\n registeredFieldIdRef.current = registration.id;\n if (previousId && previousId !== registration.id) {\n deleteRegistration(previousId);\n }\n captureInitialValue(registration);\n refreshRegistration();\n });\n return [validate, register];\n}","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { FieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { DEFAULT_VALIDITY_STATE, fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nimport { useFieldsetRootContext } from \"../../fieldset/root/FieldsetRootContext.mjs\";\nimport { useFormContext } from \"../../internals/form-context/FormContext.mjs\";\nimport { LabelableProvider } from \"../../internals/labelable-provider/index.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useFieldValidation } from \"./useFieldValidation.mjs\";\nimport { useFieldControlRegistration } from \"../../internals/field-register-control/useFieldControlRegistration.mjs\";\n\n/**\n * @internal\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst FieldRootInner = /*#__PURE__*/React.forwardRef(function FieldRootInner(componentProps, forwardedRef) {\n const {\n errors,\n validationMode: formValidationMode,\n submitAttemptedRef\n } = useFormContext();\n const {\n render,\n className,\n validate: validateProp,\n validationDebounceTime = 0,\n validationMode = formValidationMode,\n name,\n disabled: disabledProp = false,\n invalid: invalidProp,\n dirty: dirtyProp,\n touched: touchedProp,\n actionsRef,\n style,\n ...elementProps\n } = componentProps;\n const disabledFieldset = useFieldsetRootContext(true)?.disabled;\n const validate = useStableCallback(validateProp || (() => null));\n const disabled = disabledFieldset || disabledProp;\n const [touchedState, setTouchedUnwrapped] = React.useState(false);\n const [dirtyState, setDirtyUnwrapped] = React.useState(false);\n const [filled, setFilled] = React.useState(false);\n const [focused, setFocused] = React.useState(false);\n const dirty = dirtyProp ?? dirtyState;\n const touched = touchedProp ?? touchedState;\n const markedDirtyRef = React.useRef(dirty);\n const registeredFieldIdRef = React.useRef(undefined);\n const [registeredFieldName, setRegisteredFieldName] = React.useState();\n const effectiveName = name ?? registeredFieldName;\n useIsoLayoutEffect(() => {\n if (dirtyProp !== undefined) {\n markedDirtyRef.current = dirtyProp;\n }\n }, [dirtyProp]);\n const setDirty = useStableCallback(value => {\n if (dirtyProp !== undefined) {\n return;\n }\n if (value) {\n markedDirtyRef.current = true;\n }\n setDirtyUnwrapped(value);\n });\n const setTouched = useStableCallback(value => {\n if (touchedProp !== undefined) {\n return;\n }\n setTouchedUnwrapped(value);\n });\n const shouldValidateOnChange = useStableCallback(() => validationMode === 'onChange' || validationMode === 'onSubmit' && submitAttemptedRef.current);\n const formError = effectiveName && Object.hasOwn(errors, effectiveName) ? errors[effectiveName] : null;\n const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);\n const invalid = invalidProp === true || hasFormError;\n const [validityData, setValidityData] = React.useState({\n state: DEFAULT_VALIDITY_STATE,\n error: '',\n errors: [],\n value: null,\n initialValue: null\n });\n\n // App-controlled invalidity (the `invalid` prop and `<Form>` errors) keeps the field marked\n // invalid even while disabled. Only computed validity (native constraints and `validate`)\n // is suppressed when disabled, matching `:disabled` not participating in constraint validation.\n const valid = !invalid && (disabled ? null : validityData.state.valid);\n const state = React.useMemo(() => ({\n disabled,\n touched,\n dirty,\n valid,\n filled,\n focused\n }), [disabled, touched, dirty, valid, filled, focused]);\n const validation = useFieldValidation({\n setValidityData,\n validate,\n validityData,\n validationDebounceTime,\n invalid,\n markedDirtyRef,\n state,\n shouldValidateOnChange,\n registeredFieldIdRef\n });\n const [validateFieldControl, registerFieldControl] = useFieldControlRegistration({\n commit: validation.commit,\n invalid,\n markedDirtyRef,\n name,\n setRegisteredFieldName,\n registeredFieldIdRef,\n setValidityData,\n validityData\n });\n React.useImperativeHandle(actionsRef, () => ({\n validate: validateFieldControl\n }), [validateFieldControl]);\n const contextValue = React.useMemo(() => ({\n invalid,\n name: effectiveName,\n validityData,\n setValidityData,\n disabled,\n setTouched,\n setDirty,\n setFilled,\n setFocused,\n validationMode,\n shouldValidateOnChange,\n state,\n registerFieldControl,\n validation\n }), [invalid, effectiveName, validityData, disabled, setTouched, setDirty, setFilled, setFocused, validationMode, shouldValidateOnChange, state, registerFieldControl, validation]);\n const element = useRenderElement('div', componentProps, {\n ref: forwardedRef,\n state,\n props: elementProps,\n stateAttributesMapping: fieldValidityMapping\n });\n return /*#__PURE__*/_jsx(FieldRootContext.Provider, {\n value: contextValue,\n children: element\n });\n});\n\n/**\n * Groups all parts of the field.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nif (process.env.NODE_ENV !== \"production\") FieldRootInner.displayName = \"FieldRootInner\";\nexport const FieldRoot = /*#__PURE__*/React.forwardRef(function FieldRoot(componentProps, forwardedRef) {\n return /*#__PURE__*/_jsx(LabelableProvider, {\n children: /*#__PURE__*/_jsx(FieldRootInner, {\n ...componentProps,\n ref: forwardedRef\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") FieldRoot.displayName = \"FieldRoot\";","'use client';\n\nimport * as React from 'react';\nimport { error } from '@base-ui/utils/error';\nimport { SafeReact } from '@base-ui/utils/safeReact';\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { useLabel } from \"../../internals/labelable-provider/useLabel.mjs\";\nimport { useFieldItemContext } from \"../item/FieldItemContext.mjs\";\n\n/**\n * An accessible label that is automatically associated with the field control.\n * Renders a `<label>` element.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nexport const FieldLabel = /*#__PURE__*/React.forwardRef(function FieldLabel(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n id: idProp,\n nativeLabel = true,\n ...elementProps\n } = componentProps;\n const fieldRootContext = useFieldRootContext(false);\n const fieldItemContext = useFieldItemContext();\n const {\n labelId\n } = useLabelableContext();\n const state = {\n ...fieldRootContext.state,\n disabled: fieldRootContext.disabled || fieldItemContext.disabled\n };\n const labelRef = React.useRef(null);\n const labelProps = useLabel({\n id: labelId ?? idProp,\n native: nativeLabel\n });\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (!labelRef.current) {\n return;\n }\n const isLabelTag = labelRef.current.tagName === 'LABEL';\n if (nativeLabel) {\n if (!isLabelTag) {\n const ownerStackMessage = SafeReact.captureOwnerStack?.() || '';\n const message = '<Field.Label> expected a <label> element because the `nativeLabel` prop is true. ' + 'Rendering a non-<label> disables native label association, so `htmlFor` will not ' + 'work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`.';\n error(`${message}${ownerStackMessage}`);\n }\n } else if (isLabelTag) {\n const ownerStackMessage = SafeReact.captureOwnerStack?.() || '';\n const message = '<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. ' + 'Rendering a <label> assumes native label behavior while Base UI treats it as ' + 'non-native, which can cause unexpected pointer behavior. Use a non-<label> in the ' + '`render` prop, or set `nativeLabel` to `true`.';\n error(`${message}${ownerStackMessage}`);\n }\n }, [nativeLabel]);\n }\n const element = useRenderElement('label', componentProps, {\n ref: [forwardedRef, labelRef],\n state,\n props: [labelProps, elementProps],\n stateAttributesMapping: fieldValidityMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") FieldLabel.displayName = \"FieldLabel\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nimport { useFormContext } from \"../../internals/form-context/FormContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst stateAttributesMapping = {\n ...fieldValidityMapping,\n ...transitionStatusMapping\n};\n\n/**\n * An error message displayed if the field control fails validation.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nexport const FieldError = /*#__PURE__*/React.forwardRef(function FieldError(componentProps, forwardedRef) {\n const {\n render,\n id: idProp,\n className,\n match,\n style,\n ...elementProps\n } = componentProps;\n const id = useBaseUiId(idProp);\n const {\n validityData,\n state: fieldState,\n name\n } = useFieldRootContext(false);\n const {\n setMessageIds\n } = useLabelableContext();\n const {\n errors\n } = useFormContext();\n const formError = name && Object.hasOwn(errors, name) ? errors[name] : null;\n const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);\n const hasSpecificMatch = typeof match === 'string';\n let rendered = false;\n if (match === true) {\n rendered = true;\n } else if (fieldState.disabled) {\n rendered = false;\n } else if (hasSpecificMatch) {\n rendered = Boolean(validityData.state[match]);\n } else {\n rendered = hasFormError || validityData.state.valid === false;\n }\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(rendered);\n useIsoLayoutEffect(() => {\n if (!rendered || !id) {\n return undefined;\n }\n setMessageIds(v => v.concat(id));\n return () => {\n setMessageIds(v => v.filter(item => item !== id));\n };\n }, [rendered, id, setMessageIds]);\n const errorRef = React.useRef(null);\n const [lastRenderedMessage, setLastRenderedMessage] = React.useState(null);\n const [lastRenderedMessageKey, setLastRenderedMessageKey] = React.useState(null);\n let error = validityData.error;\n if (!hasSpecificMatch && hasFormError) {\n error = formError;\n } else if (validityData.errors.length > 1) {\n error = validityData.errors;\n }\n let errorMessage = error;\n if (Array.isArray(error)) {\n errorMessage = error.length > 1 ? /*#__PURE__*/_jsx(\"ul\", {\n children: error.map(message => /*#__PURE__*/_jsx(\"li\", {\n children: message\n }, message))\n }) : error[0];\n }\n const errorKey = Array.isArray(error) ? JSON.stringify(error) : error;\n if (rendered && errorKey !== lastRenderedMessageKey) {\n setLastRenderedMessageKey(errorKey);\n setLastRenderedMessage(errorMessage);\n }\n useOpenChangeComplete({\n open: rendered,\n ref: errorRef,\n onComplete() {\n if (!rendered) {\n setMounted(false);\n }\n }\n });\n const state = {\n ...fieldState,\n transitionStatus\n };\n const element = useRenderElement('div', componentProps, {\n ref: [forwardedRef, errorRef],\n state,\n props: [{\n id,\n children: rendered ? errorMessage : lastRenderedMessage\n }, elementProps],\n stateAttributesMapping,\n enabled: mounted\n });\n if (!mounted) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") FieldError.displayName = \"FieldError\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useFieldItemContext } from \"../item/FieldItemContext.mjs\";\n\n/**\n * A paragraph with additional information about the field.\n * Renders a `<p>` element.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nexport const FieldDescription = /*#__PURE__*/React.forwardRef(function FieldDescription(componentProps, forwardedRef) {\n const {\n render,\n id: idProp,\n className,\n style,\n ...elementProps\n } = componentProps;\n const id = useBaseUiId(idProp);\n const fieldRootContext = useFieldRootContext(false);\n const fieldItemContext = useFieldItemContext();\n const {\n setMessageIds\n } = useLabelableContext();\n const state = {\n ...fieldRootContext.state,\n disabled: fieldRootContext.disabled || fieldItemContext.disabled\n };\n useIsoLayoutEffect(() => {\n if (!id) {\n return undefined;\n }\n setMessageIds(v => v.concat(id));\n return () => {\n setMessageIds(v => v.filter(item => item !== id));\n };\n }, [id, setMessageIds]);\n const element = useRenderElement('p', componentProps, {\n ref: forwardedRef,\n state,\n props: [{\n id\n }, elementProps],\n stateAttributesMapping: fieldValidityMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") FieldDescription.displayName = \"FieldDescription\";","'use client';\n\nimport * as React from 'react';\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { getCombinedFieldValidityData } from \"../utils/getCombinedFieldValidityData.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\n\n/**\n * Used to display a custom message based on the field's validity.\n * Requires `children` to be a function that accepts field validity state as an argument.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const FieldValidity = function FieldValidity(props) {\n const {\n children\n } = props;\n const {\n validityData,\n invalid\n } = useFieldRootContext(false);\n const combinedFieldValidityData = React.useMemo(() => getCombinedFieldValidityData(validityData, invalid), [validityData, invalid]);\n const isInvalid = combinedFieldValidityData.state.valid === false;\n const {\n transitionStatus\n } = useTransitionStatus(isInvalid);\n\n // `fieldValidityState` is handed straight to a public render prop, so its identity is observable:\n // consumers can pass it to a memoized child. Keep it stable across unrelated field-state changes\n // (focus, dirty, filled) so those children don't rerender when the validity itself is unchanged.\n const fieldValidityState = React.useMemo(() => {\n return {\n ...combinedFieldValidityData,\n validity: combinedFieldValidityData.state,\n transitionStatus\n };\n }, [combinedFieldValidityData, transitionStatus]);\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: children(fieldValidityState)\n });\n};\nif (process.env.NODE_ENV !== \"production\") FieldValidity.displayName = \"FieldValidity\";","'use client';\n\nimport * as React from 'react';\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { FieldItemContext } from \"./FieldItemContext.mjs\";\nimport { LabelableProvider } from \"../../internals/labelable-provider/index.mjs\";\n\n/**\n * Groups individual items in a checkbox group or radio group with a label and description.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const FieldItem = /*#__PURE__*/React.forwardRef(function FieldItem(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n disabled: disabledProp = false,\n ...elementProps\n } = componentProps;\n const {\n state: fieldState,\n disabled: rootDisabled\n } = useFieldRootContext(false);\n const disabled = rootDisabled || disabledProp;\n const state = {\n ...fieldState,\n disabled\n };\n const fieldItemContext = React.useMemo(() => ({\n disabled\n }), [disabled]);\n const element = useRenderElement('div', componentProps, {\n ref: forwardedRef,\n state,\n props: elementProps,\n stateAttributesMapping: fieldValidityMapping\n });\n return /*#__PURE__*/_jsx(LabelableProvider, {\n children: /*#__PURE__*/_jsx(FieldItemContext.Provider, {\n value: fieldItemContext,\n children: element\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") FieldItem.displayName = \"FieldItem\";","\"use client\";\nimport { useTinyrackFocusModality } from \"../../providers/focus-modality/focus-modality-provider.js\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-control.tsx\nfunction TRFieldControl({ className, uiSize = \"md\", ...props }) {\n\tuseTinyrackFocusModality();\n\treturn /* @__PURE__ */ jsx(Field.Control, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-field-control\", className),\n\t\t\"data-ui-size\": uiSize\n\t});\n}\n//#endregion\nexport { TRFieldControl };\n\n//# sourceMappingURL=field-control.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-description.tsx\nconst TRFieldDescription = createComponentPart(Field.Description, \"tr-field-description\");\n//#endregion\nexport { TRFieldDescription };\n\n//# sourceMappingURL=field-description.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-error.tsx\nconst TRFieldError = createComponentPart(Field.Error, \"tr-field-error\");\n//#endregion\nexport { TRFieldError };\n\n//# sourceMappingURL=field-error.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-item.tsx\nconst TRFieldItem = createComponentPart(Field.Item, \"tr-field-item\");\n//#endregion\nexport { TRFieldItem };\n\n//# sourceMappingURL=field-item.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-label.tsx\nconst TRFieldLabel = createComponentPart(Field.Label, \"tr-label\");\n//#endregion\nexport { TRFieldLabel };\n\n//# sourceMappingURL=field-label.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-root.tsx\nfunction TRFieldRoot({ className, ...props }) {\n\treturn /* @__PURE__ */ jsx(Field.Root, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-field\", className)\n\t});\n}\n//#endregion\nexport { TRFieldRoot };\n\n//# sourceMappingURL=field-root.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Field } from \"@base-ui/react/field\";\n//#region src/components/field/field-validity.tsx\nconst TRFieldValidity = createComponentPart(Field.Validity, \"tr-field-validity\");\n//#endregion\nexport { TRFieldValidity };\n\n//# sourceMappingURL=field-validity.js.map","import { TRFieldControl } from \"./field-control.js\";\nimport { TRFieldDescription } from \"./field-description.js\";\nimport { TRFieldError } from \"./field-error.js\";\nimport { TRFieldItem } from \"./field-item.js\";\nimport { TRFieldLabel } from \"./field-label.js\";\nimport { TRFieldRoot } from \"./field-root.js\";\nimport { TRFieldValidity } from \"./field-validity.js\";\n//#region src/components/field/index.tsx\nconst TRField = {\n\tRoot: TRFieldRoot,\n\tLabel: TRFieldLabel,\n\tError: TRFieldError,\n\tDescription: TRFieldDescription,\n\tControl: TRFieldControl,\n\tValidity: TRFieldValidity,\n\tItem: TRFieldItem\n};\n//#endregion\nexport { TRField, TRFieldControl, TRFieldDescription, TRFieldError, TRFieldItem, TRFieldLabel, TRFieldRoot, TRFieldValidity };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":"yaAIA,EAAA,EAAA,cAAA,IAAA,EAAA,EAEA,SAAA,EAAA,EAAA,GAAA,4DAMA,CCJA,IAAa,EAAoB,SAA2B,EAAO,CACjE,IAAM,EAAY,EAAY,EACxB,EAAmB,EAAM,YAAc,IAAA,GAAY,EAAY,EAAM,UACrE,CAAC,EAAW,GAAA,EAA2B,SAAS,CAAgB,EAChE,CAAC,EAAS,GAAA,EAAoB,SAAS,EAAM,OAAO,EACpD,CAAC,EAAY,GAAA,EAAuB,SAAS,CAAC,CAAC,EAC/C,EAAmB,MAAqB,IAAI,GAAK,EACjD,CACJ,WAAY,GACV,EAAoB,EAClB,EAAoB,GAAmB,EAAQ,IAAW,CAC9D,IAAM,EAAgB,EAAiB,QACvC,GAAI,IAAW,IAAA,GAAW,CACxB,EAAc,OAAO,CAAM,EAC3B,MACF,CACA,EAAc,IAAI,EAAQ,CAAM,EAKhC,EAAkB,GAAQ,CACxB,GAAI,EAAc,OAAS,EACzB,OAEF,IAAI,EACJ,IAAK,IAAM,KAAM,EAAc,OAAO,EAAG,CACvC,GAAI,IAAS,IAAA,IAAa,IAAO,EAC/B,OAAO,EAEL,IAAkB,IAAA,KACpB,EAAgB,EAEpB,CACA,OAAO,CACT,CAAC,CACH,CAAC,EACK,EAAA,EAA4B,YAAY,GAAiB,CAC7D,IAAM,EAAM,EAAc,oBAAsB,EAAc,mBAAmB,CAAC,MAAM,GAAG,EAAI,CAAC,EAEhG,OADA,EAAI,KAAK,GAAG,EAAkB,GAAG,CAAU,EACpC,CACL,GAAG,EACH,mBAAoB,MAAM,KAAK,IAAI,IAAI,CAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAK,IAAA,EAC5D,CACF,EAAG,CAAC,EAAkB,CAAU,CAAC,EAC3B,EAAA,EAAqB,aAAe,CACxC,YACA,oBACA,UACA,aACA,aACA,gBACA,qBACF,GAAI,CAAC,EAAW,EAAmB,EAAS,EAAY,EAAY,EAAe,CAAmB,CAAC,EACvG,OAAoB,EAAA,EAAA,IAAA,CAAK,EAAiB,SAAU,CAClD,MAAO,EACP,SAAU,EAAM,QAClB,CAAC,CACH,EC9DA,SAAgB,EAA6B,EAAc,EAAS,CAClE,MAAO,CACL,GAAG,EACH,MAAO,CACL,GAAG,EAAa,MAChB,MAAO,CAAC,GAAW,EAAa,MAAM,KACxC,CACF,CACF,CCAA,IAAM,EAAe,OAAO,KAAK,CAAsB,EAQvD,SAAgB,EAAgB,EAAO,EAAa,CAUlD,OATI,EAAM,QAAQ,WAAW,EACpB,GAEL,CAAC,GAAe,EAAM,OAAS,EAC1B,GAKF,EAAM,OAAS,MAAQ,CAAC,EAAM,aAAa,MAAM,CAC1D,CAOA,SAAS,EAAwB,EAAQ,EAAa,CACpD,IAAI,EAAW,KACf,IAAK,IAAM,KAAS,EAAO,KAAK,EACzB,KAAgB,EAAO,CAAW,EAGvC,IAAI,CAAC,EAAM,SAAS,MAClB,OAAO,EAET,IAAa,CAFJ,CAIX,OAAO,CACT,CACA,SAAS,EAAoB,EAAS,EAAQ,CAC5C,IAAK,IAAM,KAAS,EAAO,KAAK,EAC9B,EAAM,kBAAkB,EAAE,EAE5B,GAAS,kBAAkB,EAAE,CAC/B,CACA,SAAgB,GAAmB,EAAQ,CACzC,GAAM,CACJ,aACA,WACE,EAAe,EACb,CACJ,kBACA,WACA,eACA,yBACA,UACA,iBACA,QACA,yBACA,wBACE,EACE,CACJ,YACA,uBACE,EAAoB,EAClB,EAAU,EAAW,EACrB,EAAA,EAAiB,OAAO,IAAI,EAC5B,EAAmB,MAAqB,IAAI,GAAK,CAAC,CAAC,QACnD,EAAA,EAA8B,OAAO,CAAC,EAKtC,EAAA,EAAsB,aAAa,EAAS,KAChD,EAAiB,IAAI,EAAS,CAAY,MAC7B,CACX,EAAiB,OAAO,CAAO,CACjC,GACC,CAAC,CAAgB,CAAC,EACf,EAAkB,MAAwB,CAC9C,IAAM,EAAU,EAAwB,EAAkB,EAAW,OAAO,EAC5E,OAAO,GAAW,EAAiB,IAAI,CAAO,CAAC,EAAE,WAAW,SAAW,IACzE,CAAC,EACK,EAAS,EAAkB,MAAO,EAAO,EAAa,KAAU,CACpE,EAAsB,SAAW,EACjC,IAAM,EAAqB,EAAsB,QACjD,SAAS,EAA8B,EAAkB,EAAkB,EAAS,CAClF,IAAM,EAAU,EAAqB,SAAW,EAChD,GAAI,GAAW,KACb,OAEF,IAAM,EAAmB,EAAQ,QAAQ,OAAO,IAAI,CAAO,EAC3D,GAAI,CAAC,EACH,OAEF,IAAM,EAA6B,EAA6B,EAAkB,CAAe,EACjG,EAAQ,QAAQ,OAAO,IAAI,EAAS,CAClC,GAAG,EACH,aAAc,CAChB,CAAC,CACH,CACA,SAAS,EAAgB,EAAO,EAAiB,CAC/C,IAAM,EAAmB,CACvB,QACA,MAAO,CACL,GAAG,EACH,MAAO,EACT,EACA,MAAO,GACP,OAAQ,CAAC,EACT,aAAc,EAAa,YAC7B,EACA,EAAoB,EAAO,CAAgB,EAC3C,EAA8B,EAAkB,CAAe,EAC/D,EAAgB,CAAgB,CAClC,CAKA,IAAM,EAAU,EAAiB,KAAO,EAAI,EAAwB,EAAkB,EAAW,OAAO,EAAI,EAAS,QAIrH,GAAI,EAAY,CACd,GAAI,EAAM,QAAU,IAAS,CAAC,EAC5B,OAEF,IAAM,EAAwB,EAAQ,SACtC,GAAI,CAAC,EAAsB,aAAc,CAKvC,EAAgB,EAAS,EAAK,EAC9B,MACF,CAGA,IAAK,IAAM,KAAO,EAChB,GAAI,IAAQ,SAAW,IAAQ,gBAAkB,IAAQ,eAAiB,EAAsB,GAC9F,MAMN,CACA,SAAS,EAAS,EAAI,CACpB,IAAM,EAAgB,EAAa,QAAQ,EAAK,KAC9C,EAAI,GAAO,EAAG,SAAS,GAChB,GACN,CAAC,CAAC,EACD,EAA2B,GAC/B,IAAK,IAAM,KAAO,EACZ,OAAQ,QAGZ,IAAI,IAAQ,gBAAkB,EAAc,GAC1C,EAA2B,QACtB,GAAI,EAAc,GACvB,OAAO,CAAA,CAUX,OAJI,GAA4B,CAAC,EAAe,UAC9C,EAAc,MAAQ,GACtB,EAAc,aAAe,IAExB,CACT,CACA,EAAQ,MAAM,EACd,IAAI,EAAS,KACT,EAAmB,CAAC,EAIlB,EAAY,EAAU,EAAS,CAAO,EAAI,CAC9C,GAAG,EACH,MAAO,EACT,EACI,EACE,EAAuB,EAAuB,EACpD,GAAI,GAAW,EAAQ,mBAAqB,CAAC,EAG3C,EAA2B,EAAQ,kBACnC,EAAmB,CAAC,EAAQ,iBAAiB,MACxC,CAIL,IAAM,EAAa,MAAM,KAAK,EAAQ,QAAQ,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAK,KACtE,EAAM,OACR,EAAI,EAAM,MAAQ,EAAM,SAAS,GAE5B,GACN,CAAC,CAAC,EACC,EAAkB,EAAS,EAAO,CAAU,EAClD,GAAI,OAAO,GAAoB,UAAY,GAA4B,SAAU,EAE/E,IADA,EAAS,MAAM,EACX,IAAuB,EAAsB,QAC/C,MAAA,KAGF,GAAS,EAEP,IAAW,KAUJ,IAGT,EAAoB,EAAS,CAAgB,EAC7C,EAAU,YAAc,GACpB,GAAW,EAAQ,mBACrB,EAA2B,EAAQ,kBACnC,EAAmB,CAAC,EAAQ,iBAAiB,IACnC,CAAC,GAAW,EAAQ,SAAS,QAAU,CAAC,EAAU,QAC5D,EAAU,MAAQ,MAlBpB,EAAU,MAAQ,GAClB,EAAU,YAAc,GACpB,MAAM,QAAQ,CAAM,GACtB,EAAmB,EACnB,GAAS,kBAAkB,EAAO,KAAK;CAAI,CAAC,GACnC,IACT,EAAmB,CAAC,CAAM,EAC1B,GAAS,kBAAkB,CAAM,GAcvC,CACA,IAAM,EAAmB,CACvB,QACA,MAAO,EACP,MAAO,IAA6B,MAAM,QAAQ,CAAM,EAAI,EAAO,GAAK,GAAU,IAClF,OAAQ,EACR,aAAc,EAAa,YAC7B,EAGA,EAA8B,CAAgB,EAC9C,EAAgB,CAAgB,CAClC,CAAC,EACK,EAAS,EAAkB,GAAS,CACxC,EAAQ,MAAM,EACd,IAAM,EAAmB,EAAuB,EAC5C,GAAoB,IAAU,IAAM,GACtC,EAAsB,SAAW,EACjC,EAAQ,MAAM,MAA8B,CAC1C,EAAO,CAAK,CACd,CAAC,GAED,EAAO,EAAO,CAAC,CAAgB,CAEnC,CAAC,EACK,EAAA,EAA2B,aAAa,EAAU,EAAgB,CAAC,IAAM,EAAW,EAAoB,CAAa,EAAG,EAAM,QAAU,IAAS,CAAC,EAAM,UAAY,CAAC,EAAW,CACpL,eAAgB,EAClB,EAAI,CAAY,EAAG,CAAC,EAAqB,EAAM,SAAU,EAAM,KAAK,CAAC,EACrE,OAAA,EAAa,aAAe,CAC1B,qBACA,WACA,mBACA,gBACA,kBACA,SACA,QACF,GAAI,CAAC,EAAoB,EAAkB,EAAe,EAAiB,EAAQ,CAAM,CAAC,CAC5F,CCjRA,SAAgB,GAA4B,EAAQ,CAClD,GAAM,CACJ,SACA,UACA,iBACA,OACA,yBACA,uBACA,kBACA,gBACE,EACE,CACJ,WACE,EAAe,EACb,EAAA,EAAoC,OAAO,IAAI,EAC/C,EAAA,EAAwB,OAAO,IAAI,EACnC,EAAA,EAAgC,OAAO,EAAK,EAC5C,EAAkB,MAAwB,CAC9C,IAAM,EAAe,EAAgB,QAChC,KAML,OAHI,EAAa,SACR,EAAa,SAAS,EAExB,EAAa,KACtB,CAAC,EACD,SAAS,EAAqB,EAAc,CAC1C,OAAO,EAAa,QAAU,IAAA,GAAY,EAAgB,EAAI,EAAa,KAC7E,CACA,IAAM,EAAW,MAAwB,CACvC,IAAM,EAAe,EAAgB,QAErC,GADA,EAAe,QAAU,GACrB,CAAC,EAAc,CACjB,EAAO,EAAa,KAAK,EACzB,MACF,CACA,EAAO,EAAqB,CAAY,CAAC,CAC3C,CAAC,EACD,SAAS,GAAsB,CAC7B,IAAM,EAAe,EAAgB,QACjC,CAAC,GAAgB,CAAC,EAAa,IAGnC,EAAQ,QAAQ,OAAO,IAAI,EAAa,GAAI,CAC1C,SAAU,EACV,KAAM,GAAQ,EAAa,KAC3B,WAAY,EAAa,WACzB,aAAc,EAA6B,EAAc,CAAO,EAChE,UACF,CAAC,CACH,CACA,SAAS,EAAmB,EAAK,EAAgB,SAAS,GAAI,CACxD,GACF,EAAQ,QAAQ,OAAO,OAAO,CAAE,CAEpC,CAQA,SAAS,EAAoB,EAAc,CACzC,GAAI,EAAwB,QAC1B,OAEF,EAAwB,QAAU,GAClC,IAAM,EAAe,EAAqB,CAAY,EACtD,EAAgB,GAAQ,EAAK,eAAiB,EAAe,EAAO,CAClE,GAAG,EACH,cACF,CAAC,CACH,CAgDA,OA/CA,MAAyB,CACvB,IAAM,EAAe,EAAgB,QACjC,CAAC,GAAgB,CAAC,EAAa,KAGnC,EAAuB,EAAO,IAAA,GAAY,EAAa,IAAI,EAC3D,EAAQ,QAAQ,OAAO,IAAI,EAAa,GAAI,CAC1C,SAAU,EACV,KAAM,GAAQ,EAAa,KAC3B,WAAY,EAAa,WACzB,aAAc,EAA6B,EAAc,CAAO,EAChE,UACF,CAAC,EACH,EAAG,CAAC,EAAS,EAAiB,EAAS,EAAM,EAAwB,EAAU,CAAY,CAAC,EAC5F,MAAyB,CACvB,IAAM,EAAS,EAAQ,QAAQ,OAC/B,UAAa,CACX,IAAM,EAAK,EAAgB,SAAS,GAChC,GACF,EAAO,OAAO,CAAE,CAEpB,CACF,EAAG,CAAC,CAAO,CAAC,EAyBL,CAAC,EAxBS,GAAmB,EAAQ,IAAiB,CAC3D,GAAI,CAAC,EAAc,CACb,EAA4B,UAAY,IAC1C,EAA4B,QAAU,KACtC,EAAmB,EACnB,EAAgB,QAAU,KAC1B,EAAuB,IAAA,EAAS,EAChC,EAAqB,QAAU,IAAA,IAEjC,MACF,CACA,IAAM,EAAa,EAAgB,SAAS,GAC5C,EAA4B,QAAU,EACtC,EAAgB,QAAU,EACrB,GACH,EAAuB,EAAa,IAAI,EAE1C,EAAqB,QAAU,EAAa,GACxC,GAAc,IAAe,EAAa,IAC5C,EAAmB,CAAU,EAE/B,EAAoB,CAAY,EAChC,EAAoB,CACtB,CACyB,CAAC,CAC5B,CChHA,IAAM,EAA8B,EAAM,WAAW,SAAwB,EAAgB,EAAc,CACzG,GAAM,CACJ,SACA,eAAgB,EAChB,sBACE,EAAe,EACb,CACJ,SACA,YACA,SAAU,EACV,yBAAyB,EACzB,iBAAiB,EACjB,OACA,SAAU,EAAe,GACzB,QAAS,EACT,MAAO,EACP,QAAS,EACT,aACA,QACA,GAAG,GACD,EACE,EAAmB,EAAuB,EAAI,CAAC,EAAE,SACjD,EAAW,EAAkB,QAAuB,KAAK,EACzD,EAAW,GAAoB,EAC/B,CAAC,EAAc,GAAA,EAA6B,SAAS,EAAK,EAC1D,CAAC,EAAY,GAAA,EAA2B,SAAS,EAAK,EACtD,CAAC,EAAQ,GAAA,EAAmB,SAAS,EAAK,EAC1C,CAAC,EAAS,GAAA,EAAoB,SAAS,EAAK,EAC5C,EAAQ,GAAa,EACrB,EAAU,GAAe,EACzB,EAAA,EAAuB,OAAO,CAAK,EACnC,EAAA,EAA6B,OAAO,IAAA,EAAS,EAC7C,CAAC,EAAqB,IAAA,EAAgC,SAAS,EAC/D,EAAgB,GAAQ,EAC9B,MAAyB,CACnB,IAAc,IAAA,KAChB,EAAe,QAAU,EAE7B,EAAG,CAAC,CAAS,CAAC,EACd,IAAM,EAAW,EAAkB,GAAS,CACtC,IAAc,IAAA,KAGd,IACF,EAAe,QAAU,IAE3B,EAAkB,CAAK,EACzB,CAAC,EACK,EAAa,EAAkB,GAAS,CACxC,IAAgB,IAAA,IAGpB,EAAoB,CAAK,CAC3B,CAAC,EACK,EAAyB,MAAwB,IAAmB,YAAc,IAAmB,YAAc,EAAmB,OAAO,EAC7I,EAAY,GAAiB,OAAO,OAAO,EAAQ,CAAa,EAAI,EAAO,GAAiB,KAC5F,GAAe,CAAC,EAAE,MAAM,QAAQ,CAAS,EAAI,EAAU,OAAS,GAChE,EAAU,IAAgB,IAAQ,GAClC,CAAC,EAAc,GAAA,EAAyB,SAAS,CACrD,MAAO,EACP,MAAO,GACP,OAAQ,CAAC,EACT,MAAO,KACP,aAAc,IAChB,CAAC,EAKK,GAAQ,CAAC,IAAY,EAAW,KAAO,EAAa,MAAM,OAC1D,EAAA,EAAc,aAAe,CACjC,WACA,UACA,QACA,SACA,SACA,SACF,GAAI,CAAC,EAAU,EAAS,EAAO,GAAO,EAAQ,CAAO,CAAC,EAChD,EAAa,GAAmB,CACpC,kBACA,WACA,eACA,yBACA,UACA,iBACA,QACA,yBACA,sBACF,CAAC,EACK,CAAC,GAAsB,IAAwB,GAA4B,CAC/E,OAAQ,EAAW,OACnB,UACA,iBACA,OACA,0BACA,uBACA,kBACA,cACF,CAAC,EACD,EAAM,oBAAoB,OAAmB,CAC3C,SAAU,EACZ,GAAI,CAAC,EAAoB,CAAC,EAC1B,IAAM,GAAA,EAAqB,aAAe,CACxC,UACA,KAAM,EACN,eACA,kBACA,WACA,aACA,WACA,YACA,aACA,iBACA,yBACA,QACA,wBACA,YACF,GAAI,CAAC,EAAS,EAAe,EAAc,EAAU,EAAY,EAAU,EAAW,EAAY,EAAgB,EAAwB,EAAO,GAAsB,CAAU,CAAC,EAC5K,GAAU,EAAiB,MAAO,EAAgB,CACtD,IAAK,EACL,QACA,MAAO,EACP,uBAAwB,CAC1B,CAAC,EACD,OAAoB,EAAA,EAAA,IAAA,CAAK,EAAiB,SAAU,CAClD,MAAO,GACP,SAAU,EACZ,CAAC,CACH,CAAC,EASY,EAAyB,EAAM,WAAW,SAAmB,EAAgB,EAAc,CACtG,OAAoB,EAAA,EAAA,IAAA,CAAK,EAAmB,CAC1C,UAAuB,EAAA,EAAA,IAAA,CAAK,EAAgB,CAC1C,GAAG,EACH,IAAK,CACP,CAAC,CACH,CAAC,CACH,CAAC,EChJY,EAA0B,EAAM,WAAW,SAAoB,EAAgB,EAAc,CACxG,GAAM,CACJ,SACA,YACA,QACA,GAAI,EACJ,cAAc,GACd,GAAG,GACD,EACE,EAAmB,EAAoB,EAAK,EAC5C,EAAmB,EAAoB,EACvC,CACJ,WACE,EAAoB,EAClB,EAAQ,CACZ,GAAG,EAAiB,MACpB,SAAU,EAAiB,UAAY,EAAiB,QAC1D,EACM,EAAA,EAAiB,OAAO,IAAI,EAC5B,EAAa,EAAS,CAC1B,GAAI,GAAW,EACf,OAAQ,CACV,CAAC,EA2BD,OANgB,EAAiB,QAAS,EAAgB,CACxD,IAAK,CAAC,EAAc,CAAQ,EAC5B,QACA,MAAO,CAAC,EAAY,CAAY,EAChC,uBAAwB,CAC1B,CACa,CACf,CAAC,ECtDK,EAAyB,CAC7B,GAAG,EACH,GAAG,CACL,EAQa,EAA0B,EAAM,WAAW,SAAoB,EAAgB,EAAc,CACxG,GAAM,CACJ,SACA,GAAI,EACJ,YACA,QACA,QACA,GAAG,GACD,EACE,EAAK,EAAY,CAAM,EACvB,CACJ,eACA,MAAO,EACP,QACE,EAAoB,EAAK,EACvB,CACJ,iBACE,EAAoB,EAClB,CACJ,UACE,EAAe,EACb,EAAY,GAAQ,OAAO,OAAO,EAAQ,CAAI,EAAI,EAAO,GAAQ,KACjE,EAAe,CAAC,EAAE,MAAM,QAAQ,CAAS,EAAI,EAAU,OAAS,GAChE,EAAmB,OAAO,GAAU,SACtC,EAAW,GACf,AAOE,EAPE,IAAU,GACD,GACF,EAAW,SACT,GACF,EACE,EAAQ,EAAa,MAAM,GAE3B,GAAgB,EAAa,MAAM,QAAU,GAE1D,GAAM,CACJ,UACA,mBACA,cACE,EAAoB,CAAQ,EAChC,MAAyB,CACnB,MAAC,GAAY,CAAC,GAIlB,OADA,EAAc,GAAK,EAAE,OAAO,CAAE,CAAC,MAClB,CACX,EAAc,GAAK,EAAE,OAAO,GAAQ,IAAS,CAAE,CAAC,CAClD,CACF,EAAG,CAAC,EAAU,EAAI,CAAa,CAAC,EAChC,IAAM,EAAA,EAAiB,OAAO,IAAI,EAC5B,CAAC,EAAqB,GAAA,EAAgC,SAAS,IAAI,EACnE,CAAC,EAAwB,GAAA,EAAmC,SAAS,IAAI,EAC3E,EAAQ,EAAa,MACrB,CAAC,GAAoB,EACvB,EAAQ,EACC,EAAa,OAAO,OAAS,IACtC,EAAQ,EAAa,QAEvB,IAAI,EAAe,EACf,MAAM,QAAQ,CAAK,IACrB,EAAe,EAAM,OAAS,GAAiB,EAAA,EAAA,IAAA,CAAK,KAAM,CACxD,SAAU,EAAM,IAAI,IAAwB,EAAA,EAAA,IAAA,CAAK,KAAM,CACrD,SAAU,CACZ,EAAG,CAAO,CAAC,CACb,CAAC,EAAI,EAAM,IAEb,IAAM,EAAW,MAAM,QAAQ,CAAK,EAAI,KAAK,UAAU,CAAK,EAAI,EAC5D,GAAY,IAAa,IAC3B,EAA0B,CAAQ,EAClC,EAAuB,CAAY,GAErC,EAAsB,CACpB,KAAM,EACN,IAAK,EACL,YAAa,CACN,GACH,EAAW,EAAK,CAEpB,CACF,CAAC,EACD,IAAM,GAAQ,CACZ,GAAG,EACH,kBACF,EACM,GAAU,EAAiB,MAAO,EAAgB,CACtD,IAAK,CAAC,EAAc,CAAQ,EAC5B,SACA,MAAO,CAAC,CACN,KACA,SAAU,EAAW,EAAe,CACtC,EAAG,CAAY,EACf,yBACA,QAAS,CACX,CAAC,EAID,OAHK,EAGE,GAFE,IAGX,CAAC,ECzGY,GAAgC,EAAM,WAAW,SAA0B,EAAgB,EAAc,CACpH,GAAM,CACJ,SACA,GAAI,EACJ,YACA,QACA,GAAG,GACD,EACE,EAAK,EAAY,CAAM,EACvB,EAAmB,EAAoB,EAAK,EAC5C,EAAmB,EAAoB,EACvC,CACJ,iBACE,EAAoB,EAClB,EAAQ,CACZ,GAAG,EAAiB,MACpB,SAAU,EAAiB,UAAY,EAAiB,QAC1D,EAkBA,OAjBA,MAAyB,CAClB,KAIL,OADA,EAAc,GAAK,EAAE,OAAO,CAAE,CAAC,MAClB,CACX,EAAc,GAAK,EAAE,OAAO,GAAQ,IAAS,CAAE,CAAC,CAClD,CACF,EAAG,CAAC,EAAI,CAAa,CAAC,EACN,EAAiB,IAAK,EAAgB,CACpD,IAAK,EACL,QACA,MAAO,CAAC,CACN,IACF,EAAG,CAAY,EACf,uBAAwB,CAC1B,CACa,CACf,CAAC,ECvCY,EAAgB,SAAuB,EAAO,CACzD,GAAM,CACJ,YACE,EACE,CACJ,eACA,WACE,EAAoB,EAAK,EACvB,EAAA,EAAkC,YAAc,EAA6B,EAAc,CAAO,EAAG,CAAC,EAAc,CAAO,CAAC,EAE5H,CACJ,oBACE,EAHc,EAA0B,MAAM,QAAU,EAG3B,EAK3B,EAAA,EAA2B,aACxB,CACL,GAAG,EACH,SAAU,EAA0B,MACpC,kBACF,GACC,CAAC,EAA2B,CAAgB,CAAC,EAChD,OAAoB,EAAA,EAAA,IAAA,CAAA,EAAW,SAAU,CACvC,SAAU,EAAS,CAAkB,CACvC,CAAC,CACH,ECzBa,EAAyB,EAAM,WAAW,SAAmB,EAAgB,EAAc,CACtG,GAAM,CACJ,SACA,YACA,QACA,SAAU,EAAe,GACzB,GAAG,GACD,EACE,CACJ,MAAO,EACP,SAAU,GACR,EAAoB,EAAK,EACvB,EAAW,GAAgB,EAC3B,EAAQ,CACZ,GAAG,EACH,UACF,EACM,EAAA,EAAyB,aAAe,CAC5C,UACF,GAAI,CAAC,CAAQ,CAAC,EACR,EAAU,EAAiB,MAAO,EAAgB,CACtD,IAAK,EACL,QACA,MAAO,EACP,uBAAwB,CAC1B,CAAC,EACD,OAAoB,EAAA,EAAA,IAAA,CAAK,EAAmB,CAC1C,UAAuB,EAAA,EAAA,IAAA,CAAK,EAAiB,SAAU,CACrD,MAAO,EACP,SAAU,CACZ,CAAC,CACH,CAAC,CACH,CAAC,EC1CD,SAAS,EAAe,CAAE,YAAW,SAAS,KAAM,GAAG,GAAS,CAE/D,OADA,EAAyB,GACF,EAAA,EAAA,IAAA,CAAIC,EAAe,CACzC,GAAG,EACH,UAAW,EAAwB,mBAAoB,CAAS,EAChE,eAAgB,CACjB,CAAC,CACF,CCTA,IAAM,EAAqB,EAAoBC,GAAmB,sBAAsB,ECAlF,EAAe,EAAoBC,EAAa,gBAAgB,ECAhE,GAAc,EAAoBC,EAAY,eAAe,ECA7D,EAAe,EAAoBC,EAAa,UAAU,ECChE,SAAS,EAAY,CAAE,YAAW,GAAG,GAAS,CAC7C,OAAuB,EAAA,EAAA,IAAA,CAAIC,EAAY,CACtC,GAAG,EACH,UAAW,EAAwB,WAAY,CAAS,CACzD,CAAC,CACF,CEFA,IAAM,EAAU,CACf,KAAM,EACN,MAAO,EACP,MAAO,EACP,YAAa,EACb,QAAS,EACT,SDVuB,EAAoBC,EAAgB,mBCUjD,EACV,KAAM,EACP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./createLucideIcon-
|
|
2
|
-
//# sourceMappingURL=fingerprint-pattern-
|
|
1
|
+
import{t as e}from"./createLucideIcon-D-yizrWN.js";var t=e(`fingerprint-pattern`,[[`path`,{d:`M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4`,key:`1nerag`}],[`path`,{d:`M14 13.12c0 2.38 0 6.38-1 8.88`,key:`o46ks0`}],[`path`,{d:`M17.29 21.02c.12-.6.43-2.3.5-3.02`,key:`ptglia`}],[`path`,{d:`M2 12a10 10 0 0 1 18-6`,key:`ydlgp0`}],[`path`,{d:`M2 16h.01`,key:`1gqxmh`}],[`path`,{d:`M21.8 16c.2-2 .131-5.354 0-6`,key:`drycrb`}],[`path`,{d:`M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2`,key:`1tidbn`}],[`path`,{d:`M8.65 22c.21-.66.45-1.32.57-2`,key:`13wd9y`}],[`path`,{d:`M9 6.8a6 6 0 0 1 9 5.2v2`,key:`1fr1j5`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=fingerprint-pattern-BwUoN1_w.js.map
|
package/public/assets/{fingerprint-pattern-DP62Vk8x.js.map → fingerprint-pattern-BwUoN1_w.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-pattern-
|
|
1
|
+
{"version":3,"file":"fingerprint-pattern-BwUoN1_w.js","names":[],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/fingerprint-pattern.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\", key: \"1nerag\" }],\n [\"path\", { d: \"M14 13.12c0 2.38 0 6.38-1 8.88\", key: \"o46ks0\" }],\n [\"path\", { d: \"M17.29 21.02c.12-.6.43-2.3.5-3.02\", key: \"ptglia\" }],\n [\"path\", { d: \"M2 12a10 10 0 0 1 18-6\", key: \"ydlgp0\" }],\n [\"path\", { d: \"M2 16h.01\", key: \"1gqxmh\" }],\n [\"path\", { d: \"M21.8 16c.2-2 .131-5.354 0-6\", key: \"drycrb\" }],\n [\"path\", { d: \"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\", key: \"1tidbn\" }],\n [\"path\", { d: \"M8.65 22c.21-.66.45-1.32.57-2\", key: \"13wd9y\" }],\n [\"path\", { d: \"M9 6.8a6 6 0 0 1 9 5.2v2\", key: \"1fr1j5\" }]\n];\nconst FingerprintPattern = createLucideIcon(\"fingerprint-pattern\", __iconNode);\n\nexport { __iconNode, FingerprintPattern as default };\n//# sourceMappingURL=fingerprint-pattern.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"mDAoBA,IAAM,EAAqB,EAAiB,sBAAuB,CAVjE,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAS,CAAC,EAC1E,CAAC,OAAQ,CAAE,EAAG,iCAAkC,IAAK,QAAS,CAAC,EAC/D,CAAC,OAAQ,CAAE,EAAG,oCAAqC,IAAK,QAAS,CAAC,EAClE,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAS,CAAC,EACvD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAS,CAAC,EAC1C,CAAC,OAAQ,CAAE,EAAG,+BAAgC,IAAK,QAAS,CAAC,EAC7D,CAAC,OAAQ,CAAE,EAAG,2CAA4C,IAAK,QAAS,CAAC,EACzE,CAAC,OAAQ,CAAE,EAAG,gCAAiC,IAAK,QAAS,CAAC,EAC9D,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAS,CAAC,CAEQ,CAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgot-Cpfhakvn.js","names":["RouteErrorFallback","ForgotPasswordFormValues","email","SplitErrorComponent","errorComponent"],"sources":["../../../frontend/src/routes/password/forgot/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation } from '@tanstack/react-query';\nimport {\n createFileRoute,\n Link,\n redirect,\n useNavigate,\n} 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 { MailCheckIcon, MailIcon } from 'lucide-react';\nimport { 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 {\n AuthFooter,\n AuthFooterLink,\n} from '#frontend/components/auth/auth-footer.tsx';\nimport { AuthOutcome } from '#frontend/components/auth/auth-outcome.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { forgotPasswordMutationOptions } from '#frontend/queries/password-reset.ts';\n\nexport const Route = createFileRoute('/password/forgot/')({\n component: ForgotPassword,\n errorComponent: RouteErrorFallback,\n beforeLoad: async ({ context }) => {\n const config = await context.queryClient.ensureQueryData(\n appConfigQueryOptions,\n );\n const isPasswordAuthEnabled = config?.auth.password.enabled;\n if (!isPasswordAuthEnabled) {\n throw redirect({ to: '/login' });\n }\n },\n loader: async ({ context }) => {\n await context.queryClient.ensureQueryData(appConfigQueryOptions);\n },\n});\n\ntype ForgotPasswordFormValues = {\n email: string;\n};\n\nfunction ForgotPassword() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const [emailSent, setEmailSent] = useState(false);\n const [submittedEmail, setSubmittedEmail] = useState('');\n\n const forgotPasswordSchema = useMemo(\n () =>\n z.object({\n email: z\n .string()\n .min(1, t('validation.email.required'))\n .pipe(z.email(t('validation.email.invalid'))),\n }),\n [t],\n );\n\n const forgotPasswordMutation = useMutation({\n ...forgotPasswordMutationOptions,\n onSuccess: () => {\n setEmailSent(true);\n },\n });\n\n const {\n register,\n setError,\n handleSubmit,\n formState: { errors },\n } = useForm<ForgotPasswordFormValues>({\n defaultValues: {\n email: '',\n },\n resolver: standardSchemaResolver(forgotPasswordSchema),\n });\n\n const onSubmit = async (values: ForgotPasswordFormValues) => {\n try {\n setSubmittedEmail(values.email);\n await forgotPasswordMutation.mutateAsync(values);\n } catch (error) {\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n error.code === 'USER_NOT_EDITABLE'\n ) {\n setError('email', {\n type: 'manual',\n message: t('forgotPassword.error.notEditable'),\n });\n } else {\n setEmailSent(true);\n }\n }\n };\n\n if (emailSent) {\n return (\n <AuthLayout>\n {/*\n The testid stays on a wrapper: e2e treats \"the success alert\" as the\n whole terminal state, which is now the outcome block rather than a\n banner stacked above a header.\n */}\n <div data-testid=\"alert-success\">\n <AuthOutcome\n description={\n <>\n {t('forgotPassword.success.subtitle')}\n <br />\n {t('forgotPassword.success.description', {\n email: submittedEmail,\n })}\n </>\n }\n icon={MailCheckIcon}\n title={t('forgotPassword.success.title')}\n tone=\"success\"\n >\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n onClick={() => navigate({ to: '/login' })}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('forgotPassword.backToLogin')}\n </TRButton>\n <TRText align=\"center\" color=\"muted\" variant=\"caption\">\n {t('forgotPassword.success.checkSpam')}\n </TRText>\n </AuthOutcome>\n </div>\n </AuthLayout>\n );\n }\n\n return (\n <AuthLayout>\n <AuthPageHeader\n subtitle={t('forgotPassword.subtitle')}\n title={t('forgotPassword.title')}\n />\n\n <TRForm\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <AuthField\n autoComplete=\"email\"\n error={errors.email}\n icon={MailIcon}\n label={t('forgotPassword.email.label')}\n placeholder={t('forgotPassword.email.placeholder')}\n {...register('email')}\n type=\"email\"\n />\n\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={forgotPasswordMutation.isPending}\n loadingLabel={t('forgotPassword.submitting')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('forgotPassword.submit')}\n </TRButton>\n </TRForm>\n\n <AuthFooter>\n <AuthFooterLink\n link={<Link to=\"/login\">{t('register.link.login')}</Link>}\n text={t('forgotPassword.footer.rememberedPassword')}\n />\n </AuthFooter>\n </AuthLayout>\n );\n}\n"],"mappings":"wCA+CE,IAAAG,EAxBOH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{X as e,Z as t,et as n,i as r,n as i,s as a,t as o}from"./createLucideIcon-D-yizrWN.js";import{An as s}from"./config-C18-l7z7.js";import{t as c}from"./useMutation-DqIIIiBW.js";import{t as l}from"./auth-field-BpJ4AHtU.js";import{t as u}from"./mail-DVP_XMUi.js";import{c as d,i as f,o as p}from"./zod-Dszyrytb.js";import{K as m,V as h}from"./index-lTEyHSus.js";import{t as g}from"./auth-page-header-ChaCNNrn.js";import{t as _}from"./auth-layout-BdRRr0vT.js";import{t as v}from"./form-sJw-V9wb.js";import{n as y,t as b}from"./auth-footer-Du6S-oDG.js";import{r as x,t as S}from"./standard-schema-C50nwAaQ.js";import{t as C}from"./password-reset-BcFpGOop.js";var w=o(`mail-check`,[[`path`,{d:`M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8`,key:`12jkf8`}],[`path`,{d:`m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7`,key:`1ocrg3`}],[`path`,{d:`m16 19 2 2 4-4`,key:`1b14m6`}]]),T=n(t()),E=e();function D(){let{t:e}=r(),t=m(),[n,o]=(0,T.useState)(!1),[D,O]=(0,T.useState)(``),k=(0,T.useMemo)(()=>p({email:d().min(1,e(`validation.email.required`)).pipe(f(e(`validation.email.invalid`)))}),[e]),A=c({...C,onSuccess:()=>{o(!0)}}),{register:j,setError:M,handleSubmit:N,formState:{errors:P}}=x({defaultValues:{email:``},resolver:S(k)});return n?(0,E.jsx)(_,{children:(0,E.jsx)(`div`,{"data-testid":`alert-success`,children:(0,E.jsxs)(h,{description:(0,E.jsxs)(E.Fragment,{children:[e(`forgotPassword.success.subtitle`),(0,E.jsx)(`br`,{}),e(`forgotPassword.success.description`,{email:D})]}),icon:w,title:e(`forgotPassword.success.title`),tone:`success`,children:[(0,E.jsx)(a,{className:`w-full`,intent:`primary`,onClick:()=>t({to:`/login`}),type:`button`,uiSize:`lg`,children:e(`forgotPassword.backToLogin`)}),(0,E.jsx)(i,{align:`center`,color:`muted`,variant:`caption`,children:e(`forgotPassword.success.checkSpam`)})]})})}):(0,E.jsxs)(_,{children:[(0,E.jsx)(g,{subtitle:e(`forgotPassword.subtitle`),title:e(`forgotPassword.title`)}),(0,E.jsxs)(v,{className:`flex flex-col gap-tinyrack-lg`,onSubmit:N(async t=>{try{O(t.email),await A.mutateAsync(t)}catch(t){t&&typeof t==`object`&&`code`in t&&t.code===`USER_NOT_EDITABLE`?M(`email`,{type:`manual`,message:e(`forgotPassword.error.notEditable`)}):o(!0)}}),children:[(0,E.jsx)(l,{autoComplete:`email`,error:P.email,icon:u,label:e(`forgotPassword.email.label`),placeholder:e(`forgotPassword.email.placeholder`),...j(`email`),type:`email`}),(0,E.jsx)(a,{className:`w-full`,intent:`primary`,loading:A.isPending,loadingLabel:e(`forgotPassword.submitting`),type:`submit`,uiSize:`lg`,children:e(`forgotPassword.submit`)})]}),(0,E.jsx)(b,{children:(0,E.jsx)(y,{link:(0,E.jsx)(s,{to:`/login`,children:e(`register.link.login`)}),text:e(`forgotPassword.footer.rememberedPassword`)})})]})}export{D as component};
|
|
2
|
+
//# sourceMappingURL=forgot-u52JMu6e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgot-u52JMu6e.js","names":["standardSchemaResolver","useMutation","Link","useNavigate","TRButton","TRForm","TRText","MailCheckIcon","MailIcon","useMemo","useState","useForm","useTranslation","z","AuthField","AuthFooter","AuthFooterLink","AuthOutcome","AuthPageHeader","AuthLayout","forgotPasswordMutationOptions","ForgotPasswordFormValues","email","ForgotPassword","t","navigate","emailSent","setEmailSent","submittedEmail","setSubmittedEmail","forgotPasswordSchema","object","string","min","pipe","forgotPasswordMutation","onSuccess","register","setError","handleSubmit","formState","errors","defaultValues","resolver","onSubmit","values","mutateAsync","error","code","type","message","to","isPending","component"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/mail-check.mjs","../../../frontend/src/routes/password/forgot/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: \"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8\", key: \"12jkf8\" }],\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }],\n [\"path\", { d: \"m16 19 2 2 4-4\", key: \"1b14m6\" }]\n];\nconst MailCheck = createLucideIcon(\"mail-check\", __iconNode);\n\nexport { __iconNode, MailCheck as default };\n//# sourceMappingURL=mail-check.mjs.map\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { useMutation } from '@tanstack/react-query';\nimport {\n createFileRoute,\n Link,\n redirect,\n useNavigate,\n} 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 { MailCheckIcon, MailIcon } from 'lucide-react';\nimport { 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 {\n AuthFooter,\n AuthFooterLink,\n} from '#frontend/components/auth/auth-footer.tsx';\nimport { AuthOutcome } from '#frontend/components/auth/auth-outcome.tsx';\nimport { AuthPageHeader } from '#frontend/components/auth/auth-page-header.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { AuthLayout } from '#frontend/features/layout/auth-layout.tsx';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { forgotPasswordMutationOptions } from '#frontend/queries/password-reset.ts';\n\nexport const Route = createFileRoute('/password/forgot/')({\n component: ForgotPassword,\n errorComponent: RouteErrorFallback,\n beforeLoad: async ({ context }) => {\n const config = await context.queryClient.ensureQueryData(\n appConfigQueryOptions,\n );\n const isPasswordAuthEnabled = config?.auth.password.enabled;\n if (!isPasswordAuthEnabled) {\n throw redirect({ to: '/login' });\n }\n },\n loader: async ({ context }) => {\n await context.queryClient.ensureQueryData(appConfigQueryOptions);\n },\n});\n\ntype ForgotPasswordFormValues = {\n email: string;\n};\n\nfunction ForgotPassword() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const [emailSent, setEmailSent] = useState(false);\n const [submittedEmail, setSubmittedEmail] = useState('');\n\n const forgotPasswordSchema = useMemo(\n () =>\n z.object({\n email: z\n .string()\n .min(1, t('validation.email.required'))\n .pipe(z.email(t('validation.email.invalid'))),\n }),\n [t],\n );\n\n const forgotPasswordMutation = useMutation({\n ...forgotPasswordMutationOptions,\n onSuccess: () => {\n setEmailSent(true);\n },\n });\n\n const {\n register,\n setError,\n handleSubmit,\n formState: { errors },\n } = useForm<ForgotPasswordFormValues>({\n defaultValues: {\n email: '',\n },\n resolver: standardSchemaResolver(forgotPasswordSchema),\n });\n\n const onSubmit = async (values: ForgotPasswordFormValues) => {\n try {\n setSubmittedEmail(values.email);\n await forgotPasswordMutation.mutateAsync(values);\n } catch (error) {\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n error.code === 'USER_NOT_EDITABLE'\n ) {\n setError('email', {\n type: 'manual',\n message: t('forgotPassword.error.notEditable'),\n });\n } else {\n setEmailSent(true);\n }\n }\n };\n\n if (emailSent) {\n return (\n <AuthLayout>\n {/*\n The testid stays on a wrapper: e2e treats \"the success alert\" as the\n whole terminal state, which is now the outcome block rather than a\n banner stacked above a header.\n */}\n <div data-testid=\"alert-success\">\n <AuthOutcome\n description={\n <>\n {t('forgotPassword.success.subtitle')}\n <br />\n {t('forgotPassword.success.description', {\n email: submittedEmail,\n })}\n </>\n }\n icon={MailCheckIcon}\n title={t('forgotPassword.success.title')}\n tone=\"success\"\n >\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n onClick={() => navigate({ to: '/login' })}\n type=\"button\"\n uiSize=\"lg\"\n >\n {t('forgotPassword.backToLogin')}\n </TRButton>\n <TRText align=\"center\" color=\"muted\" variant=\"caption\">\n {t('forgotPassword.success.checkSpam')}\n </TRText>\n </AuthOutcome>\n </div>\n </AuthLayout>\n );\n }\n\n return (\n <AuthLayout>\n <AuthPageHeader\n subtitle={t('forgotPassword.subtitle')}\n title={t('forgotPassword.title')}\n />\n\n <TRForm\n className=\"flex flex-col gap-tinyrack-lg\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <AuthField\n autoComplete=\"email\"\n error={errors.email}\n icon={MailIcon}\n label={t('forgotPassword.email.label')}\n placeholder={t('forgotPassword.email.placeholder')}\n {...register('email')}\n type=\"email\"\n />\n\n <TRButton\n className=\"w-full\"\n intent=\"primary\"\n loading={forgotPasswordMutation.isPending}\n loadingLabel={t('forgotPassword.submitting')}\n type=\"submit\"\n uiSize=\"lg\"\n >\n {t('forgotPassword.submit')}\n </TRButton>\n </TRForm>\n\n <AuthFooter>\n <AuthFooterLink\n link={<Link to=\"/login\">{t('register.link.login')}</Link>}\n text={t('forgotPassword.footer.rememberedPassword')}\n />\n </AuthFooter>\n </AuthLayout>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"opBAcA,IAAM,EAAY,EAAiB,aAAc,CAJ/C,CAAC,OAAQ,CAAE,EAAG,4DAA6D,IAAK,QAAS,CAAC,EAC1F,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAS,CAAC,EAC1E,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAS,CAAC,CAEA,CAAU,iBCmC3D,SAASuB,GAAiB,CACxB,GAAM,CAAEC,KAAMZ,EAAe,EACvBa,EAAWtB,EAAY,EACvB,CAACuB,EAAWC,IAAAA,EAAAA,EAAAA,SAAAA,CAAyB,EAAK,EAC1C,CAACC,EAAgBC,IAAAA,EAAAA,EAAAA,SAAAA,CAA8B,EAAE,EAEjDC,GAAAA,EAAAA,EAAAA,QAAAA,KAEFjB,EAAS,CACPS,MAAOT,EACG,CAAC,CACRoB,IAAI,EAAGT,EAAE,2BAA2B,CAAC,CAAC,CACtCU,KAAKrB,EAAQW,EAAE,0BAA0B,CAAC,CAAC,CAChD,CAAC,EACH,CAACA,CAAC,CACJ,EAEMW,EAAyBlC,EAAY,CACzC,GAAGmB,EACHgB,cAAiB,CACfT,EAAa,EAAI,CACnB,CACF,CAAC,EAEK,CACJU,WACAC,WACAC,eACAC,UAAW,CAAEC,WACX9B,EAAkC,CACpC+B,cAAe,CACbpB,MAAO,EACT,EACAqB,SAAU3C,EAAuB8B,CAAoB,CACvD,CAAC,EAgED,OAzCIJ,GAEA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,UAME,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,cAAY,0BACf,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,aACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACGF,EAAE,iCAAiC,GACpC,EAAA,EAAA,IAAA,CAAC,KAAD,CAAG,CAAA,EACFA,EAAE,qCAAsC,CACvCF,MAAOM,CACT,CAAC,CACH,CAAA,CAAA,EAEF,KAAMrB,EACN,MAAOiB,EAAE,8BAA8B,EACvC,KAAK,mBAZP,EAcE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,SACV,OAAO,UACP,YAAeC,EAAS,CAAE0B,GAAI,QAAS,CAAC,EACxC,KAAK,SACL,OAAO,cAEN3B,EAAE,4BAA4B,CACvB,CAAA,GACV,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,SAAS,MAAM,QAAQ,QAAQ,mBAC1CA,EAAE,kCAAkC,CAC/B,CAAA,CACG,GACV,CAAA,CACK,CAAA,GAKd,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,SAAUA,EAAE,yBAAyB,EACrC,MAAOA,EAAE,sBAAsB,CAAE,CAAA,GAGnC,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,UAAU,gCACV,SAAUe,EAAaK,KAvELC,IAAqC,CAC3D,GAAI,CACFhB,EAAkBgB,EAAOvB,KAAK,EAC9B,MAAMa,EAAuBW,YAAYD,CAAM,CACjD,OAASE,EAAO,CAEZA,GACA,OAAOA,GAAU,UACjB,SAAUA,GACVA,EAAMC,OAAS,oBAEfV,EAAS,QAAS,CAChBW,KAAM,SACNC,QAAS1B,EAAE,kCAAkC,CAC/C,CAAC,EAEDG,EAAa,EAAI,CAErB,CACF,CAoDqC,WAFjC,EAIE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAa,QACb,MAAOc,EAAOnB,MACd,KAAMd,EACN,MAAOgB,EAAE,4BAA4B,EACrC,YAAaA,EAAE,kCAAkC,EACjD,GAAIa,EAAS,OAAO,EACpB,KAAK,OAAO,CAAA,GAGd,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,SACV,OAAO,UACP,QAASF,EAAuBiB,UAChC,aAAc5B,EAAE,2BAA2B,EAC3C,KAAK,SACL,OAAO,cAENA,EAAE,uBAAuB,CAClB,CAAA,CACJ,KAER,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAG,kBAAUA,EAAE,qBAAqB,CAAQ,CAAA,EACxD,KAAMA,EAAE,0CAA0C,CAAE,CAAA,CAE5C,CAAA,CACF,CAAA,CAAA,CAEhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,X as t,Z as n,c as r,d as i,et as a,w as o}from"./createLucideIcon-D-yizrWN.js";import{$ as s,z as c}from"./config-C18-l7z7.js";import{N as l,P as u}from"./shell-header-bar-CdOEWmCT.js";var d=a(n(),1),f=d.createContext({disabled:!1});function p(){return d.useContext(f)}var m=t(),h=d.forwardRef(function(e,t){let{render:n,className:a,validationMode:f=`onSubmit`,errors:p,onSubmit:h,onFormSubmit:_,actionsRef:v,style:y,...b}=e,x=d.useRef({fields:new Map}),S=d.useRef(null),C=d.useRef(!1),w=d.useRef(!1),T=o(()=>{let e=!1,t=null;for(let n of x.current.fields.values()){if(n.validityData.state.valid!==!1)continue;e=!0;let r=n.controlRef.current;r&&(!t||g(r,t))&&(t=r)}return t?(t.focus(),t.tagName===`INPUT`&&t.select(),!0):e}),[E,D]=d.useState(p);l(p,()=>{D(p)}),d.useEffect(()=>{C.current&&(C.current=!1,T())},[E,T]),d.useImperativeHandle(v,()=>({validate(e){e?Array.from(x.current.fields.values()).find(t=>t.name===e)?.validate():x.current.fields.forEach(e=>{e.validate()})}}),[]);let O=r(`form`,e,{ref:[t,S],props:[{noValidate:!0,onSubmit(e){if(w.current=!0,x.current.fields.forEach(e=>{e.validate()}),T()){e.preventDefault();return}if(C.current=!0,h?.(e),_){e.preventDefault();let t={};x.current.fields.forEach(e=>{e.name&&(t[e.name]=e.getValue())}),_(t,c(s,e.nativeEvent))}}},b]}),k=o(e=>{if(e&&E&&Object.hasOwn(E,e)){let t={...E};delete t[e],D(t)}}),A=d.useMemo(()=>({elementRef:S,formRef:x,validationMode:f,errors:E??i,clearErrors:k,submitAttemptedRef:w}),[x,f,E,k]);return(0,m.jsx)(u.Provider,{value:A,children:O})});function g(e,t){let n=e.compareDocumentPosition(t);return(n&Node.DOCUMENT_POSITION_DISCONNECTED)===0&&(n&Node.DOCUMENT_POSITION_FOLLOWING)!==0}function _({className:t,...n}){return(0,m.jsx)(h,{...n,className:e(`tr-form`,t)})}export{f as n,p as r,_ as t};
|
|
2
|
+
//# sourceMappingURL=form-sJw-V9wb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-sJw-V9wb.js","names":["REASONS.none"],"sources":["../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/field/item/FieldItemContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/form/Form.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/form/form.js"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nexport const FieldItemContext = /*#__PURE__*/React.createContext({\n disabled: false\n});\nif (process.env.NODE_ENV !== \"production\") FieldItemContext.displayName = \"FieldItemContext\";\nexport function useFieldItemContext() {\n const context = React.useContext(FieldItemContext);\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { createGenericEventDetails } from \"../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../internals/reasons.mjs\";\nimport { FormContext } from \"../internals/form-context/FormContext.mjs\";\nimport { useRenderElement } from \"../internals/useRenderElement.mjs\";\nimport { useValueChanged } from \"../internals/useValueChanged.mjs\";\n\n/**\n * A native form element with consolidated error handling.\n * Renders a `<form>` element.\n *\n * Documentation: [Base UI Form](https://base-ui.com/react/components/form)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const Form = /*#__PURE__*/React.forwardRef(function Form(componentProps, forwardedRef) {\n const {\n render,\n className,\n validationMode = 'onSubmit',\n errors: externalErrors,\n onSubmit,\n onFormSubmit,\n actionsRef,\n style,\n ...elementProps\n } = componentProps;\n const formRef = React.useRef({\n fields: new Map()\n });\n const elementRef = React.useRef(null);\n const submittedRef = React.useRef(false);\n const submitAttemptedRef = React.useRef(false);\n const focusFirstInvalid = useStableCallback(() => {\n // A field can be invalid without a focusable control (for example a checkbox group whose\n // custom validation failed while every checkbox is unmounted, disabled, or reassociated).\n // Keep submission blocked, but move focus to the first invalid field that has a usable control.\n // Registration order can diverge from DOM order (keyed fields reordered without\n // remounting, portals), so pick the first control by document position. For controls\n // in disconnected trees (e.g. separate shadow roots), where document position is\n // implementation-specific, keep registration order.\n let hasInvalid = false;\n let firstControl = null;\n for (const field of formRef.current.fields.values()) {\n if (field.validityData.state.valid !== false) {\n continue;\n }\n hasInvalid = true;\n const control = field.controlRef.current;\n if (control && (!firstControl || comesBeforeInSameTree(control, firstControl))) {\n firstControl = control;\n }\n }\n if (firstControl) {\n firstControl.focus();\n if (firstControl.tagName === 'INPUT') {\n firstControl.select();\n }\n return true;\n }\n return hasInvalid;\n });\n const [errors, setErrors] = React.useState(externalErrors);\n useValueChanged(externalErrors, () => {\n setErrors(externalErrors);\n });\n React.useEffect(() => {\n if (!submittedRef.current) {\n return;\n }\n submittedRef.current = false;\n focusFirstInvalid();\n }, [errors, focusFirstInvalid]);\n React.useImperativeHandle(actionsRef, () => ({\n validate(fieldName) {\n if (fieldName) {\n Array.from(formRef.current.fields.values()).find(field => field.name === fieldName)?.validate();\n } else {\n formRef.current.fields.forEach(field => {\n field.validate();\n });\n }\n }\n }), []);\n const element = useRenderElement('form', componentProps, {\n ref: [forwardedRef, elementRef],\n props: [{\n noValidate: true,\n onSubmit(event) {\n submitAttemptedRef.current = true;\n\n // Async validation isn't supported to stop the submit event.\n formRef.current.fields.forEach(field => {\n field.validate();\n });\n if (focusFirstInvalid()) {\n event.preventDefault();\n return;\n }\n submittedRef.current = true;\n onSubmit?.(event);\n if (onFormSubmit) {\n event.preventDefault();\n const formValues = {};\n formRef.current.fields.forEach(field => {\n if (field.name) {\n formValues[field.name] = field.getValue();\n }\n });\n onFormSubmit(formValues, createGenericEventDetails(REASONS.none, event.nativeEvent));\n }\n }\n }, elementProps]\n });\n const clearErrors = useStableCallback(name => {\n if (name && errors && Object.hasOwn(errors, name)) {\n const nextErrors = {\n ...errors\n };\n delete nextErrors[name];\n setErrors(nextErrors);\n }\n });\n const contextValue = React.useMemo(() => ({\n elementRef,\n formRef,\n validationMode,\n errors: errors ?? EMPTY_OBJECT,\n clearErrors,\n submitAttemptedRef\n }), [formRef, validationMode, errors, clearErrors]);\n return /*#__PURE__*/_jsx(FormContext.Provider, {\n value: contextValue,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") Form.displayName = \"Form\";\n/* eslint-disable no-bitwise */\nfunction comesBeforeInSameTree(element, reference) {\n const position = element.compareDocumentPosition(reference);\n return (position & Node.DOCUMENT_POSITION_DISCONNECTED) === 0 && (position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0;\n}","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Form } from \"@base-ui/react/form\";\n//#region src/components/form/form.tsx\nfunction TRForm({ className, ...props }) {\n\treturn /* @__PURE__ */ jsx(Form, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-form\", className)\n\t});\n}\n//#endregion\nexport { TRForm };\n\n//# sourceMappingURL=form.js.map"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|