@dragonmastery/dragoncore-vue 0.0.23 → 0.0.25
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/{ChangePasswordPage-CYuCCosx.js → ChangePasswordPage-C7rqJfii.js} +1 -1
- package/dist/{ChangePasswordPage-C633yQiU.js → ChangePasswordPage-nr0B06HB.js} +1 -1
- package/dist/{ChangePasswordPage-C633yQiU.js.map → ChangePasswordPage-nr0B06HB.js.map} +1 -1
- package/dist/ConsentFlowStep-Dwg2HpnI.js +157 -0
- package/dist/ConsentFlowStep-Dwg2HpnI.js.map +1 -0
- package/dist/ConsentRequired-Cp9QGWiV.js +114 -0
- package/dist/ConsentRequired-Cp9QGWiV.js.map +1 -0
- package/dist/{CreateTeamForm-CeaC41VY.js → CreateTeamForm-DmBiBqC0.js} +5 -5
- package/dist/{CreateTeamForm-CeaC41VY.js.map → CreateTeamForm-DmBiBqC0.js.map} +1 -1
- package/dist/CreateTeamForm-DoMkefS8.js +12 -0
- package/dist/{CreateTeamMemberForm-CnHfpob_.js → CreateTeamMemberForm-CSF-tD6B.js} +5 -5
- package/dist/{CreateTeamMemberForm-Bv9gNG4z.js → CreateTeamMemberForm-ITp4XFn9.js} +5 -5
- package/dist/{CreateTeamMemberForm-Bv9gNG4z.js.map → CreateTeamMemberForm-ITp4XFn9.js.map} +1 -1
- package/dist/{CreateUserPage-CqKcY7_X.js → CreateUserPage-1WiLNGr_.js} +1 -1
- package/dist/{CreateUserPage-CqKcY7_X.js.map → CreateUserPage-1WiLNGr_.js.map} +1 -1
- package/dist/{CreateUserPage-C9uOeYDJ.js → CreateUserPage-DNi45YF4.js} +1 -1
- package/dist/{CreditBalanceDashboard-k_orNn4h.js → CreditBalanceDashboard-B-CQpNNH.js} +2 -2
- package/dist/{CreditBalanceDashboard-k_orNn4h.js.map → CreditBalanceDashboard-B-CQpNNH.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-0HiJE_OS.js → CreditBalanceDashboard-C9aofnmG.js} +5 -5
- package/dist/{CreditManagement-DXdIN-0d.js → CreditManagement-BqwuCfPL.js} +5 -5
- package/dist/{CreditManagement-BVBZQDI4.js → CreditManagement-DC-v2lmd.js} +2 -2
- package/dist/{CreditManagement-BVBZQDI4.js.map → CreditManagement-DC-v2lmd.js.map} +1 -1
- package/dist/{CreditTransactionHistory-DSu-6aDi.js → CreditTransactionHistory-Cnf23BQr.js} +3 -3
- package/dist/{CreditTransactionHistory-DSu-6aDi.js.map → CreditTransactionHistory-Cnf23BQr.js.map} +1 -1
- package/dist/{CustomerCreateSupportTicketForm-BsjX8Pja.js → CustomerCreateSupportTicketForm-BglXTkKj.js} +5 -5
- package/dist/{CustomerCreateSupportTicketForm-kf8YIGjx.js → CustomerCreateSupportTicketForm-DpMy7RN3.js} +3 -3
- package/dist/{CustomerCreateSupportTicketForm-kf8YIGjx.js.map → CustomerCreateSupportTicketForm-DpMy7RN3.js.map} +1 -1
- package/dist/{CustomerSupportTicketDetailPage-C_-YoAaP.js → CustomerSupportTicketDetailPage-CI0UmP2U.js} +5 -5
- package/dist/{CustomerSupportTicketDetailPage-C_-YoAaP.js.map → CustomerSupportTicketDetailPage-CI0UmP2U.js.map} +1 -1
- package/dist/CustomerSupportTicketList-DgXBedwz.js +64 -0
- package/dist/{CustomerSupportTicketParent-BpBuYCrP.js → CustomerSupportTicketParent-BaKfkSlU.js} +2 -2
- package/dist/{CustomerSupportTicketParent-BpBuYCrP.js.map → CustomerSupportTicketParent-BaKfkSlU.js.map} +1 -1
- package/dist/{CustomerSupportTicketParent-Djy7pNqO.js → CustomerSupportTicketParent-D19kei4H.js} +1 -1
- package/dist/{CustomerSupportTicketSuccess-cumNSGdx.js → CustomerSupportTicketSuccess-BQ_a8BPV.js} +2 -2
- package/dist/{CustomerSupportTicketSuccess-cumNSGdx.js.map → CustomerSupportTicketSuccess-BQ_a8BPV.js.map} +1 -1
- package/dist/{CustomerSupportTicketSuccess-DsFzpJFU.js → CustomerSupportTicketSuccess-DToQdwdr.js} +4 -4
- package/dist/EditTeamForm-BKnTz2F4.js +12 -0
- package/dist/{EditTeamForm-BxRN338L.js → EditTeamForm-Cgi1EghV.js} +4 -4
- package/dist/{EditTeamForm-BxRN338L.js.map → EditTeamForm-Cgi1EghV.js.map} +1 -1
- package/dist/{EditTeamMemberForm-D7D1Zddh.js → EditTeamMemberForm-CIqEjFF8.js} +3 -3
- package/dist/{EditTeamMemberForm-DfgJr5Cy.js → EditTeamMemberForm-Fyf8Zxfh.js} +3 -3
- package/dist/{EditTeamMemberForm-DfgJr5Cy.js.map → EditTeamMemberForm-Fyf8Zxfh.js.map} +1 -1
- package/dist/{EditUserPage-CI_jtU8P.js → EditUserPage-BBzGmOrx.js} +2 -2
- package/dist/{EditUserPage-CI_jtU8P.js.map → EditUserPage-BBzGmOrx.js.map} +1 -1
- package/dist/{TeamNotesTab-o7glfjoY.js → EditUserPage-D3AWaHT2.js} +2 -2
- package/dist/ExternalLinkIcon-FidcmNOa.js +34 -0
- package/dist/ExternalLinkIcon-FidcmNOa.js.map +1 -0
- package/dist/{FieldsetSection-Cd4B8Ad7.js → FieldsetSection-CH1jAwcc.js} +1 -1
- package/dist/{FieldsetSection-Cd4B8Ad7.js.map → FieldsetSection-CH1jAwcc.js.map} +1 -1
- package/dist/{ForgotPassword-tJVSg7PB.js → ForgotPassword-BhmO5Lfd.js} +1 -1
- package/dist/{ForgotPassword-Ckb9Z-wb.js → ForgotPassword-Dd-E3_o1.js} +1 -1
- package/dist/{ForgotPassword-Ckb9Z-wb.js.map → ForgotPassword-Dd-E3_o1.js.map} +1 -1
- package/dist/{LoginForm-QFJ8NHww.js → LoginForm-By2I6TuV.js} +1 -1
- package/dist/{LoginForm-CMN2T1fA.js → LoginForm-DPmrJ_wm.js} +1 -1
- package/dist/{LoginForm-CMN2T1fA.js.map → LoginForm-DPmrJ_wm.js.map} +1 -1
- package/dist/{Logout-CjDBff3W.js → Logout-DZD4gSWp.js} +1 -1
- package/dist/{Logout-CFLYHlLr.js → Logout-DnkdqN78.js} +1 -1
- package/dist/{Logout-CFLYHlLr.js.map → Logout-DnkdqN78.js.map} +1 -1
- package/dist/{MfaSetup-XqoAwBXx.js → MfaSetup-Bjc3v0hs.js} +4 -4
- package/dist/{MfaSetup-XqoAwBXx.js.map → MfaSetup-Bjc3v0hs.js.map} +1 -1
- package/dist/{MfaSetup-BZcoxJx-.js → MfaSetup-BtfQXhLn.js} +2 -2
- package/dist/{MfaVerify-Dy2aV5Gk.js → MfaVerify-SUfSRf4m.js} +2 -2
- package/dist/{MfaVerify-C-A75TFZ.js → MfaVerify-uJlPz8xg.js} +2 -2
- package/dist/{MfaVerify-C-A75TFZ.js.map → MfaVerify-uJlPz8xg.js.map} +1 -1
- package/dist/{RecordVersionViewer-D2j10HdK.js → RecordVersionViewer-NLn1gVys.js} +1 -1
- package/dist/{RecordVersionViewer-D2j10HdK.js.map → RecordVersionViewer-NLn1gVys.js.map} +1 -1
- package/dist/{ResetPassword-Cd-Yxp8E.js → ResetPassword-CyizBRob.js} +1 -1
- package/dist/{ResetPassword-Cd-Yxp8E.js.map → ResetPassword-CyizBRob.js.map} +1 -1
- package/dist/{ResetPassword-D6to3G6a.js → ResetPassword-Dz2N3pH4.js} +1 -1
- package/dist/{SavedFiltersPage-DM5DvAFa.js → SavedFiltersPage-CQl3CThS.js} +52 -51
- package/dist/{SavedFiltersPage-DM5DvAFa.js.map → SavedFiltersPage-CQl3CThS.js.map} +1 -1
- package/dist/{Signup-2pqvJiVt.js → Signup-BCVZZCR_.js} +3 -3
- package/dist/{Signup-2pqvJiVt.js.map → Signup-BCVZZCR_.js.map} +1 -1
- package/dist/Signup-CJrY4IK-.js +9 -0
- package/dist/{SignupConsentFlow-X3kXuviv.js → SignupConsentFlow-Dd3QAkVF.js} +37 -127
- package/dist/SignupConsentFlow-Dd3QAkVF.js.map +1 -0
- package/dist/{SignupRequirementsPage-Cf-ElkEq.js → SignupRequirementsPage-DUQ63ZuW.js} +6 -6
- package/dist/SignupRequirementsPage-DUQ63ZuW.js.map +1 -0
- package/dist/{StaffCreateSupportTicketForm-D2nn4rTU.js → StaffCreateSupportTicketForm-BlXd0-fF.js} +4 -4
- package/dist/{StaffCreateSupportTicketForm-D2nn4rTU.js.map → StaffCreateSupportTicketForm-BlXd0-fF.js.map} +1 -1
- package/dist/{StaffCreateSupportTicketForm-BlUP2XXy.js → StaffCreateSupportTicketForm-DZLB4g3g.js} +5 -5
- package/dist/{StaffSupportTicketDetailPage-MFtm06BE.js → StaffSupportTicketDetailPage--idGVu5P.js} +10 -10
- package/dist/StaffSupportTicketDetailPage--idGVu5P.js.map +1 -0
- package/dist/StaffSupportTicketList-qPI92eBV.js +64 -0
- package/dist/{StaffSupportTicketParent-B7mEN1oD.js → StaffSupportTicketParent-ByUwsYGx.js} +1 -1
- package/dist/{StaffSupportTicketParent-BvPwgOqH.js → StaffSupportTicketParent-yoC-_Lku.js} +2 -2
- package/dist/{StaffSupportTicketParent-BvPwgOqH.js.map → StaffSupportTicketParent-yoC-_Lku.js.map} +1 -1
- package/dist/{StaffSupportTicketSuccess-Ca2WrcRg.js → StaffSupportTicketSuccess-D9ZUkc88.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-Ca2WrcRg.js.map → StaffSupportTicketSuccess-D9ZUkc88.js.map} +1 -1
- package/dist/{StaffSupportTicketSuccess-BMCOP3ko.js → StaffSupportTicketSuccess-DSKqZFmV.js} +4 -4
- package/dist/{SupportStaffPage-B69-kuvg.js → SupportStaffPage-c2ouJwJk.js} +3 -3
- package/dist/{SupportStaffPage-B69-kuvg.js.map → SupportStaffPage-c2ouJwJk.js.map} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BoAjMb08.js → SupportTicketDevLifecycleBadge-BYKZjEv6.js} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BoAjMb08.js.map → SupportTicketDevLifecycleBadge-BYKZjEv6.js.map} +1 -1
- package/dist/{SupportTicketMaintenancePage-Bptja-xb.js → SupportTicketMaintenancePage-B07avInx.js} +1 -1
- package/dist/{SupportTicketMaintenancePage-Bptja-xb.js.map → SupportTicketMaintenancePage-B07avInx.js.map} +1 -1
- package/dist/TeamAttachmentsTab-BmypKYXr.js +64 -0
- package/dist/TeamHistoryTab-BSEOYC_5.js +6 -0
- package/dist/{TeamHistoryTab-DM8KBEG1.js → TeamHistoryTab-p3hDxCc3.js} +3 -3
- package/dist/{TeamHistoryTab-DM8KBEG1.js.map → TeamHistoryTab-p3hDxCc3.js.map} +1 -1
- package/dist/{TeamList-qdwlMuJv.js → TeamList-BlwTWVnP.js} +3 -3
- package/dist/{TeamList-qdwlMuJv.js.map → TeamList-BlwTWVnP.js.map} +1 -1
- package/dist/TeamList-DlHGLlmO.js +8 -0
- package/dist/{TeamMemberList-DyI1U1t_.js → TeamMemberList-D0-dM5kI.js} +3 -3
- package/dist/{TeamMemberList-DyI1U1t_.js.map → TeamMemberList-D0-dM5kI.js.map} +1 -1
- package/dist/TeamMemberList-uwSe9zdv.js +7 -0
- package/dist/{TeamMemberParent-B63pRfI6.js → TeamMemberParent-C9OEziOK.js} +3 -3
- package/dist/{TeamMemberParent-D9Fxu7GD.js → TeamMemberParent-CJGWXjuM.js} +2 -2
- package/dist/{TeamMemberParent-D9Fxu7GD.js.map → TeamMemberParent-CJGWXjuM.js.map} +1 -1
- package/dist/{EditUserPage-C0K7EGjM.js → TeamNotesTab-BnkgZd-5.js} +2 -2
- package/dist/{TeamNotesTab-BgxleidZ.js → TeamNotesTab-DPw9YEwK.js} +2 -2
- package/dist/{TeamNotesTab-BgxleidZ.js.map → TeamNotesTab-DPw9YEwK.js.map} +1 -1
- package/dist/{TeamParent-BwXqA3rj.js → TeamParent-EPbNiMmg.js} +2 -2
- package/dist/{TeamParent-BwXqA3rj.js.map → TeamParent-EPbNiMmg.js.map} +1 -1
- package/dist/TeamParent-pt8XxZpt.js +11 -0
- package/dist/{TimelineNoteInput-DXaodm43.js → TimelineNoteInput--q4ENAgu.js} +2 -2
- package/dist/{TimelineNoteInput-DXaodm43.js.map → TimelineNoteInput--q4ENAgu.js.map} +1 -1
- package/dist/{TimelineSystemEvent-zCMUx5Zz.js → TimelineSystemEvent-Ch1sZiyO.js} +1 -1
- package/dist/{TimelineSystemEvent-zCMUx5Zz.js.map → TimelineSystemEvent-Ch1sZiyO.js.map} +1 -1
- package/dist/{UserListPage-DtA8tLff.js → UserListPage-A0_eNpQ1.js} +2 -2
- package/dist/{UserListPage-DtA8tLff.js.map → UserListPage-A0_eNpQ1.js.map} +1 -1
- package/dist/UserListPage-CjpxiETO.js +5 -0
- package/dist/{UserProfilePage-DRbCAr9H.js → UserProfilePage-BWK97ODt.js} +1 -1
- package/dist/{UserProfilePage-g4-VEDXo.js → UserProfilePage-FNLYK9kj.js} +1 -1
- package/dist/{UserProfilePage-g4-VEDXo.js.map → UserProfilePage-FNLYK9kj.js.map} +1 -1
- package/dist/{VerifyEmail-CM5ehFB8.js → VerifyEmail-CEbvnWLl.js} +2 -2
- package/dist/{VerifyEmail-CM5ehFB8.js.map → VerifyEmail-CEbvnWLl.js.map} +1 -1
- package/dist/{VerifyEmail-DMHczC9f.js → VerifyEmail-DdUKxJnk.js} +2 -2
- package/dist/{ViewTeam-DSbKV60o.js → ViewTeam-BeSKgVYp.js} +4 -4
- package/dist/{ViewTeam-DSbKV60o.js.map → ViewTeam-BeSKgVYp.js.map} +1 -1
- package/dist/ViewTeam-tBi95Q7D.js +8 -0
- package/dist/{ViewTeamMember-BB0nvPOe.js → ViewTeamMember-Cf5yXdv6.js} +4 -4
- package/dist/{ViewTeamMember-BB0nvPOe.js.map → ViewTeamMember-Cf5yXdv6.js.map} +1 -1
- package/dist/ViewTeamMember-DtQCZU-X.js +7 -0
- package/dist/{ZiniaContainer-CjVhCnGB.js → ZiniaContainer-BV6sojLa.js} +1 -1
- package/dist/{ZiniaContainer-CjVhCnGB.js.map → ZiniaContainer-BV6sojLa.js.map} +1 -1
- package/dist/{convertToLocalDateTime-BF25N4xd.js → convertToLocalDateTime-C13-PrSA.js} +1 -1
- package/dist/{convertToLocalDateTime-BF25N4xd.js.map → convertToLocalDateTime-C13-PrSA.js.map} +1 -1
- package/dist/{customerSupportTicketRoutes-C7OxGAGl.js → customerSupportTicketRoutes-aXOZjl41.js} +8 -8
- package/dist/{customerSupportTicketRoutes-C7OxGAGl.js.map → customerSupportTicketRoutes-aXOZjl41.js.map} +1 -1
- package/dist/{displayIdFormatter-B-_WQHOr.js → displayIdFormatter-Cr-QaEk1.js} +1 -1
- package/dist/{displayIdFormatter-B-_WQHOr.js.map → displayIdFormatter-Cr-QaEk1.js.map} +1 -1
- package/dist/{extractRpcErrorMessage-diUBl6Ij.js → extractRpcErrorMessage-CAaeVysa.js} +1 -1
- package/dist/{extractRpcErrorMessage-diUBl6Ij.js.map → extractRpcErrorMessage-CAaeVysa.js.map} +1 -1
- package/dist/index.d.ts +1093 -1081
- package/dist/index.js +55 -54
- package/dist/{mfaSchema-Ukqzdyck.js → mfaSchema-C6PatIbY.js} +1 -1
- package/dist/{mfaSchema-Ukqzdyck.js.map → mfaSchema-C6PatIbY.js.map} +1 -1
- package/dist/{saved_filter-CfzH0BzK.js → saved_filter-DMUiaPSP.js} +3 -3
- package/dist/{saved_filter-CfzH0BzK.js.map → saved_filter-DMUiaPSP.js.map} +1 -1
- package/dist/{signupConsentStorage-DS9vCUuC.js → signupConsentStorage-Ct4ZuKi-.js} +1 -1
- package/dist/{signupConsentStorage-DS9vCUuC.js.map → signupConsentStorage-Ct4ZuKi-.js.map} +1 -1
- package/dist/{src-DVe_0RO9.js → src-DJeB_pSK.js} +32 -31
- package/dist/src-DJeB_pSK.js.map +1 -0
- package/dist/{staffSupportTicketRoutes-CWutoQWp.js → staffSupportTicketRoutes-bHqYUfii.js} +8 -8
- package/dist/{staffSupportTicketRoutes-CWutoQWp.js.map → staffSupportTicketRoutes-bHqYUfii.js.map} +1 -1
- package/dist/{teamMemberMetadata-CQnbVepq.js → teamMemberMetadata-DX0W-B7p.js} +1 -1
- package/dist/{teamMemberMetadata-CQnbVepq.js.map → teamMemberMetadata-DX0W-B7p.js.map} +1 -1
- package/dist/{teamMetadata-DlvwO5V0.js → teamMetadata-26Mwjb2i.js} +1 -1
- package/dist/{teamMetadata-DlvwO5V0.js.map → teamMetadata-26Mwjb2i.js.map} +1 -1
- package/dist/{teamRoutes-KFgnsdDP.js → teamRoutes-CbCuofgD.js} +12 -12
- package/dist/{teamRoutes-KFgnsdDP.js.map → teamRoutes-CbCuofgD.js.map} +1 -1
- package/dist/{team_memberRoutes-Cjpw_ql6.js → team_memberRoutes-Cxgte_vj.js} +7 -7
- package/dist/{team_memberRoutes-Cjpw_ql6.js.map → team_memberRoutes-Cxgte_vj.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-B51z65PN.js → useEmailVerificationChannel-QuMSgzzM.js} +1 -1
- package/dist/{useEmailVerificationChannel-B51z65PN.js.map → useEmailVerificationChannel-QuMSgzzM.js.map} +1 -1
- package/dist/{userAuthorized-C09FHWGL.js → userAuthorized-klLUHGxT.js} +5 -1
- package/dist/userAuthorized-klLUHGxT.js.map +1 -0
- package/package.json +2 -2
- package/dist/ConsentRequired-BPjsZoPY.js +0 -211
- package/dist/ConsentRequired-BPjsZoPY.js.map +0 -1
- package/dist/CreateTeamForm-DfgCaUwX.js +0 -12
- package/dist/CustomerSupportTicketList-DdACn3ug.js +0 -63
- package/dist/EditTeamForm-BE3iX2x3.js +0 -12
- package/dist/Signup-XdImA1os.js +0 -9
- package/dist/SignupConsentFlow-X3kXuviv.js.map +0 -1
- package/dist/SignupRequirementsPage-Cf-ElkEq.js.map +0 -1
- package/dist/StaffSupportTicketDetailPage-MFtm06BE.js.map +0 -1
- package/dist/StaffSupportTicketList-LfLx0pYP.js +0 -63
- package/dist/TeamAttachmentsTab-Dk3LxX3n.js +0 -63
- package/dist/TeamHistoryTab-CRONdHcL.js +0 -6
- package/dist/TeamList-DYm_vQ2z.js +0 -8
- package/dist/TeamMemberList-4LRLT_7Z.js +0 -7
- package/dist/TeamParent-CFOmyKPz.js +0 -11
- package/dist/UserListPage-Bmwg0an5.js +0 -5
- package/dist/ViewTeam-CXyABxE6.js +0 -8
- package/dist/ViewTeamMember-jrOnBaDh.js +0 -7
- package/dist/src-DVe_0RO9.js.map +0 -1
- package/dist/userAuthorized-C09FHWGL.js.map +0 -1
- /package/dist/{Appearance-Ch4zfWZ3.js → Appearance-CHCv4Fd1.js} +0 -0
- /package/dist/{TeamMembersTab-BGcdyEE8.js → TeamMembersTab-CeOJAhhR.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logout-
|
|
1
|
+
{"version":3,"file":"Logout-DnkdqN78.js","names":["error: unknown"],"sources":["../src/slices/auth/features/Logout.vue"],"sourcesContent":["<template>\n <div class=\"min-h-screen flex items-center justify-center bg-base-100\">\n <div class=\"max-w-md mx-auto bg-base-200 p-8 rounded-xl shadow-md text-center\">\n <div v-if=\"status === 'loading'\" class=\"space-y-4\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg text-primary\"></span>\n </div>\n <h2 class=\"text-2xl font-bold mb-2\">Logging out...</h2>\n <p class=\"text-base-content/70\">Please wait while we securely log you out</p>\n </div>\n <div v-else class=\"space-y-4\">\n <h2 class=\"text-2xl font-bold mb-2\">\n {{ status === 'success' ? 'Logged out' : 'Logout failed' }}\n </h2>\n <p class=\"text-base-content/70\">\n {{ status === 'success'\n ? 'Redirecting you...'\n : 'Redirecting you to login...' }}\n </p>\n <p class=\"text-sm text-base-content/60\">\n If you aren't redirected automatically,\n <AppLink :to=\"redirectTo\" class=\"link link-primary\">click here</AppLink>.\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../components/AppLink.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../composables/useUserSessionStore';\nimport { getValidReturnUrl } from '../../../utils/useReturnUrl';\nimport { onMounted, computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\n\nconst sessionStore = useUserSessionStore();\nconst route = useRoute();\nconst router = useRouter();\nconst status = ref<'loading' | 'success' | 'error'>('loading');\n\nconst redirectTo = computed(() =>\n getValidReturnUrl(route, '/auth/login'),\n);\n\nconst { mutate: logoutMutate } = useMutation(\n (api) => api.userSessions.logout(),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\nonMounted(async () => {\n try {\n await logoutMutate(undefined);\n sessionStore.clearSession();\n status.value = 'success';\n setTimeout(() => router.push(redirectTo.value), 1000);\n } catch (error: unknown) {\n status.value = 'error';\n toast.error(error instanceof Error ? error.message : 'Failed to logout', {\n autoClose: 2000,\n });\n setTimeout(() => router.push(redirectTo.value), 2000);\n }\n});\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAqCA,MAAM,eAAe,qBAAqB;EAC1C,MAAM,QAAQ,UAAU;EACxB,MAAM,SAAS,WAAW;EAC1B,MAAM,SAAS,IAAqC,UAAU;EAE9D,MAAM,aAAa,eACjB,kBAAkB,OAAO,cAAc,CACxC;EAED,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,QAAQ,IAAI,aAAa,QAAQ,EAClC,EAAE,aAAa,WAAW,CAC3B;AAED,YAAU,YAAY;AACpB,OAAI;AACF,UAAM,aAAa,OAAU;AAC7B,iBAAa,cAAc;AAC3B,WAAO,QAAQ;AACf,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;YAC9CA,OAAgB;AACvB,WAAO,QAAQ;AACf,UAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,oBAAoB,EACvE,WAAW,KACZ,CAAC;AACF,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;;IAEvD;;uBA/DA,mBAwBM,OAxBN,YAwBM,CAvBJ,mBAsBM,OAtBN,YAsBM,CArBO,OAAA,UAAM,aAAA,WAAA,EAAjB,mBAMM,OANN,YAMM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA;IALJ,mBAEM,OAAA,EAFD,OAAM,uBAAqB,EAAA,CAC9B,mBAAqE,QAAA,EAA/D,OAAM,mDAAiD,CAAA,CAAA;IAE/D,mBAAuD,MAAA,EAAnD,OAAM,2BAAyB,EAAC,kBAAc,GAAA;IAClD,mBAA6E,KAAA,EAA1E,OAAM,wBAAsB,EAAC,6CAAyC,GAAA;yBAE3E,mBAaM,OAbN,YAaM;IAZJ,mBAEK,MAFL,YAEK,gBADA,OAAA,UAAM,YAAA,eAAA,gBAAA,EAAA,EAAA;IAEX,mBAII,KAJJ,YAII,gBAHC,OAAA,UAAM,YAAA,uBAAA,8BAAA;IAIX,mBAGI,KAHJ,YAGI;+CAHoC,6CAEtC,GAAA;KAAA,YAAwE,iBAAA;MAA9D,IAAI,WAAA;MAAY,OAAM;;6BAA8B,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAV,cAAU,GAAA,CAAA,EAAA,CAAA;;;+CAAU,MAC1E,GAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
2
|
import { t as AppLink_default } from "./AppLink-FcNGKgvG.js";
|
|
3
3
|
import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-B5V3SJf5.js";
|
|
4
|
-
import { t as mfaSetupConfirmSchemaWithMetadata } from "./mfaSchema-
|
|
4
|
+
import { t as mfaSetupConfirmSchemaWithMetadata } from "./mfaSchema-C6PatIbY.js";
|
|
5
5
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
|
|
6
6
|
import { useRoute, useRouter } from "vue-router";
|
|
7
7
|
import { toast } from "vue3-toastify";
|
|
@@ -58,10 +58,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
58
58
|
const handleSuccess = async (data) => {
|
|
59
59
|
form.reset();
|
|
60
60
|
setupData.value = null;
|
|
61
|
-
if (data.recoveryCodes?.length) toast.success("MFA enabled! Save your recovery codes in a safe place. You will need them if you lose access to your authenticator.");
|
|
62
|
-
else toast.success("Two-factor authentication has been enabled.");
|
|
63
61
|
const targetPath = getValidReturnUrl(route, "/");
|
|
64
62
|
await router.push(targetPath);
|
|
63
|
+
if (data.recoveryCodes?.length) toast.success("MFA enabled! Save your recovery codes in a safe place. You will need them if you lose access to your authenticator.");
|
|
64
|
+
else toast.success("Two-factor authentication has been enabled.");
|
|
65
65
|
};
|
|
66
66
|
const handleError = (error) => {
|
|
67
67
|
toast.error(error.message || "MFA setup failed");
|
|
@@ -110,4 +110,4 @@ var MfaSetup_default = _sfc_main;
|
|
|
110
110
|
|
|
111
111
|
//#endregion
|
|
112
112
|
export { MfaSetup_default as t };
|
|
113
|
-
//# sourceMappingURL=MfaSetup-
|
|
113
|
+
//# sourceMappingURL=MfaSetup-Bjc3v0hs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MfaSetup-
|
|
1
|
+
{"version":3,"file":"MfaSetup-Bjc3v0hs.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaSetup.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Set Up Two-Factor Authentication</h1>\n\n <div v-if=\"!setupData\" class=\"space-y-4\">\n <p class=\"text-base-content/80\">\n Add an extra layer of security to your account by enabling two-factor authentication (2FA).\n </p>\n <button\n type=\"button\"\n class=\"btn btn-primary w-full\"\n :disabled=\"loading\"\n @click=\"startSetup\"\n >\n {{ loading ? 'Starting...' : 'Begin Setup' }}\n </button>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleConfirm\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n >\n <div class=\"space-y-4 mb-4\">\n <p class=\"text-sm text-base-content/80\">\n Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.):\n </p>\n <div v-if=\"setupData.qrCodeUrl\" class=\"flex justify-center\">\n <img\n :src=\"setupData.qrCodeUrl\"\n alt=\"MFA QR Code\"\n class=\"w-48 h-48 border rounded-lg\"\n />\n </div>\n <p class=\"text-sm text-base-content/80\">\n Or enter this secret manually: <code class=\"bg-base-300 px-2 py-1 rounded text-sm break-all\">{{ setupData.secret }}</code>\n </p>\n </div>\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify & Enable\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport type { DragoncoreApi, MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { mfaSetupConfirmSchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst setupData = ref<{ secret: string; qrCodeUrl: string } | null>(null);\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n mfaSetupConfirmSchemaWithMetadata,\n {\n storeName: 'mfa-setup-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: startSetupMutate, loading } = useMutation(\n (api, _input?: unknown) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).startSetup();\n },\n { skipAuthCheck: false },\n);\n\nconst { mutate: confirmSetupMutate } = useMutation(\n (api, code: string) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).confirmSetup(code);\n },\n { skipAuthCheck: false },\n);\n\nconst startSetup = async () => {\n const result = await startSetupMutate(undefined);\n if (result) setupData.value = result;\n};\n\nconst handleConfirm = async (data: z.infer<typeof mfaSetupConfirmSchemaWithMetadata>) => {\n const result = await confirmSetupMutate(data.code);\n if (!result?.ok) throw new Error('MFA setup verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { ok: boolean; recoveryCodes?: string[] }) => {\n form.reset();\n setupData.value = null;\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n if (data.recoveryCodes?.length) {\n toast.success(\n 'MFA enabled! Save your recovery codes in a safe place. You will need them if you lose access to your authenticator.',\n );\n } else {\n toast.success('Two-factor authentication has been enabled.');\n }\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'MFA setup failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,YAAY,IAAkD,KAAK;EAEzE,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,mCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,kBAAkB,YAAY,aAC3C,KAAK,WAAqB;GACzB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,YAAY;KAErC,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,EAAE,QAAQ,uBAAuB,aACpC,KAAK,SAAiB;GACrB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,aAAa,KAAK;KAE3C,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,aAAa,YAAY;GAC7B,MAAM,SAAS,MAAM,iBAAiB,OAAU;AAChD,OAAI,OAAQ,WAAU,QAAQ;;EAGhC,MAAM,gBAAgB,OAAO,SAA4D;GACvF,MAAM,SAAS,MAAM,mBAAmB,KAAK,KAAK;AAClD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,gCAAgC;AACjE,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAAoD;AAC/E,QAAK,OAAO;AACZ,aAAU,QAAQ;GAClB,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;AAC7B,OAAI,KAAK,eAAe,OACtB,OAAM,QACJ,sHACD;OAED,OAAM,QAAQ,8CAA8C;;EAIhE,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,mBAAmB;;;uBAvHhD,mBA6CM,OA7CN,YA6CM,CAAA,OAAA,OAAA,OAAA,KA5CJ,mBAAqF,MAAA,EAAjF,OAAM,uCAAqC,EAAC,oCAAgC,GAAA,GAAA,CAEpE,UAAA,SAAA,WAAA,EAAZ,mBAYM,OAZN,YAYM,CAAA,OAAA,OAAA,OAAA,KAXJ,mBAEI,KAAA,EAFD,OAAM,wBAAsB,EAAC,iGAEhC,GAAA,GACA,mBAOS,UAAA;IANP,MAAK;IACL,OAAM;IACL,UAAU,MAAA,QAAO;IACjB,SAAO;sBAEL,MAAA,QAAO,GAAA,gBAAA,cAAA,EAAA,GAAA,WAAA,CAAA,CAAA,KAAA,WAAA,EAId,YA2BY,MAAA,UAAA,EAAA;;IAzBT,gBAAe;IACf,WAAS;IACT,SAAO;;2BAgBF;KAdN,mBAcM,OAdN,YAcM;gCAbJ,mBAEI,KAAA,EAFD,OAAM,gCAA8B,EAAC,wFAExC,GAAA;MACW,UAAA,MAAU,aAAA,WAAA,EAArB,mBAMM,OANN,YAMM,CALJ,mBAIE,OAAA;OAHC,KAAK,UAAA,MAAU;OAChB,KAAI;OACJ,OAAM;;MAGV,mBAEI,KAFJ,YAEI,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFoC,oCACP,GAAA,GAAA,mBAA2F,QAA3F,YAA2F,gBAA1B,UAAA,MAAU,OAAM,EAAA,EAAA,CAAA,CAAA;;KAGpH,YAAmB,MAAA,MAAA,CAAA,UAAA;KACnB,YAAgF,MAAA,kBAAA,EAAA;MAA7D,YAAW;MAAkB,gBAAe;;KAE/D,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;MAAhE,OAAM;MAAoB,IAAI,UAAA;;6BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
|
|
@@ -3,7 +3,7 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import "./AppLink-FcNGKgvG.js";
|
|
6
|
-
import "./mfaSchema-
|
|
7
|
-
import { t as MfaSetup_default } from "./MfaSetup-
|
|
6
|
+
import "./mfaSchema-C6PatIbY.js";
|
|
7
|
+
import { t as MfaSetup_default } from "./MfaSetup-Bjc3v0hs.js";
|
|
8
8
|
|
|
9
9
|
export { MfaSetup_default as default };
|
|
@@ -3,7 +3,7 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import "./AppLink-FcNGKgvG.js";
|
|
6
|
-
import "./mfaSchema-
|
|
7
|
-
import { t as MfaVerify_default } from "./MfaVerify-
|
|
6
|
+
import "./mfaSchema-C6PatIbY.js";
|
|
7
|
+
import { t as MfaVerify_default } from "./MfaVerify-uJlPz8xg.js";
|
|
8
8
|
|
|
9
9
|
export { MfaVerify_default as default };
|
|
@@ -2,7 +2,7 @@ import { o as useUserSessionStore } from "./useRpcAuth-CJtq1dqM.js";
|
|
|
2
2
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
3
3
|
import { t as AppLink_default } from "./AppLink-FcNGKgvG.js";
|
|
4
4
|
import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-B5V3SJf5.js";
|
|
5
|
-
import { n as mfaVerifySchemaWithMetadata } from "./mfaSchema-
|
|
5
|
+
import { n as mfaVerifySchemaWithMetadata } from "./mfaSchema-C6PatIbY.js";
|
|
6
6
|
import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
|
|
7
7
|
import { useRoute, useRouter } from "vue-router";
|
|
8
8
|
import { toast } from "vue3-toastify";
|
|
@@ -83,4 +83,4 @@ var MfaVerify_default = _sfc_main;
|
|
|
83
83
|
|
|
84
84
|
//#endregion
|
|
85
85
|
export { MfaVerify_default as t };
|
|
86
|
-
//# sourceMappingURL=MfaVerify-
|
|
86
|
+
//# sourceMappingURL=MfaVerify-uJlPz8xg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MfaVerify-
|
|
1
|
+
{"version":3,"file":"MfaVerify-uJlPz8xg.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaVerify.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Two-Factor Authentication</h1>\n\n <p class=\"text-base-content/80 mb-4\">\n Enter the 6-digit code from your authenticator app to complete sign in.\n </p>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport type { MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\nimport { mfaVerifySchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst sessionStore = useUserSessionStore();\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst mfaSessionId = route.query.mfaSessionId as string;\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(mfaVerifySchemaWithMetadata, {\n storeName: 'mfa-verify-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst { mutate: verifyMutate } = useMutation(\n (api, input: { mfaSessionId: string; code: string }) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).verify(input.mfaSessionId, input.code);\n },\n { credentials: 'include' },\n);\n\nconst handleSubmit = async (data: z.infer<typeof mfaVerifySchemaWithMetadata>) => {\n if (!mfaSessionId) throw new Error('Invalid MFA session. Please try logging in again.');\n const result = await verifyMutate({ mfaSessionId, code: data.code });\n if (!result?.access_token || !result?.user_details_token) throw new Error('Verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n form.reset();\n\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n toast.success('You are now logged in!');\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'Verification failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAiCA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,eAAe,qBAAqB;EAE1C,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,eAAe,MAAM,MAAM;EAEjC,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,6BAA6B;GACzF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,KAAK,UAAkD;GACtD,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,OAAO,MAAM,cAAc,MAAM,KAAK;KAE/D,EAAE,aAAa,WAAW,CAC3B;EAED,MAAM,eAAe,OAAO,SAAsD;AAChF,OAAI,CAAC,aAAc,OAAM,IAAI,MAAM,oDAAoD;GACvF,MAAM,SAAS,MAAM,aAAa;IAAE;IAAc,MAAM,KAAK;IAAM,CAAC;AACpE,OAAI,CAAC,QAAQ,gBAAgB,CAAC,QAAQ,mBAAoB,OAAM,IAAI,MAAM,sBAAsB;AAChG,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAC9C,QAAK,OAAO;GAEZ,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;AAC7B,SAAM,QAAQ,yBAAyB;;EAGzC,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,sBAAsB;;;uBAzEnD,mBAeM,OAfN,YAeM;8BAdJ,mBAA8E,MAAA,EAA1E,OAAM,uCAAqC,EAAC,6BAAyB,GAAA;8BAEzE,mBAEI,KAAA,EAFD,OAAM,6BAA2B,EAAC,6EAErC,GAAA;IAEA,YAOY,MAAA,UAAA,EAAA;KAPA,gBAAe;KAAe,WAAS;KAAgB,SAAO;;4BACrD;MAAnB,YAAmB,MAAA,MAAA,CAAA,UAAA;MACnB,YAAuE,MAAA,kBAAA,EAAA;OAApD,YAAW;OAAS,gBAAe;;MAEtD,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;OAAhE,OAAM;OAAoB,IAAI,UAAA;;8BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
|
|
@@ -487,4 +487,4 @@ var RecordVersionViewer_default = _sfc_main;
|
|
|
487
487
|
|
|
488
488
|
//#endregion
|
|
489
489
|
export { LoadingErrorStates_default as i, RecordVersionList_default as n, RecordChangesSummary_default as r, RecordVersionViewer_default as t };
|
|
490
|
-
//# sourceMappingURL=RecordVersionViewer-
|
|
490
|
+
//# sourceMappingURL=RecordVersionViewer-NLn1gVys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordVersionViewer-D2j10HdK.js","names":["$emit","$slots"],"sources":["../src/components/ui/LoadingErrorStates.vue","../src/components/ui/RecordChangesSummary.vue","../src/components/ui/RecordVersionList.vue","../src/components/ui/RecordVersionViewer.vue"],"sourcesContent":["<template>\n <!-- Loading State -->\n <div v-if=\"isLoading\" class=\"text-center py-8\">\n <slot name=\"loading\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <p class=\"text-base-content/70 mt-2\">\n {{ config.loadingText || 'Loading...' }}\n </p>\n </slot>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"text-center py-8\">\n <slot name=\"error\" :error=\"error\" :retry=\"handleRetry\">\n <div class=\"alert alert-error max-w-md mx-auto\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.errorTitle || 'Error' }}\n </h3>\n <div class=\"text-sm\">\n {{ getErrorMessage(error) }}\n </div>\n <button\n v-if=\"config.showRetry !== false\"\n class=\"btn btn-sm btn-outline mt-2\"\n @click=\"handleRetry\"\n >\n {{ config.retryText || 'Try Again' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface LoadingErrorStatesConfig {\n loadingText?: string;\n errorTitle?: string;\n retryText?: string;\n showRetry?: boolean;\n customErrorMessage?: (error: Error) => string;\n}\n\nconst props = defineProps<{\n isLoading?: boolean;\n error?: Error | null;\n config?: LoadingErrorStatesConfig;\n}>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\nconst config = computed(() => props.config || {});\n\nfunction getErrorMessage(error: Error): string {\n if (config.value.customErrorMessage) {\n return config.value.customErrorMessage(error);\n }\n\n return error.message || 'An unexpected error occurred';\n}\n\nfunction handleRetry() {\n emit('retry');\n}\n</script>\n","<template>\n <div v-if=\"changedFields.length > 0\" class=\"card bg-base-100 shadow-sm mb-4\">\n <div class=\"card-body p-3 sm:p-5\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title text-base sm:text-lg\">\n {{ config.title || 'Changes in This Version' }}\n </h2>\n <button @click=\"showChanges = !showChanges\" class=\"btn btn-sm btn-info\">\n {{\n showChanges ? config.hideText || 'Hide Changes' : config.showText || 'Show Changes'\n }}\n </button>\n </div>\n\n <div v-if=\"showChanges\">\n <!-- Desktop view - table format -->\n <div class=\"hidden md:block overflow-x-auto mt-4\">\n <table class=\"table table-zebra table-sm\">\n <thead>\n <tr>\n <th>{{ config.fieldColumnHeader || 'Field' }}</th>\n <th>{{ config.previousColumnHeader || 'Previous Value' }}</th>\n <th>{{ config.newColumnHeader || 'New Value' }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(change, index) in changedFields\" :key=\"index\">\n <td class=\"font-mono text-xs\">\n {{ formatFieldName(change.path) }}\n </td>\n <td>{{ formatValue(change.oldValue) }}</td>\n <td>{{ formatValue(change.newValue) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Mobile view - card format -->\n <div class=\"md:hidden space-y-4 mt-4\">\n <div\n v-for=\"(change, index) in changedFields\"\n :key=\"index\"\n class=\"border border-base-300 rounded-lg p-3\"\n >\n <div class=\"mb-2\">\n <span class=\"font-mono text-xs font-bold\">{{\n formatFieldName(change.path)\n }}</span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.previousLabel || 'Previous:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.oldValue) }}\n </div>\n </div>\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.newLabel || 'New:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.newValue) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else class=\"mt-2 text-sm text-base-content/70\">\n {{ changedFields.length }}\n {{\n changedFields.length === 1\n ? config.fieldSingular || 'field'\n : config.fieldPlural || 'fields'\n }}\n changed\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { PropertyChange } from './RecordVersionViewerConfig';\n\ninterface RecordChangesSummaryConfig {\n title?: string;\n showText?: string;\n hideText?: string;\n fieldColumnHeader?: string;\n previousColumnHeader?: string;\n newColumnHeader?: string;\n previousLabel?: string;\n newLabel?: string;\n fieldSingular?: string;\n fieldPlural?: string;\n fieldNameFormatter?: (path: string) => string;\n valueFormatter?: (value: any, path: string) => string;\n customFieldLabels?: Record<string, string>;\n}\n\nconst props = defineProps<{\n changedFields: PropertyChange[];\n config?: RecordChangesSummaryConfig;\n}>();\n\nconst config = computed(() => props.config || {});\n\n// State for showing/hiding changes - hidden by default\nconst showChanges = ref(false);\n\n// Default field name formatter - converts camelCase and dot notation to readable labels\nfunction defaultFieldNameFormatter(path: string): string {\n // Check for custom field labels first\n if (config.value.customFieldLabels?.[path]) {\n return config.value.customFieldLabels[path];\n }\n\n return path\n .split('.')\n .map((segment) =>\n segment\n .replace(/([A-Z])/g, ' $1') // Add space before capital letters\n .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter\n .trim(),\n )\n .join(' → '); // Use arrow to show nesting\n}\n\n// Format field name for display\nfunction formatFieldName(path: string): string {\n if (config.value.fieldNameFormatter) {\n return config.value.fieldNameFormatter(path);\n }\n return defaultFieldNameFormatter(path);\n}\n\n// Default value formatter\nfunction defaultValueFormatter(value: any): string {\n if (value === null || value === undefined) return 'N/A';\n\n // Handle objects and arrays\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.length === 0 ? 'Empty array' : `Array (${value.length} items)`;\n }\n return JSON.stringify(value, null, 2);\n }\n\n // Handle boolean values\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers with potential formatting\n if (typeof value === 'number') {\n // Format currency if it looks like a monetary value\n if (value > 0 && (value % 1 === 0 || value.toString().includes('.'))) {\n // Simple currency detection - could be made more sophisticated\n return value.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n return value.toString();\n }\n\n // Default to string representation\n return String(value);\n}\n\n// Format value for display\nfunction formatValue(value: any, path?: string): string {\n if (config.value.valueFormatter) {\n return config.value.valueFormatter(value, path || '');\n }\n return defaultValueFormatter(value);\n}\n</script>\n","<template>\n <div class=\"space-y-4\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"card bg-base-100 shadow-xs animate-pulse\">\n <div class=\"card-body p-4\">\n <div class=\"h-4 bg-base-300 rounded-sm w-1/4 mb-2\"></div>\n <div class=\"h-3 bg-base-300 rounded-sm w-1/3\"></div>\n </div>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">{{ config.errorTitle || 'Error Loading Version History' }}</h3>\n <div class=\"text-sm\">{{ error.message }}</div>\n </div>\n <button class=\"btn btn-xs\" @click=\"$emit('retry')\">\n {{ config.retryText || 'Retry' }}\n </button>\n </div>\n\n <!-- No Versions -->\n <div v-else-if=\"!filteredVersions.length\" class=\"alert alert-info shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n class=\"stroke-current shrink-0 w-5 h-5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{\n config.noVersionsText ||\n `No previous versions available for this ${config.recordDisplayName || 'record'}.`\n }}</span>\n </div>\n\n <!-- Version List -->\n <div v-else class=\"space-y-3 max-w-4xl mx-auto\">\n <div\n v-for=\"version in filteredVersions\"\n :key=\"version.id\"\n class=\"card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200\"\n >\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div>\n <h3 class=\"font-medium text-sm\">\n {{\n config.versionLabelFormat\n ? config.versionLabelFormat(version)\n : `Version from ${formatDate(version.recorded_at)}`\n }}\n </h3>\n <div class=\"flex items-center gap-2 text-xs text-base-content/70\">\n <span\n class=\"badge badge-xs\"\n :class=\"getOperationBadgeClass(version.operation)\"\n >\n {{ formatOperation(version.operation) }}\n </span>\n <span>by {{ version.auth_username || 'Unknown' }}</span>\n </div>\n <!-- Custom metadata slot -->\n <div v-if=\"$slots.versionMetadata\" class=\"mt-1\">\n <slot name=\"versionMetadata\" :version=\"version\"></slot>\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Custom actions slot -->\n <slot name=\"versionActions\" :version=\"version\">\n <!-- Default view action -->\n <button\n v-if=\"config.viewAction\"\n class=\"btn btn-primary btn-xs\"\n @click=\"config.viewAction(version)\"\n >\n {{ config.viewActionText || 'View Version' }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"loadingMore\" class=\"text-center py-4\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n <div v-if=\"hasNextPage\" class=\"text-center py-4\">\n <button\n class=\"btn btn-sm btn-neutral\"\n @click=\"$emit('load-more')\"\n :disabled=\"loadingMore\"\n >\n {{ config.loadMoreText || 'Load More' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport type { RecordVersionListConfig } from './RecordVersionListConfig';\n\nconst props = defineProps<{\n versions: T[];\n loading?: boolean;\n error?: Error | null;\n hasNextPage?: boolean;\n loadingMore?: boolean;\n config?: RecordVersionListConfig;\n excludeLatest?: boolean;\n}>();\n\ndefineEmits<{\n retry: [];\n 'load-more': [];\n}>();\n\nconst config = computed(() => props.config || {});\n\n// Filter out the latest version if requested (default behavior)\nconst filteredVersions = computed(() => {\n if (!props.excludeLatest) {\n return props.versions;\n }\n\n if (props.versions.length <= 1) {\n return [];\n }\n return props.versions.slice(1);\n});\n\n// Default operation labels\nconst defaultOperationLabels = {\n insert: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n};\n\n// Default operation badge classes\nconst defaultOperationBadgeClasses = {\n insert: 'badge-success',\n update: 'badge-warning',\n delete: 'badge-error',\n};\n\n/**\n * Format a date string to a readable format\n */\nfunction formatDate(dateString: string | undefined | null): string {\n if (!dateString) return 'Unknown date';\n\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n } catch (e) {\n return 'Invalid date';\n }\n}\n\n/**\n * Format the operation type for display\n */\nfunction formatOperation(operation?: string): string {\n if (!operation) return 'Unknown';\n\n const labels = { ...defaultOperationLabels, ...config.value.operationLabels };\n return labels[operation as keyof typeof labels] || operation;\n}\n\n/**\n * Get CSS class for operation badge\n */\nfunction getOperationBadgeClass(operation?: string): string {\n if (!operation) return 'badge-neutral';\n\n const classes = { ...defaultOperationBadgeClasses, ...config.value.operationBadgeClasses };\n return classes[operation as keyof typeof classes] || 'badge-neutral';\n}\n</script>\n","<template>\n <div>\n <!-- Version Header - sticky on mobile -->\n <div class=\"sticky top-0 z-10 bg-base-100 shadow-sm\">\n <slot\n name=\"header\"\n :version=\"version\"\n :is-loading=\"isLoading\"\n :is-restoring=\"isRestoring\"\n >\n <!-- Default header -->\n <div class=\"flex justify-between items-center p-4 border-b\">\n <div>\n <h1 class=\"text-lg font-semibold\">\n {{ config.title || `View ${config.recordDisplayName || 'Record'} Version` }}\n </h1>\n <div v-if=\"version\" class=\"text-sm text-base-content/70\">\n {{ formatVersionInfo(version) }}\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Back button -->\n <button v-if=\"config.onBack\" @click=\"config.onBack\" class=\"btn btn-ghost btn-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n {{ config.backText || 'Back' }}\n </button>\n\n <!-- Restore button -->\n <button\n v-if=\"config.onRestore && version && version.operation !== 'delete'\"\n @click=\"handleRestore\"\n :disabled=\"isRestoring\"\n class=\"btn btn-primary btn-sm\"\n >\n <span v-if=\"isRestoring\" class=\"loading loading-spinner loading-sm mr-1\"></span>\n {{ config.restoreText || 'Restore Version' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Loading and Error States -->\n <LoadingErrorStates :is-loading=\"isLoading\" :error=\"error\" />\n\n <!-- Main content area -->\n <div\n v-if=\"!isLoading && !error && recordData\"\n class=\"max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm\"\n >\n <!-- Changes Summary - Only show for update operations -->\n <div v-if=\"shouldShowChanges\" class=\"mb-4\">\n <slot name=\"changes\" :changed-fields=\"changedFields\" :version=\"version\">\n <RecordChangesSummary\n :changed-fields=\"changedFields\"\n :config=\"config.changesSummaryConfig\"\n />\n </slot>\n </div>\n\n <!-- Deletion Notice -->\n <div v-if=\"version?.operation === 'delete'\" class=\"mb-4\">\n <slot name=\"deletion-notice\" :version=\"version\">\n <div class=\"alert alert-warning\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.deletionNoticeTitle || 'Record Was Deleted' }}\n </h3>\n <div class=\"text-sm\">\n {{\n config.deletionNoticeText ||\n 'This version shows the state of the record before it was deleted.'\n }}\n </div>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Record Information -->\n <div class=\"mb-4 p-3 bg-base-100 rounded-lg shadow-sm\">\n <slot name=\"record-info\" :record-data=\"recordData\" :version=\"version\">\n <!-- Default record info display -->\n <h3 class=\"font-semibold mb-2\">\n {{ config.recordInfoTitle || 'Record Information' }}\n </h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm\">\n <div v-for=\"(value, key) in filteredRecordData\" :key=\"key\">\n <strong class=\"text-base-content/70\">{{ formatFieldName(key) }}:</strong>\n <span class=\"ml-2\">{{ formatValue(value) }}</span>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Custom Content Area -->\n <div class=\"space-y-4\">\n <slot\n name=\"content\"\n :record-data=\"recordData\"\n :version=\"version\"\n :changed-fields=\"changedFields\"\n >\n <!-- Fallback content if no slot provided -->\n <div class=\"p-4 bg-base-100 rounded-lg shadow-sm\">\n <h3 class=\"font-semibold mb-2\">{{ config.rawDataTitle || 'Raw Data' }}</h3>\n <pre class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </div>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n TRecord extends Record<string, any>,\n TVersion extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport LoadingErrorStates from './LoadingErrorStates.vue';\nimport RecordChangesSummary from './RecordChangesSummary.vue';\nimport type { PropertyChange, RecordVersionViewerConfig } from './RecordVersionViewerConfig';\n\nconst props = withDefaults(\n defineProps<{\n version: TVersion | null;\n recordData: TRecord | null;\n changedFields?: PropertyChange[];\n isLoading?: boolean;\n isRestoring?: boolean;\n error?: Error | null;\n config?: RecordVersionViewerConfig;\n }>(),\n {\n changedFields: () => [],\n },\n);\n\nconst config = computed(() => props.config || {});\n\n// Compute whether to show changes summary\nconst shouldShowChanges = computed(() => {\n return (\n props.changedFields &&\n props.changedFields.length > 0 &&\n props.version?.operation === 'update'\n );\n});\n\n// Filter out system fields from record data display\nconst filteredRecordData = computed(() => {\n if (!props.recordData) return {};\n\n const excludeFields = new Set([\n 'id',\n 'created_at',\n 'updated_at',\n 'created_by',\n 'updated_by',\n '__typename',\n ...(config.value.excludeFields || []),\n ]);\n\n return Object.entries(props.recordData)\n .filter(([key]) => !excludeFields.has(key))\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n});\n\n// Format version info for display\nfunction formatVersionInfo(version: TVersion): string {\n const date = new Date(version.recorded_at).toLocaleString();\n const operation = version.operation.charAt(0).toUpperCase() + version.operation.slice(1);\n const user = version.auth_username || 'Unknown';\n\n return `${operation} on ${date} by ${user}`;\n}\n\n// Default field name formatter\nfunction formatFieldName(field: string): string {\n if (config.value.formatFieldName) {\n return config.value.formatFieldName(field);\n }\n\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\n// Default value formatter\nfunction formatValue(value: any): string {\n if (config.value.formatValue) {\n return config.value.formatValue(value);\n }\n\n if (value === null || value === undefined) return 'N/A';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n}\n\n// Handle restore action\nasync function handleRestore() {\n if (config.value.onRestore && props.version) {\n await config.value.onRestore(props.version);\n }\n}\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RecordVersionViewer-NLn1gVys.js","names":["$emit","$slots"],"sources":["../src/components/ui/LoadingErrorStates.vue","../src/components/ui/RecordChangesSummary.vue","../src/components/ui/RecordVersionList.vue","../src/components/ui/RecordVersionViewer.vue"],"sourcesContent":["<template>\n <!-- Loading State -->\n <div v-if=\"isLoading\" class=\"text-center py-8\">\n <slot name=\"loading\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <p class=\"text-base-content/70 mt-2\">\n {{ config.loadingText || 'Loading...' }}\n </p>\n </slot>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"text-center py-8\">\n <slot name=\"error\" :error=\"error\" :retry=\"handleRetry\">\n <div class=\"alert alert-error max-w-md mx-auto\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.errorTitle || 'Error' }}\n </h3>\n <div class=\"text-sm\">\n {{ getErrorMessage(error) }}\n </div>\n <button\n v-if=\"config.showRetry !== false\"\n class=\"btn btn-sm btn-outline mt-2\"\n @click=\"handleRetry\"\n >\n {{ config.retryText || 'Try Again' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface LoadingErrorStatesConfig {\n loadingText?: string;\n errorTitle?: string;\n retryText?: string;\n showRetry?: boolean;\n customErrorMessage?: (error: Error) => string;\n}\n\nconst props = defineProps<{\n isLoading?: boolean;\n error?: Error | null;\n config?: LoadingErrorStatesConfig;\n}>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\nconst config = computed(() => props.config || {});\n\nfunction getErrorMessage(error: Error): string {\n if (config.value.customErrorMessage) {\n return config.value.customErrorMessage(error);\n }\n\n return error.message || 'An unexpected error occurred';\n}\n\nfunction handleRetry() {\n emit('retry');\n}\n</script>\n","<template>\n <div v-if=\"changedFields.length > 0\" class=\"card bg-base-100 shadow-sm mb-4\">\n <div class=\"card-body p-3 sm:p-5\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title text-base sm:text-lg\">\n {{ config.title || 'Changes in This Version' }}\n </h2>\n <button @click=\"showChanges = !showChanges\" class=\"btn btn-sm btn-info\">\n {{\n showChanges ? config.hideText || 'Hide Changes' : config.showText || 'Show Changes'\n }}\n </button>\n </div>\n\n <div v-if=\"showChanges\">\n <!-- Desktop view - table format -->\n <div class=\"hidden md:block overflow-x-auto mt-4\">\n <table class=\"table table-zebra table-sm\">\n <thead>\n <tr>\n <th>{{ config.fieldColumnHeader || 'Field' }}</th>\n <th>{{ config.previousColumnHeader || 'Previous Value' }}</th>\n <th>{{ config.newColumnHeader || 'New Value' }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(change, index) in changedFields\" :key=\"index\">\n <td class=\"font-mono text-xs\">\n {{ formatFieldName(change.path) }}\n </td>\n <td>{{ formatValue(change.oldValue) }}</td>\n <td>{{ formatValue(change.newValue) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Mobile view - card format -->\n <div class=\"md:hidden space-y-4 mt-4\">\n <div\n v-for=\"(change, index) in changedFields\"\n :key=\"index\"\n class=\"border border-base-300 rounded-lg p-3\"\n >\n <div class=\"mb-2\">\n <span class=\"font-mono text-xs font-bold\">{{\n formatFieldName(change.path)\n }}</span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.previousLabel || 'Previous:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.oldValue) }}\n </div>\n </div>\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.newLabel || 'New:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.newValue) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else class=\"mt-2 text-sm text-base-content/70\">\n {{ changedFields.length }}\n {{\n changedFields.length === 1\n ? config.fieldSingular || 'field'\n : config.fieldPlural || 'fields'\n }}\n changed\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { PropertyChange } from './RecordVersionViewerConfig';\n\ninterface RecordChangesSummaryConfig {\n title?: string;\n showText?: string;\n hideText?: string;\n fieldColumnHeader?: string;\n previousColumnHeader?: string;\n newColumnHeader?: string;\n previousLabel?: string;\n newLabel?: string;\n fieldSingular?: string;\n fieldPlural?: string;\n fieldNameFormatter?: (path: string) => string;\n valueFormatter?: (value: any, path: string) => string;\n customFieldLabels?: Record<string, string>;\n}\n\nconst props = defineProps<{\n changedFields: PropertyChange[];\n config?: RecordChangesSummaryConfig;\n}>();\n\nconst config = computed(() => props.config || {});\n\n// State for showing/hiding changes - hidden by default\nconst showChanges = ref(false);\n\n// Default field name formatter - converts camelCase and dot notation to readable labels\nfunction defaultFieldNameFormatter(path: string): string {\n // Check for custom field labels first\n if (config.value.customFieldLabels?.[path]) {\n return config.value.customFieldLabels[path];\n }\n\n return path\n .split('.')\n .map((segment) =>\n segment\n .replace(/([A-Z])/g, ' $1') // Add space before capital letters\n .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter\n .trim(),\n )\n .join(' → '); // Use arrow to show nesting\n}\n\n// Format field name for display\nfunction formatFieldName(path: string): string {\n if (config.value.fieldNameFormatter) {\n return config.value.fieldNameFormatter(path);\n }\n return defaultFieldNameFormatter(path);\n}\n\n// Default value formatter\nfunction defaultValueFormatter(value: any): string {\n if (value === null || value === undefined) return 'N/A';\n\n // Handle objects and arrays\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.length === 0 ? 'Empty array' : `Array (${value.length} items)`;\n }\n return JSON.stringify(value, null, 2);\n }\n\n // Handle boolean values\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers with potential formatting\n if (typeof value === 'number') {\n // Format currency if it looks like a monetary value\n if (value > 0 && (value % 1 === 0 || value.toString().includes('.'))) {\n // Simple currency detection - could be made more sophisticated\n return value.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n return value.toString();\n }\n\n // Default to string representation\n return String(value);\n}\n\n// Format value for display\nfunction formatValue(value: any, path?: string): string {\n if (config.value.valueFormatter) {\n return config.value.valueFormatter(value, path || '');\n }\n return defaultValueFormatter(value);\n}\n</script>\n","<template>\n <div class=\"space-y-4\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"card bg-base-100 shadow-xs animate-pulse\">\n <div class=\"card-body p-4\">\n <div class=\"h-4 bg-base-300 rounded-sm w-1/4 mb-2\"></div>\n <div class=\"h-3 bg-base-300 rounded-sm w-1/3\"></div>\n </div>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">{{ config.errorTitle || 'Error Loading Version History' }}</h3>\n <div class=\"text-sm\">{{ error.message }}</div>\n </div>\n <button class=\"btn btn-xs\" @click=\"$emit('retry')\">\n {{ config.retryText || 'Retry' }}\n </button>\n </div>\n\n <!-- No Versions -->\n <div v-else-if=\"!filteredVersions.length\" class=\"alert alert-info shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n class=\"stroke-current shrink-0 w-5 h-5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{\n config.noVersionsText ||\n `No previous versions available for this ${config.recordDisplayName || 'record'}.`\n }}</span>\n </div>\n\n <!-- Version List -->\n <div v-else class=\"space-y-3 max-w-4xl mx-auto\">\n <div\n v-for=\"version in filteredVersions\"\n :key=\"version.id\"\n class=\"card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200\"\n >\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div>\n <h3 class=\"font-medium text-sm\">\n {{\n config.versionLabelFormat\n ? config.versionLabelFormat(version)\n : `Version from ${formatDate(version.recorded_at)}`\n }}\n </h3>\n <div class=\"flex items-center gap-2 text-xs text-base-content/70\">\n <span\n class=\"badge badge-xs\"\n :class=\"getOperationBadgeClass(version.operation)\"\n >\n {{ formatOperation(version.operation) }}\n </span>\n <span>by {{ version.auth_username || 'Unknown' }}</span>\n </div>\n <!-- Custom metadata slot -->\n <div v-if=\"$slots.versionMetadata\" class=\"mt-1\">\n <slot name=\"versionMetadata\" :version=\"version\"></slot>\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Custom actions slot -->\n <slot name=\"versionActions\" :version=\"version\">\n <!-- Default view action -->\n <button\n v-if=\"config.viewAction\"\n class=\"btn btn-primary btn-xs\"\n @click=\"config.viewAction(version)\"\n >\n {{ config.viewActionText || 'View Version' }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"loadingMore\" class=\"text-center py-4\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n <div v-if=\"hasNextPage\" class=\"text-center py-4\">\n <button\n class=\"btn btn-sm btn-neutral\"\n @click=\"$emit('load-more')\"\n :disabled=\"loadingMore\"\n >\n {{ config.loadMoreText || 'Load More' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport type { RecordVersionListConfig } from './RecordVersionListConfig';\n\nconst props = defineProps<{\n versions: T[];\n loading?: boolean;\n error?: Error | null;\n hasNextPage?: boolean;\n loadingMore?: boolean;\n config?: RecordVersionListConfig;\n excludeLatest?: boolean;\n}>();\n\ndefineEmits<{\n retry: [];\n 'load-more': [];\n}>();\n\nconst config = computed(() => props.config || {});\n\n// Filter out the latest version if requested (default behavior)\nconst filteredVersions = computed(() => {\n if (!props.excludeLatest) {\n return props.versions;\n }\n\n if (props.versions.length <= 1) {\n return [];\n }\n return props.versions.slice(1);\n});\n\n// Default operation labels\nconst defaultOperationLabels = {\n insert: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n};\n\n// Default operation badge classes\nconst defaultOperationBadgeClasses = {\n insert: 'badge-success',\n update: 'badge-warning',\n delete: 'badge-error',\n};\n\n/**\n * Format a date string to a readable format\n */\nfunction formatDate(dateString: string | undefined | null): string {\n if (!dateString) return 'Unknown date';\n\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n } catch (e) {\n return 'Invalid date';\n }\n}\n\n/**\n * Format the operation type for display\n */\nfunction formatOperation(operation?: string): string {\n if (!operation) return 'Unknown';\n\n const labels = { ...defaultOperationLabels, ...config.value.operationLabels };\n return labels[operation as keyof typeof labels] || operation;\n}\n\n/**\n * Get CSS class for operation badge\n */\nfunction getOperationBadgeClass(operation?: string): string {\n if (!operation) return 'badge-neutral';\n\n const classes = { ...defaultOperationBadgeClasses, ...config.value.operationBadgeClasses };\n return classes[operation as keyof typeof classes] || 'badge-neutral';\n}\n</script>\n","<template>\n <div>\n <!-- Version Header - sticky on mobile -->\n <div class=\"sticky top-0 z-10 bg-base-100 shadow-sm\">\n <slot\n name=\"header\"\n :version=\"version\"\n :is-loading=\"isLoading\"\n :is-restoring=\"isRestoring\"\n >\n <!-- Default header -->\n <div class=\"flex justify-between items-center p-4 border-b\">\n <div>\n <h1 class=\"text-lg font-semibold\">\n {{ config.title || `View ${config.recordDisplayName || 'Record'} Version` }}\n </h1>\n <div v-if=\"version\" class=\"text-sm text-base-content/70\">\n {{ formatVersionInfo(version) }}\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Back button -->\n <button v-if=\"config.onBack\" @click=\"config.onBack\" class=\"btn btn-ghost btn-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n {{ config.backText || 'Back' }}\n </button>\n\n <!-- Restore button -->\n <button\n v-if=\"config.onRestore && version && version.operation !== 'delete'\"\n @click=\"handleRestore\"\n :disabled=\"isRestoring\"\n class=\"btn btn-primary btn-sm\"\n >\n <span v-if=\"isRestoring\" class=\"loading loading-spinner loading-sm mr-1\"></span>\n {{ config.restoreText || 'Restore Version' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Loading and Error States -->\n <LoadingErrorStates :is-loading=\"isLoading\" :error=\"error\" />\n\n <!-- Main content area -->\n <div\n v-if=\"!isLoading && !error && recordData\"\n class=\"max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm\"\n >\n <!-- Changes Summary - Only show for update operations -->\n <div v-if=\"shouldShowChanges\" class=\"mb-4\">\n <slot name=\"changes\" :changed-fields=\"changedFields\" :version=\"version\">\n <RecordChangesSummary\n :changed-fields=\"changedFields\"\n :config=\"config.changesSummaryConfig\"\n />\n </slot>\n </div>\n\n <!-- Deletion Notice -->\n <div v-if=\"version?.operation === 'delete'\" class=\"mb-4\">\n <slot name=\"deletion-notice\" :version=\"version\">\n <div class=\"alert alert-warning\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.deletionNoticeTitle || 'Record Was Deleted' }}\n </h3>\n <div class=\"text-sm\">\n {{\n config.deletionNoticeText ||\n 'This version shows the state of the record before it was deleted.'\n }}\n </div>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Record Information -->\n <div class=\"mb-4 p-3 bg-base-100 rounded-lg shadow-sm\">\n <slot name=\"record-info\" :record-data=\"recordData\" :version=\"version\">\n <!-- Default record info display -->\n <h3 class=\"font-semibold mb-2\">\n {{ config.recordInfoTitle || 'Record Information' }}\n </h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm\">\n <div v-for=\"(value, key) in filteredRecordData\" :key=\"key\">\n <strong class=\"text-base-content/70\">{{ formatFieldName(key) }}:</strong>\n <span class=\"ml-2\">{{ formatValue(value) }}</span>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Custom Content Area -->\n <div class=\"space-y-4\">\n <slot\n name=\"content\"\n :record-data=\"recordData\"\n :version=\"version\"\n :changed-fields=\"changedFields\"\n >\n <!-- Fallback content if no slot provided -->\n <div class=\"p-4 bg-base-100 rounded-lg shadow-sm\">\n <h3 class=\"font-semibold mb-2\">{{ config.rawDataTitle || 'Raw Data' }}</h3>\n <pre class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </div>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n TRecord extends Record<string, any>,\n TVersion extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport LoadingErrorStates from './LoadingErrorStates.vue';\nimport RecordChangesSummary from './RecordChangesSummary.vue';\nimport type { PropertyChange, RecordVersionViewerConfig } from './RecordVersionViewerConfig';\n\nconst props = withDefaults(\n defineProps<{\n version: TVersion | null;\n recordData: TRecord | null;\n changedFields?: PropertyChange[];\n isLoading?: boolean;\n isRestoring?: boolean;\n error?: Error | null;\n config?: RecordVersionViewerConfig;\n }>(),\n {\n changedFields: () => [],\n },\n);\n\nconst config = computed(() => props.config || {});\n\n// Compute whether to show changes summary\nconst shouldShowChanges = computed(() => {\n return (\n props.changedFields &&\n props.changedFields.length > 0 &&\n props.version?.operation === 'update'\n );\n});\n\n// Filter out system fields from record data display\nconst filteredRecordData = computed(() => {\n if (!props.recordData) return {};\n\n const excludeFields = new Set([\n 'id',\n 'created_at',\n 'updated_at',\n 'created_by',\n 'updated_by',\n '__typename',\n ...(config.value.excludeFields || []),\n ]);\n\n return Object.entries(props.recordData)\n .filter(([key]) => !excludeFields.has(key))\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n});\n\n// Format version info for display\nfunction formatVersionInfo(version: TVersion): string {\n const date = new Date(version.recorded_at).toLocaleString();\n const operation = version.operation.charAt(0).toUpperCase() + version.operation.slice(1);\n const user = version.auth_username || 'Unknown';\n\n return `${operation} on ${date} by ${user}`;\n}\n\n// Default field name formatter\nfunction formatFieldName(field: string): string {\n if (config.value.formatFieldName) {\n return config.value.formatFieldName(field);\n }\n\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\n// Default value formatter\nfunction formatValue(value: any): string {\n if (config.value.formatValue) {\n return config.value.formatValue(value);\n }\n\n if (value === null || value === undefined) return 'N/A';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n}\n\n// Handle restore action\nasync function handleRestore() {\n if (config.value.onRestore && props.version) {\n await config.value.onRestore(props.version);\n }\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResetPassword-
|
|
1
|
+
{"version":3,"file":"ResetPassword-CyizBRob.js","names":[],"sources":["../src/slices/auth/features/reset_password/reset_password_schema.ts","../src/slices/auth/features/reset_password/ResetPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { resetPasswordInputSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ResetPasswordForm = z.infer<typeof resetPasswordInputSchema>;\n\n// Enhance the schema with metadata\nexport const resetPasswordSchemaWithMetadata = withMetadata(\n resetPasswordInputSchema,\n 'resetPasswordSchema',\n {\n 'passwords.password': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n 'passwords.password_confirm': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n },\n);\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Reset Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.PasswordsPasswordField />\n <zinia.PasswordsPasswordConfirmField />\n\n <ZiniaSubmitButton submitText=\"Reset Password\" submittingText=\"Resetting Password...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Login</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { resetPasswordSchemaWithMetadata } from './reset_password_schema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst token = route.params.token as string;\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n resetPasswordSchemaWithMetadata,\n {\n storeName: 'reset-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: resetPasswordMutate } = useMutation(\n (api, input: z.infer<typeof resetPasswordSchemaWithMetadata> & { token: string }) =>\n api.passwordReset.resetPassword(input),\n {\n skipAuthCheck: true, // Reset password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof resetPasswordSchemaWithMetadata>) => {\n const result = await resetPasswordMutate({\n ...data,\n token,\n });\n if (!result?.ok) throw new Error('Reset password failed');\n return result;\n};\n\n// Handle success\nconst handleSuccess = async (_data: { ok: boolean }) => {\n form.reset();\n await router.push(loginLink.value);\n toast.success('Password reset successful!');\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Reset password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,kCAAkC,aAC7C,0BACA,uBACA;CACE,sBAAsB;EACpB,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACD,8BAA8B;EAC5B,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACF,CACF;;;;;;;;;ECID,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,QAAQ,MAAM,OAAO;EAE3B,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAG/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,iCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,wBAAwB,aACrC,KAAK,UACJ,IAAI,cAAc,cAAc,MAAM,EACxC,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA0D;GACpF,MAAM,SAAS,MAAM,oBAAoB;IACvC,GAAG;IACH;IACD,CAAC;AACF,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,wBAAwB;AACzD,UAAO;;EAIT,MAAM,gBAAgB,OAAO,UAA2B;AACtD,QAAK,OAAO;AACZ,SAAM,OAAO,KAAK,UAAU,MAAM;AAClC,SAAM,QAAQ,6BAA6B;;EAI7C,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,wBAAwB;;;uBA1E7E,mBAgBM,OAhBN,YAgBM,CAAA,OAAA,OAAA,OAAA,KAfJ,mBAAmE,MAAA,EAA/D,OAAM,uCAAqC,EAAC,kBAAc,GAAA,GAE9D,YAYY,MAAA,UAAA,EAAA;IAZA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACxC;KAAhC,YAAgC,MAAA,MAAA,CAAA,uBAAA;KAChC,YAAuC,MAAA,MAAA,CAAA,8BAAA;KAEvC,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAAiB,gBAAe;;KAE9D,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAiE,iBAAA;MAAxD,OAAM;MAAoB,IAAI,UAAA;;6BAAgB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
|
|
@@ -3,6 +3,6 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import "./AppLink-FcNGKgvG.js";
|
|
6
|
-
import { t as ResetPassword_default } from "./ResetPassword-
|
|
6
|
+
import { t as ResetPassword_default } from "./ResetPassword-CyizBRob.js";
|
|
7
7
|
|
|
8
8
|
export { ResetPassword_default as default };
|
|
@@ -3,62 +3,63 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
6
|
-
import "./src-
|
|
6
|
+
import "./src-DJeB_pSK.js";
|
|
7
7
|
import "./AppLink-FcNGKgvG.js";
|
|
8
|
-
import { p as useInjectedPinnedPresets } from "./saved_filter-
|
|
8
|
+
import { p as useInjectedPinnedPresets } from "./saved_filter-DMUiaPSP.js";
|
|
9
9
|
import { t as ConfirmDialog_default } from "./ConfirmDialog-DjthOYU6.js";
|
|
10
10
|
import "./InlineAttachments-DAn_QknY.js";
|
|
11
11
|
import "./TeamMembersTab-BigqpBDH.js";
|
|
12
12
|
import "./Appearance-shr0Aql0.js";
|
|
13
13
|
import "./useBreadcrumbs-DIqU5AAp.js";
|
|
14
|
-
import "./
|
|
15
|
-
import "./
|
|
16
|
-
import "./
|
|
17
|
-
import "./
|
|
18
|
-
import "./
|
|
19
|
-
import "./
|
|
20
|
-
import "./
|
|
21
|
-
import "./
|
|
22
|
-
import "./
|
|
23
|
-
import "./
|
|
24
|
-
import "./
|
|
25
|
-
import "./
|
|
26
|
-
import "./
|
|
27
|
-
import "./
|
|
28
|
-
import "./
|
|
29
|
-
import "./
|
|
30
|
-
import "./
|
|
31
|
-
import "./
|
|
32
|
-
import "./
|
|
33
|
-
import "./
|
|
34
|
-
import "./
|
|
35
|
-
import "./
|
|
36
|
-
import "./
|
|
37
|
-
import "./
|
|
38
|
-
import "./
|
|
39
|
-
import "./
|
|
40
|
-
import "./
|
|
41
|
-
import "./
|
|
42
|
-
import "./
|
|
43
|
-
import "./
|
|
44
|
-
import "./
|
|
45
|
-
import "./
|
|
46
|
-
import "./
|
|
47
|
-
import "./
|
|
48
|
-
import "./
|
|
49
|
-
import "./
|
|
50
|
-
import "./
|
|
51
|
-
import "./
|
|
52
|
-
import "./
|
|
53
|
-
import "./
|
|
54
|
-
import "./
|
|
55
|
-
import "./
|
|
56
|
-
import "./
|
|
57
|
-
import "./
|
|
58
|
-
import "./
|
|
59
|
-
import "./
|
|
60
|
-
import "./
|
|
61
|
-
import "./
|
|
14
|
+
import "./ExternalLinkIcon-FidcmNOa.js";
|
|
15
|
+
import "./FieldsetSection-CH1jAwcc.js";
|
|
16
|
+
import "./RecordVersionViewer-NLn1gVys.js";
|
|
17
|
+
import "./ZiniaContainer-BV6sojLa.js";
|
|
18
|
+
import "./userAuthorized-klLUHGxT.js";
|
|
19
|
+
import "./UserProfilePage-FNLYK9kj.js";
|
|
20
|
+
import "./ChangePasswordPage-nr0B06HB.js";
|
|
21
|
+
import "./teamMetadata-26Mwjb2i.js";
|
|
22
|
+
import "./team_memberRoutes-Cxgte_vj.js";
|
|
23
|
+
import "./teamRoutes-CbCuofgD.js";
|
|
24
|
+
import "./CreateTeamForm-DmBiBqC0.js";
|
|
25
|
+
import "./EditTeamForm-Cgi1EghV.js";
|
|
26
|
+
import "./TeamHistoryTab-p3hDxCc3.js";
|
|
27
|
+
import "./TeamList-BlwTWVnP.js";
|
|
28
|
+
import "./TeamNotesTab-DPw9YEwK.js";
|
|
29
|
+
import "./TeamParent-EPbNiMmg.js";
|
|
30
|
+
import "./ViewTeam-BeSKgVYp.js";
|
|
31
|
+
import "./teamMemberMetadata-DX0W-B7p.js";
|
|
32
|
+
import "./CreateTeamMemberForm-ITp4XFn9.js";
|
|
33
|
+
import "./EditTeamMemberForm-Fyf8Zxfh.js";
|
|
34
|
+
import "./TeamMemberList-D0-dM5kI.js";
|
|
35
|
+
import "./TeamMemberParent-CJGWXjuM.js";
|
|
36
|
+
import "./ViewTeamMember-Cf5yXdv6.js";
|
|
37
|
+
import "./customerSupportTicketRoutes-aXOZjl41.js";
|
|
38
|
+
import "./staffSupportTicketRoutes-bHqYUfii.js";
|
|
39
|
+
import "./TimelineSystemEvent-Ch1sZiyO.js";
|
|
40
|
+
import "./CustomerCreateSupportTicketForm-DpMy7RN3.js";
|
|
41
|
+
import "./CustomerSupportTicketParent-BaKfkSlU.js";
|
|
42
|
+
import "./CustomerSupportTicketSuccess-BQ_a8BPV.js";
|
|
43
|
+
import "./StaffCreateSupportTicketForm-BlXd0-fF.js";
|
|
44
|
+
import "./SupportTicketDevLifecycleBadge-BYKZjEv6.js";
|
|
45
|
+
import "./StaffSupportTicketParent-yoC-_Lku.js";
|
|
46
|
+
import "./StaffSupportTicketSuccess-D9ZUkc88.js";
|
|
47
|
+
import "./LoginForm-DPmrJ_wm.js";
|
|
48
|
+
import "./useEmailVerificationChannel-QuMSgzzM.js";
|
|
49
|
+
import "./Signup-BCVZZCR_.js";
|
|
50
|
+
import "./ForgotPassword-Dd-E3_o1.js";
|
|
51
|
+
import "./ResetPassword-CyizBRob.js";
|
|
52
|
+
import "./Logout-DnkdqN78.js";
|
|
53
|
+
import "./mfaSchema-C6PatIbY.js";
|
|
54
|
+
import "./MfaSetup-Bjc3v0hs.js";
|
|
55
|
+
import "./MfaVerify-uJlPz8xg.js";
|
|
56
|
+
import "./VerifyEmail-CEbvnWLl.js";
|
|
57
|
+
import "./UserListPage-A0_eNpQ1.js";
|
|
58
|
+
import "./CreateUserPage-1WiLNGr_.js";
|
|
59
|
+
import "./EditUserPage-BBzGmOrx.js";
|
|
60
|
+
import "./CreditTransactionHistory-Cnf23BQr.js";
|
|
61
|
+
import "./CreditBalanceDashboard-B-CQpNNH.js";
|
|
62
|
+
import "./CreditManagement-DC-v2lmd.js";
|
|
62
63
|
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, openBlock, ref, renderList, resolveComponent, toDisplayString, unref, vModelText, withCtx, withDirectives, withKeys } from "vue";
|
|
63
64
|
|
|
64
65
|
//#region src/slices/saved_filter/SavedFiltersPage.vue
|
|
@@ -452,4 +453,4 @@ var SavedFiltersPage_default = _sfc_main;
|
|
|
452
453
|
|
|
453
454
|
//#endregion
|
|
454
455
|
export { SavedFiltersPage_default as default };
|
|
455
|
-
//# sourceMappingURL=SavedFiltersPage-
|
|
456
|
+
//# sourceMappingURL=SavedFiltersPage-CQl3CThS.js.map
|