@dragonmastery/dragoncore-vue 0.0.21 → 0.0.23

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 (245) hide show
  1. package/dist/{AppLink-CHMMrSFI.js → AppLink-FcNGKgvG.js} +1 -1
  2. package/dist/{AppLink-CHMMrSFI.js.map → AppLink-FcNGKgvG.js.map} +1 -1
  3. package/dist/Appearance-Ch4zfWZ3.js +3 -0
  4. package/dist/{Appearance-DxWTyx1M.js → Appearance-shr0Aql0.js} +1 -1
  5. package/dist/{Appearance-DxWTyx1M.js.map → Appearance-shr0Aql0.js.map} +1 -1
  6. package/dist/{ChangePasswordPage--3XwluwE.js → ChangePasswordPage-C633yQiU.js} +2 -2
  7. package/dist/{ChangePasswordPage--3XwluwE.js.map → ChangePasswordPage-C633yQiU.js.map} +1 -1
  8. package/dist/ChangePasswordPage-CYuCCosx.js +7 -0
  9. package/dist/ConfirmDialog-DjthOYU6.js +85 -0
  10. package/dist/ConfirmDialog-DjthOYU6.js.map +1 -0
  11. package/dist/ConsentRequired-BPjsZoPY.js +211 -0
  12. package/dist/ConsentRequired-BPjsZoPY.js.map +1 -0
  13. package/dist/CreateTeamForm-CeaC41VY.js +142 -0
  14. package/dist/CreateTeamForm-CeaC41VY.js.map +1 -0
  15. package/dist/CreateTeamForm-DfgCaUwX.js +12 -0
  16. package/dist/CreateTeamMemberForm-Bv9gNG4z.js +140 -0
  17. package/dist/CreateTeamMemberForm-Bv9gNG4z.js.map +1 -0
  18. package/dist/CreateTeamMemberForm-CnHfpob_.js +12 -0
  19. package/dist/CreateUserPage-C9uOeYDJ.js +7 -0
  20. package/dist/{CreateUserPage-DLwXeLAq.js → CreateUserPage-CqKcY7_X.js} +2 -2
  21. package/dist/{CreateUserPage-DLwXeLAq.js.map → CreateUserPage-CqKcY7_X.js.map} +1 -1
  22. package/dist/CreditBalanceDashboard-0HiJE_OS.js +13 -0
  23. package/dist/CreditBalanceDashboard-k_orNn4h.js +28 -0
  24. package/dist/CreditBalanceDashboard-k_orNn4h.js.map +1 -0
  25. package/dist/CreditManagement-BVBZQDI4.js +356 -0
  26. package/dist/CreditManagement-BVBZQDI4.js.map +1 -0
  27. package/dist/CreditManagement-DXdIN-0d.js +13 -0
  28. package/dist/CreditTransactionHistory-DSu-6aDi.js +229 -0
  29. package/dist/CreditTransactionHistory-DSu-6aDi.js.map +1 -0
  30. package/dist/CustomerCreateSupportTicketForm-BsjX8Pja.js +14 -0
  31. package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js +158 -0
  32. package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js.map +1 -0
  33. package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js → CustomerSupportTicketDetailPage-C_-YoAaP.js} +12 -9
  34. package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js.map → CustomerSupportTicketDetailPage-C_-YoAaP.js.map} +1 -1
  35. package/dist/CustomerSupportTicketList-DdACn3ug.js +63 -0
  36. package/dist/{CustomerSupportTicketParent-HIxwSVdu.js → CustomerSupportTicketParent-BpBuYCrP.js} +4 -4
  37. package/dist/{CustomerSupportTicketParent-HIxwSVdu.js.map → CustomerSupportTicketParent-BpBuYCrP.js.map} +1 -1
  38. package/dist/CustomerSupportTicketParent-Djy7pNqO.js +8 -0
  39. package/dist/CustomerSupportTicketSuccess-DsFzpJFU.js +12 -0
  40. package/dist/CustomerSupportTicketSuccess-cumNSGdx.js +54 -0
  41. package/dist/CustomerSupportTicketSuccess-cumNSGdx.js.map +1 -0
  42. package/dist/EditTeamForm-BE3iX2x3.js +12 -0
  43. package/dist/EditTeamForm-BxRN338L.js +163 -0
  44. package/dist/EditTeamForm-BxRN338L.js.map +1 -0
  45. package/dist/EditTeamMemberForm-D7D1Zddh.js +9 -0
  46. package/dist/{EditTeamMemberForm-CaS2GLjV.js → EditTeamMemberForm-DfgJr5Cy.js} +7 -72
  47. package/dist/EditTeamMemberForm-DfgJr5Cy.js.map +1 -0
  48. package/dist/EditUserPage-C0K7EGjM.js +8 -0
  49. package/dist/{EditUserPage-DURc5rmi.js → EditUserPage-CI_jtU8P.js} +4 -4
  50. package/dist/{EditUserPage-DURc5rmi.js.map → EditUserPage-CI_jtU8P.js.map} +1 -1
  51. package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js +189 -0
  52. package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js.map +1 -0
  53. package/dist/FieldsetSection-Cd4B8Ad7.js +27 -0
  54. package/dist/FieldsetSection-Cd4B8Ad7.js.map +1 -0
  55. package/dist/{ForgotPassword-OjIPi9s9.js → ForgotPassword-Ckb9Z-wb.js} +4 -4
  56. package/dist/{ForgotPassword-OjIPi9s9.js.map → ForgotPassword-Ckb9Z-wb.js.map} +1 -1
  57. package/dist/ForgotPassword-tJVSg7PB.js +8 -0
  58. package/dist/{TimelineSystemEvent-BHzFr46C.js → InlineAttachments-DAn_QknY.js} +60 -661
  59. package/dist/InlineAttachments-DAn_QknY.js.map +1 -0
  60. package/dist/{LoginForm-9UFnA-fO.js → LoginForm-CMN2T1fA.js} +5 -5
  61. package/dist/{LoginForm-9UFnA-fO.js.map → LoginForm-CMN2T1fA.js.map} +1 -1
  62. package/dist/LoginForm-QFJ8NHww.js +8 -0
  63. package/dist/{Logout-YgTgOFUH.js → Logout-CFLYHlLr.js} +5 -5
  64. package/dist/{Logout-YgTgOFUH.js.map → Logout-CFLYHlLr.js.map} +1 -1
  65. package/dist/Logout-CjDBff3W.js +8 -0
  66. package/dist/MfaSetup-BZcoxJx-.js +9 -0
  67. package/dist/{MfaSetup-RtFMY_dj.js → MfaSetup-XqoAwBXx.js} +5 -5
  68. package/dist/{MfaSetup-RtFMY_dj.js.map → MfaSetup-XqoAwBXx.js.map} +1 -1
  69. package/dist/{MfaVerify-Cvhe8bEM.js → MfaVerify-C-A75TFZ.js} +6 -6
  70. package/dist/{MfaVerify-Cvhe8bEM.js.map → MfaVerify-C-A75TFZ.js.map} +1 -1
  71. package/dist/MfaVerify-Dy2aV5Gk.js +9 -0
  72. package/dist/{RecordVersionViewer-BWZ78vvE.js → RecordVersionViewer-D2j10HdK.js} +1 -1
  73. package/dist/{RecordVersionViewer-BWZ78vvE.js.map → RecordVersionViewer-D2j10HdK.js.map} +1 -1
  74. package/dist/{ResetPassword-BE4mXK9q.js → ResetPassword-Cd-Yxp8E.js} +4 -4
  75. package/dist/{ResetPassword-BE4mXK9q.js.map → ResetPassword-Cd-Yxp8E.js.map} +1 -1
  76. package/dist/ResetPassword-D6to3G6a.js +8 -0
  77. package/dist/{SavedFiltersPage-DQt6uc8m.js → SavedFiltersPage-DM5DvAFa.js} +62 -34
  78. package/dist/{SavedFiltersPage-DQt6uc8m.js.map → SavedFiltersPage-DM5DvAFa.js.map} +1 -1
  79. package/dist/{Signup-9TjMMnU4.js → Signup-2pqvJiVt.js} +57 -57
  80. package/dist/Signup-2pqvJiVt.js.map +1 -0
  81. package/dist/Signup-XdImA1os.js +9 -0
  82. package/dist/{SignupConsentFlow-QUZGKjdB.js → SignupConsentFlow-X3kXuviv.js} +106 -70
  83. package/dist/SignupConsentFlow-X3kXuviv.js.map +1 -0
  84. package/dist/{SignupRequirementsPage-DfbYmpQD.js → SignupRequirementsPage-Cf-ElkEq.js} +9 -8
  85. package/dist/{SignupRequirementsPage-DfbYmpQD.js.map → SignupRequirementsPage-Cf-ElkEq.js.map} +1 -1
  86. package/dist/StaffCreateSupportTicketForm-BlUP2XXy.js +14 -0
  87. package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js +255 -0
  88. package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js.map +1 -0
  89. package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js → StaffSupportTicketDetailPage-MFtm06BE.js} +14 -11
  90. package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js.map → StaffSupportTicketDetailPage-MFtm06BE.js.map} +1 -1
  91. package/dist/StaffSupportTicketList-LfLx0pYP.js +63 -0
  92. package/dist/StaffSupportTicketParent-B7mEN1oD.js +8 -0
  93. package/dist/{StaffSupportTicketParent-CilR4RGM.js → StaffSupportTicketParent-BvPwgOqH.js} +4 -4
  94. package/dist/{StaffSupportTicketParent-CilR4RGM.js.map → StaffSupportTicketParent-BvPwgOqH.js.map} +1 -1
  95. package/dist/StaffSupportTicketSuccess-BMCOP3ko.js +12 -0
  96. package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js +54 -0
  97. package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js.map +1 -0
  98. package/dist/{SupportStaffPage-KKugAnFm.js → SupportStaffPage-B69-kuvg.js} +8 -7
  99. package/dist/{SupportStaffPage-KKugAnFm.js.map → SupportStaffPage-B69-kuvg.js.map} +1 -1
  100. package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js → SupportTicketDevLifecycleBadge-BoAjMb08.js} +1 -1
  101. package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js.map → SupportTicketDevLifecycleBadge-BoAjMb08.js.map} +1 -1
  102. package/dist/{SupportTicketMaintenancePage-smItdkrD.js → SupportTicketMaintenancePage-Bptja-xb.js} +5 -4
  103. package/dist/{SupportTicketMaintenancePage-smItdkrD.js.map → SupportTicketMaintenancePage-Bptja-xb.js.map} +1 -1
  104. package/dist/TeamAttachmentsTab-Dk3LxX3n.js +63 -0
  105. package/dist/TeamHistoryTab-CRONdHcL.js +6 -0
  106. package/dist/{TeamHistoryTab-D5biUPmq.js → TeamHistoryTab-DM8KBEG1.js} +7 -19
  107. package/dist/TeamHistoryTab-DM8KBEG1.js.map +1 -0
  108. package/dist/TeamList-DYm_vQ2z.js +8 -0
  109. package/dist/TeamList-qdwlMuJv.js +141 -0
  110. package/dist/TeamList-qdwlMuJv.js.map +1 -0
  111. package/dist/TeamMemberList-4LRLT_7Z.js +7 -0
  112. package/dist/TeamMemberList-DyI1U1t_.js +166 -0
  113. package/dist/TeamMemberList-DyI1U1t_.js.map +1 -0
  114. package/dist/TeamMemberParent-B63pRfI6.js +10 -0
  115. package/dist/TeamMemberParent-D9Fxu7GD.js +83 -0
  116. package/dist/TeamMemberParent-D9Fxu7GD.js.map +1 -0
  117. package/dist/TeamMembersTab-BGcdyEE8.js +3 -0
  118. package/dist/{TeamMembersTab-4gmnP9sD.js → TeamMembersTab-BigqpBDH.js} +1 -1
  119. package/dist/{TeamMembersTab-4gmnP9sD.js.map → TeamMembersTab-BigqpBDH.js.map} +1 -1
  120. package/dist/{TeamNotesTab-BzGZZ1h8.js → TeamNotesTab-BgxleidZ.js} +6 -5
  121. package/dist/{TeamNotesTab-BzGZZ1h8.js.map → TeamNotesTab-BgxleidZ.js.map} +1 -1
  122. package/dist/TeamNotesTab-o7glfjoY.js +8 -0
  123. package/dist/TeamParent-BwXqA3rj.js +83 -0
  124. package/dist/TeamParent-BwXqA3rj.js.map +1 -0
  125. package/dist/TeamParent-CFOmyKPz.js +11 -0
  126. package/dist/{TimelineNoteInput-0p-M4Qie.js → TimelineNoteInput-DXaodm43.js} +3 -2
  127. package/dist/{TimelineNoteInput-0p-M4Qie.js.map → TimelineNoteInput-DXaodm43.js.map} +1 -1
  128. package/dist/TimelineSystemEvent-zCMUx5Zz.js +525 -0
  129. package/dist/TimelineSystemEvent-zCMUx5Zz.js.map +1 -0
  130. package/dist/UserListPage-Bmwg0an5.js +5 -0
  131. package/dist/{UserListPage-DUE5gJTo.js → UserListPage-DtA8tLff.js} +4 -3
  132. package/dist/{UserListPage-DUE5gJTo.js.map → UserListPage-DtA8tLff.js.map} +1 -1
  133. package/dist/UserProfilePage-DRbCAr9H.js +8 -0
  134. package/dist/{UserProfilePage-C3b93Keh.js → UserProfilePage-g4-VEDXo.js} +4 -4
  135. package/dist/{UserProfilePage-C3b93Keh.js.map → UserProfilePage-g4-VEDXo.js.map} +1 -1
  136. package/dist/{VerifyEmail-DlOmWGG-.js → VerifyEmail-CM5ehFB8.js} +7 -7
  137. package/dist/{VerifyEmail-DlOmWGG-.js.map → VerifyEmail-CM5ehFB8.js.map} +1 -1
  138. package/dist/VerifyEmail-DMHczC9f.js +10 -0
  139. package/dist/ViewTeam-CXyABxE6.js +8 -0
  140. package/dist/ViewTeam-DSbKV60o.js +220 -0
  141. package/dist/ViewTeam-DSbKV60o.js.map +1 -0
  142. package/dist/ViewTeamMember-BB0nvPOe.js +167 -0
  143. package/dist/ViewTeamMember-BB0nvPOe.js.map +1 -0
  144. package/dist/ViewTeamMember-jrOnBaDh.js +7 -0
  145. package/dist/ZiniaContainer-CjVhCnGB.js +18 -0
  146. package/dist/ZiniaContainer-CjVhCnGB.js.map +1 -0
  147. package/dist/{convertToLocalDateTime-CFhtN6PI.js → convertToLocalDateTime-BF25N4xd.js} +1 -2
  148. package/dist/convertToLocalDateTime-BF25N4xd.js.map +1 -0
  149. package/dist/customerSupportTicketRoutes-C7OxGAGl.js +142 -0
  150. package/dist/customerSupportTicketRoutes-C7OxGAGl.js.map +1 -0
  151. package/dist/{displayIdFormatter-Dz900Awr.js → displayIdFormatter-B-_WQHOr.js} +1 -1
  152. package/dist/{displayIdFormatter-Dz900Awr.js.map → displayIdFormatter-B-_WQHOr.js.map} +1 -1
  153. package/dist/{extractRpcErrorMessage-Di8E8-Wh.js → extractRpcErrorMessage-diUBl6Ij.js} +1 -1
  154. package/dist/{extractRpcErrorMessage-Di8E8-Wh.js.map → extractRpcErrorMessage-diUBl6Ij.js.map} +1 -1
  155. package/dist/index.d.ts +793 -834
  156. package/dist/index.js +66 -38
  157. package/dist/{mfaSchema-BnRWf0ma.js → mfaSchema-Ukqzdyck.js} +1 -1
  158. package/dist/{mfaSchema-BnRWf0ma.js.map → mfaSchema-Ukqzdyck.js.map} +1 -1
  159. package/dist/saved_filter-CfzH0BzK.js +1210 -0
  160. package/dist/saved_filter-CfzH0BzK.js.map +1 -0
  161. package/dist/signupConsentStorage-DS9vCUuC.js +27 -0
  162. package/dist/signupConsentStorage-DS9vCUuC.js.map +1 -0
  163. package/dist/{src-CEBiyg_f.css → src-C6ZmNSSU.css} +1 -1
  164. package/dist/{src-CEBiyg_f.css.map → src-C6ZmNSSU.css.map} +1 -1
  165. package/dist/src-DVe_0RO9.js +4654 -0
  166. package/dist/src-DVe_0RO9.js.map +1 -0
  167. package/dist/staffSupportTicketRoutes-CWutoQWp.js +135 -0
  168. package/dist/staffSupportTicketRoutes-CWutoQWp.js.map +1 -0
  169. package/dist/teamMemberMetadata-CQnbVepq.js +49 -0
  170. package/dist/teamMemberMetadata-CQnbVepq.js.map +1 -0
  171. package/dist/teamMetadata-DlvwO5V0.js +53 -0
  172. package/dist/teamMetadata-DlvwO5V0.js.map +1 -0
  173. package/dist/teamRoutes-KFgnsdDP.js +192 -0
  174. package/dist/teamRoutes-KFgnsdDP.js.map +1 -0
  175. package/dist/team_memberRoutes-Cjpw_ql6.js +84 -0
  176. package/dist/team_memberRoutes-Cjpw_ql6.js.map +1 -0
  177. package/dist/{useBreadcrumbs-qB6ghsAf.js → useBreadcrumbs-DIqU5AAp.js} +1 -1
  178. package/dist/{useBreadcrumbs-qB6ghsAf.js.map → useBreadcrumbs-DIqU5AAp.js.map} +1 -1
  179. package/dist/{useEmailVerificationChannel-BNi926Ho.js → useEmailVerificationChannel-B51z65PN.js} +3 -3
  180. package/dist/{useEmailVerificationChannel-BNi926Ho.js.map → useEmailVerificationChannel-B51z65PN.js.map} +1 -1
  181. package/dist/{useMutation-BTsyHKyn.js → useMutation-BLNuJoYl.js} +6 -3
  182. package/dist/useMutation-BLNuJoYl.js.map +1 -0
  183. package/dist/{useQuery-BggIE52P.js → useQuery-BzUGEOj0.js} +4 -3
  184. package/dist/{useQuery-BggIE52P.js.map → useQuery-BzUGEOj0.js.map} +1 -1
  185. package/dist/{useQueryCache-Bjm-S8v5.js → useQueryCache-alzaRWEb.js} +2 -2
  186. package/dist/{useQueryCache-Bjm-S8v5.js.map → useQueryCache-alzaRWEb.js.map} +1 -1
  187. package/dist/{useReturnUrl-qFeazn-G.js → useReturnUrl-B5V3SJf5.js} +1 -1
  188. package/dist/{useReturnUrl-qFeazn-G.js.map → useReturnUrl-B5V3SJf5.js.map} +1 -1
  189. package/dist/{useRpcAuth-rmHf7bYx.js → useRpcAuth-CJtq1dqM.js} +25 -194
  190. package/dist/useRpcAuth-CJtq1dqM.js.map +1 -0
  191. package/dist/userAuthorized-C09FHWGL.js +185 -0
  192. package/dist/userAuthorized-C09FHWGL.js.map +1 -0
  193. package/package.json +3 -3
  194. package/dist/Appearance-D5pwxuf4.js +0 -3
  195. package/dist/ChangePasswordPage-CpDPmEml.js +0 -6
  196. package/dist/ConsentRequired-C4IRMA0c.js +0 -213
  197. package/dist/ConsentRequired-C4IRMA0c.js.map +0 -1
  198. package/dist/CreateTeamForm-B4cIuYAf.js +0 -35
  199. package/dist/CreateTeamMemberForm-Chrw1y00.js +0 -35
  200. package/dist/CreateUserPage-WruMs7WP.js +0 -6
  201. package/dist/CreditBalanceDashboard-CkcsrZ_e.js +0 -35
  202. package/dist/CreditManagement-Ddvu9dMw.js +0 -35
  203. package/dist/CustomerCreateSupportTicketForm-BKperKGS.js +0 -35
  204. package/dist/CustomerSupportTicketList-DcbrjDa9.js +0 -35
  205. package/dist/CustomerSupportTicketParent-BeNzUwuP.js +0 -7
  206. package/dist/CustomerSupportTicketSuccess-CC967u3y.js +0 -35
  207. package/dist/EditTeamForm-B5Tee5wL.js +0 -35
  208. package/dist/EditTeamMemberForm-CaS2GLjV.js.map +0 -1
  209. package/dist/EditTeamMemberForm-OtcS8QWt.js +0 -6
  210. package/dist/EditUserPage-T4DQlKhf.js +0 -7
  211. package/dist/ForgotPassword-CUifhmqP.js +0 -7
  212. package/dist/LoginForm-Bg7GoZEA.js +0 -7
  213. package/dist/Logout-Bs92csWH.js +0 -7
  214. package/dist/MfaSetup-BACX5XP-.js +0 -8
  215. package/dist/MfaVerify-ak4iSdQ2.js +0 -8
  216. package/dist/ResetPassword-pY1uhTdl.js +0 -7
  217. package/dist/Signup-9TjMMnU4.js.map +0 -1
  218. package/dist/Signup-Bq-G3D-s.js +0 -9
  219. package/dist/SignupConsentFlow-QUZGKjdB.js.map +0 -1
  220. package/dist/StaffCreateSupportTicketForm-D0ZuisDk.js +0 -35
  221. package/dist/StaffSupportTicketList-CiqC05XB.js +0 -35
  222. package/dist/StaffSupportTicketParent-DkV329NI.js +0 -7
  223. package/dist/StaffSupportTicketSuccess-CUYnimaI.js +0 -35
  224. package/dist/TeamAttachmentsTab-DUtCD1Yi.js +0 -35
  225. package/dist/TeamHistoryTab-BsUoH4VK.js +0 -4
  226. package/dist/TeamHistoryTab-D5biUPmq.js.map +0 -1
  227. package/dist/TeamList-BkPIqZ8V.js +0 -35
  228. package/dist/TeamMemberList-1mxUGCNa.js +0 -35
  229. package/dist/TeamMemberParent-DzeBIElY.js +0 -35
  230. package/dist/TeamMembersTab-CBB2Yl_I.js +0 -3
  231. package/dist/TeamNotesTab-ClHl2nXd.js +0 -7
  232. package/dist/TeamParent-DJa9UZTP.js +0 -35
  233. package/dist/TimelineSystemEvent-BHzFr46C.js.map +0 -1
  234. package/dist/UserListPage-BTLE4J0s.js +0 -4
  235. package/dist/UserProfilePage-CVTORtSx.js +0 -7
  236. package/dist/VerifyEmail-DCP4DWIw.js +0 -9
  237. package/dist/ViewTeam-DVfnLMhV.js +0 -35
  238. package/dist/ViewTeamMember-L4v3gCIn.js +0 -35
  239. package/dist/convertToLocalDateTime-CFhtN6PI.js.map +0 -1
  240. package/dist/src-QZJyMfGX.js +0 -8951
  241. package/dist/src-QZJyMfGX.js.map +0 -1
  242. package/dist/useMutation-BTsyHKyn.js.map +0 -1
  243. package/dist/useRpcAuth-rmHf7bYx.js.map +0 -1
  244. package/dist/useSignupPendingData-BWHwUHhL.js +0 -47
  245. package/dist/useSignupPendingData-BWHwUHhL.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saved_filter-CfzH0BzK.js","names":["DEFAULT_OPERATORS: Record<string, string>","config: FilterConfiguration","operator: string","params: Record<string, string>","filters: FilterQueryParams","base: Record<string, string | string[]>","LAST_USED_PREFIX","getLastUsedKey","savedFilterRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/components/BaseModal.vue","../src/constants/time.ts","../src/slices/saved_filter/usePinnedPresets.ts","../src/utils/filterUrlParser.ts","../src/slices/saved_filter/lastUsedPresetGuard.ts","../src/slices/saved_filter/useSavedFilters.ts","../src/slices/saved_filter/savedFilterRoutes.ts","../src/slices/saved_filter/SaveFilterModal.vue","../src/slices/saved_filter/ManagePresetsModal.vue","../src/slices/saved_filter/PresetsModal.vue","../src/slices/saved_filter/SavedFilterPresets.vue"],"sourcesContent":["<template>\n <dialog ref=\"modal\" class=\"modal\">\n <div class=\"modal-box max-w-md w-full max-h-[90vh] flex flex-col p-0\">\n <!-- Header with title and close button - fixed, not scrollable -->\n <div\n class=\"flex justify-between items-center p-6 pb-4 border-b border-base-300 flex-shrink-0\"\n >\n <h3 class=\"font-bold text-lg\">\n <slot name=\"title\">{{ title }}</slot>\n </h3>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-circle btn-ghost\"\n @click.prevent=\"handleClose\"\n aria-label=\"Close modal\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n <!-- Content slot - scrollable area -->\n <div class=\"modal-content flex-1 overflow-y-auto p-6\">\n <slot></slot>\n </div>\n </div>\n <form method=\"dialog\" class=\"modal-backdrop\">\n <button type=\"button\" @click.prevent=\"handleClose\">close</button>\n </form>\n </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\n\ninterface Props {\n isOpen: boolean;\n title?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n});\n\nconst emit = defineEmits<{\n close: [];\n}>();\n\nconst modal = ref<HTMLDialogElement>();\n\nconst handleClose = () => {\n emit('close');\n};\n\n// Watch for modal open/close\nwatch(\n () => props.isOpen,\n (isOpen) => {\n if (isOpen && modal.value) {\n modal.value.showModal();\n } else if (!isOpen && modal.value) {\n modal.value.close();\n }\n },\n { immediate: true },\n);\n</script>\n","/**\n * Time duration constants in milliseconds.\n * Use for staleTime, cache TTL, etc.\n *\n * @example\n * staleTime: 30 * MS.ONE_SECOND\n * staleTime: 5 * MS.ONE_MINUTE\n * staleTime: 24 * MS.ONE_HOUR\n */\nexport const MS = {\n ONE_SECOND: 1000,\n ONE_MINUTE: 60 * 1000,\n ONE_HOUR: 60 * 60 * 1000,\n} as const;\n","/**\n * Composable for pinning presets to favorites (home page + sidebar).\n * Uses API with 24h cache. Max 5 pinned presets.\n *\n * Call usePinnedPresets() once in the layout (InAppLayout) and provide it.\n * Children use useInjectedPinnedPresets() to avoid duplicate fetches.\n */\n\nimport type { SavedFilterReadDto } from '@dragonmastery/dragoncore-shared';\nimport type { InjectionKey } from 'vue';\nimport { inject } from 'vue';\nimport { MS } from '../../constants/time';\nimport { useMutation } from '../../composables/useMutation';\nimport { useQuery } from '../../composables/useQuery';\nimport { computed } from 'vue';\n\nconst CACHE_KEY = 'pinned-presets';\nconst MAX_PINNED = 5;\n\nexport type PinnedPreset = Pick<\n SavedFilterReadDto,\n 'id' | 'name' | 'context' | 'route_path' | 'filters'\n>;\n\nexport function usePinnedPresets() {\n const { data: pinnedData, refetch } = useQuery(\n (api) => api.savedFilters.listPinnedPresets(),\n { cacheKey: CACHE_KEY, staleTime: 24 * MS.ONE_HOUR },\n );\n\n const { mutate: addPin } = useMutation(\n (api, id: string) => api.savedFilters.addPinnedPreset(id),\n { invalidate: CACHE_KEY },\n );\n\n const { mutate: removePin } = useMutation(\n (api, id: string) => api.savedFilters.removePinnedPreset(id),\n { invalidate: CACHE_KEY },\n );\n\n const pinned = computed(() => pinnedData.value ?? []);\n const pinnedIds = computed(() => new Set(pinned.value.map((p) => p.id)));\n const canPinMore = computed(() => pinned.value.length < MAX_PINNED);\n\n function isPinned(presetId: string): boolean {\n return pinnedIds.value.has(presetId);\n }\n\n async function pinPreset(preset: SavedFilterReadDto): Promise<boolean> {\n if (pinned.value.length >= MAX_PINNED) return false;\n if (pinnedIds.value.has(preset.id)) return true;\n try {\n await addPin(preset.id);\n await refetch();\n return true;\n } catch {\n return false;\n }\n }\n\n async function unpinPreset(presetId: string): Promise<void> {\n try {\n await removePin(presetId);\n await refetch();\n } catch {\n // Error handled by mutation\n }\n }\n\n async function togglePin(preset: SavedFilterReadDto): Promise<boolean> {\n if (isPinned(preset.id)) {\n await unpinPreset(preset.id);\n return false;\n }\n return pinPreset(preset);\n }\n\n function getPresetLink(preset: PinnedPreset): {\n path: string;\n query: Record<string, string | string[]>;\n } {\n return {\n path: preset.route_path,\n query: preset.filters ?? {},\n };\n }\n\n function updatePinnedPreset(\n presetId: string,\n updates: Partial<PinnedPreset>,\n ): void {\n // API is source of truth. Call refetchPinned when a preset is renamed\n // to refresh the pinned list with updated names.\n void presetId;\n void updates;\n }\n\n return {\n pinned,\n pinnedIds,\n canPinMore,\n isPinned,\n pinPreset,\n unpinPreset,\n togglePin,\n getPresetLink,\n updatePinnedPreset,\n refetchPinned: refetch,\n maxPinned: MAX_PINNED,\n };\n}\n\nexport const PINNED_PRESETS_KEY = Symbol('pinnedPresets') as InjectionKey<\n ReturnType<typeof usePinnedPresets>\n>;\n\n/** Use pinned presets from the layout provider. Call this in child components (Sidebar, AppHome, etc.). */\nexport function useInjectedPinnedPresets() {\n const injected = inject(PINNED_PRESETS_KEY);\n if (!injected) {\n throw new Error(\n 'useInjectedPinnedPresets must be used within a component tree that provides pinned presets (e.g. InAppLayout).',\n );\n }\n return injected;\n}\n","/**\n * Filter URL Parser - Query string serialization/deserialization\n * Uses compact DrizzleORM-style format: flt[field]=value or flt[field][op]=value\n */\n\nimport { OPERATORS } from '@dragonmastery/dragoncore-shared';\n\n/**\n * Default operators for each field type when not specified in URL\n */\nconst DEFAULT_OPERATORS: Record<string, string> = {\n string: OPERATORS.CONTAINS,\n number: OPERATORS.EQUALS,\n date: OPERATORS.EQUALS,\n boolean: OPERATORS.EQUALS,\n enum: OPERATORS.EQUALS,\n};\n\n/**\n * Numeric types that should be converted to numbers\n */\nconst NUMERIC_TYPES = ['number', 'money', 'percentage'];\n\n/**\n * Check if operator requires array values\n */\nfunction requiresArrayValues(operator: string): boolean {\n return (\n operator === OPERATORS.IS_ONE_OF ||\n operator === OPERATORS.IS_NOT_ONE_OF ||\n operator === OPERATORS.BETWEEN\n );\n}\n\n/**\n * Check if operator is a null check (requires no value)\n */\nfunction isNullCheckOperator(operator: string): boolean {\n return operator === OPERATORS.IS_EMPTY || operator === OPERATORS.IS_NOT_EMPTY;\n}\n\n/**\n * Field registry metadata for type inference\n */\nexport interface FieldRegistryMetadata {\n [fieldName: string]: {\n type: 'string' | 'number' | 'date' | 'boolean' | 'enum' | 'money' | 'percentage';\n filterable?: boolean;\n };\n}\n\n/**\n * Filter value object structure\n */\nexport interface FilterValueObject {\n operator: string;\n value?: any;\n values?: any[];\n caseSensitive?: boolean;\n}\n\n/**\n * Filter configuration - flat object mapping field names to filter objects\n */\nexport type FilterConfiguration = Record<string, FilterValueObject>;\n\n/**\n * Deserialize filter configuration from URL query parameters object\n * Parses compact DrizzleORM-style format: flt[field]=value or flt[field][op]=value\n *\n * @param params - URL query parameters object (from Vue Router route.query)\n * @param registry - Field registry metadata for type inference\n * @returns Filter configuration object\n *\n * @example\n * // URL: ?flt[department][eq]=Engineering&flt[id]=4&flt[role][in]=[\"admin\",\"user\"]\n * const filters = deserializeFiltersFromQueryParams(route.query, fieldRegistry);\n * // Result: {\n * // department: { operator: 'eq', value: 'Engineering' },\n * // id: { operator: 'eq', value: 4 },\n * // role: { operator: 'in', values: ['admin', 'user'] }\n * // }\n */\nexport function deserializeFiltersFromQueryParams(\n params: Record<string, string | string[]>,\n registry: FieldRegistryMetadata,\n): FilterConfiguration {\n const config: FilterConfiguration = {};\n const fieldMap = new Map<string, Partial<FilterValueObject>>();\n\n // Parse query params\n for (const [key, value] of Object.entries(params)) {\n // Match flt[field] or flt[field][op]\n const matchDefault = key.match(/^flt\\[([^\\]]+)\\]$/);\n const matchWithOp = key.match(/^flt\\[([^\\]]+)\\]\\[([^\\]]+)\\]$/);\n\n if (!matchDefault && !matchWithOp) continue;\n\n const fieldName = matchDefault ? matchDefault[1] : matchWithOp ? matchWithOp[1] : null;\n const operatorShorthand = matchWithOp ? matchWithOp[2] : null;\n const stringValue = Array.isArray(value) ? value[0] : value;\n\n if (!fieldName) continue;\n\n const fieldMeta = registry[fieldName];\n if (!fieldMeta) continue; // Skip unknown fields\n\n const fieldType = fieldMeta.type;\n const defaultOp = DEFAULT_OPERATORS[fieldType] || OPERATORS.EQUALS;\n\n // Determine operator\n let operator: string;\n if (operatorShorthand) {\n operator = operatorShorthand;\n } else {\n operator = defaultOp;\n }\n\n if (!fieldMap.has(fieldName)) {\n fieldMap.set(fieldName, { operator });\n }\n\n const filter = fieldMap.get(fieldName)!;\n filter.operator = operator;\n\n // Parse value based on operator type\n if (isNullCheckOperator(operator)) {\n // Null checks don't have values\n // Value is already set, nothing more to do\n } else if (requiresArrayValues(operator)) {\n // Array operators: parse JSON array (handles commas/quotes in values)\n if (!stringValue || stringValue.trim() === '') {\n fieldMap.delete(fieldName);\n continue;\n }\n\n try {\n const parsed = JSON.parse(stringValue);\n if (Array.isArray(parsed) && parsed.length > 0) {\n // Convert to appropriate types based on field type\n if (NUMERIC_TYPES.includes(fieldType)) {\n filter.values = parsed.map((v) => Number(v));\n } else {\n filter.values = parsed;\n }\n } else {\n fieldMap.delete(fieldName);\n continue;\n }\n } catch (e) {\n // Invalid JSON, try legacy comma-separated format for backward compatibility\n const values = stringValue\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v.length > 0);\n if (values.length === 0) {\n fieldMap.delete(fieldName);\n continue;\n }\n\n if (operator === OPERATORS.BETWEEN && values.length === 2) {\n if (NUMERIC_TYPES.includes(fieldType)) {\n filter.values = [Number(values[0]!), Number(values[1]!)];\n } else if (fieldType === 'date') {\n filter.values = [values[0]!, values[1]!];\n } else {\n filter.values = values;\n }\n } else if (operator === OPERATORS.BETWEEN) {\n fieldMap.delete(fieldName);\n continue;\n } else {\n if (NUMERIC_TYPES.includes(fieldType)) {\n filter.values = values.map((v) => Number(v));\n } else {\n filter.values = values;\n }\n }\n }\n } else {\n // Single value operators\n // Special case: if operator is in/notIn but we got a single value, convert to array\n if (\n (operator === OPERATORS.IS_ONE_OF || operator === OPERATORS.IS_NOT_ONE_OF) &&\n stringValue\n ) {\n // Convert single value to array for array operators\n if (NUMERIC_TYPES.includes(fieldType)) {\n filter.values = [Number(stringValue)];\n } else {\n filter.values = [stringValue];\n }\n } else if (stringValue) {\n // Regular single value operator\n if (NUMERIC_TYPES.includes(fieldType)) {\n filter.value = Number(stringValue);\n } else if (fieldType === 'boolean') {\n filter.value = stringValue === 'true' || stringValue === '1';\n } else {\n filter.value = stringValue;\n }\n\n // String fields: always case-insensitive (contains is default)\n if (fieldType === 'string' && operator === OPERATORS.CONTAINS) {\n filter.caseSensitive = false;\n }\n }\n }\n }\n\n // Convert to FilterConfiguration\n for (const [fieldName, filter] of fieldMap.entries()) {\n if (filter.operator) {\n config[fieldName] = filter as FilterValueObject;\n }\n }\n\n return config;\n}\n\n/**\n * Serialize filter configuration to URL query parameters object\n * Uses compact DrizzleORM-style format: flt[field][op]=value\n *\n * @param config - Filter configuration object\n * @param registry - Field registry metadata for type inference\n * @returns URL query parameters object (can be used with Vue Router)\n *\n * @example\n * const filters = {\n * department: { operator: 'eq', value: 'Engineering' },\n * role: { operator: 'in', values: ['admin', 'user'] }\n * };\n * const params = serializeFiltersToQueryParams(filters, fieldRegistry);\n * // Result: {\n * // 'flt[department][eq]': 'Engineering',\n * // 'flt[role][in]': '[\"admin\",\"user\"]'\n * // }\n */\nexport function serializeFiltersToQueryParams(\n config: FilterConfiguration,\n registry: FieldRegistryMetadata,\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n for (const [fieldName, filter] of Object.entries(config)) {\n const fieldMeta = registry[fieldName];\n if (!fieldMeta) continue;\n\n const operator = filter.operator;\n\n if (isNullCheckOperator(operator)) {\n // Null checks don't need values, just the operator\n params[`flt[${fieldName}][${operator}]`] = '';\n } else if (requiresArrayValues(operator)) {\n // Array operators: use JSON encoding (handles commas/quotes)\n if (filter.values && Array.isArray(filter.values)) {\n params[`flt[${fieldName}][${operator}]`] = JSON.stringify(filter.values);\n }\n } else {\n // Single value: include operator explicitly\n params[`flt[${fieldName}][${operator}]`] = String(filter.value);\n }\n }\n\n return params;\n}\n\n/** Raw filter params format used by useSavedFilters (flt[key]=value) */\nexport type FilterQueryParams = Record<string, string | string[]>;\n\n/**\n * Extract filter query params from route query.\n * Handles Vue Router's LocationQuery type which can have null values.\n * Only extracts flt[...] params (actual filters).\n *\n * @example\n * // URL: ?flt[type][in]=[\"sales\",\"escalation\"]&flt[phase][ne]=Post+Sale\n * // Returns: { 'flt[type][in]': '[\"sales\",\"escalation\"]', 'flt[phase][ne]': 'Post+Sale' }\n */\nexport function extractFiltersFromQuery(query: Record<string, unknown>): FilterQueryParams {\n const filters: FilterQueryParams = {};\n\n Object.keys(query).forEach((key) => {\n if (key.startsWith('flt[')) {\n const value = query[key];\n if (value !== null && value !== undefined) {\n if (Array.isArray(value)) {\n const filtered = value.filter((v): v is string => v !== null && v !== undefined);\n if (filtered.length > 0) {\n filters[key] = filtered;\n }\n } else {\n filters[key] = String(value);\n }\n }\n }\n });\n\n return filters;\n}\n\n/**\n * Build a new query object with filter params replaced (not merged).\n * Strips all flt[...] params from the current query, then adds the new filters.\n * Preserves non-filter params (sort, pagination, etc).\n */\nexport function buildQueryWithFilters(\n currentQuery: Record<string, unknown>,\n filters: FilterQueryParams,\n): Record<string, string | string[]> {\n const base: Record<string, string | string[]> = {};\n for (const [key, value] of Object.entries(currentQuery)) {\n if (!key.startsWith('flt[') && value !== null && value !== undefined) {\n base[key] = Array.isArray(value)\n ? (value.filter((v): v is string => v != null) as string[])\n : String(value);\n }\n }\n return { ...base, ...filters };\n}\n","/**\n * Router guard helper: redirect to last-used preset filters when navigating with no URL filters.\n * Uses localStorage (no API call) - filters are stored when user applies a preset.\n * Prevents double fetch by applying preset before the list component mounts.\n */\n\nimport { buildQueryWithFilters, extractFiltersFromQuery } from '../../utils/filterUrlParser';\n\nconst LAST_USED_PREFIX = 'lastUsedPreset:';\nconst LAST_USED_FILTERS_PREFIX = 'lastUsedPresetFilters:';\n\nfunction getLastUsedKey(context: string): string {\n return `${LAST_USED_PREFIX}${context}`;\n}\n\nfunction getLastUsedFiltersKey(context: string): string {\n return `${LAST_USED_FILTERS_PREFIX}${context}`;\n}\n\nexport function getLastUsedPresetFilters(\n context: string,\n): Record<string, string | string[]> | null {\n try {\n const stored = localStorage.getItem(getLastUsedFiltersKey(context));\n if (!stored) return null;\n const parsed = JSON.parse(stored) as Record<string, string | string[]>;\n return typeof parsed === 'object' && parsed !== null ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function setLastUsedPresetFilters(\n context: string,\n filters: Record<string, string | string[]> | null,\n): void {\n try {\n if (filters && Object.keys(filters).length > 0) {\n localStorage.setItem(getLastUsedFiltersKey(context), JSON.stringify(filters));\n } else {\n localStorage.removeItem(getLastUsedFiltersKey(context));\n }\n } catch {\n // Ignore\n }\n}\n\n/**\n * If navigating with no filters and we have a last-used preset, returns the query to redirect to.\n * Otherwise returns null (no redirect needed).\n */\nexport function getLastUsedPresetRedirect(\n context: string,\n currentQuery: Record<string, unknown>,\n): Record<string, string | string[]> | null {\n const filters = extractFiltersFromQuery(currentQuery);\n if (Object.keys(filters).length > 0) return null;\n\n const lastUsedId = localStorage.getItem(getLastUsedKey(context));\n if (!lastUsedId) return null;\n\n const lastUsedFilters = getLastUsedPresetFilters(context);\n if (!lastUsedFilters || Object.keys(lastUsedFilters).length === 0) return null;\n\n return buildQueryWithFilters(currentQuery, lastUsedFilters);\n}\n\n/**\n * Creates a Vue Router beforeEnter guard that redirects to last-used preset when navigating with no filters.\n * Use on list routes that have SavedFilterPresets.\n */\nexport function createLastUsedPresetGuard(\n context: string,\n routeName: string,\n) {\n return (to: { name?: unknown; query: Record<string, unknown> }) => {\n if (to.name !== routeName) return undefined;\n const redirectQuery = getLastUsedPresetRedirect(context, to.query);\n if (!redirectQuery) return undefined;\n return { name: routeName, query: redirectQuery };\n };\n}\n","/**\n * Composable for saved filter presets - save, apply, and manage named filter configurations.\n * Works with any data table that provides getFiltersFromTable / applyFiltersToTable adapters.\n */\n\nimport type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport type { SavedFilterReadDto } from '@dragonmastery/dragoncore-shared';\nimport { MS } from '../../constants/time';\nimport { useMutation } from '../../composables/useMutation';\nimport { useQuery } from '../../composables/useQuery';\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { setLastUsedPresetFilters } from './lastUsedPresetGuard';\n\nconst LAST_USED_PREFIX = 'lastUsedPreset:';\n\nexport type SavedFiltersConfig = {\n /** Unique context per table type (e.g. \"tracker\", \"followup\") */\n context: string;\n /** Route path for the table (e.g. \"/trackers\", \"/followups\") */\n routePath: string;\n /** Read current filters from the table/URL */\n getFiltersFromTable: () => Record<string, string | string[]>;\n /** Apply filters to the table/URL */\n applyFiltersToTable: (filters: Record<string, string | string[]>) => void;\n /** Called when user explicitly clears all filters - clear last-used preset */\n onClearFilters?: () => void;\n};\n\nfunction getLastUsedKey(context: string): string {\n return `${LAST_USED_PREFIX}${context}`;\n}\n\nfunction getLastUsedPresetId(context: string): string | null {\n try {\n return localStorage.getItem(getLastUsedKey(context));\n } catch {\n return null;\n }\n}\n\nfunction setLastUsedPresetId(context: string, presetId: string | null): void {\n try {\n if (presetId) {\n localStorage.setItem(getLastUsedKey(context), presetId);\n } else {\n localStorage.removeItem(getLastUsedKey(context));\n }\n } catch {\n // Ignore\n }\n}\n\nexport function useSavedFilters<TApi extends DragoncoreApi = DragoncoreApi>(\n config: SavedFiltersConfig,\n) {\n const {\n context,\n routePath,\n getFiltersFromTable,\n applyFiltersToTable,\n onClearFilters,\n } = config;\n\n const cacheKey = `saved-filters:${context}`;\n const hasAppliedLastUsed = ref(false);\n const lastUsedPresetIdRef = ref<string | null>(getLastUsedPresetId(context));\n\n const { data: presets, loading: presetsLoading, refetch: refetchPresets } = useQuery<\n TApi,\n SavedFilterReadDto[]\n >((api) => api.savedFilters.listSavedFilters(context), {\n cacheKey,\n staleTime: 24 * MS.ONE_HOUR,\n });\n\n const { mutate: createPreset, loading: creating } = useMutation<\n TApi,\n { name: string; context: string; route_path: string; filters: Record<string, string | string[]>; sort_by?: string; sort_direction?: 'asc' | 'desc' },\n SavedFilterReadDto\n >(\n (api, input) => api.savedFilters.createSavedFilter(input),\n { invalidate: /^saved-filters:/ },\n );\n\n const { mutate: updatePreset, loading: updating } = useMutation<\n TApi,\n { id: string; name?: string; route_path?: string; filters?: Record<string, string | string[]>; sort_by?: string; sort_direction?: 'asc' | 'desc' },\n SavedFilterReadDto | null\n >(\n (api, input) => api.savedFilters.updateSavedFilter(input),\n { invalidate: /^saved-filters:|^pinned-presets/ },\n );\n\n const { mutate: deletePreset, loading: deleting } = useMutation<TApi, string, boolean>(\n (api, id) => api.savedFilters.deleteSavedFilter(id),\n { invalidate: /^saved-filters:/ },\n );\n\n function applyPreset(preset: SavedFilterReadDto): void {\n applyFiltersToTable(preset.filters);\n setLastUsedPresetId(context, preset.id);\n setLastUsedPresetFilters(context, preset.filters);\n lastUsedPresetIdRef.value = preset.id;\n }\n\n function clearPreset(): void {\n applyFiltersToTable({});\n setLastUsedPresetId(context, null);\n setLastUsedPresetFilters(context, null);\n lastUsedPresetIdRef.value = null;\n }\n\n function clearLastUsed(): void {\n setLastUsedPresetId(context, null);\n setLastUsedPresetFilters(context, null);\n lastUsedPresetIdRef.value = null;\n onClearFilters?.();\n }\n\n async function saveCurrentFilters(name: string): Promise<SavedFilterReadDto | null> {\n const filters = getFiltersFromTable();\n if (Object.keys(filters).length === 0) {\n return null;\n }\n try {\n const result = await createPreset({\n name,\n context,\n route_path: routePath,\n filters,\n });\n if (result) {\n await refetchPresets();\n setLastUsedPresetId(context, result.id);\n setLastUsedPresetFilters(context, result.filters);\n lastUsedPresetIdRef.value = result.id;\n }\n return result ?? null;\n } catch {\n return null;\n }\n }\n\n async function updatePresetFilters(presetId: string, name?: string): Promise<SavedFilterReadDto | null> {\n const filters = getFiltersFromTable();\n try {\n const result = await updatePreset({\n id: presetId,\n ...(name !== undefined && { name }),\n filters,\n });\n return result ?? null;\n } catch {\n return null;\n }\n }\n\n async function renamePreset(presetId: string, name: string): Promise<SavedFilterReadDto | null> {\n try {\n const result = await updatePreset({ id: presetId, name });\n if (result) {\n await refetchPresets();\n }\n return result ?? null;\n } catch {\n return null;\n }\n }\n\n async function removePreset(presetId: string): Promise<boolean> {\n try {\n await deletePreset(presetId);\n await refetchPresets();\n return true;\n } catch {\n return false;\n }\n }\n\n // On mount: if no filters in URL, apply last-used preset when presets load.\n // Note: For routes with lastUsedPresetGuard, the guard redirects before mount so this is often a no-op.\n onMounted(() => {\n const filters = getFiltersFromTable();\n if (Object.keys(filters).length > 0) {\n hasAppliedLastUsed.value = true;\n return;\n }\n const lastUsedId = getLastUsedPresetId(context);\n if (!lastUsedId) {\n hasAppliedLastUsed.value = true;\n return;\n }\n const unwatch = watch(\n () => presets.value,\n (list) => {\n if (!list || hasAppliedLastUsed.value) return;\n const preset = list.find((p) => p.id === lastUsedId);\n if (preset) {\n applyPreset(preset);\n }\n hasAppliedLastUsed.value = true;\n unwatch();\n },\n { immediate: true },\n );\n });\n\n const activePreset = computed(() => {\n const id = lastUsedPresetIdRef.value;\n if (!id) return null;\n return (presets.value ?? []).find((p) => p.id === id) ?? null;\n });\n\n return {\n presets: computed(() => presets.value ?? []),\n presetsLoading,\n creating,\n updating,\n deleting,\n applyPreset,\n clearPreset,\n clearLastUsed,\n activePreset,\n saveCurrentFilters,\n updatePresetFilters,\n renamePreset,\n removePreset,\n };\n}\n","import { userAuthenticated } from '../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../types/ExtendedRoute';\n\nexport const savedFilterRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/saved-filters',\n name: 'SavedFilters',\n component: () => import('./SavedFiltersPage.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Saved Filters',\n description: 'Manage your saved filter presets and favorites',\n side_bar: {\n section: 'Saved Filters',\n visible_to: ['consumer', 'lead', 'staff', 'super_admin'],\n },\n },\n },\n];\n","<template>\n <BaseModal :is-open=\"isOpen\" title=\"Save Filter Preset\" @close=\"close\">\n <form @submit.prevent=\"handleSubmit\" class=\"space-y-4\">\n <div class=\"form-control\">\n <label class=\"label\">\n <span class=\"label-text\">Preset name</span>\n </label>\n <input\n v-model=\"name\"\n type=\"text\"\n placeholder=\"e.g. My Sales Escalations\"\n class=\"input input-bordered w-full\"\n maxlength=\"100\"\n />\n <label v-if=\"error\" class=\"label\">\n <span class=\"label-text-alt text-error\">{{ error }}</span>\n </label>\n </div>\n <div class=\"flex justify-end gap-2\">\n <button type=\"button\" class=\"btn btn-ghost\" @click=\"close\">\n Cancel\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" :disabled=\"saving || !name.trim()\">\n {{ saving ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </form>\n </BaseModal>\n</template>\n\n<script setup lang=\"ts\">\nimport BaseModal from '../../components/BaseModal.vue';\nimport { ref, watch } from 'vue';\n\nconst props = defineProps<{\n isOpen: boolean;\n saving?: boolean;\n}>();\n\nconst emit = defineEmits<{\n close: [];\n save: [name: string];\n}>();\n\nconst name = ref('');\nconst error = ref('');\n\nfunction close() {\n emit('close');\n}\n\nfunction handleSubmit() {\n const trimmed = name.value.trim();\n if (!trimmed) {\n error.value = 'Name is required';\n return;\n }\n if (trimmed.length > 100) {\n error.value = 'Name must be 100 characters or less';\n return;\n }\n error.value = '';\n emit('save', trimmed);\n}\n\nwatch(() => props.isOpen, (open) => {\n if (open) {\n name.value = '';\n error.value = '';\n }\n});\n</script>\n","<template>\n <BaseModal :is-open=\"isOpen\" title=\"Manage Filter Presets\" @close=\"close\">\n <div class=\"space-y-4\">\n <p v-if=\"presets.length === 0 && !loading\" class=\"text-base-content/70 text-sm\">\n No saved presets yet. Set filters, then use \"Save current filters\" in the Presets menu.\n </p>\n <div v-else-if=\"loading\" class=\"flex justify-center py-4\">\n <span class=\"loading loading-spinner loading-md\" />\n </div>\n <ul v-else class=\"space-y-2\">\n <li\n v-for=\"preset in presets\"\n :key=\"preset.id\"\n class=\"flex items-center gap-2 p-2 rounded-lg bg-base-200\"\n >\n <template v-if=\"editingId === preset.id\">\n <input\n ref=\"renameInputRef\"\n v-model=\"editingName\"\n type=\"text\"\n class=\"input input-sm input-bordered flex-1 min-w-0\"\n maxlength=\"100\"\n placeholder=\"Preset name\"\n @keydown.enter=\"saveRename(preset.id)\"\n @keydown.escape=\"cancelRename\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary shrink-0\"\n :disabled=\"renaming || !editingName.trim()\"\n @click=\"saveRename(preset.id)\"\n >\n {{ renaming ? '...' : 'Save' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost shrink-0\"\n :disabled=\"renaming\"\n @click=\"cancelRename\"\n >\n Cancel\n </button>\n </template>\n <template v-else>\n <span class=\"font-medium truncate flex-1 min-w-0\">\n {{ preset.name }}\n <span class=\"text-base-content/60 text-xs font-normal ml-1\">\n ({{ Object.keys(preset.filters || {}).length }})\n </span>\n </span>\n <div class=\"flex gap-1 shrink-0\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost\"\n title=\"Rename\"\n @click=\"startRename(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost text-error\"\n title=\"Delete\"\n :disabled=\"deleting\"\n @click=\"handleDelete(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n </button>\n </div>\n </template>\n </li>\n </ul>\n <div class=\"flex justify-end pt-2\">\n <button type=\"button\" class=\"btn btn-ghost\" @click=\"close\">\n Close\n </button>\n </div>\n </div>\n </BaseModal>\n</template>\n\n<script setup lang=\"ts\">\nimport BaseModal from '../../components/BaseModal.vue';\nimport type { SavedFilterReadDto } from '@dragonmastery/dragoncore-shared';\nimport { nextTick, ref, watch } from 'vue';\n\nconst props = defineProps<{\n isOpen: boolean;\n presets: SavedFilterReadDto[];\n loading?: boolean;\n deleting?: boolean;\n renaming?: boolean;\n renamePreset: (presetId: string, name: string) => Promise<SavedFilterReadDto | null>;\n}>();\n\nconst emit = defineEmits<{\n close: [];\n delete: [preset: SavedFilterReadDto];\n}>();\n\nconst editingId = ref<string | null>(null);\nconst editingName = ref('');\nconst renameInputRef = ref<HTMLInputElement | null>(null);\n\nfunction close() {\n emit('close');\n}\n\nfunction startRename(preset: SavedFilterReadDto) {\n editingId.value = preset.id;\n editingName.value = preset.name;\n nextTick(() => renameInputRef.value?.focus());\n}\n\nfunction cancelRename() {\n editingId.value = null;\n editingName.value = '';\n}\n\nasync function saveRename(presetId: string) {\n const name = editingName.value.trim();\n if (!name) return;\n const result = await props.renamePreset(presetId, name);\n if (result) {\n cancelRename();\n }\n}\n\nfunction handleDelete(preset: SavedFilterReadDto) {\n emit('delete', preset);\n}\n\nwatch(() => props.isOpen, (open) => {\n if (!open) {\n cancelRename();\n }\n});\n</script>\n","<template>\n <BaseModal :is-open=\"isOpen\" title=\"Filter Presets\" @close=\"close\">\n <div class=\"space-y-4\">\n <!-- Preset list: apply (click name), rename, delete -->\n <div v-if=\"presets.length > 0\">\n <p class=\"text-xs font-medium text-base-content/60 uppercase tracking-wide mb-2\">\n Apply preset\n </p>\n <ul class=\"space-y-2\">\n <li\n v-for=\"preset in presets\"\n :key=\"preset.id\"\n class=\"flex items-center gap-2 p-2 rounded-lg bg-base-200\"\n >\n <template v-if=\"editingId === preset.id\">\n <input\n ref=\"renameInputRef\"\n v-model=\"editingName\"\n type=\"text\"\n class=\"input input-sm input-bordered flex-1 min-w-0\"\n maxlength=\"100\"\n placeholder=\"Preset name\"\n @keydown.enter=\"saveRename(preset.id)\"\n @keydown.escape=\"cancelRename\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary shrink-0\"\n :disabled=\"renaming || !editingName.trim()\"\n @click=\"saveRename(preset.id)\"\n >\n {{ renaming ? '...' : 'Save' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost shrink-0\"\n :disabled=\"renaming\"\n @click=\"cancelRename\"\n >\n Cancel\n </button>\n </template>\n <template v-else>\n <button\n type=\"button\"\n class=\"flex-1 min-w-0 text-left font-medium truncate rounded px-2 py-1 -mx-2 -my-1 hover:bg-base-300\"\n :class=\"{ 'bg-primary/10': preset.id === activePreset?.id }\"\n @click=\"applyAndClose(preset)\"\n >\n {{ preset.name }}\n <span class=\"text-base-content/60 text-xs font-normal ml-1\">\n ({{ Object.keys(preset.filters || {}).length }})\n </span>\n </button>\n <div class=\"flex gap-1 shrink-0\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost\"\n :title=\"isPinned(preset.id) ? 'Unpin from favorites' : (canPinMore ? 'Pin to favorites (home + sidebar)' : `Maximum ${maxPinned} pinned`)\"\n :disabled=\"!canPinMore && !isPinned(preset.id)\"\n @click.stop=\"handleTogglePin(preset)\"\n >\n <svg\n class=\"w-4 h-4\"\n :class=\"{ 'text-primary': isPinned(preset.id) }\"\n :fill=\"isPinned(preset.id) ? 'currentColor' : 'none'\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost\"\n title=\"Rename\"\n @click.stop=\"startRename(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost text-error\"\n title=\"Delete\"\n :disabled=\"deleting\"\n @click.stop=\"handleDelete(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n </button>\n </div>\n </template>\n </li>\n </ul>\n </div>\n\n <!-- Empty state -->\n <p\n v-else-if=\"!loading\"\n class=\"text-base-content/70 text-sm\"\n >\n No presets yet. Set filters, then save below.\n </p>\n\n <div v-if=\"loading\" class=\"flex justify-center py-2\">\n <span class=\"loading loading-spinner loading-md\" />\n </div>\n\n <div class=\"divider my-2\" />\n\n <!-- Save current filters: inline form when saving -->\n <div v-if=\"showSaveForm\" class=\"space-y-2\">\n <label class=\"label py-0\">\n <span class=\"label-text\">Preset name</span>\n </label>\n <div class=\"flex gap-2\">\n <input\n ref=\"saveInputRef\"\n v-model=\"saveName\"\n type=\"text\"\n placeholder=\"e.g. My Sales Escalations\"\n class=\"input input-sm input-bordered flex-1\"\n maxlength=\"100\"\n @keydown.enter=\"submitSave\"\n @keydown.escape=\"cancelSave\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary\"\n :disabled=\"creating || !saveName.trim()\"\n @click=\"submitSave\"\n >\n {{ creating ? 'Saving...' : 'Save' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost\"\n :disabled=\"creating\"\n @click=\"cancelSave\"\n >\n Cancel\n </button>\n </div>\n </div>\n <button\n v-else\n type=\"button\"\n class=\"btn btn-ghost btn-sm btn-block justify-start gap-2\"\n :disabled=\"!hasFilters || creating || !canSaveMore\"\n :title=\"!canSaveMore ? `Maximum ${MAX_PRESETS_PER_CONTEXT} presets per page. Delete one to save a new preset.` : undefined\"\n @click=\"startSave\"\n >\n <svg class=\"w-4 h-4 shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 4v16m8-8v8H4V4h8m0 0l4 4-4 4\" />\n </svg>\n Save current filters\n <span v-if=\"!canSaveMore\" class=\"text-base-content/60 text-xs\">(max {{ MAX_PRESETS_PER_CONTEXT }})</span>\n </button>\n\n <div class=\"flex justify-end pt-2\">\n <button type=\"button\" class=\"btn btn-ghost\" @click=\"close\">\n Close\n </button>\n </div>\n </div>\n </BaseModal>\n</template>\n\n<script setup lang=\"ts\">\nimport BaseModal from '../../components/BaseModal.vue';\nimport {\n MAX_PRESETS_PER_CONTEXT,\n type SavedFilterReadDto,\n} from '@dragonmastery/dragoncore-shared';\nimport { computed, nextTick, ref, watch } from 'vue';\n\nconst props = defineProps<{\n isOpen: boolean;\n presets: SavedFilterReadDto[];\n loading?: boolean;\n creating?: boolean;\n deleting?: boolean;\n renaming?: boolean;\n hasFilters: boolean;\n activePreset: SavedFilterReadDto | null;\n applyPreset: (preset: SavedFilterReadDto) => void;\n saveCurrentFilters: (name: string) => Promise<SavedFilterReadDto | null>;\n renamePreset: (presetId: string, name: string) => Promise<SavedFilterReadDto | null>;\n isPinned: (presetId: string) => boolean;\n togglePin: (preset: SavedFilterReadDto) => boolean | Promise<boolean>;\n canPinMore: boolean;\n maxPinned?: number;\n}>();\n\nconst maxPinned = computed(() => props.maxPinned ?? 5);\n\nfunction handleTogglePin(preset: SavedFilterReadDto) {\n props.togglePin(preset);\n}\n\nconst emit = defineEmits<{\n close: [];\n delete: [preset: SavedFilterReadDto];\n rename: [preset: SavedFilterReadDto];\n}>();\n\nconst canSaveMore = computed(\n () => props.presets.length < MAX_PRESETS_PER_CONTEXT,\n);\n\nconst editingId = ref<string | null>(null);\nconst editingName = ref('');\nconst renameInputRef = ref<HTMLInputElement | null>(null);\n\nconst showSaveForm = ref(false);\nconst saveName = ref('');\nconst saveInputRef = ref<HTMLInputElement | null>(null);\n\nfunction close() {\n emit('close');\n}\n\nfunction applyAndClose(preset: SavedFilterReadDto) {\n props.applyPreset(preset);\n close();\n}\n\nfunction startRename(preset: SavedFilterReadDto) {\n editingId.value = preset.id;\n editingName.value = preset.name;\n nextTick(() => renameInputRef.value?.focus());\n}\n\nfunction cancelRename() {\n editingId.value = null;\n editingName.value = '';\n}\n\nasync function saveRename(presetId: string) {\n const name = editingName.value.trim();\n if (!name) return;\n const result = await props.renamePreset(presetId, name);\n if (result) {\n emit('rename', result);\n cancelRename();\n }\n}\n\nfunction handleDelete(preset: SavedFilterReadDto) {\n emit('delete', preset);\n}\n\nfunction startSave() {\n if (props.hasFilters && canSaveMore.value) {\n showSaveForm.value = true;\n saveName.value = '';\n nextTick(() => saveInputRef.value?.focus());\n }\n}\n\nfunction cancelSave() {\n showSaveForm.value = false;\n saveName.value = '';\n}\n\nasync function submitSave() {\n const name = saveName.value.trim();\n if (!name) return;\n const result = await props.saveCurrentFilters(name);\n if (result) {\n cancelSave();\n close();\n }\n}\n\nwatch(() => props.isOpen, (open) => {\n if (!open) {\n cancelRename();\n cancelSave();\n }\n});\n</script>\n","<template>\n <div class=\"flex items-center gap-2 flex-wrap\">\n <!-- Active preset chip: shows when a preset is applied, with clear (×) -->\n <div\n v-if=\"props.activePreset\"\n class=\"badge badge-primary badge-lg gap-1 pr-1\"\n >\n <span class=\"truncate max-w-[8rem] sm:max-w-[12rem]\">{{ props.activePreset.name }}</span>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-xs btn-circle\"\n aria-label=\"Clear preset\"\n @click=\"handleClearPreset\"\n >\n <svg class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Presets button: opens modal with everything -->\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost\"\n :disabled=\"props.presetsLoading\"\n :title=\"props.presets.length ? 'Apply, save, or manage presets' : 'No presets saved'\"\n @click=\"showPresetsModal = true\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\"\n />\n </svg>\n Presets\n </button>\n\n <!-- Delete confirmation modal -->\n <ConfirmDialog\n v-model=\"showDeleteConfirm\"\n title=\"Delete preset?\"\n confirm-text=\"Delete\"\n cancel-text=\"Cancel\"\n processing-text=\"Deleting...\"\n confirm-button-class=\"btn-error\"\n :is-processing=\"props.deleting\"\n @confirm=\"confirmDelete\"\n @cancel=\"presetToDelete = null\"\n >\n <template #message>\n <p>\n Are you sure you want to delete \"{{ presetToDelete?.name }}\"?\n This cannot be undone.\n </p>\n </template>\n </ConfirmDialog>\n\n <!-- Single Presets modal: apply, save, rename, delete -->\n <PresetsModal\n :is-open=\"showPresetsModal\"\n :presets=\"props.presets\"\n :loading=\"props.presetsLoading\"\n :creating=\"props.creating\"\n :deleting=\"props.deleting\"\n :renaming=\"props.renaming\"\n :has-filters=\"props.hasFilters\"\n :active-preset=\"props.activePreset\"\n :apply-preset=\"props.applyPreset\"\n :save-current-filters=\"props.saveCurrentFilters\"\n :rename-preset=\"props.renamePreset\"\n :is-pinned=\"pinnedPresets.isPinned\"\n :toggle-pin=\"pinnedPresets.togglePin\"\n :can-pin-more=\"pinnedPresets.canPinMore.value\"\n :max-pinned=\"pinnedPresets.maxPinned\"\n @close=\"showPresetsModal = false\"\n @delete=\"handleDelete\"\n @rename=\"handleRename\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SavedFilterReadDto } from '@dragonmastery/dragoncore-shared';\nimport { ref } from 'vue';\nimport ConfirmDialog from '../../components/ConfirmDialog.vue';\nimport PresetsModal from './PresetsModal.vue';\nimport { useInjectedPinnedPresets } from './usePinnedPresets';\n\nconst pinnedPresets = useInjectedPinnedPresets();\n\nconst props = defineProps<{\n presets: SavedFilterReadDto[];\n presetsLoading: boolean;\n creating: boolean;\n deleting: boolean;\n renaming: boolean;\n hasFilters: boolean;\n activePreset: SavedFilterReadDto | null;\n applyPreset: (preset: SavedFilterReadDto) => void;\n clearPreset: () => void;\n saveCurrentFilters: (name: string) => Promise<SavedFilterReadDto | null>;\n renamePreset: (presetId: string, name: string) => Promise<SavedFilterReadDto | null>;\n removePreset: (presetId: string) => Promise<boolean>;\n}>();\n\nconst showPresetsModal = ref(false);\nconst showDeleteConfirm = ref(false);\nconst presetToDelete = ref<{ id: string; name: string } | null>(null);\n\nfunction handleClearPreset() {\n props.clearPreset();\n}\n\nfunction handleDelete(preset: { id: string; name: string }) {\n presetToDelete.value = preset;\n showDeleteConfirm.value = true;\n}\n\nasync function confirmDelete() {\n if (!presetToDelete.value) return;\n pinnedPresets.unpinPreset(presetToDelete.value.id);\n await props.removePreset(presetToDelete.value.id);\n presetToDelete.value = null;\n showDeleteConfirm.value = false;\n}\n\nasync function handleRename(preset: { id: string; name: string }) {\n pinnedPresets.updatePinnedPreset(preset.id, { name: preset.name });\n await pinnedPresets.refetchPinned?.();\n}\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ //#region src/slices/auth/signupConsentStorage.ts
2
+ const STORAGE_KEY = "dragoncore-signup-consent-flow";
3
+ function setSignupConsentFlowData(data) {
4
+ try {
5
+ sessionStorage.setItem(STORAGE_KEY, JSON.stringify(data));
6
+ } catch {}
7
+ }
8
+ function getSignupConsentFlowData() {
9
+ try {
10
+ const raw = sessionStorage.getItem(STORAGE_KEY);
11
+ if (!raw) return null;
12
+ const parsed = JSON.parse(raw);
13
+ if (!parsed?.token || !Array.isArray(parsed.consents)) return null;
14
+ return parsed;
15
+ } catch {
16
+ return null;
17
+ }
18
+ }
19
+ function clearSignupConsentFlowData() {
20
+ try {
21
+ sessionStorage.removeItem(STORAGE_KEY);
22
+ } catch {}
23
+ }
24
+
25
+ //#endregion
26
+ export { getSignupConsentFlowData as n, setSignupConsentFlowData as r, clearSignupConsentFlowData as t };
27
+ //# sourceMappingURL=signupConsentStorage-DS9vCUuC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signupConsentStorage-DS9vCUuC.js","names":[],"sources":["../src/slices/auth/signupConsentStorage.ts"],"sourcesContent":["import type { SignupRequirementsDto } from '@dragonmastery/dragoncore-shared';\n\nconst STORAGE_KEY = 'dragoncore-signup-consent-flow';\n\nexport interface SignupConsentFlowData {\n token: string;\n consents: SignupRequirementsDto;\n}\n\nexport function setSignupConsentFlowData(data: SignupConsentFlowData): void {\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {\n // Ignore storage errors\n }\n}\n\nexport function getSignupConsentFlowData(): SignupConsentFlowData | null {\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as SignupConsentFlowData;\n if (!parsed?.token || !Array.isArray(parsed.consents)) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport function clearSignupConsentFlowData(): void {\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // Ignore\n }\n}\n"],"mappings":";AAEA,MAAM,cAAc;AAOpB,SAAgB,yBAAyB,MAAmC;AAC1E,KAAI;AACF,iBAAe,QAAQ,aAAa,KAAK,UAAU,KAAK,CAAC;SACnD;;AAKV,SAAgB,2BAAyD;AACvE,KAAI;EACF,MAAM,MAAM,eAAe,QAAQ,YAAY;AAC/C,MAAI,CAAC,IAAK,QAAO;EACjB,MAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,MAAI,CAAC,QAAQ,SAAS,CAAC,MAAM,QAAQ,OAAO,SAAS,CAAE,QAAO;AAC9D,SAAO;SACD;AACN,SAAO;;;AAIX,SAAgB,6BAAmC;AACjD,KAAI;AACF,iBAAe,WAAW,YAAY;SAChC"}
@@ -10,4 +10,4 @@
10
10
  }
11
11
 
12
12
 
13
- /*# sourceMappingURL=src-CEBiyg_f.css.map*/
13
+ /*# sourceMappingURL=src-C6ZmNSSU.css.map*/
@@ -1 +1 @@
1
- {"version":3,"file":"src-CEBiyg_f.css","names":[],"sources":["../src/components/ui/KeyValueEditor.vue?vue&type=style&index=0&scoped=010818ef&lang.css","../src/slices/support_ticket/shared/CreditBalanceWidget.vue?vue&type=style&index=0&scoped=703dc3c5&lang.css"],"sourcesContent":["\n.key-value-editor[data-v-010818ef] {\n@apply w-full;\n}\n","\n.credit-balance-widget.compact[data-v-703dc3c5] {\n display: inline-flex;\n align-items: center;\n}\n"],"mappings":";AACA;AACA;AACA;;;ACFA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"src-C6ZmNSSU.css","names":[],"sources":["../src/components/ui/KeyValueEditor.vue?vue&type=style&index=0&scoped=010818ef&lang.css","../src/slices/support_ticket/shared/CreditBalanceWidget.vue?vue&type=style&index=0&scoped=703dc3c5&lang.css"],"sourcesContent":["\n.key-value-editor[data-v-010818ef] {\n@apply w-full;\n}\n","\n.credit-balance-widget.compact[data-v-703dc3c5] {\n display: inline-flex;\n align-items: center;\n}\n"],"mappings":";AACA;AACA;AACA;;;ACFA;AACA;AACA;AACA"}