@dragonmastery/dragoncore-vue 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/ChangePasswordPage-DVBkBcm9.js +6 -0
  2. package/dist/{ChangePasswordPage--3XwluwE.js → ChangePasswordPage-ePeFkv_6.js} +2 -2
  3. package/dist/{ChangePasswordPage--3XwluwE.js.map → ChangePasswordPage-ePeFkv_6.js.map} +1 -1
  4. package/dist/{ConsentRequired-C4IRMA0c.js → ConsentRequired-e7DEOGNg.js} +5 -5
  5. package/dist/{ConsentRequired-C4IRMA0c.js.map → ConsentRequired-e7DEOGNg.js.map} +1 -1
  6. package/dist/CreateTeamForm-CV9Y00tD.js +35 -0
  7. package/dist/CreateTeamMemberForm-BX1vUcdg.js +35 -0
  8. package/dist/{CreateUserPage-DLwXeLAq.js → CreateUserPage-Cdv-3U5M.js} +2 -2
  9. package/dist/{CreateUserPage-DLwXeLAq.js.map → CreateUserPage-Cdv-3U5M.js.map} +1 -1
  10. package/dist/CreateUserPage-DQoEX-Er.js +6 -0
  11. package/dist/CreditBalanceDashboard-BZAnEjSz.js +35 -0
  12. package/dist/CreditManagement-C4-_c175.js +35 -0
  13. package/dist/CustomerCreateSupportTicketForm-3tIJKMnJ.js +35 -0
  14. package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js → CustomerSupportTicketDetailPage-UGqVoV4j.js} +7 -7
  15. package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js.map → CustomerSupportTicketDetailPage-UGqVoV4j.js.map} +1 -1
  16. package/dist/CustomerSupportTicketList-CFQEoXtm.js +35 -0
  17. package/dist/{CustomerSupportTicketParent-HIxwSVdu.js → CustomerSupportTicketParent-C2XdM5f7.js} +2 -2
  18. package/dist/{CustomerSupportTicketParent-HIxwSVdu.js.map → CustomerSupportTicketParent-C2XdM5f7.js.map} +1 -1
  19. package/dist/CustomerSupportTicketParent-Tnov1dEg.js +7 -0
  20. package/dist/CustomerSupportTicketSuccess-DLszUCsg.js +35 -0
  21. package/dist/EditTeamForm-Ww04P2M0.js +35 -0
  22. package/dist/{EditTeamMemberForm-CaS2GLjV.js → EditTeamMemberForm-BgjNP8MZ.js} +2 -2
  23. package/dist/{EditTeamMemberForm-CaS2GLjV.js.map → EditTeamMemberForm-BgjNP8MZ.js.map} +1 -1
  24. package/dist/EditTeamMemberForm-COfY-2FQ.js +6 -0
  25. package/dist/EditUserPage-BJHs3raG.js +7 -0
  26. package/dist/{EditUserPage-DURc5rmi.js → EditUserPage-uLPhRW5x.js} +3 -3
  27. package/dist/{EditUserPage-DURc5rmi.js.map → EditUserPage-uLPhRW5x.js.map} +1 -1
  28. package/dist/{ForgotPassword-OjIPi9s9.js → ForgotPassword-B8JG_n9D.js} +2 -2
  29. package/dist/{ForgotPassword-OjIPi9s9.js.map → ForgotPassword-B8JG_n9D.js.map} +1 -1
  30. package/dist/ForgotPassword-CzMPARbz.js +7 -0
  31. package/dist/{LoginForm-9UFnA-fO.js → LoginForm-C-_lBDyl.js} +3 -3
  32. package/dist/{LoginForm-9UFnA-fO.js.map → LoginForm-C-_lBDyl.js.map} +1 -1
  33. package/dist/LoginForm-DdzRn8nU.js +7 -0
  34. package/dist/Logout-3_Ns09Vy.js +7 -0
  35. package/dist/{Logout-YgTgOFUH.js → Logout-CIAoXyOg.js} +3 -3
  36. package/dist/{Logout-YgTgOFUH.js.map → Logout-CIAoXyOg.js.map} +1 -1
  37. package/dist/{MfaSetup-RtFMY_dj.js → MfaSetup-9qdTKQ0m.js} +2 -2
  38. package/dist/{MfaSetup-RtFMY_dj.js.map → MfaSetup-9qdTKQ0m.js.map} +1 -1
  39. package/dist/MfaSetup-BE_NP70B.js +8 -0
  40. package/dist/{MfaVerify-Cvhe8bEM.js → MfaVerify-Cgta1nE9.js} +3 -3
  41. package/dist/{MfaVerify-Cvhe8bEM.js.map → MfaVerify-Cgta1nE9.js.map} +1 -1
  42. package/dist/MfaVerify-CyiJ9A3L.js +8 -0
  43. package/dist/{ResetPassword-BE4mXK9q.js → ResetPassword-DHUfERyS.js} +2 -2
  44. package/dist/{ResetPassword-BE4mXK9q.js.map → ResetPassword-DHUfERyS.js.map} +1 -1
  45. package/dist/ResetPassword-DXHunZVp.js +7 -0
  46. package/dist/{SavedFiltersPage-DQt6uc8m.js → SavedFiltersPage-CjFv4fI_.js} +26 -26
  47. package/dist/{SavedFiltersPage-DQt6uc8m.js.map → SavedFiltersPage-CjFv4fI_.js.map} +1 -1
  48. package/dist/Signup-Cy1puoqh.js +9 -0
  49. package/dist/{Signup-9TjMMnU4.js → Signup-DfG7Xmkx.js} +4 -4
  50. package/dist/{Signup-9TjMMnU4.js.map → Signup-DfG7Xmkx.js.map} +1 -1
  51. package/dist/{SignupConsentFlow-QUZGKjdB.js → SignupConsentFlow-YGWhF7tj.js} +4 -4
  52. package/dist/{SignupConsentFlow-QUZGKjdB.js.map → SignupConsentFlow-YGWhF7tj.js.map} +1 -1
  53. package/dist/{SignupRequirementsPage-DfbYmpQD.js → SignupRequirementsPage-Sm3vgkhC.js} +5 -5
  54. package/dist/{SignupRequirementsPage-DfbYmpQD.js.map → SignupRequirementsPage-Sm3vgkhC.js.map} +1 -1
  55. package/dist/StaffCreateSupportTicketForm-C5tRPz95.js +35 -0
  56. package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js → StaffSupportTicketDetailPage-ePkLJU12.js} +7 -7
  57. package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js.map → StaffSupportTicketDetailPage-ePkLJU12.js.map} +1 -1
  58. package/dist/StaffSupportTicketList-BbiPTm54.js +35 -0
  59. package/dist/{StaffSupportTicketParent-CilR4RGM.js → StaffSupportTicketParent-Bz-SH6-k.js} +2 -2
  60. package/dist/{StaffSupportTicketParent-CilR4RGM.js.map → StaffSupportTicketParent-Bz-SH6-k.js.map} +1 -1
  61. package/dist/StaffSupportTicketParent-D2onnMqe.js +7 -0
  62. package/dist/StaffSupportTicketSuccess-DLVRTvr1.js +35 -0
  63. package/dist/{SupportStaffPage-KKugAnFm.js → SupportStaffPage-0X1VMovT.js} +5 -5
  64. package/dist/{SupportStaffPage-KKugAnFm.js.map → SupportStaffPage-0X1VMovT.js.map} +1 -1
  65. package/dist/{SupportTicketMaintenancePage-smItdkrD.js → SupportTicketMaintenancePage-CLDqc4Pb.js} +4 -4
  66. package/dist/{SupportTicketMaintenancePage-smItdkrD.js.map → SupportTicketMaintenancePage-CLDqc4Pb.js.map} +1 -1
  67. package/dist/TeamAttachmentsTab-B-xXmvOy.js +35 -0
  68. package/dist/TeamHistoryTab-Bb7mq4Dc.js +4 -0
  69. package/dist/{TeamHistoryTab-D5biUPmq.js → TeamHistoryTab-D0zW5wjj.js} +2 -2
  70. package/dist/{TeamHistoryTab-D5biUPmq.js.map → TeamHistoryTab-D0zW5wjj.js.map} +1 -1
  71. package/dist/TeamList-B-cFoclM.js +35 -0
  72. package/dist/TeamMemberList-D3GNHlXH.js +35 -0
  73. package/dist/TeamMemberParent-BKfPMX05.js +35 -0
  74. package/dist/TeamNotesTab-BbODx7wS.js +7 -0
  75. package/dist/{TeamNotesTab-BzGZZ1h8.js → TeamNotesTab-DImzeVPk.js} +4 -4
  76. package/dist/{TeamNotesTab-BzGZZ1h8.js.map → TeamNotesTab-DImzeVPk.js.map} +1 -1
  77. package/dist/TeamParent-5lokhztw.js +35 -0
  78. package/dist/{TimelineNoteInput-0p-M4Qie.js → TimelineNoteInput-Cpnwnx7B.js} +2 -2
  79. package/dist/{TimelineNoteInput-0p-M4Qie.js.map → TimelineNoteInput-Cpnwnx7B.js.map} +1 -1
  80. package/dist/{TimelineSystemEvent-BHzFr46C.js → TimelineSystemEvent-BGG9WkQw.js} +4 -4
  81. package/dist/{TimelineSystemEvent-BHzFr46C.js.map → TimelineSystemEvent-BGG9WkQw.js.map} +1 -1
  82. package/dist/UserListPage-4hZll_PC.js +4 -0
  83. package/dist/{UserListPage-DUE5gJTo.js → UserListPage-DpkOdR1U.js} +2 -2
  84. package/dist/{UserListPage-DUE5gJTo.js.map → UserListPage-DpkOdR1U.js.map} +1 -1
  85. package/dist/{UserProfilePage-C3b93Keh.js → UserProfilePage-CWRgwGQH.js} +4 -4
  86. package/dist/{UserProfilePage-C3b93Keh.js.map → UserProfilePage-CWRgwGQH.js.map} +1 -1
  87. package/dist/UserProfilePage-qFrg3PiC.js +7 -0
  88. package/dist/VerifyEmail-C5EO8OFo.js +9 -0
  89. package/dist/{VerifyEmail-DlOmWGG-.js → VerifyEmail-DXZ4T5eN.js} +5 -5
  90. package/dist/{VerifyEmail-DlOmWGG-.js.map → VerifyEmail-DXZ4T5eN.js.map} +1 -1
  91. package/dist/ViewTeam-Die0SWa_.js +35 -0
  92. package/dist/ViewTeamMember-_sqrqGit.js +35 -0
  93. package/dist/index.d.ts +757 -757
  94. package/dist/index.js +25 -25
  95. package/dist/{src-QZJyMfGX.js → src-_IeDZXH6.js} +51 -51
  96. package/dist/{src-QZJyMfGX.js.map → src-_IeDZXH6.js.map} +1 -1
  97. package/dist/{useEmailVerificationChannel-BNi926Ho.js → useEmailVerificationChannel-BiiuuTUM.js} +2 -2
  98. package/dist/{useEmailVerificationChannel-BNi926Ho.js.map → useEmailVerificationChannel-BiiuuTUM.js.map} +1 -1
  99. package/dist/{useMutation-BTsyHKyn.js → useMutation-BMZJLpgx.js} +3 -3
  100. package/dist/{useMutation-BTsyHKyn.js.map → useMutation-BMZJLpgx.js.map} +1 -1
  101. package/dist/{useQuery-BggIE52P.js → useQuery-qpXzBuVg.js} +3 -3
  102. package/dist/{useQuery-BggIE52P.js.map → useQuery-qpXzBuVg.js.map} +1 -1
  103. package/dist/{useQueryCache-Bjm-S8v5.js → useQueryCache-DkRwK5Gz.js} +2 -2
  104. package/dist/{useQueryCache-Bjm-S8v5.js.map → useQueryCache-DkRwK5Gz.js.map} +1 -1
  105. package/dist/{useRpcAuth-rmHf7bYx.js → useRpcAuth-x5Gn5gR0.js} +17 -3
  106. package/dist/{useRpcAuth-rmHf7bYx.js.map → useRpcAuth-x5Gn5gR0.js.map} +1 -1
  107. package/package.json +2 -2
  108. package/dist/ChangePasswordPage-CpDPmEml.js +0 -6
  109. package/dist/CreateTeamForm-B4cIuYAf.js +0 -35
  110. package/dist/CreateTeamMemberForm-Chrw1y00.js +0 -35
  111. package/dist/CreateUserPage-WruMs7WP.js +0 -6
  112. package/dist/CreditBalanceDashboard-CkcsrZ_e.js +0 -35
  113. package/dist/CreditManagement-Ddvu9dMw.js +0 -35
  114. package/dist/CustomerCreateSupportTicketForm-BKperKGS.js +0 -35
  115. package/dist/CustomerSupportTicketList-DcbrjDa9.js +0 -35
  116. package/dist/CustomerSupportTicketParent-BeNzUwuP.js +0 -7
  117. package/dist/CustomerSupportTicketSuccess-CC967u3y.js +0 -35
  118. package/dist/EditTeamForm-B5Tee5wL.js +0 -35
  119. package/dist/EditTeamMemberForm-OtcS8QWt.js +0 -6
  120. package/dist/EditUserPage-T4DQlKhf.js +0 -7
  121. package/dist/ForgotPassword-CUifhmqP.js +0 -7
  122. package/dist/LoginForm-Bg7GoZEA.js +0 -7
  123. package/dist/Logout-Bs92csWH.js +0 -7
  124. package/dist/MfaSetup-BACX5XP-.js +0 -8
  125. package/dist/MfaVerify-ak4iSdQ2.js +0 -8
  126. package/dist/ResetPassword-pY1uhTdl.js +0 -7
  127. package/dist/Signup-Bq-G3D-s.js +0 -9
  128. package/dist/StaffCreateSupportTicketForm-D0ZuisDk.js +0 -35
  129. package/dist/StaffSupportTicketList-CiqC05XB.js +0 -35
  130. package/dist/StaffSupportTicketParent-DkV329NI.js +0 -7
  131. package/dist/StaffSupportTicketSuccess-CUYnimaI.js +0 -35
  132. package/dist/TeamAttachmentsTab-DUtCD1Yi.js +0 -35
  133. package/dist/TeamHistoryTab-BsUoH4VK.js +0 -4
  134. package/dist/TeamList-BkPIqZ8V.js +0 -35
  135. package/dist/TeamMemberList-1mxUGCNa.js +0 -35
  136. package/dist/TeamMemberParent-DzeBIElY.js +0 -35
  137. package/dist/TeamNotesTab-ClHl2nXd.js +0 -7
  138. package/dist/TeamParent-DJa9UZTP.js +0 -35
  139. package/dist/UserListPage-BTLE4J0s.js +0 -4
  140. package/dist/UserProfilePage-CVTORtSx.js +0 -7
  141. package/dist/VerifyEmail-DCP4DWIw.js +0 -9
  142. package/dist/ViewTeam-DVfnLMhV.js +0 -35
  143. package/dist/ViewTeamMember-L4v3gCIn.js +0 -35
@@ -0,0 +1,35 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./useQuery-qpXzBuVg.js";
5
+ import { L as CustomerSupportTicketList_default } from "./src-_IeDZXH6.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-BGG9WkQw.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-DxWTyx1M.js";
10
+ import "./useSignupPendingData-BWHwUHhL.js";
11
+ import "./useBreadcrumbs-qB6ghsAf.js";
12
+ import "./EditTeamMemberForm-BgjNP8MZ.js";
13
+ import "./RecordVersionViewer-BWZ78vvE.js";
14
+ import "./TeamHistoryTab-D0zW5wjj.js";
15
+ import "./UserProfilePage-CWRgwGQH.js";
16
+ import "./ChangePasswordPage-ePeFkv_6.js";
17
+ import "./TeamNotesTab-DImzeVPk.js";
18
+ import "./CustomerSupportTicketParent-C2XdM5f7.js";
19
+ import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
20
+ import "./StaffSupportTicketParent-Bz-SH6-k.js";
21
+ import "./LoginForm-C-_lBDyl.js";
22
+ import "./useEmailVerificationChannel-BiiuuTUM.js";
23
+ import "./Signup-DfG7Xmkx.js";
24
+ import "./ForgotPassword-B8JG_n9D.js";
25
+ import "./ResetPassword-DHUfERyS.js";
26
+ import "./Logout-CIAoXyOg.js";
27
+ import "./mfaSchema-BnRWf0ma.js";
28
+ import "./MfaSetup-9qdTKQ0m.js";
29
+ import "./MfaVerify-Cgta1nE9.js";
30
+ import "./VerifyEmail-DXZ4T5eN.js";
31
+ import "./UserListPage-DpkOdR1U.js";
32
+ import "./CreateUserPage-Cdv-3U5M.js";
33
+ import "./EditUserPage-uLPhRW5x.js";
34
+
35
+ export { CustomerSupportTicketList_default as default };
@@ -1,4 +1,4 @@
1
- import { t as useQuery } from "./useQuery-BggIE52P.js";
1
+ import { t as useQuery } from "./useQuery-qpXzBuVg.js";
2
2
  import { n as useBreadcrumbs } from "./useBreadcrumbs-qB6ghsAf.js";
3
3
  import { t as formatTicketDisplayId } from "./displayIdFormatter-Dz900Awr.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, provide, resolveComponent, toDisplayString, unref } from "vue";
@@ -63,4 +63,4 @@ var CustomerSupportTicketParent_default = _sfc_main;
63
63
 
64
64
  //#endregion
65
65
  export { CustomerSupportTicketParent_default as t };
66
- //# sourceMappingURL=CustomerSupportTicketParent-HIxwSVdu.js.map
66
+ //# sourceMappingURL=CustomerSupportTicketParent-C2XdM5f7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerSupportTicketParent-HIxwSVdu.js","names":[],"sources":["../src/slices/support_ticket/customer/CustomerSupportTicketParent.vue"],"sourcesContent":["<template>\n <!-- Only show full-page spinner on initial load; refetch keeps content visible -->\n <div v-if=\"isLoading && !ticket\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"error && !ticket\" class=\"alert alert-error mb-4\">\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 <span>{{ error.message }}</span>\n </div>\n\n <RouterView v-else :ticket=\"ticket\" :isLoading=\"isLoading\" :error=\"error\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '../../../composables/useBreadcrumbs';\nimport { useQuery } from '../../../composables/useQuery';\nimport { computed, provide } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { formatTicketDisplayId } from '../utils/displayIdFormatter';\n\nconst route = useRoute();\nconst ticketId = route.params.id as string;\n\n// Fetch ticket data once at parent level\nconst {\n data,\n loading: isLoading,\n error,\n refetch,\n} = useQuery((api) => api.supportTickets.getTicket(ticketId), {});\n\nconst ticket = computed(() => data.value ?? null);\n\n// Provide refresh function to child components\nconst refreshTicket = async () => {\n await refetch();\n};\n\nprovide('refreshTicket', refreshTicket);\n\n// Manage breadcrumbs at parent level\nuseBreadcrumbs(() => [\n {\n label: 'Support',\n to: { name: 'CustomerSupportTicketList' },\n },\n {\n label: ticket.value\n ? formatTicketDisplayId(\n ticket.value.display_id,\n ticket.value.display_id_prefix,\n ticket.value.id,\n )\n : '',\n loading: !ticket.value,\n to: {\n name: 'CustomerViewSupportTicket',\n params: { id: ticketId },\n },\n },\n]);\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,WADQ,UAAU,CACD,OAAO;EAG9B,MAAM,EACJ,MACA,SAAS,WACT,OACA,YACE,UAAU,QAAQ,IAAI,eAAe,UAAU,SAAS,EAAE,EAAE,CAAC;EAEjE,MAAM,SAAS,eAAe,KAAK,SAAS,KAAK;EAGjD,MAAM,gBAAgB,YAAY;AAChC,SAAM,SAAS;;AAGjB,UAAQ,iBAAiB,cAAc;AAGvC,uBAAqB,CACnB;GACE,OAAO;GACP,IAAI,EAAE,MAAM,6BAA6B;GAC1C,EACD;GACE,OAAO,OAAO,QACV,sBACE,OAAO,MAAM,YACb,OAAO,MAAM,mBACb,OAAO,MAAM,GACf,GACA;GACJ,SAAS,CAAC,OAAO;GACjB,IAAI;IACF,MAAM;IACN,QAAQ,EAAE,IAAI,UAAU;IACzB;GACF,CACF,CAAC;;;2DAxEA,mBAAA,+EAAmF,EACxE,MAAA,UAAS,IAAA,CAAK,OAAA,SAAA,WAAA,EAAzB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAGlC,MAAA,MAAK,IAAA,CAAK,OAAA,SAAA,WAAA,EAA1B,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAGxB,YAA4E,uBAAA;;IAAxD,QAAQ,OAAA;IAAS,WAAW,MAAA,UAAS;IAAG,OAAO,MAAA,MAAK"}
1
+ {"version":3,"file":"CustomerSupportTicketParent-C2XdM5f7.js","names":[],"sources":["../src/slices/support_ticket/customer/CustomerSupportTicketParent.vue"],"sourcesContent":["<template>\n <!-- Only show full-page spinner on initial load; refetch keeps content visible -->\n <div v-if=\"isLoading && !ticket\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"error && !ticket\" class=\"alert alert-error mb-4\">\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 <span>{{ error.message }}</span>\n </div>\n\n <RouterView v-else :ticket=\"ticket\" :isLoading=\"isLoading\" :error=\"error\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '../../../composables/useBreadcrumbs';\nimport { useQuery } from '../../../composables/useQuery';\nimport { computed, provide } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { formatTicketDisplayId } from '../utils/displayIdFormatter';\n\nconst route = useRoute();\nconst ticketId = route.params.id as string;\n\n// Fetch ticket data once at parent level\nconst {\n data,\n loading: isLoading,\n error,\n refetch,\n} = useQuery((api) => api.supportTickets.getTicket(ticketId), {});\n\nconst ticket = computed(() => data.value ?? null);\n\n// Provide refresh function to child components\nconst refreshTicket = async () => {\n await refetch();\n};\n\nprovide('refreshTicket', refreshTicket);\n\n// Manage breadcrumbs at parent level\nuseBreadcrumbs(() => [\n {\n label: 'Support',\n to: { name: 'CustomerSupportTicketList' },\n },\n {\n label: ticket.value\n ? formatTicketDisplayId(\n ticket.value.display_id,\n ticket.value.display_id_prefix,\n ticket.value.id,\n )\n : '',\n loading: !ticket.value,\n to: {\n name: 'CustomerViewSupportTicket',\n params: { id: ticketId },\n },\n },\n]);\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,WADQ,UAAU,CACD,OAAO;EAG9B,MAAM,EACJ,MACA,SAAS,WACT,OACA,YACE,UAAU,QAAQ,IAAI,eAAe,UAAU,SAAS,EAAE,EAAE,CAAC;EAEjE,MAAM,SAAS,eAAe,KAAK,SAAS,KAAK;EAGjD,MAAM,gBAAgB,YAAY;AAChC,SAAM,SAAS;;AAGjB,UAAQ,iBAAiB,cAAc;AAGvC,uBAAqB,CACnB;GACE,OAAO;GACP,IAAI,EAAE,MAAM,6BAA6B;GAC1C,EACD;GACE,OAAO,OAAO,QACV,sBACE,OAAO,MAAM,YACb,OAAO,MAAM,mBACb,OAAO,MAAM,GACf,GACA;GACJ,SAAS,CAAC,OAAO;GACjB,IAAI;IACF,MAAM;IACN,QAAQ,EAAE,IAAI,UAAU;IACzB;GACF,CACF,CAAC;;;2DAxEA,mBAAA,+EAAmF,EACxE,MAAA,UAAS,IAAA,CAAK,OAAA,SAAA,WAAA,EAAzB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAGlC,MAAA,MAAK,IAAA,CAAK,OAAA,SAAA,WAAA,EAA1B,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAGxB,YAA4E,uBAAA;;IAAxD,QAAQ,OAAA;IAAS,WAAW,MAAA,UAAS;IAAG,OAAO,MAAA,MAAK"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useQuery-qpXzBuVg.js";
4
+ import "./useBreadcrumbs-qB6ghsAf.js";
5
+ import { t as CustomerSupportTicketParent_default } from "./CustomerSupportTicketParent-C2XdM5f7.js";
6
+
7
+ export { CustomerSupportTicketParent_default as default };
@@ -0,0 +1,35 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./useQuery-qpXzBuVg.js";
5
+ import { I as CustomerSupportTicketSuccess_default } from "./src-_IeDZXH6.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-BGG9WkQw.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-DxWTyx1M.js";
10
+ import "./useSignupPendingData-BWHwUHhL.js";
11
+ import "./useBreadcrumbs-qB6ghsAf.js";
12
+ import "./EditTeamMemberForm-BgjNP8MZ.js";
13
+ import "./RecordVersionViewer-BWZ78vvE.js";
14
+ import "./TeamHistoryTab-D0zW5wjj.js";
15
+ import "./UserProfilePage-CWRgwGQH.js";
16
+ import "./ChangePasswordPage-ePeFkv_6.js";
17
+ import "./TeamNotesTab-DImzeVPk.js";
18
+ import "./CustomerSupportTicketParent-C2XdM5f7.js";
19
+ import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
20
+ import "./StaffSupportTicketParent-Bz-SH6-k.js";
21
+ import "./LoginForm-C-_lBDyl.js";
22
+ import "./useEmailVerificationChannel-BiiuuTUM.js";
23
+ import "./Signup-DfG7Xmkx.js";
24
+ import "./ForgotPassword-B8JG_n9D.js";
25
+ import "./ResetPassword-DHUfERyS.js";
26
+ import "./Logout-CIAoXyOg.js";
27
+ import "./mfaSchema-BnRWf0ma.js";
28
+ import "./MfaSetup-9qdTKQ0m.js";
29
+ import "./MfaVerify-Cgta1nE9.js";
30
+ import "./VerifyEmail-DXZ4T5eN.js";
31
+ import "./UserListPage-DpkOdR1U.js";
32
+ import "./CreateUserPage-Cdv-3U5M.js";
33
+ import "./EditUserPage-uLPhRW5x.js";
34
+
35
+ export { CustomerSupportTicketSuccess_default as default };
@@ -0,0 +1,35 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./useQuery-qpXzBuVg.js";
5
+ import { pt as EditTeamForm_default } from "./src-_IeDZXH6.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-BGG9WkQw.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-DxWTyx1M.js";
10
+ import "./useSignupPendingData-BWHwUHhL.js";
11
+ import "./useBreadcrumbs-qB6ghsAf.js";
12
+ import "./EditTeamMemberForm-BgjNP8MZ.js";
13
+ import "./RecordVersionViewer-BWZ78vvE.js";
14
+ import "./TeamHistoryTab-D0zW5wjj.js";
15
+ import "./UserProfilePage-CWRgwGQH.js";
16
+ import "./ChangePasswordPage-ePeFkv_6.js";
17
+ import "./TeamNotesTab-DImzeVPk.js";
18
+ import "./CustomerSupportTicketParent-C2XdM5f7.js";
19
+ import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
20
+ import "./StaffSupportTicketParent-Bz-SH6-k.js";
21
+ import "./LoginForm-C-_lBDyl.js";
22
+ import "./useEmailVerificationChannel-BiiuuTUM.js";
23
+ import "./Signup-DfG7Xmkx.js";
24
+ import "./ForgotPassword-B8JG_n9D.js";
25
+ import "./ResetPassword-DHUfERyS.js";
26
+ import "./Logout-CIAoXyOg.js";
27
+ import "./mfaSchema-BnRWf0ma.js";
28
+ import "./MfaSetup-9qdTKQ0m.js";
29
+ import "./MfaVerify-Cgta1nE9.js";
30
+ import "./VerifyEmail-DXZ4T5eN.js";
31
+ import "./UserListPage-DpkOdR1U.js";
32
+ import "./CreateUserPage-Cdv-3U5M.js";
33
+ import "./EditUserPage-uLPhRW5x.js";
34
+
35
+ export { EditTeamForm_default as default };
@@ -1,4 +1,4 @@
1
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
2
2
  import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
3
3
  import { useRoute } from "vue-router";
4
4
  import { toast } from "vue3-toastify";
@@ -188,4 +188,4 @@ var EditTeamMemberForm_default = _sfc_main;
188
188
 
189
189
  //#endregion
190
190
  export { FieldsetSection_default as i, teamMemberCreateSchemaWithMetadata as n, teamMemberUpdateSchemaWithMetadata as r, EditTeamMemberForm_default as t };
191
- //# sourceMappingURL=EditTeamMemberForm-CaS2GLjV.js.map
191
+ //# sourceMappingURL=EditTeamMemberForm-BgjNP8MZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditTeamMemberForm-CaS2GLjV.js","names":[],"sources":["../src/components/ui/FieldsetSection.vue","../src/slices/team/team_member/teamMemberMetadata.ts","../src/slices/team/team_member/EditTeamMemberForm.vue"],"sourcesContent":["<template>\n <fieldset class=\"bg-base-100 border-base-300 border p-4 mb-6 rounded-xl\">\n <legend class=\"text-xl font-medium mb-5 top-4 text-center relative\">{{ title }}</legend>\n\n <!-- Mobile: Single column -->\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2\">\n <slot></slot>\n </div>\n </fieldset>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps({\n title: {\n type: String,\n required: true,\n },\n});\n</script>\n","import {\n type UseFormTyped,\n withMetadata,\n ZINIA_FIELDS_KEY,\n ZINIA_FORM_KEY,\n} from '@dragonmastery/zinia-forms-core';\nimport { TeamMemberCreateSchema, TeamMemberUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\n\n// Create schema (no ID)\nexport const teamMemberCreateSchemaWithMetadata = withMetadata(\n TeamMemberCreateSchema.omit({ team_id: true }),\n 'teamMemberCreateSchema',\n {\n user_id: {\n inputType: 'select',\n placeholder: 'Select user',\n },\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\n// Update schema (with ID)\nexport const teamMemberUpdateSchemaWithMetadata = withMetadata(\n TeamMemberUpdateSchema,\n 'teamMemberUpdateSchema',\n {\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\nexport type TeamMemberCreateFormDto = UseFormTyped<typeof TeamMemberCreateSchema>;\nexport type TeamMemberUpdateFormDto = UseFormTyped<typeof TeamMemberUpdateSchema>;\n\nexport const injectTeamMemberCreateForm = () =>\n inject<TeamMemberCreateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberUpdateForm = () =>\n inject<TeamMemberUpdateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberZinia = () =>\n inject<TeamMemberCreateFormDto['zinia'] | TeamMemberUpdateFormDto['zinia']>(\n ZINIA_FIELDS_KEY,\n );\n","<template>\n <div v-if=\"form.isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"form.loadError\" class=\"alert alert-error mb-4\">\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 <span>{{ form.loadError }}</span>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Edit Team Member\"\n subtitle=\"Update team member details\"\n >\n <!-- Basic Information -->\n <FieldsetSection title=\"Member Details\">\n <zinia.DisplayNameField placeholder=\"Enter display name (optional)\" />\n <zinia.RoleField placeholder=\"Enter role (optional)\" />\n </FieldsetSection>\n\n <!-- Contact Information -->\n <FieldsetSection title=\"Contact Information\">\n <zinia.EmailAddressField placeholder=\"Enter email address (optional)\" />\n <zinia.BusinessPhoneField placeholder=\"Enter business phone (optional)\" />\n <zinia.MobilePhoneField placeholder=\"Enter mobile phone (optional)\" />\n <zinia.TimeZoneField placeholder=\"Enter time zone (optional)\" />\n </FieldsetSection>\n\n <!-- Web Presence -->\n <FieldsetSection title=\"Web Presence\">\n <zinia.WebsiteAddressField placeholder=\"Enter website address (optional)\" />\n </FieldsetSection>\n\n <!-- Form Status Messages -->\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\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 <span>{{ form.submitError }}</span>\n </div>\n\n <!-- Submit Button -->\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton\n submitText=\"Update Team Member\"\n submittingText=\"Updating Team Member...\"\n />\n </div>\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n</template>\n\n<script setup lang=\"ts\">\nimport FieldsetSection from '../../../components/ui/FieldsetSection.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { TeamMemberReadDto, TeamMemberUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { teamMemberUpdateSchemaWithMetadata } from './teamMemberMetadata';\n\ninterface Props {\n teamMember: TeamMemberReadDto | null;\n isLoading?: boolean;\n error?: Error | null;\n}\n\nconst props = defineProps<Props>();\n\nconst route = useRoute();\nconst member_id = route.params.member_id as string;\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaResetButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n} = useForm(teamMemberUpdateSchemaWithMetadata, {\n storeName: `edit-team-member-${member_id}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n if (!props.teamMember) {\n throw new Error('No team member data found');\n }\n\n return props.teamMember as TeamMemberUpdateDto;\n },\n});\n\n// Get refresh function from parent\nconst refreshTeamMember = inject<(() => Promise<void>) | undefined>('refreshTeamMember');\n\n// Setup mutation for updating team member\nconst { mutate: updateTeamMember } = useMutation(\n (api, input: TeamMemberUpdateDto) => api.teamMembers.updateTeamMember(input),\n { invalidate: /^team-members?:|^user:teams/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (formData: TeamMemberUpdateDto) => {\n const updatedTeamMember = await updateTeamMember(formData);\n if (!updatedTeamMember) {\n throw new Error('Failed to update team member');\n }\n return updatedTeamMember;\n};\n\n// Handle successful submission\nconst handleSuccess = async () => {\n clearSavedFormState();\n toast.success(`Team member updated successfully!`);\n // Refresh team member data via parent\n if (refreshTeamMember) {\n await refreshTeamMember();\n }\n};\n\n// Handle submission error\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"EditTeamMemberForm-BgjNP8MZ.js","names":[],"sources":["../src/components/ui/FieldsetSection.vue","../src/slices/team/team_member/teamMemberMetadata.ts","../src/slices/team/team_member/EditTeamMemberForm.vue"],"sourcesContent":["<template>\n <fieldset class=\"bg-base-100 border-base-300 border p-4 mb-6 rounded-xl\">\n <legend class=\"text-xl font-medium mb-5 top-4 text-center relative\">{{ title }}</legend>\n\n <!-- Mobile: Single column -->\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2\">\n <slot></slot>\n </div>\n </fieldset>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps({\n title: {\n type: String,\n required: true,\n },\n});\n</script>\n","import {\n type UseFormTyped,\n withMetadata,\n ZINIA_FIELDS_KEY,\n ZINIA_FORM_KEY,\n} from '@dragonmastery/zinia-forms-core';\nimport { TeamMemberCreateSchema, TeamMemberUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\n\n// Create schema (no ID)\nexport const teamMemberCreateSchemaWithMetadata = withMetadata(\n TeamMemberCreateSchema.omit({ team_id: true }),\n 'teamMemberCreateSchema',\n {\n user_id: {\n inputType: 'select',\n placeholder: 'Select user',\n },\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\n// Update schema (with ID)\nexport const teamMemberUpdateSchemaWithMetadata = withMetadata(\n TeamMemberUpdateSchema,\n 'teamMemberUpdateSchema',\n {\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\nexport type TeamMemberCreateFormDto = UseFormTyped<typeof TeamMemberCreateSchema>;\nexport type TeamMemberUpdateFormDto = UseFormTyped<typeof TeamMemberUpdateSchema>;\n\nexport const injectTeamMemberCreateForm = () =>\n inject<TeamMemberCreateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberUpdateForm = () =>\n inject<TeamMemberUpdateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberZinia = () =>\n inject<TeamMemberCreateFormDto['zinia'] | TeamMemberUpdateFormDto['zinia']>(\n ZINIA_FIELDS_KEY,\n );\n","<template>\n <div v-if=\"form.isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"form.loadError\" class=\"alert alert-error mb-4\">\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 <span>{{ form.loadError }}</span>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Edit Team Member\"\n subtitle=\"Update team member details\"\n >\n <!-- Basic Information -->\n <FieldsetSection title=\"Member Details\">\n <zinia.DisplayNameField placeholder=\"Enter display name (optional)\" />\n <zinia.RoleField placeholder=\"Enter role (optional)\" />\n </FieldsetSection>\n\n <!-- Contact Information -->\n <FieldsetSection title=\"Contact Information\">\n <zinia.EmailAddressField placeholder=\"Enter email address (optional)\" />\n <zinia.BusinessPhoneField placeholder=\"Enter business phone (optional)\" />\n <zinia.MobilePhoneField placeholder=\"Enter mobile phone (optional)\" />\n <zinia.TimeZoneField placeholder=\"Enter time zone (optional)\" />\n </FieldsetSection>\n\n <!-- Web Presence -->\n <FieldsetSection title=\"Web Presence\">\n <zinia.WebsiteAddressField placeholder=\"Enter website address (optional)\" />\n </FieldsetSection>\n\n <!-- Form Status Messages -->\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\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 <span>{{ form.submitError }}</span>\n </div>\n\n <!-- Submit Button -->\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton\n submitText=\"Update Team Member\"\n submittingText=\"Updating Team Member...\"\n />\n </div>\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n</template>\n\n<script setup lang=\"ts\">\nimport FieldsetSection from '../../../components/ui/FieldsetSection.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { TeamMemberReadDto, TeamMemberUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { teamMemberUpdateSchemaWithMetadata } from './teamMemberMetadata';\n\ninterface Props {\n teamMember: TeamMemberReadDto | null;\n isLoading?: boolean;\n error?: Error | null;\n}\n\nconst props = defineProps<Props>();\n\nconst route = useRoute();\nconst member_id = route.params.member_id as string;\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaResetButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n} = useForm(teamMemberUpdateSchemaWithMetadata, {\n storeName: `edit-team-member-${member_id}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n if (!props.teamMember) {\n throw new Error('No team member data found');\n }\n\n return props.teamMember as TeamMemberUpdateDto;\n },\n});\n\n// Get refresh function from parent\nconst refreshTeamMember = inject<(() => Promise<void>) | undefined>('refreshTeamMember');\n\n// Setup mutation for updating team member\nconst { mutate: updateTeamMember } = useMutation(\n (api, input: TeamMemberUpdateDto) => api.teamMembers.updateTeamMember(input),\n { invalidate: /^team-members?:|^user:teams/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (formData: TeamMemberUpdateDto) => {\n const updatedTeamMember = await updateTeamMember(formData);\n if (!updatedTeamMember) {\n throw new Error('Failed to update team member');\n }\n return updatedTeamMember;\n};\n\n// Handle successful submission\nconst handleSuccess = async () => {\n clearSavedFormState();\n toast.success(`Team member updated successfully!`);\n // Refresh team member data via parent\n if (refreshTeamMember) {\n await refreshTeamMember();\n }\n};\n\n// Handle submission error\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import { t as EditTeamMemberForm_default } from "./EditTeamMemberForm-BgjNP8MZ.js";
5
+
6
+ export { EditTeamMemberForm_default as default };
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./useQuery-qpXzBuVg.js";
5
+ import { t as EditUserPage_default } from "./EditUserPage-uLPhRW5x.js";
6
+
7
+ export { EditUserPage_default as default };
@@ -1,5 +1,5 @@
1
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
2
- import { t as useQuery } from "./useQuery-BggIE52P.js";
1
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
2
+ import { t as useQuery } from "./useQuery-qpXzBuVg.js";
3
3
  import { t as formatSystemTimestamp } from "./convertToLocalDateTime-CFhtN6PI.js";
4
4
  import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
5
5
  import { useRoute, useRouter } from "vue-router";
@@ -109,4 +109,4 @@ var EditUserPage_default = _sfc_main;
109
109
 
110
110
  //#endregion
111
111
  export { updateUserSchemaWithMetadata as n, EditUserPage_default as t };
112
- //# sourceMappingURL=EditUserPage-DURc5rmi.js.map
112
+ //# sourceMappingURL=EditUserPage-uLPhRW5x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditUserPage-DURc5rmi.js","names":[],"sources":["../src/slices/admin/features/user_management/updateUserMetadata.ts","../src/slices/admin/features/user_management/EditUserPage.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { UserUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const updateUserSchemaWithMetadata = withMetadata(\n UserUpdateSchema,\n 'updateUserSchema',\n {\n user_type: {\n label: 'User Role',\n helpText: 'Select the role for this user',\n },\n },\n);\n","<template>\n <div class=\"max-w-2xl mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Edit User</h1>\n\n <!-- Loading State -->\n <div v-if=\"fetching\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error mb-4\">\n <span>Error loading user: {{ error.message }}</span>\n </div>\n\n <!-- Edit Form -->\n <div v-else-if=\"userData\">\n <!-- Read-only user info -->\n <div class=\"card bg-base-100 shadow-xl mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title\">User Information</h2>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Username</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.username }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.email }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email Verified</span>\n </label>\n <div class=\"flex items-center\">\n <span\n class=\"badge\"\n :class=\"userData.email_verified ? 'badge-success' : 'badge-error'\"\n >\n {{ userData.email_verified ? 'Verified' : 'Not Verified' }}\n </span>\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Created</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ formatSystemTimestamp(userData.created_at) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Editable role -->\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Update User Role\"\n subtitle=\"Change the user's role in the system\"\n >\n <zinia.UserTypeField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton submitText=\"Update Role\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { UserUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { updateUserSchemaWithMetadata } from './updateUserMetadata';\n\nconst route = useRoute();\nconst router = useRouter();\nconst userId = route.params.id as string;\n\n// Fetch user data\nconst {\n data,\n loading: fetching,\n error,\n} = useQuery((api) => api.users.getUser(userId), {\n staleTime: 5 * 60 * 1000,\n});\n\nconst userData = ref<any | null>(null);\n\n// Create form with user data\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary } =\n useForm(updateUserSchemaWithMetadata, {\n storeName: `edit-user-form-${userId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (fetching.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!data.value) {\n throw new Error('User not found');\n }\n\n userData.value = data.value;\n return {\n id: data.value?.id,\n user_type: data.value?.user_type,\n } satisfies UserUpdateDto;\n },\n });\n\nconst { mutate: updateUser } = useMutation(\n (api, formData: UserUpdateDto) => api.users.updateUser(formData),\n { invalidate: /^users?:/ },\n);\n\nconst handleSubmit = async (formData: UserUpdateDto) => {\n const result = await updateUser(formData);\n if (!result) throw new Error('Failed to update user');\n return result;\n};\n\nconst handleSuccess = async (_result: any) => {\n await router.push({ name: 'UserManagement' });\n toast.success('User role updated successfully!');\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"EditUserPage-uLPhRW5x.js","names":[],"sources":["../src/slices/admin/features/user_management/updateUserMetadata.ts","../src/slices/admin/features/user_management/EditUserPage.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { UserUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const updateUserSchemaWithMetadata = withMetadata(\n UserUpdateSchema,\n 'updateUserSchema',\n {\n user_type: {\n label: 'User Role',\n helpText: 'Select the role for this user',\n },\n },\n);\n","<template>\n <div class=\"max-w-2xl mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Edit User</h1>\n\n <!-- Loading State -->\n <div v-if=\"fetching\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error mb-4\">\n <span>Error loading user: {{ error.message }}</span>\n </div>\n\n <!-- Edit Form -->\n <div v-else-if=\"userData\">\n <!-- Read-only user info -->\n <div class=\"card bg-base-100 shadow-xl mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title\">User Information</h2>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Username</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.username }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.email }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email Verified</span>\n </label>\n <div class=\"flex items-center\">\n <span\n class=\"badge\"\n :class=\"userData.email_verified ? 'badge-success' : 'badge-error'\"\n >\n {{ userData.email_verified ? 'Verified' : 'Not Verified' }}\n </span>\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Created</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ formatSystemTimestamp(userData.created_at) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Editable role -->\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Update User Role\"\n subtitle=\"Change the user's role in the system\"\n >\n <zinia.UserTypeField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton submitText=\"Update Role\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { UserUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { updateUserSchemaWithMetadata } from './updateUserMetadata';\n\nconst route = useRoute();\nconst router = useRouter();\nconst userId = route.params.id as string;\n\n// Fetch user data\nconst {\n data,\n loading: fetching,\n error,\n} = useQuery((api) => api.users.getUser(userId), {\n staleTime: 5 * 60 * 1000,\n});\n\nconst userData = ref<any | null>(null);\n\n// Create form with user data\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary } =\n useForm(updateUserSchemaWithMetadata, {\n storeName: `edit-user-form-${userId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (fetching.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!data.value) {\n throw new Error('User not found');\n }\n\n userData.value = data.value;\n return {\n id: data.value?.id,\n user_type: data.value?.user_type,\n } satisfies UserUpdateDto;\n },\n });\n\nconst { mutate: updateUser } = useMutation(\n (api, formData: UserUpdateDto) => api.users.updateUser(formData),\n { invalidate: /^users?:/ },\n);\n\nconst handleSubmit = async (formData: UserUpdateDto) => {\n const result = await updateUser(formData);\n if (!result) throw new Error('Failed to update user');\n return result;\n};\n\nconst handleSuccess = async (_result: any) => {\n await router.push({ name: 'UserManagement' });\n toast.success('User role updated successfully!');\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
2
2
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
3
3
  import { o as withReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
@@ -74,4 +74,4 @@ var ForgotPassword_default = _sfc_main;
74
74
 
75
75
  //#endregion
76
76
  export { forgotPasswordSchemaWithMetadata as n, ForgotPassword_default as t };
77
- //# sourceMappingURL=ForgotPassword-OjIPi9s9.js.map
77
+ //# sourceMappingURL=ForgotPassword-B8JG_n9D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForgotPassword-OjIPi9s9.js","names":[],"sources":["../src/slices/auth/features/forgot_password/forgot_password_schema.ts","../src/slices/auth/features/forgot_password/ForgotPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { forgot_password_zod } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ForgotPasswordForm = z.infer<typeof forgot_password_zod>;\n\n// Enhance the schema with metadata\nexport const forgotPasswordSchemaWithMetadata = withMetadata(\n forgot_password_zod,\n 'forgotPasswordSchema',\n {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\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\">Forgot Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n\n <ZiniaSubmitButton submitText=\"Send Reset Password Email\" submittingText=\"Sending...\" />\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 } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { forgotPasswordSchemaWithMetadata } from './forgot_password_schema';\n\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n forgotPasswordSchemaWithMetadata,\n {\n storeName: 'forgot-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: forgotPasswordMutate } = useMutation(\n (api, email: string) => api.passwordReset.forgotPassword(email),\n {\n skipAuthCheck: true, // Forgot password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof forgotPasswordSchemaWithMetadata>) => {\n const result = await forgotPasswordMutate(data.email);\n if (!result?.ok) throw new Error('Forgot password failed');\n return result.ok;\n};\n\n// Handle success\nconst handleSuccess = async (_data: boolean) => {\n form.reset();\n toast.success(\n 'If the email address exists, an email has been sent to your email address with instructions to reset your password.',\n );\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Forgot password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,mCAAmC,aAC9C,qBACA,wBACA,EACE,OAAO;CACL,WAAW;CACX,aAAa;CACb,UAAU;CACV,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EACF,CACF;;;;;;;;;ECSD,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAE/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,kCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,yBAAyB,aACtC,KAAK,UAAkB,IAAI,cAAc,eAAe,MAAM,EAC/D,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA2D;GACrF,MAAM,SAAS,MAAM,qBAAqB,KAAK,MAAM;AACrD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,yBAAyB;AAC1D,UAAO,OAAO;;EAIhB,MAAM,gBAAgB,OAAO,UAAmB;AAC9C,QAAK,OAAO;AACZ,SAAM,QACJ,sHACD;;EAIH,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,yBAAyB;;;uBAlE9E,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAAoE,MAAA,EAAhE,OAAM,uCAAqC,EAAC,mBAAe,GAAA,GAE/D,YAWY,MAAA,UAAA,EAAA;IAXA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACpD;KAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;KAEpB,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAA4B,gBAAe;;KAEzE,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"}
1
+ {"version":3,"file":"ForgotPassword-B8JG_n9D.js","names":[],"sources":["../src/slices/auth/features/forgot_password/forgot_password_schema.ts","../src/slices/auth/features/forgot_password/ForgotPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { forgot_password_zod } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ForgotPasswordForm = z.infer<typeof forgot_password_zod>;\n\n// Enhance the schema with metadata\nexport const forgotPasswordSchemaWithMetadata = withMetadata(\n forgot_password_zod,\n 'forgotPasswordSchema',\n {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\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\">Forgot Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n\n <ZiniaSubmitButton submitText=\"Send Reset Password Email\" submittingText=\"Sending...\" />\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 } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { forgotPasswordSchemaWithMetadata } from './forgot_password_schema';\n\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n forgotPasswordSchemaWithMetadata,\n {\n storeName: 'forgot-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: forgotPasswordMutate } = useMutation(\n (api, email: string) => api.passwordReset.forgotPassword(email),\n {\n skipAuthCheck: true, // Forgot password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof forgotPasswordSchemaWithMetadata>) => {\n const result = await forgotPasswordMutate(data.email);\n if (!result?.ok) throw new Error('Forgot password failed');\n return result.ok;\n};\n\n// Handle success\nconst handleSuccess = async (_data: boolean) => {\n form.reset();\n toast.success(\n 'If the email address exists, an email has been sent to your email address with instructions to reset your password.',\n );\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Forgot password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,mCAAmC,aAC9C,qBACA,wBACA,EACE,OAAO;CACL,WAAW;CACX,aAAa;CACb,UAAU;CACV,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EACF,CACF;;;;;;;;;ECSD,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAE/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,kCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,yBAAyB,aACtC,KAAK,UAAkB,IAAI,cAAc,eAAe,MAAM,EAC/D,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA2D;GACrF,MAAM,SAAS,MAAM,qBAAqB,KAAK,MAAM;AACrD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,yBAAyB;AAC1D,UAAO,OAAO;;EAIhB,MAAM,gBAAgB,OAAO,UAAmB;AAC9C,QAAK,OAAO;AACZ,SAAM,QACJ,sHACD;;EAIH,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,yBAAyB;;;uBAlE9E,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAAoE,MAAA,EAAhE,OAAM,uCAAqC,EAAC,mBAAe,GAAA,GAE/D,YAWY,MAAA,UAAA,EAAA;IAXA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACpD;KAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;KAEpB,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAA4B,gBAAe;;KAEzE,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"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as ForgotPassword_default } from "./ForgotPassword-B8JG_n9D.js";
6
+
7
+ export { ForgotPassword_default as default };
@@ -1,5 +1,5 @@
1
- import { l as useUserSessionStore, m as useEnv } from "./useRpcAuth-rmHf7bYx.js";
2
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { l as useUserSessionStore, m as useEnv } from "./useRpcAuth-x5Gn5gR0.js";
2
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
3
3
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
4
  import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
5
5
  import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
@@ -115,4 +115,4 @@ var LoginForm_default = _sfc_main;
115
115
 
116
116
  //#endregion
117
117
  export { loginSchemaWithMetadata as n, LoginForm_default as t };
118
- //# sourceMappingURL=LoginForm-9UFnA-fO.js.map
118
+ //# sourceMappingURL=LoginForm-C-_lBDyl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginForm-9UFnA-fO.js","names":[],"sources":["../src/slices/auth/features/login/loginSchema.ts","../src/slices/auth/features/login/LoginForm.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { loginSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type LoginForm = z.infer<typeof loginSchema>;\n\n// Enhance the schema with metadata\nexport const loginSchemaWithMetadata = withMetadata(loginSchema, 'loginSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n\n password: {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-password',\n className: 'login-field',\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\">Login</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n <zinia.PasswordField />\n\n <ZiniaSubmitButton submitText=\"Login\" submittingText=\"Logging in...\" />\n\n <!-- Error banner underneath login button - backend owns the message -->\n <div\n v-if=\"loginBannerMessage\"\n class=\"mt-4 p-4 rounded-lg bg-error/15 text-error\"\n >\n <p class=\"text-sm\">{{ loginBannerMessage }}</p>\n </div>\n\n <div class=\"mt-2\">\n <AppLink :to=\"forgotPasswordLink\" class=\"link-accent link\">\n Forgot your password?\n </AppLink>\n </div>\n <div v-if=\"allowUserSignup\" class=\"text-center mt-2\">\n <p>\n Don't have an account?\n <AppLink class=\"link-accent link\" :to=\"signupLink\">Sign up</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 { useEnv } from '../../../../composables/useEnv';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { z } from 'zod';\nimport { loginSchemaWithMetadata } from './loginSchema';\n\nconst { allowUserSignup, emailVerificationMode } = useEnv();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst forgotPasswordLink = computed(() => withReturnUrl('/auth/forgot-password', returnUrl.value));\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\nconst loginBannerMessage = ref<string | null>(null);\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(loginSchemaWithMetadata, {\n storeName: 'login-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: loginMutate } = useMutation(\n (api, input: z.infer<typeof loginSchemaWithMetadata>) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof loginSchemaWithMetadata>) => {\n loginBannerMessage.value = null;\n\n const loginData = await loginMutate(data);\n if (!loginData) throw new Error('Login failed');\n const { access_token, user_details_token } = loginData;\n if (!access_token || !user_details_token) throw new Error('Invalid login response');\n\n return loginData;\n};\n\n// Handle success\nconst handleSuccess = async (data: {\n access_token: string;\n user_details_token: string;\n frontend_session?: { user?: { email_verified?: boolean } };\n}) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n loginBannerMessage.value = null;\n\n const emailVerified = data.frontend_session?.user?.email_verified ?? true;\n const needsVerification =\n emailVerificationMode === 'strict' && !emailVerified;\n\n const targetPath = needsVerification\n ? withReturnUrl('/auth/verify-email', returnUrl.value)\n : getValidReturnUrl(router.currentRoute.value, '/');\n\n await router.push(targetPath);\n};\n\n// Handle error - display backend message (backend owns error messaging)\nconst handleError = (error: unknown) => {\n loginBannerMessage.value =\n error instanceof Error ? error.message : 'Invalid username or password was entered.';\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"LoginForm-C-_lBDyl.js","names":[],"sources":["../src/slices/auth/features/login/loginSchema.ts","../src/slices/auth/features/login/LoginForm.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { loginSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type LoginForm = z.infer<typeof loginSchema>;\n\n// Enhance the schema with metadata\nexport const loginSchemaWithMetadata = withMetadata(loginSchema, 'loginSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n\n password: {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-password',\n className: 'login-field',\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\">Login</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n <zinia.PasswordField />\n\n <ZiniaSubmitButton submitText=\"Login\" submittingText=\"Logging in...\" />\n\n <!-- Error banner underneath login button - backend owns the message -->\n <div\n v-if=\"loginBannerMessage\"\n class=\"mt-4 p-4 rounded-lg bg-error/15 text-error\"\n >\n <p class=\"text-sm\">{{ loginBannerMessage }}</p>\n </div>\n\n <div class=\"mt-2\">\n <AppLink :to=\"forgotPasswordLink\" class=\"link-accent link\">\n Forgot your password?\n </AppLink>\n </div>\n <div v-if=\"allowUserSignup\" class=\"text-center mt-2\">\n <p>\n Don't have an account?\n <AppLink class=\"link-accent link\" :to=\"signupLink\">Sign up</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 { useEnv } from '../../../../composables/useEnv';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { z } from 'zod';\nimport { loginSchemaWithMetadata } from './loginSchema';\n\nconst { allowUserSignup, emailVerificationMode } = useEnv();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst forgotPasswordLink = computed(() => withReturnUrl('/auth/forgot-password', returnUrl.value));\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\nconst loginBannerMessage = ref<string | null>(null);\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(loginSchemaWithMetadata, {\n storeName: 'login-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: loginMutate } = useMutation(\n (api, input: z.infer<typeof loginSchemaWithMetadata>) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof loginSchemaWithMetadata>) => {\n loginBannerMessage.value = null;\n\n const loginData = await loginMutate(data);\n if (!loginData) throw new Error('Login failed');\n const { access_token, user_details_token } = loginData;\n if (!access_token || !user_details_token) throw new Error('Invalid login response');\n\n return loginData;\n};\n\n// Handle success\nconst handleSuccess = async (data: {\n access_token: string;\n user_details_token: string;\n frontend_session?: { user?: { email_verified?: boolean } };\n}) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n loginBannerMessage.value = null;\n\n const emailVerified = data.frontend_session?.user?.email_verified ?? true;\n const needsVerification =\n emailVerificationMode === 'strict' && !emailVerified;\n\n const targetPath = needsVerification\n ? withReturnUrl('/auth/verify-email', returnUrl.value)\n : getValidReturnUrl(router.currentRoute.value, '/');\n\n await router.push(targetPath);\n};\n\n// Handle error - display backend message (backend owns error messaging)\nconst handleError = (error: unknown) => {\n loginBannerMessage.value =\n error instanceof Error ? error.message : 'Invalid username or password was entered.';\n};\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as LoginForm_default } from "./LoginForm-C-_lBDyl.js";
6
+
7
+ export { LoginForm_default as default };
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as Logout_default } from "./Logout-CIAoXyOg.js";
6
+
7
+ export { Logout_default as default };
@@ -1,5 +1,5 @@
1
- import { l as useUserSessionStore } from "./useRpcAuth-rmHf7bYx.js";
2
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { l as useUserSessionStore } from "./useRpcAuth-x5Gn5gR0.js";
2
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
3
3
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
4
  import { r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
5
5
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, onMounted, openBlock, ref, toDisplayString, withCtx } from "vue";
@@ -68,4 +68,4 @@ var Logout_default = _sfc_main;
68
68
 
69
69
  //#endregion
70
70
  export { Logout_default as t };
71
- //# sourceMappingURL=Logout-YgTgOFUH.js.map
71
+ //# sourceMappingURL=Logout-CIAoXyOg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Logout-YgTgOFUH.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
+ {"version":3,"file":"Logout-CIAoXyOg.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,4 +1,4 @@
1
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
2
2
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
3
3
  import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
4
  import { t as mfaSetupConfirmSchemaWithMetadata } from "./mfaSchema-BnRWf0ma.js";
@@ -110,4 +110,4 @@ var MfaSetup_default = _sfc_main;
110
110
 
111
111
  //#endregion
112
112
  export { MfaSetup_default as t };
113
- //# sourceMappingURL=MfaSetup-RtFMY_dj.js.map
113
+ //# sourceMappingURL=MfaSetup-9qdTKQ0m.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MfaSetup-RtFMY_dj.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 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 const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\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;AAClB,OAAI,KAAK,eAAe,OACtB,OAAM,QACJ,sHACD;OAED,OAAM,QAAQ,8CAA8C;GAE9D,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;;EAG/B,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"}
1
+ {"version":3,"file":"MfaSetup-9qdTKQ0m.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 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 const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\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;AAClB,OAAI,KAAK,eAAe,OACtB,OAAM,QACJ,sHACD;OAED,OAAM,QAAQ,8CAA8C;GAE9D,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;;EAG/B,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"}
@@ -0,0 +1,8 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import "./mfaSchema-BnRWf0ma.js";
6
+ import { t as MfaSetup_default } from "./MfaSetup-9qdTKQ0m.js";
7
+
8
+ export { MfaSetup_default as default };
@@ -1,5 +1,5 @@
1
- import { l as useUserSessionStore } from "./useRpcAuth-rmHf7bYx.js";
2
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { l as useUserSessionStore } from "./useRpcAuth-x5Gn5gR0.js";
2
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
3
3
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
4
  import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
5
5
  import { n as mfaVerifySchemaWithMetadata } from "./mfaSchema-BnRWf0ma.js";
@@ -83,4 +83,4 @@ var MfaVerify_default = _sfc_main;
83
83
 
84
84
  //#endregion
85
85
  export { MfaVerify_default as t };
86
- //# sourceMappingURL=MfaVerify-Cvhe8bEM.js.map
86
+ //# sourceMappingURL=MfaVerify-Cgta1nE9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MfaVerify-Cvhe8bEM.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"}
1
+ {"version":3,"file":"MfaVerify-Cgta1nE9.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"}
@@ -0,0 +1,8 @@
1
+ import "./useRpcAuth-x5Gn5gR0.js";
2
+ import "./useQueryCache-DkRwK5Gz.js";
3
+ import "./useMutation-BMZJLpgx.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import "./mfaSchema-BnRWf0ma.js";
6
+ import { t as MfaVerify_default } from "./MfaVerify-Cgta1nE9.js";
7
+
8
+ export { MfaVerify_default as default };
@@ -1,4 +1,4 @@
1
- import { t as useMutation } from "./useMutation-BTsyHKyn.js";
1
+ import { t as useMutation } from "./useMutation-BMZJLpgx.js";
2
2
  import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
3
3
  import { o as withReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
@@ -89,4 +89,4 @@ var ResetPassword_default = _sfc_main;
89
89
 
90
90
  //#endregion
91
91
  export { resetPasswordSchemaWithMetadata as n, ResetPassword_default as t };
92
- //# sourceMappingURL=ResetPassword-BE4mXK9q.js.map
92
+ //# sourceMappingURL=ResetPassword-DHUfERyS.js.map