@dragonmastery/dragoncore-vue 0.0.29 → 0.0.31

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 (193) hide show
  1. package/dist/{ChangePasswordPage-C7rqJfii.js → ChangePasswordPage-D1LGJ02W.js} +1 -1
  2. package/dist/{ChangePasswordPage-nr0B06HB.js → ChangePasswordPage-Dy8lFUcI.js} +1 -1
  3. package/dist/{ChangePasswordPage-nr0B06HB.js.map → ChangePasswordPage-Dy8lFUcI.js.map} +1 -1
  4. package/dist/{ConsentFlowStep-DstxorHZ.js → ConsentRequired-Bhkxu0rv.js} +120 -12
  5. package/dist/ConsentRequired-Bhkxu0rv.js.map +1 -0
  6. package/dist/CreateTeamForm-BHgTTHAk.js +12 -0
  7. package/dist/{CreateTeamForm-DNkueBzR.js → CreateTeamForm-bpLbK18g.js} +4 -4
  8. package/dist/{CreateTeamForm-DNkueBzR.js.map → CreateTeamForm-bpLbK18g.js.map} +1 -1
  9. package/dist/{CreateTeamMemberForm-CSF-tD6B.js → CreateTeamMemberForm-CayF2tIJ.js} +5 -5
  10. package/dist/{CreateTeamMemberForm-ITp4XFn9.js → CreateTeamMemberForm-DeUyXnVa.js} +4 -4
  11. package/dist/{CreateTeamMemberForm-ITp4XFn9.js.map → CreateTeamMemberForm-DeUyXnVa.js.map} +1 -1
  12. package/dist/{CreateUserPage-DNi45YF4.js → CreateUserPage-C9uOeYDJ.js} +1 -1
  13. package/dist/{CreateUserPage-1WiLNGr_.js → CreateUserPage-CqKcY7_X.js} +1 -1
  14. package/dist/{CreateUserPage-1WiLNGr_.js.map → CreateUserPage-CqKcY7_X.js.map} +1 -1
  15. package/dist/{CreditBalanceDashboard-CLQ8NZnY.js → CreditBalanceDashboard-BEsOr0Rw.js} +2 -2
  16. package/dist/{CreditBalanceDashboard-CLQ8NZnY.js.map → CreditBalanceDashboard-BEsOr0Rw.js.map} +1 -1
  17. package/dist/{CreditBalanceDashboard-jdvZa-ZT.js → CreditBalanceDashboard-DZQqekKa.js} +5 -5
  18. package/dist/{CreditManagement-DvGikLLe.js → CreditManagement-ByFH6IHV.js} +5 -5
  19. package/dist/{CreditManagement-Dus4O1BY.js → CreditManagement-DiVSMbWZ.js} +2 -2
  20. package/dist/{CreditManagement-Dus4O1BY.js.map → CreditManagement-DiVSMbWZ.js.map} +1 -1
  21. package/dist/{CreditTransactionHistory-BZZGQxTV.js → CreditTransactionHistory-mcacl2xG.js} +3 -3
  22. package/dist/{CreditTransactionHistory-BZZGQxTV.js.map → CreditTransactionHistory-mcacl2xG.js.map} +1 -1
  23. package/dist/{CustomerCreateSupportTicketForm-C3CgjqXg.js → CustomerCreateSupportTicketForm-CroUyX15.js} +5 -5
  24. package/dist/{CustomerCreateSupportTicketForm-CeG8IKA1.js → CustomerCreateSupportTicketForm-IefplMnK.js} +3 -3
  25. package/dist/{CustomerCreateSupportTicketForm-CeG8IKA1.js.map → CustomerCreateSupportTicketForm-IefplMnK.js.map} +1 -1
  26. package/dist/{CustomerSupportTicketDetailPage-CUkf9swo.js → CustomerSupportTicketDetailPage-Dengb4Zx.js} +5 -5
  27. package/dist/{CustomerSupportTicketDetailPage-CUkf9swo.js.map → CustomerSupportTicketDetailPage-Dengb4Zx.js.map} +1 -1
  28. package/dist/CustomerSupportTicketList-CpOaBgNr.js +64 -0
  29. package/dist/{CustomerSupportTicketParent-D19kei4H.js → CustomerSupportTicketParent-D3Gj4Hel.js} +2 -2
  30. package/dist/{CustomerSupportTicketParent-BaKfkSlU.js → CustomerSupportTicketParent-rl4Ym8oa.js} +3 -3
  31. package/dist/{CustomerSupportTicketParent-BaKfkSlU.js.map → CustomerSupportTicketParent-rl4Ym8oa.js.map} +1 -1
  32. package/dist/{CustomerSupportTicketSuccess-ca10puM-.js → CustomerSupportTicketSuccess-BPUwEn4h.js} +4 -4
  33. package/dist/{CustomerSupportTicketSuccess-Cc75m_p-.js → CustomerSupportTicketSuccess-RQskseXP.js} +2 -2
  34. package/dist/{CustomerSupportTicketSuccess-Cc75m_p-.js.map → CustomerSupportTicketSuccess-RQskseXP.js.map} +1 -1
  35. package/dist/{DefaultReferralTeamPage-fO3tmwOb.js → DefaultReferralTeamPage-Be7-RI3s.js} +2 -2
  36. package/dist/{DefaultReferralTeamPage-fO3tmwOb.js.map → DefaultReferralTeamPage-Be7-RI3s.js.map} +1 -1
  37. package/dist/EditTeamForm-KX2cNn24.js +12 -0
  38. package/dist/{EditTeamForm-DdvKHlNj.js → EditTeamForm-RBO99ocN.js} +4 -4
  39. package/dist/{EditTeamForm-DdvKHlNj.js.map → EditTeamForm-RBO99ocN.js.map} +1 -1
  40. package/dist/{EditTeamMemberForm-CIqEjFF8.js → EditTeamMemberForm-Bh6zVNyJ.js} +3 -3
  41. package/dist/{EditTeamMemberForm-Fyf8Zxfh.js → EditTeamMemberForm-D9cofrUM.js} +3 -3
  42. package/dist/{EditTeamMemberForm-Fyf8Zxfh.js.map → EditTeamMemberForm-D9cofrUM.js.map} +1 -1
  43. package/dist/{TeamNotesTab-BnkgZd-5.js → EditUserPage-AcRFhChk.js} +2 -2
  44. package/dist/{EditUserPage-BBzGmOrx.js → EditUserPage-DGuV8pzp.js} +2 -2
  45. package/dist/{EditUserPage-BBzGmOrx.js.map → EditUserPage-DGuV8pzp.js.map} +1 -1
  46. package/dist/{ExternalLinkIcon-FidcmNOa.js → ExternalLinkIcon-BKVV5Gjm.js} +1 -1
  47. package/dist/{ExternalLinkIcon-FidcmNOa.js.map → ExternalLinkIcon-BKVV5Gjm.js.map} +1 -1
  48. package/dist/{FieldsetSection-CH1jAwcc.js → FieldsetSection-Br_sygWW.js} +1 -1
  49. package/dist/{FieldsetSection-CH1jAwcc.js.map → FieldsetSection-Br_sygWW.js.map} +1 -1
  50. package/dist/{ForgotPassword-Dd-E3_o1.js → ForgotPassword-DZ-d8rWX.js} +2 -2
  51. package/dist/{ForgotPassword-Dd-E3_o1.js.map → ForgotPassword-DZ-d8rWX.js.map} +1 -1
  52. package/dist/{ForgotPassword-BhmO5Lfd.js → ForgotPassword-LnjRUIY7.js} +1 -1
  53. package/dist/{LoginForm-CFADKiln.js → LoginForm-D-gfB2hS.js} +1 -1
  54. package/dist/{LoginForm-CSMHsZrq.js → LoginForm-DEgTB9RF.js} +2 -2
  55. package/dist/{LoginForm-CSMHsZrq.js.map → LoginForm-DEgTB9RF.js.map} +1 -1
  56. package/dist/{Logout-Bdktl4NZ.js → Logout-Bb2xe5BM.js} +2 -2
  57. package/dist/{Logout-Bdktl4NZ.js.map → Logout-Bb2xe5BM.js.map} +1 -1
  58. package/dist/{Logout-CmKJK14I.js → Logout-Ctq-a1GS.js} +1 -1
  59. package/dist/{MfaSetup-BtfQXhLn.js → MfaSetup-6E6apXWC.js} +2 -2
  60. package/dist/{MfaSetup-Bjc3v0hs.js → MfaSetup-m080C6iX.js} +3 -3
  61. package/dist/{MfaSetup-Bjc3v0hs.js.map → MfaSetup-m080C6iX.js.map} +1 -1
  62. package/dist/{MfaVerify-SUfSRf4m.js → MfaVerify-C95WB9v2.js} +2 -2
  63. package/dist/{MfaVerify-uJlPz8xg.js → MfaVerify-D8Ch-8hN.js} +3 -3
  64. package/dist/{MfaVerify-uJlPz8xg.js.map → MfaVerify-D8Ch-8hN.js.map} +1 -1
  65. package/dist/{RecordVersionViewer-NLn1gVys.js → RecordVersionViewer-DKIdX_BX.js} +1 -1
  66. package/dist/{RecordVersionViewer-NLn1gVys.js.map → RecordVersionViewer-DKIdX_BX.js.map} +1 -1
  67. package/dist/{ResetPassword-Dz2N3pH4.js → ResetPassword-9DFz-Qt3.js} +1 -1
  68. package/dist/{ResetPassword-CyizBRob.js → ResetPassword-DflPd8Qg.js} +2 -2
  69. package/dist/{ResetPassword-CyizBRob.js.map → ResetPassword-DflPd8Qg.js.map} +1 -1
  70. package/dist/{SavedFiltersPage-B9aQYpwf.js → SavedFiltersPage-ey8wOr0T.js} +53 -53
  71. package/dist/{SavedFiltersPage-B9aQYpwf.js.map → SavedFiltersPage-ey8wOr0T.js.map} +1 -1
  72. package/dist/Signup-C052ykf5.js +9 -0
  73. package/dist/{Signup-EykiX-bQ.js → Signup-KuiKHB4h.js} +13 -29
  74. package/dist/Signup-KuiKHB4h.js.map +1 -0
  75. package/dist/{SignupRequirementsPage-CohJluxQ.js → SignupRequirementsPage-CwnsnQKb.js} +4 -4
  76. package/dist/{SignupRequirementsPage-CohJluxQ.js.map → SignupRequirementsPage-CwnsnQKb.js.map} +1 -1
  77. package/dist/{StaffCreateSupportTicketForm-ANtaO4pe.js → StaffCreateSupportTicketForm-75Bo0jdz.js} +4 -4
  78. package/dist/{StaffCreateSupportTicketForm-ANtaO4pe.js.map → StaffCreateSupportTicketForm-75Bo0jdz.js.map} +1 -1
  79. package/dist/{StaffCreateSupportTicketForm-CtU12OGq.js → StaffCreateSupportTicketForm-DYEddYii.js} +5 -5
  80. package/dist/{StaffSupportTicketDetailPage-B63QXyum.js → StaffSupportTicketDetailPage-6VyPNdw7.js} +7 -7
  81. package/dist/{StaffSupportTicketDetailPage-B63QXyum.js.map → StaffSupportTicketDetailPage-6VyPNdw7.js.map} +1 -1
  82. package/dist/StaffSupportTicketList-CxV6u2gF.js +64 -0
  83. package/dist/{StaffSupportTicketParent-yoC-_Lku.js → StaffSupportTicketParent-DPvdLUii.js} +3 -3
  84. package/dist/{StaffSupportTicketParent-yoC-_Lku.js.map → StaffSupportTicketParent-DPvdLUii.js.map} +1 -1
  85. package/dist/{StaffSupportTicketParent-ByUwsYGx.js → StaffSupportTicketParent-Dyybqx74.js} +2 -2
  86. package/dist/{StaffSupportTicketSuccess-CB4Oa_2J.js → StaffSupportTicketSuccess-BYoBXx1i.js} +2 -2
  87. package/dist/{StaffSupportTicketSuccess-CB4Oa_2J.js.map → StaffSupportTicketSuccess-BYoBXx1i.js.map} +1 -1
  88. package/dist/{StaffSupportTicketSuccess-BMh5amWI.js → StaffSupportTicketSuccess-FfnJXc_k.js} +4 -4
  89. package/dist/{SupportStaffPage-CkFLlle4.js → SupportStaffPage-CLxWU628.js} +3 -3
  90. package/dist/{SupportStaffPage-CkFLlle4.js.map → SupportStaffPage-CLxWU628.js.map} +1 -1
  91. package/dist/{SupportTicketDevLifecycleBadge-BYKZjEv6.js → SupportTicketDevLifecycleBadge-D8-Cv1Np.js} +1 -1
  92. package/dist/{SupportTicketDevLifecycleBadge-BYKZjEv6.js.map → SupportTicketDevLifecycleBadge-D8-Cv1Np.js.map} +1 -1
  93. package/dist/{SupportTicketMaintenancePage-CEKi8xQB.js → SupportTicketMaintenancePage-B07avInx.js} +1 -1
  94. package/dist/{SupportTicketMaintenancePage-CEKi8xQB.js.map → SupportTicketMaintenancePage-B07avInx.js.map} +1 -1
  95. package/dist/TeamAttachmentsTab-D0DOmdnr.js +64 -0
  96. package/dist/{TeamHistoryTab-p3hDxCc3.js → TeamHistoryTab-CxzA4u_G.js} +3 -3
  97. package/dist/{TeamHistoryTab-p3hDxCc3.js.map → TeamHistoryTab-CxzA4u_G.js.map} +1 -1
  98. package/dist/TeamHistoryTab-wRpRizDE.js +6 -0
  99. package/dist/{TeamList-B4gWPzce.js → TeamList-DXQj_Omo.js} +3 -3
  100. package/dist/{TeamList-B4gWPzce.js.map → TeamList-DXQj_Omo.js.map} +1 -1
  101. package/dist/TeamList-hmP44hfw.js +8 -0
  102. package/dist/TeamMemberList-B16SuLwM.js +7 -0
  103. package/dist/{TeamMemberList-D0-dM5kI.js → TeamMemberList-BYUANoBg.js} +3 -3
  104. package/dist/{TeamMemberList-D0-dM5kI.js.map → TeamMemberList-BYUANoBg.js.map} +1 -1
  105. package/dist/{TeamMemberParent-C9OEziOK.js → TeamMemberParent-BJl8nBmP.js} +4 -4
  106. package/dist/{TeamMemberParent-CJGWXjuM.js → TeamMemberParent-DmYcHU3n.js} +3 -3
  107. package/dist/{TeamMemberParent-CJGWXjuM.js.map → TeamMemberParent-DmYcHU3n.js.map} +1 -1
  108. package/dist/{EditUserPage-D3AWaHT2.js → TeamNotesTab-BQN9niw-.js} +2 -2
  109. package/dist/{TeamNotesTab-DPw9YEwK.js → TeamNotesTab-Cego-QT3.js} +2 -2
  110. package/dist/{TeamNotesTab-DPw9YEwK.js.map → TeamNotesTab-Cego-QT3.js.map} +1 -1
  111. package/dist/{TeamParent-KQmJgJ9x.js → TeamParent-6JhqsYaO.js} +3 -3
  112. package/dist/{TeamParent-KQmJgJ9x.js.map → TeamParent-6JhqsYaO.js.map} +1 -1
  113. package/dist/TeamParent-BI9ItLoY.js +11 -0
  114. package/dist/{TimelineNoteInput-DXZhcUkH.js → TimelineNoteInput-P3ycD18j.js} +2 -2
  115. package/dist/{TimelineNoteInput-DXZhcUkH.js.map → TimelineNoteInput-P3ycD18j.js.map} +1 -1
  116. package/dist/{TimelineSystemEvent-Ch1sZiyO.js → TimelineSystemEvent-D5fkhkZT.js} +1 -1
  117. package/dist/{TimelineSystemEvent-Ch1sZiyO.js.map → TimelineSystemEvent-D5fkhkZT.js.map} +1 -1
  118. package/dist/UserListPage-9jhUu3TH.js +5 -0
  119. package/dist/{UserListPage-A0_eNpQ1.js → UserListPage-DelzxCID.js} +2 -2
  120. package/dist/{UserListPage-A0_eNpQ1.js.map → UserListPage-DelzxCID.js.map} +1 -1
  121. package/dist/{UserProfilePage-FNLYK9kj.js → UserProfilePage-BYitd7QV.js} +1 -1
  122. package/dist/{UserProfilePage-FNLYK9kj.js.map → UserProfilePage-BYitd7QV.js.map} +1 -1
  123. package/dist/{UserProfilePage-BWK97ODt.js → UserProfilePage-Dmxp7oqP.js} +1 -1
  124. package/dist/{VerifyEmail-BVwHQpbw.js → VerifyEmail-Cy2s4yP0.js} +3 -3
  125. package/dist/{VerifyEmail-BVwHQpbw.js.map → VerifyEmail-Cy2s4yP0.js.map} +1 -1
  126. package/dist/{VerifyEmail-BYYsE-M_.js → VerifyEmail-DBKMZJMx.js} +2 -2
  127. package/dist/{ViewTeam-BV7SjH8R.js → ViewTeam-ByZdYEJG.js} +4 -4
  128. package/dist/{ViewTeam-BV7SjH8R.js.map → ViewTeam-ByZdYEJG.js.map} +1 -1
  129. package/dist/ViewTeam-DEOe7wqT.js +8 -0
  130. package/dist/ViewTeamMember-B5U8kZBw.js +7 -0
  131. package/dist/{ViewTeamMember-Cf5yXdv6.js → ViewTeamMember-DqWZ3F_h.js} +4 -4
  132. package/dist/{ViewTeamMember-Cf5yXdv6.js.map → ViewTeamMember-DqWZ3F_h.js.map} +1 -1
  133. package/dist/{ZiniaContainer-BV6sojLa.js → ZiniaContainer-BPIfQOc7.js} +1 -1
  134. package/dist/{ZiniaContainer-BV6sojLa.js.map → ZiniaContainer-BPIfQOc7.js.map} +1 -1
  135. package/dist/{convertToLocalDateTime-C13-PrSA.js → convertToLocalDateTime-BKBxm2Rc.js} +1 -1
  136. package/dist/{convertToLocalDateTime-C13-PrSA.js.map → convertToLocalDateTime-BKBxm2Rc.js.map} +1 -1
  137. package/dist/{customerSupportTicketRoutes-_HjQcEAD.js → customerSupportTicketRoutes-DvfXGaSC.js} +8 -8
  138. package/dist/{customerSupportTicketRoutes-_HjQcEAD.js.map → customerSupportTicketRoutes-DvfXGaSC.js.map} +1 -1
  139. package/dist/{displayIdFormatter-Cr-QaEk1.js → displayIdFormatter-Ca4Al9iB.js} +1 -1
  140. package/dist/{displayIdFormatter-Cr-QaEk1.js.map → displayIdFormatter-Ca4Al9iB.js.map} +1 -1
  141. package/dist/{extractRpcErrorMessage-CAaeVysa.js → extractRpcErrorMessage-Df8-CJGV.js} +1 -1
  142. package/dist/{extractRpcErrorMessage-CAaeVysa.js.map → extractRpcErrorMessage-Df8-CJGV.js.map} +1 -1
  143. package/dist/index.d.ts +862 -857
  144. package/dist/index.js +56 -56
  145. package/dist/{mfaSchema-C6PatIbY.js → mfaSchema-Ukqzdyck.js} +1 -1
  146. package/dist/{mfaSchema-C6PatIbY.js.map → mfaSchema-Ukqzdyck.js.map} +1 -1
  147. package/dist/{saved_filter-C6YHkEMV.js → saved_filter-erjEgsdK.js} +3 -3
  148. package/dist/{saved_filter-C6YHkEMV.js.map → saved_filter-erjEgsdK.js.map} +1 -1
  149. package/dist/{src-BIX3mMjo.js → src-DSF_hIBe.js} +39 -67
  150. package/dist/src-DSF_hIBe.js.map +1 -0
  151. package/dist/{staffSupportTicketRoutes-WPaItK5S.js → staffSupportTicketRoutes-73ceKhL-.js} +8 -8
  152. package/dist/{staffSupportTicketRoutes-WPaItK5S.js.map → staffSupportTicketRoutes-73ceKhL-.js.map} +1 -1
  153. package/dist/{teamMemberMetadata-DX0W-B7p.js → teamMemberMetadata-C4urCwBU.js} +1 -1
  154. package/dist/{teamMemberMetadata-DX0W-B7p.js.map → teamMemberMetadata-C4urCwBU.js.map} +1 -1
  155. package/dist/{teamMetadata-26Mwjb2i.js → teamMetadata-NTjPt89L.js} +1 -1
  156. package/dist/{teamMetadata-26Mwjb2i.js.map → teamMetadata-NTjPt89L.js.map} +1 -1
  157. package/dist/{teamRoutes-CQWRPy3J.js → teamRoutes-CSBq1DNq.js} +12 -12
  158. package/dist/{teamRoutes-CQWRPy3J.js.map → teamRoutes-CSBq1DNq.js.map} +1 -1
  159. package/dist/{team_memberRoutes-Cxgte_vj.js → team_memberRoutes-BgjY9Kwq.js} +7 -7
  160. package/dist/{team_memberRoutes-Cxgte_vj.js.map → team_memberRoutes-BgjY9Kwq.js.map} +1 -1
  161. package/dist/{useBreadcrumbs-DIqU5AAp.js → useBreadcrumbs-CPWXm0hm.js} +1 -1
  162. package/dist/{useBreadcrumbs-DIqU5AAp.js.map → useBreadcrumbs-CPWXm0hm.js.map} +1 -1
  163. package/dist/{useEmailVerificationChannel-C4bvvG2b.js → useEmailVerificationChannel-C76Gnyi1.js} +2 -2
  164. package/dist/{useEmailVerificationChannel-C4bvvG2b.js.map → useEmailVerificationChannel-C76Gnyi1.js.map} +1 -1
  165. package/dist/{useReturnUrl-B5V3SJf5.js → useReturnUrl-DnezAxBA.js} +2 -10
  166. package/dist/{useReturnUrl-B5V3SJf5.js.map → useReturnUrl-DnezAxBA.js.map} +1 -1
  167. package/dist/{userAuthorized-klLUHGxT.js → userAuthorized-3RiCDXxr.js} +1 -1
  168. package/dist/{userAuthorized-klLUHGxT.js.map → userAuthorized-3RiCDXxr.js.map} +1 -1
  169. package/package.json +2 -2
  170. package/dist/ConsentFlowStep-DstxorHZ.js.map +0 -1
  171. package/dist/ConsentRequired-ELUidmNv.js +0 -114
  172. package/dist/ConsentRequired-ELUidmNv.js.map +0 -1
  173. package/dist/CreateTeamForm-CCfgSWUA.js +0 -12
  174. package/dist/CustomerSupportTicketList-D1pcZzcX.js +0 -64
  175. package/dist/EditTeamForm-BzTAypZT.js +0 -12
  176. package/dist/Signup-Ceh7XSea.js +0 -9
  177. package/dist/Signup-EykiX-bQ.js.map +0 -1
  178. package/dist/SignupConsentFlow-CRtiMpcS.js +0 -220
  179. package/dist/SignupConsentFlow-CRtiMpcS.js.map +0 -1
  180. package/dist/StaffSupportTicketList-CqK8PVq4.js +0 -64
  181. package/dist/TeamAttachmentsTab-BG_K7uwG.js +0 -64
  182. package/dist/TeamHistoryTab-BSEOYC_5.js +0 -6
  183. package/dist/TeamList-iAH9mOdd.js +0 -8
  184. package/dist/TeamMemberList-uwSe9zdv.js +0 -7
  185. package/dist/TeamParent-D_IbzH8B.js +0 -11
  186. package/dist/UserListPage-CjpxiETO.js +0 -5
  187. package/dist/ViewTeam-BvLIv9Dd.js +0 -8
  188. package/dist/ViewTeamMember-DtQCZU-X.js +0 -7
  189. package/dist/signupConsentStorage-foqtLkIk.js +0 -27
  190. package/dist/signupConsentStorage-foqtLkIk.js.map +0 -1
  191. package/dist/src-BIX3mMjo.js.map +0 -1
  192. /package/dist/{Appearance-CHCv4Fd1.js → Appearance-BhzkZJOL.js} +0 -0
  193. /package/dist/{TeamMembersTab-CeOJAhhR.js → TeamMembersTab-D7y2nV__.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { o as createLastUsedPresetGuard } from "./saved_filter-C6YHkEMV.js";
2
- import { c as userAuthenticated, s as staffOnly } from "./userAuthorized-klLUHGxT.js";
1
+ import { o as createLastUsedPresetGuard } from "./saved_filter-erjEgsdK.js";
2
+ import { c as userAuthenticated, s as staffOnly } from "./userAuthorized-3RiCDXxr.js";
3
3
 
4
4
  //#region src/slices/support_ticket/staff/staffSupportTicketRoutes.ts
5
5
  const staffListPresetGuard = createLastUsedPresetGuard("support_ticket_staff", "StaffSupportTicketList");
@@ -60,7 +60,7 @@ const staffSupportTicketRoutes = [{
60
60
  {
61
61
  path: staffSupportPaths.staff_list.path,
62
62
  name: staffSupportPaths.staff_list.name,
63
- component: () => import("./StaffSupportTicketList-CqK8PVq4.js"),
63
+ component: () => import("./StaffSupportTicketList-CxV6u2gF.js"),
64
64
  beforeEnter: (to) => staffListPresetGuard(to),
65
65
  meta: {
66
66
  title: "Manage Support",
@@ -74,7 +74,7 @@ const staffSupportTicketRoutes = [{
74
74
  {
75
75
  path: staffSupportPaths.staff_create.path,
76
76
  name: staffSupportPaths.staff_create.name,
77
- component: () => import("./StaffCreateSupportTicketForm-CtU12OGq.js"),
77
+ component: () => import("./StaffCreateSupportTicketForm-DYEddYii.js"),
78
78
  meta: {
79
79
  title: "Create Support Ticket",
80
80
  description: "Create new support ticket item",
@@ -90,7 +90,7 @@ const staffSupportTicketRoutes = [{
90
90
  {
91
91
  path: staffSupportPaths.staff_create_success.path,
92
92
  name: staffSupportPaths.staff_create_success.name,
93
- component: () => import("./StaffSupportTicketSuccess-BMh5amWI.js"),
93
+ component: () => import("./StaffSupportTicketSuccess-FfnJXc_k.js"),
94
94
  meta: {
95
95
  title: "Support Ticket Created",
96
96
  description: "Support ticket created successfully",
@@ -112,7 +112,7 @@ const staffSupportTicketRoutes = [{
112
112
  },
113
113
  {
114
114
  path: staffSupportPaths.staff_edit.path,
115
- component: () => import("./StaffSupportTicketParent-ByUwsYGx.js"),
115
+ component: () => import("./StaffSupportTicketParent-Dyybqx74.js"),
116
116
  meta: {
117
117
  title: "View Support Ticket",
118
118
  description: "View support ticket details"
@@ -120,7 +120,7 @@ const staffSupportTicketRoutes = [{
120
120
  children: [{
121
121
  path: "",
122
122
  name: staffSupportPaths.staff_edit.name,
123
- component: () => import("./StaffSupportTicketDetailPage-B63QXyum.js"),
123
+ component: () => import("./StaffSupportTicketDetailPage-6VyPNdw7.js"),
124
124
  meta: {
125
125
  title: "View Support Ticket",
126
126
  description: "View support ticket details"
@@ -132,4 +132,4 @@ const staffSupportTicketRoutes = [{
132
132
 
133
133
  //#endregion
134
134
  export { staffSupportTicketRoutes as n, staffSupportPaths as t };
135
- //# sourceMappingURL=staffSupportTicketRoutes-WPaItK5S.js.map
135
+ //# sourceMappingURL=staffSupportTicketRoutes-73ceKhL-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"staffSupportTicketRoutes-WPaItK5S.js","names":["staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/support_ticket/staff/staffSupportTicketRoutes.ts"],"sourcesContent":["import { createLastUsedPresetGuard } from '../../../slices/saved_filter';\nimport { staffOnly, userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nconst staffListPresetGuard = createLastUsedPresetGuard('support_ticket_staff', 'StaffSupportTicketList');\n\nexport const staffSupportPaths = {\n staff_list: {\n path: '',\n full_path: '/staff/support',\n name: 'StaffSupportTicketList',\n },\n staff_create: {\n path: 'create',\n full_path: '/staff/support/create',\n name: 'StaffCreateSupportTicket',\n },\n staff_create_success: {\n path: 'create/success',\n full_path: '/staff/support/create/success',\n name: 'StaffSupportTicketSuccess',\n },\n staff_edit: {\n path: ':id',\n full_path: '/staff/support/:id',\n name: 'StaffEditSupportTicket',\n },\n staff_workflow: {\n path: 'workflow',\n full_path: '/staff/support/:id/workflow',\n name: 'StaffSupportTicketWorkflow',\n },\n staff_customer_notes: {\n path: 'customer-notes',\n full_path: '/staff/support/:id/customer-notes',\n name: 'StaffSupportTicketCustomerNotes',\n },\n staff_internal_notes: {\n path: 'internal-notes',\n full_path: '/staff/support/:id/internal-notes',\n name: 'StaffSupportTicketInternalNotes',\n },\n staff_history: {\n path: 'history',\n full_path: '/staff/support/:id/history',\n name: 'StaffSupportTicketHistory',\n },\n staff_attachments: {\n path: 'attachments',\n full_path: '/staff/support/:id/attachments',\n name: 'StaffSupportTicketAttachments',\n },\n} as const;\n\nexport const staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/staff/support',\n name: 'StaffSupportTicket',\n redirect: { name: staffSupportPaths.staff_list.name },\n beforeEnter: [userAuthenticated, staffOnly],\n meta: {},\n children: [\n {\n path: staffSupportPaths.staff_list.path,\n name: staffSupportPaths.staff_list.name,\n component: () => import('./StaffSupportTicketList.vue'),\n beforeEnter: (to) => staffListPresetGuard(to),\n meta: {\n title: 'Manage Support',\n description: 'Admin support ticket management',\n side_bar: {\n section: ' Staff',\n visible_to: ['staff', 'super_admin'],\n },\n },\n },\n {\n path: staffSupportPaths.staff_create.path,\n name: staffSupportPaths.staff_create.name,\n component: () => import('./StaffCreateSupportTicketForm.vue'),\n meta: {\n title: 'Create Support Ticket',\n description: 'Create new support ticket item',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_create_success.path,\n name: staffSupportPaths.staff_create_success.name,\n component: () => import('./StaffSupportTicketSuccess.vue'),\n meta: {\n title: 'Support Ticket Created',\n description: 'Support ticket created successfully',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n {\n label: 'Success',\n to: { name: staffSupportPaths.staff_create_success.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_edit.path,\n component: () => import('./StaffSupportTicketParent.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n children: [\n {\n path: '',\n name: staffSupportPaths.staff_edit.name,\n component: () => import('./StaffSupportTicketDetailPage.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n },\n ],\n },\n ],\n },\n];\n"],"mappings":";;;;AAIA,MAAM,uBAAuB,0BAA0B,wBAAwB,yBAAyB;AAExG,MAAa,oBAAoB;CAC/B,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,cAAc;EACZ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,gBAAgB;EACd,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,eAAe;EACb,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,mBAAmB;EACjB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,2BAA0D,CACrE;CACE,MAAM;CACN,MAAM;CACN,UAAU,EAAE,MAAM,kBAAkB,WAAW,MAAM;CACrD,aAAa,CAAC,mBAAmB,UAAU;CAC3C,MAAM,EAAE;CACR,UAAU;EACR;GACE,MAAM,kBAAkB,WAAW;GACnC,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,cAAc,OAAO,qBAAqB,GAAG;GAC7C,MAAM;IACJ,OAAO;IACP,aAAa;IACb,UAAU;KACR,SAAS;KACT,YAAY,CAAC,SAAS,cAAc;KACrC;IACF;GACF;EACD;GACE,MAAM,kBAAkB,aAAa;GACrC,MAAM,kBAAkB,aAAa;GACrC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa,CACX;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;KAChD,EACD;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;KAClD,CACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,qBAAqB;GAC7C,MAAM,kBAAkB,qBAAqB;GAC7C,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa;KACX;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;MAChD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;MAClD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,qBAAqB,MAAM;MAC1D;KACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACd;GACD,UAAU,CACR;IACE,MAAM;IACN,MAAM,kBAAkB,WAAW;IACnC,iBAAiB,OAAO;IACxB,MAAM;KACJ,OAAO;KACP,aAAa;KACd;IACF,CACF;GACF;EACF;CACF,CACF"}
1
+ {"version":3,"file":"staffSupportTicketRoutes-73ceKhL-.js","names":["staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/support_ticket/staff/staffSupportTicketRoutes.ts"],"sourcesContent":["import { createLastUsedPresetGuard } from '../../../slices/saved_filter';\nimport { staffOnly, userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nconst staffListPresetGuard = createLastUsedPresetGuard('support_ticket_staff', 'StaffSupportTicketList');\n\nexport const staffSupportPaths = {\n staff_list: {\n path: '',\n full_path: '/staff/support',\n name: 'StaffSupportTicketList',\n },\n staff_create: {\n path: 'create',\n full_path: '/staff/support/create',\n name: 'StaffCreateSupportTicket',\n },\n staff_create_success: {\n path: 'create/success',\n full_path: '/staff/support/create/success',\n name: 'StaffSupportTicketSuccess',\n },\n staff_edit: {\n path: ':id',\n full_path: '/staff/support/:id',\n name: 'StaffEditSupportTicket',\n },\n staff_workflow: {\n path: 'workflow',\n full_path: '/staff/support/:id/workflow',\n name: 'StaffSupportTicketWorkflow',\n },\n staff_customer_notes: {\n path: 'customer-notes',\n full_path: '/staff/support/:id/customer-notes',\n name: 'StaffSupportTicketCustomerNotes',\n },\n staff_internal_notes: {\n path: 'internal-notes',\n full_path: '/staff/support/:id/internal-notes',\n name: 'StaffSupportTicketInternalNotes',\n },\n staff_history: {\n path: 'history',\n full_path: '/staff/support/:id/history',\n name: 'StaffSupportTicketHistory',\n },\n staff_attachments: {\n path: 'attachments',\n full_path: '/staff/support/:id/attachments',\n name: 'StaffSupportTicketAttachments',\n },\n} as const;\n\nexport const staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/staff/support',\n name: 'StaffSupportTicket',\n redirect: { name: staffSupportPaths.staff_list.name },\n beforeEnter: [userAuthenticated, staffOnly],\n meta: {},\n children: [\n {\n path: staffSupportPaths.staff_list.path,\n name: staffSupportPaths.staff_list.name,\n component: () => import('./StaffSupportTicketList.vue'),\n beforeEnter: (to) => staffListPresetGuard(to),\n meta: {\n title: 'Manage Support',\n description: 'Admin support ticket management',\n side_bar: {\n section: ' Staff',\n visible_to: ['staff', 'super_admin'],\n },\n },\n },\n {\n path: staffSupportPaths.staff_create.path,\n name: staffSupportPaths.staff_create.name,\n component: () => import('./StaffCreateSupportTicketForm.vue'),\n meta: {\n title: 'Create Support Ticket',\n description: 'Create new support ticket item',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_create_success.path,\n name: staffSupportPaths.staff_create_success.name,\n component: () => import('./StaffSupportTicketSuccess.vue'),\n meta: {\n title: 'Support Ticket Created',\n description: 'Support ticket created successfully',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n {\n label: 'Success',\n to: { name: staffSupportPaths.staff_create_success.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_edit.path,\n component: () => import('./StaffSupportTicketParent.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n children: [\n {\n path: '',\n name: staffSupportPaths.staff_edit.name,\n component: () => import('./StaffSupportTicketDetailPage.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n },\n ],\n },\n ],\n },\n];\n"],"mappings":";;;;AAIA,MAAM,uBAAuB,0BAA0B,wBAAwB,yBAAyB;AAExG,MAAa,oBAAoB;CAC/B,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,cAAc;EACZ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,gBAAgB;EACd,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,eAAe;EACb,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,mBAAmB;EACjB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,2BAA0D,CACrE;CACE,MAAM;CACN,MAAM;CACN,UAAU,EAAE,MAAM,kBAAkB,WAAW,MAAM;CACrD,aAAa,CAAC,mBAAmB,UAAU;CAC3C,MAAM,EAAE;CACR,UAAU;EACR;GACE,MAAM,kBAAkB,WAAW;GACnC,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,cAAc,OAAO,qBAAqB,GAAG;GAC7C,MAAM;IACJ,OAAO;IACP,aAAa;IACb,UAAU;KACR,SAAS;KACT,YAAY,CAAC,SAAS,cAAc;KACrC;IACF;GACF;EACD;GACE,MAAM,kBAAkB,aAAa;GACrC,MAAM,kBAAkB,aAAa;GACrC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa,CACX;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;KAChD,EACD;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;KAClD,CACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,qBAAqB;GAC7C,MAAM,kBAAkB,qBAAqB;GAC7C,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa;KACX;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;MAChD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;MAClD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,qBAAqB,MAAM;MAC1D;KACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACd;GACD,UAAU,CACR;IACE,MAAM;IACN,MAAM,kBAAkB,WAAW;IACnC,iBAAiB,OAAO;IACxB,MAAM;KACJ,OAAO;KACP,aAAa;KACd;IACF,CACF;GACF;EACF;CACF,CACF"}
@@ -46,4 +46,4 @@ const teamMemberUpdateSchemaWithMetadata = withMetadata(TeamMemberUpdateSchema,
46
46
 
47
47
  //#endregion
48
48
  export { teamMemberUpdateSchemaWithMetadata as n, teamMemberCreateSchemaWithMetadata as t };
49
- //# sourceMappingURL=teamMemberMetadata-DX0W-B7p.js.map
49
+ //# sourceMappingURL=teamMemberMetadata-C4urCwBU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teamMemberMetadata-DX0W-B7p.js","names":[],"sources":["../src/slices/team/team_member/teamMemberMetadata.ts"],"sourcesContent":["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"],"mappings":";;;;;AAUA,MAAa,qCAAqC,aAChD,uBAAuB,KAAK,EAAE,SAAS,MAAM,CAAC,EAC9C,0BACA;CACE,SAAS;EACP,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACD,cAAc;EACZ,WAAW;EACX,aAAa;EACd;CACF,CACF;AAGD,MAAa,qCAAqC,aAChD,wBACA,0BACA;CACE,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACD,cAAc;EACZ,WAAW;EACX,aAAa;EACd;CACF,CACF"}
1
+ {"version":3,"file":"teamMemberMetadata-C4urCwBU.js","names":[],"sources":["../src/slices/team/team_member/teamMemberMetadata.ts"],"sourcesContent":["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"],"mappings":";;;;;AAUA,MAAa,qCAAqC,aAChD,uBAAuB,KAAK,EAAE,SAAS,MAAM,CAAC,EAC9C,0BACA;CACE,SAAS;EACP,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACD,cAAc;EACZ,WAAW;EACX,aAAa;EACd;CACF,CACF;AAGD,MAAa,qCAAqC,aAChD,wBACA,0BACA;CACE,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACD,cAAc;EACZ,WAAW;EACX,aAAa;EACd;CACF,CACF"}
@@ -50,4 +50,4 @@ const teamUpdateSchemaWithMetadata = withMetadata(TeamUpdateSchema, "teamUpdateS
50
50
 
51
51
  //#endregion
52
52
  export { teamUpdateSchemaWithMetadata as n, teamCreateSchemaWithMetadata as t };
53
- //# sourceMappingURL=teamMetadata-26Mwjb2i.js.map
53
+ //# sourceMappingURL=teamMetadata-NTjPt89L.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teamMetadata-26Mwjb2i.js","names":[],"sources":["../src/slices/team/teamMetadata.ts"],"sourcesContent":["import {\n type UseFormTyped,\n withMetadata,\n ZINIA_FIELDS_KEY,\n ZINIA_FORM_KEY,\n} from '@dragonmastery/zinia-forms-core';\nimport { TeamCreateSchema, TeamUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\n\n// Create schema (no ID)\nexport const teamCreateSchemaWithMetadata = withMetadata(\n TeamCreateSchema,\n 'teamCreateSchema',\n {\n description: {\n inputType: 'textarea',\n placeholder: 'Enter description',\n },\n contact_email: {\n inputType: 'email',\n placeholder: 'Enter contact email',\n },\n url: {\n inputType: 'text',\n placeholder: 'Enter URL',\n },\n email_sent_from: {\n inputType: 'email',\n placeholder: 'Enter sent from email',\n },\n email_reply_to: {\n inputType: 'email',\n placeholder: 'Enter reply to email',\n },\n },\n);\n\n// Update schema (with ID)\nexport const teamUpdateSchemaWithMetadata = withMetadata(\n TeamUpdateSchema,\n 'teamUpdateSchema',\n {\n description: {\n inputType: 'textarea',\n placeholder: 'Enter description',\n },\n contact_email: {\n inputType: 'email',\n placeholder: 'Enter contact email',\n },\n url: {\n inputType: 'text',\n placeholder: 'Enter URL',\n },\n email_sent_from: {\n inputType: 'email',\n placeholder: 'Enter sent from email',\n },\n email_reply_to: {\n inputType: 'email',\n placeholder: 'Enter reply to email',\n },\n },\n);\n\nexport type TeamCreateFormDto = UseFormTyped<typeof TeamCreateSchema>;\nexport type TeamUpdateFormDto = UseFormTyped<typeof TeamUpdateSchema>;\n\nexport const injectTeamCreateForm = () => inject<TeamCreateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamUpdateForm = () => inject<TeamUpdateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamZinia = () =>\n inject<TeamCreateFormDto['zinia'] | TeamUpdateFormDto['zinia']>(ZINIA_FIELDS_KEY);\n"],"mappings":";;;;;AAUA,MAAa,+BAA+B,aAC1C,kBACA,oBACA;CACE,aAAa;EACX,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,KAAK;EACH,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACF,CACF;AAGD,MAAa,+BAA+B,aAC1C,kBACA,oBACA;CACE,aAAa;EACX,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,KAAK;EACH,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACF,CACF"}
1
+ {"version":3,"file":"teamMetadata-NTjPt89L.js","names":[],"sources":["../src/slices/team/teamMetadata.ts"],"sourcesContent":["import {\n type UseFormTyped,\n withMetadata,\n ZINIA_FIELDS_KEY,\n ZINIA_FORM_KEY,\n} from '@dragonmastery/zinia-forms-core';\nimport { TeamCreateSchema, TeamUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\n\n// Create schema (no ID)\nexport const teamCreateSchemaWithMetadata = withMetadata(\n TeamCreateSchema,\n 'teamCreateSchema',\n {\n description: {\n inputType: 'textarea',\n placeholder: 'Enter description',\n },\n contact_email: {\n inputType: 'email',\n placeholder: 'Enter contact email',\n },\n url: {\n inputType: 'text',\n placeholder: 'Enter URL',\n },\n email_sent_from: {\n inputType: 'email',\n placeholder: 'Enter sent from email',\n },\n email_reply_to: {\n inputType: 'email',\n placeholder: 'Enter reply to email',\n },\n },\n);\n\n// Update schema (with ID)\nexport const teamUpdateSchemaWithMetadata = withMetadata(\n TeamUpdateSchema,\n 'teamUpdateSchema',\n {\n description: {\n inputType: 'textarea',\n placeholder: 'Enter description',\n },\n contact_email: {\n inputType: 'email',\n placeholder: 'Enter contact email',\n },\n url: {\n inputType: 'text',\n placeholder: 'Enter URL',\n },\n email_sent_from: {\n inputType: 'email',\n placeholder: 'Enter sent from email',\n },\n email_reply_to: {\n inputType: 'email',\n placeholder: 'Enter reply to email',\n },\n },\n);\n\nexport type TeamCreateFormDto = UseFormTyped<typeof TeamCreateSchema>;\nexport type TeamUpdateFormDto = UseFormTyped<typeof TeamUpdateSchema>;\n\nexport const injectTeamCreateForm = () => inject<TeamCreateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamUpdateForm = () => inject<TeamUpdateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamZinia = () =>\n inject<TeamCreateFormDto['zinia'] | TeamUpdateFormDto['zinia']>(ZINIA_FIELDS_KEY);\n"],"mappings":";;;;;AAUA,MAAa,+BAA+B,aAC1C,kBACA,oBACA;CACE,aAAa;EACX,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,KAAK;EACH,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACF,CACF;AAGD,MAAa,+BAA+B,aAC1C,kBACA,oBACA;CACE,aAAa;EACX,WAAW;EACX,aAAa;EACd;CACD,eAAe;EACb,WAAW;EACX,aAAa;EACd;CACD,KAAK;EACH,WAAW;EACX,aAAa;EACd;CACD,iBAAiB;EACf,WAAW;EACX,aAAa;EACd;CACD,gBAAgB;EACd,WAAW;EACX,aAAa;EACd;CACF,CACF"}
@@ -1,5 +1,5 @@
1
- import { c as userAuthenticated } from "./userAuthorized-klLUHGxT.js";
2
- import { n as teamMemberRoutes, t as teamMemberPaths } from "./team_memberRoutes-Cxgte_vj.js";
1
+ import { c as userAuthenticated } from "./userAuthorized-3RiCDXxr.js";
2
+ import { n as teamMemberRoutes, t as teamMemberPaths } from "./team_memberRoutes-BgjY9Kwq.js";
3
3
 
4
4
  //#region src/slices/team/teamRoutes.ts
5
5
  const teamPaths = {
@@ -54,7 +54,7 @@ const teamRoutes = [{
54
54
  {
55
55
  path: teamPaths.list.path,
56
56
  name: teamPaths.list.name,
57
- component: () => import("./TeamList-iAH9mOdd.js"),
57
+ component: () => import("./TeamList-hmP44hfw.js"),
58
58
  meta: {
59
59
  title: "Teams",
60
60
  description: "Manage teams",
@@ -72,7 +72,7 @@ const teamRoutes = [{
72
72
  {
73
73
  path: teamPaths.create.path,
74
74
  name: teamPaths.create.name,
75
- component: () => import("./CreateTeamForm-CCfgSWUA.js"),
75
+ component: () => import("./CreateTeamForm-BHgTTHAk.js"),
76
76
  meta: {
77
77
  title: "Create Team",
78
78
  description: "Create new team",
@@ -87,7 +87,7 @@ const teamRoutes = [{
87
87
  },
88
88
  {
89
89
  path: teamPaths.view.path,
90
- component: () => import("./TeamParent-D_IbzH8B.js"),
90
+ component: () => import("./TeamParent-BI9ItLoY.js"),
91
91
  meta: { sectionTabs: [
92
92
  {
93
93
  id: "view",
@@ -124,7 +124,7 @@ const teamRoutes = [{
124
124
  {
125
125
  path: "",
126
126
  name: teamPaths.view.name,
127
- component: () => import("./ViewTeam-BvLIv9Dd.js"),
127
+ component: () => import("./ViewTeam-DEOe7wqT.js"),
128
128
  meta: {
129
129
  title: "View Team",
130
130
  description: "View team details",
@@ -134,7 +134,7 @@ const teamRoutes = [{
134
134
  {
135
135
  path: teamPaths.edit.path,
136
136
  name: teamPaths.edit.name,
137
- component: () => import("./EditTeamForm-BzTAypZT.js"),
137
+ component: () => import("./EditTeamForm-KX2cNn24.js"),
138
138
  meta: {
139
139
  title: "Edit Team",
140
140
  description: "Edit team details",
@@ -144,7 +144,7 @@ const teamRoutes = [{
144
144
  {
145
145
  path: teamPaths.notes.path,
146
146
  name: teamPaths.notes.name,
147
- component: () => import("./TeamNotesTab-BnkgZd-5.js"),
147
+ component: () => import("./TeamNotesTab-BQN9niw-.js"),
148
148
  meta: {
149
149
  title: "Team Notes",
150
150
  description: "View and manage notes",
@@ -154,7 +154,7 @@ const teamRoutes = [{
154
154
  {
155
155
  path: teamPaths.attachments.path,
156
156
  name: teamPaths.attachments.name,
157
- component: () => import("./TeamAttachmentsTab-BG_K7uwG.js"),
157
+ component: () => import("./TeamAttachmentsTab-D0DOmdnr.js"),
158
158
  meta: {
159
159
  title: "Team Attachments",
160
160
  description: "View and manage attachments",
@@ -164,7 +164,7 @@ const teamRoutes = [{
164
164
  {
165
165
  path: teamPaths.history.path,
166
166
  name: teamPaths.history.name,
167
- component: () => import("./TeamHistoryTab-BSEOYC_5.js"),
167
+ component: () => import("./TeamHistoryTab-wRpRizDE.js"),
168
168
  meta: {
169
169
  title: "Team History",
170
170
  description: "View audit trail and changes",
@@ -174,7 +174,7 @@ const teamRoutes = [{
174
174
  {
175
175
  path: teamPaths.members.path,
176
176
  name: teamPaths.members.name,
177
- component: () => import("./TeamMembersTab-CeOJAhhR.js"),
177
+ component: () => import("./TeamMembersTab-D7y2nV__.js"),
178
178
  meta: {
179
179
  title: "Team Members",
180
180
  description: "View and manage team members",
@@ -189,4 +189,4 @@ const teamRoutes = [{
189
189
 
190
190
  //#endregion
191
191
  export { teamRoutes as n, teamPaths as t };
192
- //# sourceMappingURL=teamRoutes-CQWRPy3J.js.map
192
+ //# sourceMappingURL=teamRoutes-CSBq1DNq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teamRoutes-CQWRPy3J.js","names":["teamRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/teamRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../types/ExtendedRoute';\nimport { teamMemberPaths, teamMemberRoutes } from './team_member/team_memberRoutes';\n\nexport const teamPaths = {\n list: {\n path: '',\n full_path: '/teams',\n name: 'TeamList',\n },\n create: {\n path: 'create',\n full_path: '/teams/create',\n name: 'CreateTeam',\n },\n view: {\n path: ':id',\n full_path: '/teams/:id',\n name: 'ViewTeam',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/edit',\n name: 'EditTeam',\n },\n notes: {\n path: 'notes',\n full_path: '/teams/:id/notes',\n name: 'TeamNotes',\n },\n attachments: {\n path: 'attachments',\n full_path: '/teams/:id/attachments',\n name: 'TeamAttachments',\n },\n history: {\n path: 'history',\n full_path: '/teams/:id/history',\n name: 'TeamHistory',\n },\n members: {\n path: 'members',\n full_path: '/teams/:id/members',\n name: 'TeamMembers',\n },\n} as const;\n\nexport const teamRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/teams',\n name: 'Team',\n redirect: { name: teamPaths.list.name },\n beforeEnter: [userAuthenticated],\n meta: {},\n children: [\n {\n path: teamPaths.list.path,\n name: teamPaths.list.name,\n component: () => import('./TeamList.vue'),\n meta: {\n title: 'Teams',\n description: 'Manage teams',\n side_bar: {\n section: 'Teams',\n visible_to: ['consumer', 'lead', 'staff', 'super_admin'],\n },\n },\n },\n {\n path: teamPaths.create.path,\n name: teamPaths.create.name,\n component: () => import('./CreateTeamForm.vue'),\n meta: {\n title: 'Create Team',\n description: 'Create new team',\n breadcrumbs: [\n {\n label: 'Teams',\n to: { name: teamPaths.list.name },\n },\n {\n label: 'Create',\n to: { name: teamPaths.create.name },\n },\n ],\n },\n },\n {\n path: teamPaths.view.path,\n component: () => import('./TeamParent.vue'),\n meta: {\n // Define team detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamPaths.edit.name },\n },\n {\n id: 'notes',\n label: 'Notes',\n to: { name: teamPaths.notes.name },\n },\n {\n id: 'attachments',\n label: 'Attachments',\n to: { name: teamPaths.attachments.name },\n },\n {\n id: 'history',\n label: 'History',\n to: { name: teamPaths.history.name },\n },\n {\n id: 'members',\n label: 'Members',\n to: { name: teamMemberPaths.list.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamPaths.view.name,\n component: () => import('./ViewTeam.vue'),\n meta: {\n title: 'View Team',\n description: 'View team details',\n currentTab: 'view',\n },\n },\n {\n path: teamPaths.edit.path,\n name: teamPaths.edit.name,\n component: () => import('./EditTeamForm.vue'),\n meta: {\n title: 'Edit Team',\n description: 'Edit team details',\n currentTab: 'edit',\n },\n },\n {\n path: teamPaths.notes.path,\n name: teamPaths.notes.name,\n component: () => import('./TeamNotesTab.vue'),\n meta: {\n title: 'Team Notes',\n description: 'View and manage notes',\n currentTab: 'notes',\n },\n },\n {\n path: teamPaths.attachments.path,\n name: teamPaths.attachments.name,\n component: () => import('./TeamAttachmentsTab.vue'),\n meta: {\n title: 'Team Attachments',\n description: 'View and manage attachments',\n currentTab: 'attachments',\n },\n },\n {\n path: teamPaths.history.path,\n name: teamPaths.history.name,\n component: () => import('./TeamHistoryTab.vue'),\n meta: {\n title: 'Team History',\n description: 'View audit trail and changes',\n currentTab: 'history',\n },\n },\n {\n path: teamPaths.members.path,\n name: teamPaths.members.name,\n component: () => import('./TeamMembersTab.vue'),\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n currentTab: 'members',\n },\n children: teamMemberRoutes,\n },\n ],\n },\n ],\n },\n];\n"],"mappings":"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"}
1
+ {"version":3,"file":"teamRoutes-CSBq1DNq.js","names":["teamRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/teamRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../types/ExtendedRoute';\nimport { teamMemberPaths, teamMemberRoutes } from './team_member/team_memberRoutes';\n\nexport const teamPaths = {\n list: {\n path: '',\n full_path: '/teams',\n name: 'TeamList',\n },\n create: {\n path: 'create',\n full_path: '/teams/create',\n name: 'CreateTeam',\n },\n view: {\n path: ':id',\n full_path: '/teams/:id',\n name: 'ViewTeam',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/edit',\n name: 'EditTeam',\n },\n notes: {\n path: 'notes',\n full_path: '/teams/:id/notes',\n name: 'TeamNotes',\n },\n attachments: {\n path: 'attachments',\n full_path: '/teams/:id/attachments',\n name: 'TeamAttachments',\n },\n history: {\n path: 'history',\n full_path: '/teams/:id/history',\n name: 'TeamHistory',\n },\n members: {\n path: 'members',\n full_path: '/teams/:id/members',\n name: 'TeamMembers',\n },\n} as const;\n\nexport const teamRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/teams',\n name: 'Team',\n redirect: { name: teamPaths.list.name },\n beforeEnter: [userAuthenticated],\n meta: {},\n children: [\n {\n path: teamPaths.list.path,\n name: teamPaths.list.name,\n component: () => import('./TeamList.vue'),\n meta: {\n title: 'Teams',\n description: 'Manage teams',\n side_bar: {\n section: 'Teams',\n visible_to: ['consumer', 'lead', 'staff', 'super_admin'],\n },\n },\n },\n {\n path: teamPaths.create.path,\n name: teamPaths.create.name,\n component: () => import('./CreateTeamForm.vue'),\n meta: {\n title: 'Create Team',\n description: 'Create new team',\n breadcrumbs: [\n {\n label: 'Teams',\n to: { name: teamPaths.list.name },\n },\n {\n label: 'Create',\n to: { name: teamPaths.create.name },\n },\n ],\n },\n },\n {\n path: teamPaths.view.path,\n component: () => import('./TeamParent.vue'),\n meta: {\n // Define team detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamPaths.edit.name },\n },\n {\n id: 'notes',\n label: 'Notes',\n to: { name: teamPaths.notes.name },\n },\n {\n id: 'attachments',\n label: 'Attachments',\n to: { name: teamPaths.attachments.name },\n },\n {\n id: 'history',\n label: 'History',\n to: { name: teamPaths.history.name },\n },\n {\n id: 'members',\n label: 'Members',\n to: { name: teamMemberPaths.list.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamPaths.view.name,\n component: () => import('./ViewTeam.vue'),\n meta: {\n title: 'View Team',\n description: 'View team details',\n currentTab: 'view',\n },\n },\n {\n path: teamPaths.edit.path,\n name: teamPaths.edit.name,\n component: () => import('./EditTeamForm.vue'),\n meta: {\n title: 'Edit Team',\n description: 'Edit team details',\n currentTab: 'edit',\n },\n },\n {\n path: teamPaths.notes.path,\n name: teamPaths.notes.name,\n component: () => import('./TeamNotesTab.vue'),\n meta: {\n title: 'Team Notes',\n description: 'View and manage notes',\n currentTab: 'notes',\n },\n },\n {\n path: teamPaths.attachments.path,\n name: teamPaths.attachments.name,\n component: () => import('./TeamAttachmentsTab.vue'),\n meta: {\n title: 'Team Attachments',\n description: 'View and manage attachments',\n currentTab: 'attachments',\n },\n },\n {\n path: teamPaths.history.path,\n name: teamPaths.history.name,\n component: () => import('./TeamHistoryTab.vue'),\n meta: {\n title: 'Team History',\n description: 'View audit trail and changes',\n currentTab: 'history',\n },\n },\n {\n path: teamPaths.members.path,\n name: teamPaths.members.name,\n component: () => import('./TeamMembersTab.vue'),\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n currentTab: 'members',\n },\n children: teamMemberRoutes,\n },\n ],\n },\n ],\n },\n];\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { c as userAuthenticated } from "./userAuthorized-klLUHGxT.js";
1
+ import { c as userAuthenticated } from "./userAuthorized-3RiCDXxr.js";
2
2
 
3
3
  //#region src/slices/team/team_member/team_memberRoutes.ts
4
4
  const teamMemberPaths = {
@@ -27,7 +27,7 @@ const teamMemberRoutes = [
27
27
  {
28
28
  path: teamMemberPaths.list.path,
29
29
  name: teamMemberPaths.list.name,
30
- component: () => import("./TeamMemberList-uwSe9zdv.js"),
30
+ component: () => import("./TeamMemberList-B16SuLwM.js"),
31
31
  beforeEnter: [userAuthenticated],
32
32
  meta: {
33
33
  title: "Team Members",
@@ -37,7 +37,7 @@ const teamMemberRoutes = [
37
37
  {
38
38
  path: teamMemberPaths.create.path,
39
39
  name: teamMemberPaths.create.name,
40
- component: () => import("./CreateTeamMemberForm-CSF-tD6B.js"),
40
+ component: () => import("./CreateTeamMemberForm-CayF2tIJ.js"),
41
41
  beforeEnter: [userAuthenticated],
42
42
  meta: {
43
43
  title: "Create Team Member",
@@ -46,7 +46,7 @@ const teamMemberRoutes = [
46
46
  },
47
47
  {
48
48
  path: teamMemberPaths.view.path,
49
- component: () => import("./TeamMemberParent-C9OEziOK.js"),
49
+ component: () => import("./TeamMemberParent-BJl8nBmP.js"),
50
50
  beforeEnter: [userAuthenticated],
51
51
  meta: { sectionTabs: [{
52
52
  id: "view",
@@ -60,7 +60,7 @@ const teamMemberRoutes = [
60
60
  children: [{
61
61
  path: "",
62
62
  name: teamMemberPaths.view.name,
63
- component: () => import("./ViewTeamMember-DtQCZU-X.js"),
63
+ component: () => import("./ViewTeamMember-B5U8kZBw.js"),
64
64
  meta: {
65
65
  title: "View Team Member",
66
66
  description: "View team member details",
@@ -69,7 +69,7 @@ const teamMemberRoutes = [
69
69
  }, {
70
70
  path: teamMemberPaths.edit.path,
71
71
  name: teamMemberPaths.edit.name,
72
- component: () => import("./EditTeamMemberForm-CIqEjFF8.js"),
72
+ component: () => import("./EditTeamMemberForm-Bh6zVNyJ.js"),
73
73
  meta: {
74
74
  title: "Edit Team Member",
75
75
  description: "Edit team member details",
@@ -81,4 +81,4 @@ const teamMemberRoutes = [
81
81
 
82
82
  //#endregion
83
83
  export { teamMemberRoutes as n, teamMemberPaths as t };
84
- //# sourceMappingURL=team_memberRoutes-Cxgte_vj.js.map
84
+ //# sourceMappingURL=team_memberRoutes-BgjY9Kwq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"team_memberRoutes-Cxgte_vj.js","names":["teamMemberRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/team_member/team_memberRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nexport const teamMemberPaths = {\n list: {\n path: '',\n full_path: '/teams/:id/members',\n name: 'TeamMemberList',\n },\n create: {\n path: 'create',\n full_path: '/teams/:id/members/create',\n name: 'CreateTeamMember',\n },\n view: {\n path: ':member_id',\n full_path: '/teams/:id/members/:member_id',\n name: 'ViewTeamMember',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/members/:member_id/edit',\n name: 'EditTeamMember',\n },\n} as const;\n\nexport const teamMemberRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: teamMemberPaths.list.path,\n name: teamMemberPaths.list.name,\n component: () => import('./TeamMemberList.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.create.path,\n name: teamMemberPaths.create.name,\n component: () => import('./CreateTeamMemberForm.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Create Team Member',\n description: 'Create new team member',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.view.path,\n component: () => import('./TeamMemberParent.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n // Define team member detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamMemberPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamMemberPaths.edit.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamMemberPaths.view.name,\n component: () => import('./ViewTeamMember.vue'),\n meta: {\n title: 'View Team Member',\n description: 'View team member details',\n currentTab: 'view',\n },\n },\n {\n path: teamMemberPaths.edit.path,\n name: teamMemberPaths.edit.name,\n component: () => import('./EditTeamMemberForm.vue'),\n meta: {\n title: 'Edit Team Member',\n description: 'Edit team member details',\n currentTab: 'edit',\n },\n },\n ],\n },\n];\n"],"mappings":";;;AAGA,MAAa,kBAAkB;CAC7B,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,mBAAkD;CAC7D;EACE,MAAM,gBAAgB,KAAK;EAC3B,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,OAAO;EAC7B,MAAM,gBAAgB,OAAO;EAC7B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM,EAEJ,aAAa,CACX;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,EACD;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,CACF,EACF;EACD,UAAU,CACR;GACE,MAAM;GACN,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,EACD;GACE,MAAM,gBAAgB,KAAK;GAC3B,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,CACF;EACF;CACF"}
1
+ {"version":3,"file":"team_memberRoutes-BgjY9Kwq.js","names":["teamMemberRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/team_member/team_memberRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nexport const teamMemberPaths = {\n list: {\n path: '',\n full_path: '/teams/:id/members',\n name: 'TeamMemberList',\n },\n create: {\n path: 'create',\n full_path: '/teams/:id/members/create',\n name: 'CreateTeamMember',\n },\n view: {\n path: ':member_id',\n full_path: '/teams/:id/members/:member_id',\n name: 'ViewTeamMember',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/members/:member_id/edit',\n name: 'EditTeamMember',\n },\n} as const;\n\nexport const teamMemberRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: teamMemberPaths.list.path,\n name: teamMemberPaths.list.name,\n component: () => import('./TeamMemberList.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.create.path,\n name: teamMemberPaths.create.name,\n component: () => import('./CreateTeamMemberForm.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Create Team Member',\n description: 'Create new team member',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.view.path,\n component: () => import('./TeamMemberParent.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n // Define team member detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamMemberPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamMemberPaths.edit.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamMemberPaths.view.name,\n component: () => import('./ViewTeamMember.vue'),\n meta: {\n title: 'View Team Member',\n description: 'View team member details',\n currentTab: 'view',\n },\n },\n {\n path: teamMemberPaths.edit.path,\n name: teamMemberPaths.edit.name,\n component: () => import('./EditTeamMemberForm.vue'),\n meta: {\n title: 'Edit Team Member',\n description: 'Edit team member details',\n currentTab: 'edit',\n },\n },\n ],\n },\n];\n"],"mappings":";;;AAGA,MAAa,kBAAkB;CAC7B,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,mBAAkD;CAC7D;EACE,MAAM,gBAAgB,KAAK;EAC3B,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,OAAO;EAC7B,MAAM,gBAAgB,OAAO;EAC7B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM,EAEJ,aAAa,CACX;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,EACD;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,CACF,EACF;EACD,UAAU,CACR;GACE,MAAM;GACN,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,EACD;GACE,MAAM,gBAAgB,KAAK;GAC3B,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,CACF;EACF;CACF"}
@@ -38,4 +38,4 @@ function useBreadcrumbs(getBreadcrumbs, useSegmentMode = false) {
38
38
 
39
39
  //#endregion
40
40
  export { useBreadcrumbs as n, BREADCRUMB_KEY as t };
41
- //# sourceMappingURL=useBreadcrumbs-DIqU5AAp.js.map
41
+ //# sourceMappingURL=useBreadcrumbs-CPWXm0hm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBreadcrumbs-DIqU5AAp.js","names":[],"sources":["../src/composables/useBreadcrumbs.ts"],"sourcesContent":["import { inject, onUnmounted, watchEffect } from 'vue';\n\nexport const BREADCRUMB_KEY = Symbol('breadcrumbs');\n\nexport interface Breadcrumb {\n label: string;\n to: any;\n loading?: boolean;\n}\n\nexport interface BreadcrumbSegment {\n componentId: symbol;\n breadcrumbs: Breadcrumb[];\n}\n\nexport interface BreadcrumbContext {\n setBreadcrumbs: (breadcrumbs: Breadcrumb[] | null) => void;\n setBreadcrumbSegment: (componentId: symbol, breadcrumbs: Breadcrumb[] | null) => void;\n}\n\nlet componentIdCounter = 0;\n\n/**\n * Composable for components to set their own breadcrumbs\n * Accepts a function that returns breadcrumbs - handles reactivity automatically\n * Automatically clears breadcrumbs when component unmounts\n *\n * @param getBreadcrumbs - Function that returns breadcrumb array (reactive)\n * @param useSegmentMode - If true, uses the new segment-based system for nested breadcrumbs\n */\nexport function useBreadcrumbs(\n getBreadcrumbs: () => Breadcrumb[],\n useSegmentMode: boolean = false,\n) {\n const context = inject<BreadcrumbContext>(BREADCRUMB_KEY);\n\n if (!context) {\n console.warn(\n 'useBreadcrumbs: No breadcrumb context found. Make sure InApp.vue provides it.',\n );\n return;\n }\n\n if (useSegmentMode) {\n // Use segment-based mode for nested breadcrumbs\n const componentId = Symbol(`breadcrumb-${componentIdCounter++}`);\n\n watchEffect(() => {\n const breadcrumbs = getBreadcrumbs();\n context.setBreadcrumbSegment(componentId, breadcrumbs.length > 0 ? breadcrumbs : null);\n });\n\n onUnmounted(() => {\n context.setBreadcrumbSegment(componentId, null);\n });\n } else {\n // Legacy mode: single breadcrumb setter (for backward compatibility)\n watchEffect(() => {\n context.setBreadcrumbs(getBreadcrumbs());\n });\n\n onUnmounted(() => {\n context.setBreadcrumbs(null);\n });\n }\n}\n"],"mappings":";;;AAEA,MAAa,iBAAiB,OAAO,cAAc;AAkBnD,IAAI,qBAAqB;;;;;;;;;AAUzB,SAAgB,eACd,gBACA,iBAA0B,OAC1B;CACA,MAAM,UAAU,OAA0B,eAAe;AAEzD,KAAI,CAAC,SAAS;AACZ,UAAQ,KACN,gFACD;AACD;;AAGF,KAAI,gBAAgB;EAElB,MAAM,cAAc,OAAO,cAAc,uBAAuB;AAEhE,oBAAkB;GAChB,MAAM,cAAc,gBAAgB;AACpC,WAAQ,qBAAqB,aAAa,YAAY,SAAS,IAAI,cAAc,KAAK;IACtF;AAEF,oBAAkB;AAChB,WAAQ,qBAAqB,aAAa,KAAK;IAC/C;QACG;AAEL,oBAAkB;AAChB,WAAQ,eAAe,gBAAgB,CAAC;IACxC;AAEF,oBAAkB;AAChB,WAAQ,eAAe,KAAK;IAC5B"}
1
+ {"version":3,"file":"useBreadcrumbs-CPWXm0hm.js","names":[],"sources":["../src/composables/useBreadcrumbs.ts"],"sourcesContent":["import { inject, onUnmounted, watchEffect } from 'vue';\n\nexport const BREADCRUMB_KEY = Symbol('breadcrumbs');\n\nexport interface Breadcrumb {\n label: string;\n to: any;\n loading?: boolean;\n}\n\nexport interface BreadcrumbSegment {\n componentId: symbol;\n breadcrumbs: Breadcrumb[];\n}\n\nexport interface BreadcrumbContext {\n setBreadcrumbs: (breadcrumbs: Breadcrumb[] | null) => void;\n setBreadcrumbSegment: (componentId: symbol, breadcrumbs: Breadcrumb[] | null) => void;\n}\n\nlet componentIdCounter = 0;\n\n/**\n * Composable for components to set their own breadcrumbs\n * Accepts a function that returns breadcrumbs - handles reactivity automatically\n * Automatically clears breadcrumbs when component unmounts\n *\n * @param getBreadcrumbs - Function that returns breadcrumb array (reactive)\n * @param useSegmentMode - If true, uses the new segment-based system for nested breadcrumbs\n */\nexport function useBreadcrumbs(\n getBreadcrumbs: () => Breadcrumb[],\n useSegmentMode: boolean = false,\n) {\n const context = inject<BreadcrumbContext>(BREADCRUMB_KEY);\n\n if (!context) {\n console.warn(\n 'useBreadcrumbs: No breadcrumb context found. Make sure InApp.vue provides it.',\n );\n return;\n }\n\n if (useSegmentMode) {\n // Use segment-based mode for nested breadcrumbs\n const componentId = Symbol(`breadcrumb-${componentIdCounter++}`);\n\n watchEffect(() => {\n const breadcrumbs = getBreadcrumbs();\n context.setBreadcrumbSegment(componentId, breadcrumbs.length > 0 ? breadcrumbs : null);\n });\n\n onUnmounted(() => {\n context.setBreadcrumbSegment(componentId, null);\n });\n } else {\n // Legacy mode: single breadcrumb setter (for backward compatibility)\n watchEffect(() => {\n context.setBreadcrumbs(getBreadcrumbs());\n });\n\n onUnmounted(() => {\n context.setBreadcrumbs(null);\n });\n }\n}\n"],"mappings":";;;AAEA,MAAa,iBAAiB,OAAO,cAAc;AAkBnD,IAAI,qBAAqB;;;;;;;;;AAUzB,SAAgB,eACd,gBACA,iBAA0B,OAC1B;CACA,MAAM,UAAU,OAA0B,eAAe;AAEzD,KAAI,CAAC,SAAS;AACZ,UAAQ,KACN,gFACD;AACD;;AAGF,KAAI,gBAAgB;EAElB,MAAM,cAAc,OAAO,cAAc,uBAAuB;AAEhE,oBAAkB;GAChB,MAAM,cAAc,gBAAgB;AACpC,WAAQ,qBAAqB,aAAa,YAAY,SAAS,IAAI,cAAc,KAAK;IACtF;AAEF,oBAAkB;AAChB,WAAQ,qBAAqB,aAAa,KAAK;IAC/C;QACG;AAEL,oBAAkB;AAChB,WAAQ,eAAe,gBAAgB,CAAC;IACxC;AAEF,oBAAkB;AAChB,WAAQ,eAAe,KAAK;IAC5B"}
@@ -1,5 +1,5 @@
1
1
  import { o as useUserSessionStore } from "./useRpcAuth-CJtq1dqM.js";
2
- import { t as getAndClearEmailVerificationReturnUrl } from "./useReturnUrl-B5V3SJf5.js";
2
+ import { t as getAndClearEmailVerificationReturnUrl } from "./useReturnUrl-DnezAxBA.js";
3
3
  import { onUnmounted, watch } from "vue";
4
4
 
5
5
  //#region src/slices/auth/useEmailVerificationChannel.ts
@@ -34,4 +34,4 @@ function useEmailVerificationChannel(awaitingVerification, onRedirect, getDefaul
34
34
 
35
35
  //#endregion
36
36
  export { useEmailVerificationChannel as t };
37
- //# sourceMappingURL=useEmailVerificationChannel-C4bvvG2b.js.map
37
+ //# sourceMappingURL=useEmailVerificationChannel-C76Gnyi1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useEmailVerificationChannel-C4bvvG2b.js","names":["authChannel: BroadcastChannel | null"],"sources":["../src/slices/auth/useEmailVerificationChannel.ts"],"sourcesContent":["import { useUserSessionStore } from '../../composables/useUserSessionStore';\nimport { getAndClearEmailVerificationReturnUrl } from '../../utils/useReturnUrl';\nimport { onUnmounted, watch } from 'vue';\nimport type { Ref } from 'vue';\n\nconst AUTH_CHANNEL = 'auth';\n\n/**\n * Listens for cross-tab email verification completion via BroadcastChannel.\n * When the user verifies their email in another tab, refreshes the session so this tab\n * has the updated email_verified state, then redirects to the stored return URL.\n * Call this when the signup form is showing \"awaiting verification\" state.\n */\nexport function useEmailVerificationChannel(\n awaitingVerification: Ref<boolean>,\n onRedirect: (targetUrl: string) => void,\n getDefaultRedirect: () => string,\n) {\n const sessionStore = useUserSessionStore();\n let authChannel: BroadcastChannel | null = null;\n\n watch(\n awaitingVerification,\n (isAwaiting) => {\n authChannel?.close();\n authChannel = null;\n if (!isAwaiting) return;\n authChannel = new BroadcastChannel(AUTH_CHANNEL);\n authChannel.onmessage = (event: MessageEvent<{ type: string }>) => {\n if (event.data?.type === 'email_verified') {\n const targetUrl =\n getAndClearEmailVerificationReturnUrl() ?? getDefaultRedirect();\n // Sync from localStorage so this tab has email_verified: true before redirect.\n // Tab B already wrote the new tokens; we just need to read them.\n sessionStore.syncFromStorage();\n onRedirect(targetUrl);\n }\n };\n },\n { immediate: true },\n );\n\n onUnmounted(() => {\n authChannel?.close();\n authChannel = null;\n });\n}\n"],"mappings":";;;;;AAKA,MAAM,eAAe;;;;;;;AAQrB,SAAgB,4BACd,sBACA,YACA,oBACA;CACA,MAAM,eAAe,qBAAqB;CAC1C,IAAIA,cAAuC;AAE3C,OACE,uBACC,eAAe;AACd,eAAa,OAAO;AACpB,gBAAc;AACd,MAAI,CAAC,WAAY;AACjB,gBAAc,IAAI,iBAAiB,aAAa;AAChD,cAAY,aAAa,UAA0C;AACjE,OAAI,MAAM,MAAM,SAAS,kBAAkB;IACzC,MAAM,YACJ,uCAAuC,IAAI,oBAAoB;AAGjE,iBAAa,iBAAiB;AAC9B,eAAW,UAAU;;;IAI3B,EAAE,WAAW,MAAM,CACpB;AAED,mBAAkB;AAChB,eAAa,OAAO;AACpB,gBAAc;GACd"}
1
+ {"version":3,"file":"useEmailVerificationChannel-C76Gnyi1.js","names":["authChannel: BroadcastChannel | null"],"sources":["../src/slices/auth/useEmailVerificationChannel.ts"],"sourcesContent":["import { useUserSessionStore } from '../../composables/useUserSessionStore';\nimport { getAndClearEmailVerificationReturnUrl } from '../../utils/useReturnUrl';\nimport { onUnmounted, watch } from 'vue';\nimport type { Ref } from 'vue';\n\nconst AUTH_CHANNEL = 'auth';\n\n/**\n * Listens for cross-tab email verification completion via BroadcastChannel.\n * When the user verifies their email in another tab, refreshes the session so this tab\n * has the updated email_verified state, then redirects to the stored return URL.\n * Call this when the signup form is showing \"awaiting verification\" state.\n */\nexport function useEmailVerificationChannel(\n awaitingVerification: Ref<boolean>,\n onRedirect: (targetUrl: string) => void,\n getDefaultRedirect: () => string,\n) {\n const sessionStore = useUserSessionStore();\n let authChannel: BroadcastChannel | null = null;\n\n watch(\n awaitingVerification,\n (isAwaiting) => {\n authChannel?.close();\n authChannel = null;\n if (!isAwaiting) return;\n authChannel = new BroadcastChannel(AUTH_CHANNEL);\n authChannel.onmessage = (event: MessageEvent<{ type: string }>) => {\n if (event.data?.type === 'email_verified') {\n const targetUrl =\n getAndClearEmailVerificationReturnUrl() ?? getDefaultRedirect();\n // Sync from localStorage so this tab has email_verified: true before redirect.\n // Tab B already wrote the new tokens; we just need to read them.\n sessionStore.syncFromStorage();\n onRedirect(targetUrl);\n }\n };\n },\n { immediate: true },\n );\n\n onUnmounted(() => {\n authChannel?.close();\n authChannel = null;\n });\n}\n"],"mappings":";;;;;AAKA,MAAM,eAAe;;;;;;;AAQrB,SAAgB,4BACd,sBACA,YACA,oBACA;CACA,MAAM,eAAe,qBAAqB;CAC1C,IAAIA,cAAuC;AAE3C,OACE,uBACC,eAAe;AACd,eAAa,OAAO;AACpB,gBAAc;AACd,MAAI,CAAC,WAAY;AACjB,gBAAc,IAAI,iBAAiB,aAAa;AAChD,cAAY,aAAa,UAA0C;AACjE,OAAI,MAAM,MAAM,SAAS,kBAAkB;IACzC,MAAM,YACJ,uCAAuC,IAAI,oBAAoB;AAGjE,iBAAa,iBAAiB;AAC9B,eAAW,UAAU;;;IAI3B,EAAE,WAAW,MAAM,CACpB;AAED,mBAAkB;AAChB,eAAa,OAAO;AACpB,gBAAc;GACd"}
@@ -1,14 +1,6 @@
1
1
  //#region src/utils/useReturnUrl.ts
2
2
  /** Storage key for return URL when awaiting email verification from signup (strict mode). */
3
3
  const EMAIL_VERIFICATION_RETURN_URL_KEY = "dragoncore_email_verification_return_url";
4
- /**
5
- * Store return URL for post-verification redirect. Uses localStorage (not sessionStorage)
6
- * so the verification link opened in a new tab can access it.
7
- */
8
- function setEmailVerificationReturnUrl(url) {
9
- if (!url.startsWith("/") || url.startsWith("/auth/")) return;
10
- localStorage.setItem(EMAIL_VERIFICATION_RETURN_URL_KEY, url);
11
- }
12
4
  function getAndClearEmailVerificationReturnUrl() {
13
5
  const url = localStorage.getItem(EMAIL_VERIFICATION_RETURN_URL_KEY);
14
6
  localStorage.removeItem(EMAIL_VERIFICATION_RETURN_URL_KEY);
@@ -62,5 +54,5 @@ function withBackLink(path, backLink, backLinkLabel) {
62
54
  }
63
55
 
64
56
  //#endregion
65
- export { withBackLink as a, setEmailVerificationReturnUrl as i, getBackLinkFromRoute as n, withReturnUrl as o, getValidReturnUrl as r, getAndClearEmailVerificationReturnUrl as t };
66
- //# sourceMappingURL=useReturnUrl-B5V3SJf5.js.map
57
+ export { withReturnUrl as a, withBackLink as i, getBackLinkFromRoute as n, getValidReturnUrl as r, getAndClearEmailVerificationReturnUrl as t };
58
+ //# sourceMappingURL=useReturnUrl-DnezAxBA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReturnUrl-B5V3SJf5.js","names":[],"sources":["../src/utils/useReturnUrl.ts"],"sourcesContent":["import type { RouteLocationNormalizedLoaded } from 'vue-router';\n\n/** Storage key for return URL when awaiting email verification from signup (strict mode). */\nexport const EMAIL_VERIFICATION_RETURN_URL_KEY = 'dragoncore_email_verification_return_url';\n\n/**\n * Store return URL for post-verification redirect. Uses localStorage (not sessionStorage)\n * so the verification link opened in a new tab can access it.\n */\nexport function setEmailVerificationReturnUrl(url: string): void {\n if (!url.startsWith('/') || url.startsWith('/auth/')) return;\n localStorage.setItem(EMAIL_VERIFICATION_RETURN_URL_KEY, url);\n}\n\nexport function getAndClearEmailVerificationReturnUrl(): string | null {\n const url = localStorage.getItem(EMAIL_VERIFICATION_RETURN_URL_KEY);\n localStorage.removeItem(EMAIL_VERIFICATION_RETURN_URL_KEY);\n return url && url.startsWith('/') && !url.startsWith('/auth/') ? url : null;\n}\n\n/**\n * Validates a return URL: must be a relative path starting with / and not /auth/\n * to avoid redirect loops and external URLs.\n */\nexport function getValidReturnUrl(\n route: RouteLocationNormalizedLoaded,\n defaultPath: string,\n): string {\n const returnUrl = route.query.returnUrl as string | undefined;\n if (!returnUrl) return defaultPath;\n if (returnUrl.startsWith('/') && !returnUrl.startsWith('/auth/')) {\n return returnUrl;\n }\n return defaultPath;\n}\n\n/**\n * Builds a path string with returnUrl preserved in query params.\n * Use when linking to login, logout, etc. from a page that has returnUrl.\n */\nexport function withReturnUrl(path: string, returnUrl: string | undefined): string {\n if (!returnUrl || !returnUrl.startsWith('/') || returnUrl.startsWith('/auth/')) {\n return path;\n }\n const sep = path.includes('?') ? '&' : '?';\n return `${path}${sep}returnUrl=${encodeURIComponent(returnUrl)}`;\n}\n\n/** Same validation as returnUrl: relative path, not /auth/ */\nfunction isValidBackLinkPath(path: string): boolean {\n return path.startsWith('/') && !path.startsWith('/auth/');\n}\n\n/**\n * Extracts a valid back link from route query params.\n * Supports backLink (path) and backLinkLabel (optional label).\n */\nexport function getBackLinkFromRoute(\n route: RouteLocationNormalizedLoaded,\n): { to: string; label?: string } | null {\n const path = route.query.backLink;\n const raw =\n typeof path === 'string' ? path : Array.isArray(path) ? path[0] ?? undefined : undefined;\n if (!raw || typeof raw !== 'string' || !isValidBackLinkPath(raw)) return null;\n const label = route.query.backLinkLabel;\n const labelStr =\n typeof label === 'string' ? label : Array.isArray(label) ? label[0] ?? undefined : undefined;\n return { to: raw, label: labelStr };\n}\n\n/**\n * Appends backLink (and optional backLinkLabel) to a path.\n * Use when linking to auth pages so the Auth layout shows a back link.\n */\nexport function withBackLink(\n path: string,\n backLink: string,\n backLinkLabel?: string,\n): string {\n if (!backLink || !isValidBackLinkPath(backLink)) return path;\n const sep = path.includes('?') ? '&' : '?';\n let result = `${path}${sep}backLink=${encodeURIComponent(backLink)}`;\n if (backLinkLabel) {\n result += `&backLinkLabel=${encodeURIComponent(backLinkLabel)}`;\n }\n return result;\n}\n"],"mappings":";;AAGA,MAAa,oCAAoC;;;;;AAMjD,SAAgB,8BAA8B,KAAmB;AAC/D,KAAI,CAAC,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,SAAS,CAAE;AACtD,cAAa,QAAQ,mCAAmC,IAAI;;AAG9D,SAAgB,wCAAuD;CACrE,MAAM,MAAM,aAAa,QAAQ,kCAAkC;AACnE,cAAa,WAAW,kCAAkC;AAC1D,QAAO,OAAO,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,WAAW,SAAS,GAAG,MAAM;;;;;;AAOzE,SAAgB,kBACd,OACA,aACQ;CACR,MAAM,YAAY,MAAM,MAAM;AAC9B,KAAI,CAAC,UAAW,QAAO;AACvB,KAAI,UAAU,WAAW,IAAI,IAAI,CAAC,UAAU,WAAW,SAAS,CAC9D,QAAO;AAET,QAAO;;;;;;AAOT,SAAgB,cAAc,MAAc,WAAuC;AACjF,KAAI,CAAC,aAAa,CAAC,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,SAAS,CAC5E,QAAO;AAGT,QAAO,GAAG,OADE,KAAK,SAAS,IAAI,GAAG,MAAM,IAClB,YAAY,mBAAmB,UAAU;;;AAIhE,SAAS,oBAAoB,MAAuB;AAClD,QAAO,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,SAAS;;;;;;AAO3D,SAAgB,qBACd,OACuC;CACvC,MAAM,OAAO,MAAM,MAAM;CACzB,MAAM,MACJ,OAAO,SAAS,WAAW,OAAO,MAAM,QAAQ,KAAK,GAAG,KAAK,MAAM,SAAY;AACjF,KAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,oBAAoB,IAAI,CAAE,QAAO;CACzE,MAAM,QAAQ,MAAM,MAAM;AAG1B,QAAO;EAAE,IAAI;EAAK,OADhB,OAAO,UAAU,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAY;EAClD;;;;;;AAOrC,SAAgB,aACd,MACA,UACA,eACQ;AACR,KAAI,CAAC,YAAY,CAAC,oBAAoB,SAAS,CAAE,QAAO;CAExD,IAAI,SAAS,GAAG,OADJ,KAAK,SAAS,IAAI,GAAG,MAAM,IACZ,WAAW,mBAAmB,SAAS;AAClE,KAAI,cACF,WAAU,kBAAkB,mBAAmB,cAAc;AAE/D,QAAO"}
1
+ {"version":3,"file":"useReturnUrl-DnezAxBA.js","names":[],"sources":["../src/utils/useReturnUrl.ts"],"sourcesContent":["import type { RouteLocationNormalizedLoaded } from 'vue-router';\n\n/** Storage key for return URL when awaiting email verification from signup (strict mode). */\nexport const EMAIL_VERIFICATION_RETURN_URL_KEY = 'dragoncore_email_verification_return_url';\n\n/**\n * Store return URL for post-verification redirect. Uses localStorage (not sessionStorage)\n * so the verification link opened in a new tab can access it.\n */\nexport function setEmailVerificationReturnUrl(url: string): void {\n if (!url.startsWith('/') || url.startsWith('/auth/')) return;\n localStorage.setItem(EMAIL_VERIFICATION_RETURN_URL_KEY, url);\n}\n\nexport function getAndClearEmailVerificationReturnUrl(): string | null {\n const url = localStorage.getItem(EMAIL_VERIFICATION_RETURN_URL_KEY);\n localStorage.removeItem(EMAIL_VERIFICATION_RETURN_URL_KEY);\n return url && url.startsWith('/') && !url.startsWith('/auth/') ? url : null;\n}\n\n/**\n * Validates a return URL: must be a relative path starting with / and not /auth/\n * to avoid redirect loops and external URLs.\n */\nexport function getValidReturnUrl(\n route: RouteLocationNormalizedLoaded,\n defaultPath: string,\n): string {\n const returnUrl = route.query.returnUrl as string | undefined;\n if (!returnUrl) return defaultPath;\n if (returnUrl.startsWith('/') && !returnUrl.startsWith('/auth/')) {\n return returnUrl;\n }\n return defaultPath;\n}\n\n/**\n * Builds a path string with returnUrl preserved in query params.\n * Use when linking to login, logout, etc. from a page that has returnUrl.\n */\nexport function withReturnUrl(path: string, returnUrl: string | undefined): string {\n if (!returnUrl || !returnUrl.startsWith('/') || returnUrl.startsWith('/auth/')) {\n return path;\n }\n const sep = path.includes('?') ? '&' : '?';\n return `${path}${sep}returnUrl=${encodeURIComponent(returnUrl)}`;\n}\n\n/** Same validation as returnUrl: relative path, not /auth/ */\nfunction isValidBackLinkPath(path: string): boolean {\n return path.startsWith('/') && !path.startsWith('/auth/');\n}\n\n/**\n * Extracts a valid back link from route query params.\n * Supports backLink (path) and backLinkLabel (optional label).\n */\nexport function getBackLinkFromRoute(\n route: RouteLocationNormalizedLoaded,\n): { to: string; label?: string } | null {\n const path = route.query.backLink;\n const raw =\n typeof path === 'string' ? path : Array.isArray(path) ? path[0] ?? undefined : undefined;\n if (!raw || typeof raw !== 'string' || !isValidBackLinkPath(raw)) return null;\n const label = route.query.backLinkLabel;\n const labelStr =\n typeof label === 'string' ? label : Array.isArray(label) ? label[0] ?? undefined : undefined;\n return { to: raw, label: labelStr };\n}\n\n/**\n * Appends backLink (and optional backLinkLabel) to a path.\n * Use when linking to auth pages so the Auth layout shows a back link.\n */\nexport function withBackLink(\n path: string,\n backLink: string,\n backLinkLabel?: string,\n): string {\n if (!backLink || !isValidBackLinkPath(backLink)) return path;\n const sep = path.includes('?') ? '&' : '?';\n let result = `${path}${sep}backLink=${encodeURIComponent(backLink)}`;\n if (backLinkLabel) {\n result += `&backLinkLabel=${encodeURIComponent(backLinkLabel)}`;\n }\n return result;\n}\n"],"mappings":";;AAGA,MAAa,oCAAoC;AAWjD,SAAgB,wCAAuD;CACrE,MAAM,MAAM,aAAa,QAAQ,kCAAkC;AACnE,cAAa,WAAW,kCAAkC;AAC1D,QAAO,OAAO,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,WAAW,SAAS,GAAG,MAAM;;;;;;AAOzE,SAAgB,kBACd,OACA,aACQ;CACR,MAAM,YAAY,MAAM,MAAM;AAC9B,KAAI,CAAC,UAAW,QAAO;AACvB,KAAI,UAAU,WAAW,IAAI,IAAI,CAAC,UAAU,WAAW,SAAS,CAC9D,QAAO;AAET,QAAO;;;;;;AAOT,SAAgB,cAAc,MAAc,WAAuC;AACjF,KAAI,CAAC,aAAa,CAAC,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,SAAS,CAC5E,QAAO;AAGT,QAAO,GAAG,OADE,KAAK,SAAS,IAAI,GAAG,MAAM,IAClB,YAAY,mBAAmB,UAAU;;;AAIhE,SAAS,oBAAoB,MAAuB;AAClD,QAAO,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,SAAS;;;;;;AAO3D,SAAgB,qBACd,OACuC;CACvC,MAAM,OAAO,MAAM,MAAM;CACzB,MAAM,MACJ,OAAO,SAAS,WAAW,OAAO,MAAM,QAAQ,KAAK,GAAG,KAAK,MAAM,SAAY;AACjF,KAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,oBAAoB,IAAI,CAAE,QAAO;CACzE,MAAM,QAAQ,MAAM,MAAM;AAG1B,QAAO;EAAE,IAAI;EAAK,OADhB,OAAO,UAAU,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAY;EAClD;;;;;;AAOrC,SAAgB,aACd,MACA,UACA,eACQ;AACR,KAAI,CAAC,YAAY,CAAC,oBAAoB,SAAS,CAAE,QAAO;CAExD,IAAI,SAAS,GAAG,OADJ,KAAK,SAAS,IAAI,GAAG,MAAM,IACZ,WAAW,mBAAmB,SAAS;AAClE,KAAI,cACF,WAAU,kBAAkB,mBAAmB,cAAc;AAE/D,QAAO"}
@@ -186,4 +186,4 @@ const leadOrStaffOnly = createLeadOrStaffOnlyGuard();
186
186
 
187
187
  //#endregion
188
188
  export { createUserAuthorizedGuard as a, userAuthenticated as c, createSuperAdminOnlyGuard as i, userIsSuperAdmin as l, createLeadOrStaffOnlyGuard as n, leadOrStaffOnly as o, createStaffOnlyGuard as r, staffOnly as s, createAuthenticatedGuard as t };
189
- //# sourceMappingURL=userAuthorized-klLUHGxT.js.map
189
+ //# sourceMappingURL=userAuthorized-3RiCDXxr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userAuthorized-klLUHGxT.js","names":[],"sources":["../src/middleware/userAuthorized.ts"],"sourcesContent":["import type { UserTypeValues } from '@dragonmastery/dragoncore-shared';\nimport type { NavigationGuard, RouteLocationRaw } from 'vue-router';\nimport { createAppBatch } from '../composables/useRpcAuth';\nimport { useEnv } from '../composables/useEnv';\nimport { useUserSessionStore } from '../composables/useUserSessionStore';\nimport { logger } from '../utils/logger';\n\nexport interface UserAuthorizedOptions {\n /**\n * List of user types allowed to access this route\n * Same pattern as `visible_to` in route meta\n */\n allowedUserTypes: UserTypeValues[];\n\n /**\n * Where to redirect if user is not authorized\n * Can be a route name, path, or route object\n */\n redirectTo?: RouteLocationRaw;\n\n /**\n * Login path for redirecting unauthenticated users\n * Only used if requireAuth is true\n */\n loginPath?: string;\n\n /**\n * Whether to also check authentication (token refresh, etc.)\n * Default: true\n */\n requireAuth?: boolean;\n}\n\n/**\n * Creates a navigation guard that checks both authentication and authorization\n * based on allowed user types.\n *\n * @example\n * // Only staff and super_admin can access\n * const staffOnly = createUserAuthorizedGuard({\n * allowedUserTypes: ['staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n *\n * @example\n * // All authenticated users can access\n * const authenticated = createUserAuthorizedGuard({\n * allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n */\nexport function createUserAuthorizedGuard(options: UserAuthorizedOptions): NavigationGuard {\n const {\n allowedUserTypes,\n redirectTo = { name: 'Home' },\n loginPath = '/auth/login',\n requireAuth = true,\n } = options;\n\n return async (to, _from, next) => {\n // Legal and other public routes must never require auth (used during signup, iframe embed)\n if (to.meta?.public) {\n next();\n return;\n }\n\n const userSession = useUserSessionStore();\n const env = useEnv();\n\n // Step 1: Check authentication if required\n if (requireAuth) {\n const hasAccessToken = !!userSession.accessToken;\n\n if (hasAccessToken) {\n const { accessTokenExpired, refreshTokenExpired } = userSession.isTokenExpired();\n\n if (!accessTokenExpired) {\n // Token is valid, proceed to authorization check\n } else if (refreshTokenExpired) {\n // Refresh token expired, redirect to login\n logger.warn('[UserAuthorized] Refresh token expired, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n } else {\n // Access token expired, try refresh\n logger.debug('[UserAuthorized] Access token expired, attempting refresh');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.error('[UserAuthorized] Token refresh failed, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n } else {\n // No access token, try refresh token flow\n logger.debug('[UserAuthorized] No access token, attempting refresh token flow');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.debug('[UserAuthorized] No valid session found, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n }\n\n // Step 2: Check consent status\n // Call getPendingConsents for fresh data - backend returns [] when CONSENT_FEATURE_ENABLED is false\n if (to.path !== '/auth/consent-required') {\n try {\n const batch = createAppBatch();\n const pending = await batch.users.getPendingConsents();\n if (pending && pending.length > 0) {\n logger.debug('[UserAuthorized] Pending consents found, redirecting to consent-required');\n next({\n path: '/auth/consent-required',\n query: { returnUrl: to.fullPath, ...to.query },\n });\n return;\n }\n } catch (err) {\n logger.warn('[UserAuthorized] Failed to check pending consents, continuing', { err });\n // On auth/network error, let user proceed; they may hit CONSENT_REQUIRED on next API call\n }\n }\n\n // Step 2.5: In strict mode, block unverified users from app entirely\n if (\n !to.path.startsWith('/auth/') &&\n env.emailVerificationMode === 'strict'\n ) {\n const emailVerified = userSession.currentSession?.user?.email_verified ?? true;\n if (!emailVerified) {\n logger.debug('[UserAuthorized] Strict mode: unverified user, redirecting to verify-email');\n next({ path: '/auth/verify-email', query: { returnUrl: to.fullPath } });\n return;\n }\n }\n\n // Step 3: Check authorization (user type)\n const userType = userSession.currentSession?.user.user_type;\n\n if (!userType) {\n logger.warn('[UserAuthorized] No user type found, redirecting');\n next(redirectTo);\n return;\n }\n\n if (allowedUserTypes.includes(userType)) {\n logger.debug(`[UserAuthorized] User type '${userType}' is authorized`);\n next();\n } else {\n logger.warn(\n `[UserAuthorized] User type '${userType}' is not authorized. Allowed: ${allowedUserTypes.join(', ')}`,\n );\n next(redirectTo);\n }\n };\n}\n\n/**\n * Pre-built guard: Staff and super admin only\n * Redirects non-staff users to the provided redirect path\n */\nexport function createStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Super admin only\n * Redirects non-super-admin users to the provided redirect path\n */\nexport function createSuperAdminOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['super_admin'],\n redirectTo: options?.redirectTo ?? '/notfound',\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: All authenticated users\n * Any logged-in user can access (consumer, lead, staff, or super_admin)\n */\nexport function createAuthenticatedGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Lead, staff, and super admin\n * Consumers are not allowed\n */\nexport function createLeadOrStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-configured guards with sensible defaults\n * Apps can use these directly or override with create*Guard functions\n */\n\n/**\n * Pre-configured: All authenticated users\n * Default redirect: Home, Default login: /auth/login\n */\nexport const userAuthenticated = createAuthenticatedGuard();\n\n/**\n * Pre-configured: Staff and super admin only\n * Default redirect: Home, Default login: /auth/login\n */\nexport const staffOnly = createStaffOnlyGuard();\n\n/**\n * Pre-configured: Super admin only\n * Default redirect: /notfound, Default login: /auth/login\n */\nexport const userIsSuperAdmin = createSuperAdminOnlyGuard();\n\n/**\n * Pre-configured: Lead, staff, and super admin\n * Default redirect: Home, Default login: /auth/login\n */\nexport const leadOrStaffOnly = createLeadOrStaffOnlyGuard();\n"],"mappings":"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"}
1
+ {"version":3,"file":"userAuthorized-3RiCDXxr.js","names":[],"sources":["../src/middleware/userAuthorized.ts"],"sourcesContent":["import type { UserTypeValues } from '@dragonmastery/dragoncore-shared';\nimport type { NavigationGuard, RouteLocationRaw } from 'vue-router';\nimport { createAppBatch } from '../composables/useRpcAuth';\nimport { useEnv } from '../composables/useEnv';\nimport { useUserSessionStore } from '../composables/useUserSessionStore';\nimport { logger } from '../utils/logger';\n\nexport interface UserAuthorizedOptions {\n /**\n * List of user types allowed to access this route\n * Same pattern as `visible_to` in route meta\n */\n allowedUserTypes: UserTypeValues[];\n\n /**\n * Where to redirect if user is not authorized\n * Can be a route name, path, or route object\n */\n redirectTo?: RouteLocationRaw;\n\n /**\n * Login path for redirecting unauthenticated users\n * Only used if requireAuth is true\n */\n loginPath?: string;\n\n /**\n * Whether to also check authentication (token refresh, etc.)\n * Default: true\n */\n requireAuth?: boolean;\n}\n\n/**\n * Creates a navigation guard that checks both authentication and authorization\n * based on allowed user types.\n *\n * @example\n * // Only staff and super_admin can access\n * const staffOnly = createUserAuthorizedGuard({\n * allowedUserTypes: ['staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n *\n * @example\n * // All authenticated users can access\n * const authenticated = createUserAuthorizedGuard({\n * allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n */\nexport function createUserAuthorizedGuard(options: UserAuthorizedOptions): NavigationGuard {\n const {\n allowedUserTypes,\n redirectTo = { name: 'Home' },\n loginPath = '/auth/login',\n requireAuth = true,\n } = options;\n\n return async (to, _from, next) => {\n // Legal and other public routes must never require auth (used during signup, iframe embed)\n if (to.meta?.public) {\n next();\n return;\n }\n\n const userSession = useUserSessionStore();\n const env = useEnv();\n\n // Step 1: Check authentication if required\n if (requireAuth) {\n const hasAccessToken = !!userSession.accessToken;\n\n if (hasAccessToken) {\n const { accessTokenExpired, refreshTokenExpired } = userSession.isTokenExpired();\n\n if (!accessTokenExpired) {\n // Token is valid, proceed to authorization check\n } else if (refreshTokenExpired) {\n // Refresh token expired, redirect to login\n logger.warn('[UserAuthorized] Refresh token expired, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n } else {\n // Access token expired, try refresh\n logger.debug('[UserAuthorized] Access token expired, attempting refresh');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.error('[UserAuthorized] Token refresh failed, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n } else {\n // No access token, try refresh token flow\n logger.debug('[UserAuthorized] No access token, attempting refresh token flow');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.debug('[UserAuthorized] No valid session found, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n }\n\n // Step 2: Check consent status\n // Call getPendingConsents for fresh data - backend returns [] when CONSENT_FEATURE_ENABLED is false\n if (to.path !== '/auth/consent-required') {\n try {\n const batch = createAppBatch();\n const pending = await batch.users.getPendingConsents();\n if (pending && pending.length > 0) {\n logger.debug('[UserAuthorized] Pending consents found, redirecting to consent-required');\n next({\n path: '/auth/consent-required',\n query: { returnUrl: to.fullPath, ...to.query },\n });\n return;\n }\n } catch (err) {\n logger.warn('[UserAuthorized] Failed to check pending consents, continuing', { err });\n // On auth/network error, let user proceed; they may hit CONSENT_REQUIRED on next API call\n }\n }\n\n // Step 2.5: In strict mode, block unverified users from app entirely\n if (\n !to.path.startsWith('/auth/') &&\n env.emailVerificationMode === 'strict'\n ) {\n const emailVerified = userSession.currentSession?.user?.email_verified ?? true;\n if (!emailVerified) {\n logger.debug('[UserAuthorized] Strict mode: unverified user, redirecting to verify-email');\n next({ path: '/auth/verify-email', query: { returnUrl: to.fullPath } });\n return;\n }\n }\n\n // Step 3: Check authorization (user type)\n const userType = userSession.currentSession?.user.user_type;\n\n if (!userType) {\n logger.warn('[UserAuthorized] No user type found, redirecting');\n next(redirectTo);\n return;\n }\n\n if (allowedUserTypes.includes(userType)) {\n logger.debug(`[UserAuthorized] User type '${userType}' is authorized`);\n next();\n } else {\n logger.warn(\n `[UserAuthorized] User type '${userType}' is not authorized. Allowed: ${allowedUserTypes.join(', ')}`,\n );\n next(redirectTo);\n }\n };\n}\n\n/**\n * Pre-built guard: Staff and super admin only\n * Redirects non-staff users to the provided redirect path\n */\nexport function createStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Super admin only\n * Redirects non-super-admin users to the provided redirect path\n */\nexport function createSuperAdminOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['super_admin'],\n redirectTo: options?.redirectTo ?? '/notfound',\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: All authenticated users\n * Any logged-in user can access (consumer, lead, staff, or super_admin)\n */\nexport function createAuthenticatedGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Lead, staff, and super admin\n * Consumers are not allowed\n */\nexport function createLeadOrStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-configured guards with sensible defaults\n * Apps can use these directly or override with create*Guard functions\n */\n\n/**\n * Pre-configured: All authenticated users\n * Default redirect: Home, Default login: /auth/login\n */\nexport const userAuthenticated = createAuthenticatedGuard();\n\n/**\n * Pre-configured: Staff and super admin only\n * Default redirect: Home, Default login: /auth/login\n */\nexport const staffOnly = createStaffOnlyGuard();\n\n/**\n * Pre-configured: Super admin only\n * Default redirect: /notfound, Default login: /auth/login\n */\nexport const userIsSuperAdmin = createSuperAdminOnlyGuard();\n\n/**\n * Pre-configured: Lead, staff, and super admin\n * Default redirect: Home, Default login: /auth/login\n */\nexport const leadOrStaffOnly = createLeadOrStaffOnlyGuard();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dragonmastery/dragoncore-vue",
3
- "version": "0.0.29",
3
+ "version": "0.0.31",
4
4
  "description": "Vue 3 components and composables for dragoncore",
5
5
  "author": "DragonMastery",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -41,7 +41,7 @@
41
41
  "vue3-toastify": "0.2.8"
42
42
  },
43
43
  "peerDependencies": {
44
- "@dragonmastery/dragoncore-shared": "^0.0.29",
44
+ "@dragonmastery/dragoncore-shared": "^0.0.31",
45
45
  "@dragonmastery/zinia-forms-core": ">=0.5.11",
46
46
  "@vueuse/core": ">=14.0.0",
47
47
  "pinia": ">=3.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConsentFlowStep-DstxorHZ.js","names":["$emit"],"sources":["../src/slices/auth/features/shared/ConsentFlowStep.vue"],"sourcesContent":["<template>\n <div class=\"space-y-6\">\n <div class=\"text-center space-y-1\">\n <h1 class=\"text-2xl font-bold\">{{ config.label }}</h1>\n <p class=\"text-base-content/80\">Step {{ currentStep }} of {{ totalSteps }}</p>\n <p class=\"text-base-content/70 text-sm\">Review and accept</p>\n </div>\n\n <div\n v-if=\"submitError\"\n class=\"alert alert-error flex flex-col gap-2\"\n >\n <slot\n name=\"error-recovery\"\n :retry=\"retry\"\n :submitting=\"submitting\"\n >\n <span>{{ submitError }}</span>\n <p class=\"text-sm opacity-90\">You can try again using the buttons below.</p>\n </slot>\n </div>\n\n <p\n v-if=\"displayContent\"\n class=\"text-sm text-base-content/70 mb-2\"\n >\n {{ introText }}\n </p>\n\n <!-- Scrollable terms box when admin provides inline content -->\n <div\n v-if=\"displayContent\"\n :key=\"config.type\"\n :ref=\"(el) => setScrollRef(el)\"\n class=\"border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0\"\n :data-consent-type=\"config.type\"\n @scroll=\"onScroll\"\n >\n <div\n class=\"prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2\"\n v-html=\"renderMarkdown(displayContent)\"\n />\n </div>\n\n <!-- Link-only when admin does not provide content -->\n <div v-else-if=\"config.url\">\n <a\n :href=\"config.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link link-accent inline-flex items-center gap-1.5\"\n >\n View {{ config.label }}\n <ExternalLinkIcon />\n </a>\n </div>\n\n <div class=\"flex flex-col gap-5\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n :disabled=\"(needsScroll ? !hasScrolledToBottom : false) || submitting\"\n @click=\"$emit('accept')\"\n >\n {{ submitting ? submitAcceptLabel : acceptLabel }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-outline btn-sm btn-error\"\n :disabled=\"declining || submitting\"\n @click=\"$emit('decline')\"\n >\n {{ declining ? declineSubmittingLabel : declineLabel }}\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SignupConsentConfigDto } from '@dragonmastery/dragoncore-shared';\nimport ExternalLinkIcon from '../../../../components/ui/ExternalLinkIcon.vue';\nimport DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { computed, nextTick, ref, watch } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n config: SignupConsentConfigDto;\n currentStep: number;\n totalSteps: number;\n submitting?: boolean;\n submitError?: string | null;\n declining?: boolean;\n /** e.g. \"Accept and continue\" */\n acceptLabel?: string;\n /** e.g. \"Submitting...\" or \"Saving...\" */\n submitAcceptLabel?: string;\n /** e.g. \"Decline\" or \"Decline and log out\" */\n declineLabel?: string;\n /** e.g. \"Returning...\" or \"Logging out...\" */\n declineSubmittingLabel?: string;\n /** Intro text when content is shown, e.g. \"Please read the full document before accepting...\" */\n introText?: string;\n }>(),\n {\n submitting: false,\n submitError: null,\n declining: false,\n acceptLabel: 'Accept and continue',\n submitAcceptLabel: 'Submitting...',\n declineLabel: 'Decline',\n declineSubmittingLabel: 'Returning...',\n introText:\n \"Please read the full document before accepting. Scroll to the bottom when you've finished reading.\",\n },\n);\n\nconst emit = defineEmits<{\n accept: [];\n decline: [];\n}>();\n\nfunction retry() {\n emit('accept');\n}\n\nconst displayContent = computed(() => props.config.content ?? null);\n\nconst needsScroll = computed(() => Boolean(displayContent.value));\n\nconst hasScrolledToBottom = ref(!needsScroll.value);\nconst scrollEl = ref<HTMLElement | null>(null);\n\nfunction setScrollRef(el: unknown) {\n scrollEl.value = el instanceof HTMLElement ? el : null;\n}\n\nwatch(\n () => props.config,\n (config) => {\n hasScrolledToBottom.value = !(config?.content ?? null);\n nextTick(() => {\n scrollEl.value?.scrollTo(0, 0);\n });\n },\n { immediate: true },\n);\n\nwatch(displayContent, (content) => {\n hasScrolledToBottom.value = !content;\n nextTick(() => {\n scrollEl.value?.scrollTo(0, 0);\n });\n});\n\nfunction renderMarkdown(content: string): string {\n const html = marked.parse(content) as string;\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: [\n 'p',\n 'br',\n 'strong',\n 'em',\n 'u',\n 'a',\n 'ul',\n 'ol',\n 'li',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'blockquote',\n 'code',\n 'pre',\n 'hr',\n ],\n ALLOWED_ATTR: ['href', 'target', 'rel'],\n });\n}\n\nfunction checkScrolledToBottom() {\n const el = scrollEl.value;\n if (!el) return;\n const { scrollTop, scrollHeight, clientHeight } = el;\n const atBottom = scrollHeight - scrollTop - clientHeight < 10;\n if (atBottom) {\n hasScrolledToBottom.value = true;\n }\n}\n\nfunction onScroll() {\n checkScrolledToBottom();\n}\n</script>\n"],"mappings":"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"}