@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,8 @@
1
+ import "./useRpcAuth-CJtq1dqM.js";
2
+ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
3
+ import "./useQueryCache-alzaRWEb.js";
4
+ import "./useMutation-BLNuJoYl.js";
5
+ import "./useQuery-BzUGEOj0.js";
6
+ import { t as TeamNotesTab_default } from "./TeamNotesTab-BgxleidZ.js";
7
+
8
+ export { TeamNotesTab_default as default };
@@ -0,0 +1,83 @@
1
+ import { t as useQuery } from "./useQuery-BzUGEOj0.js";
2
+ import { n as useBreadcrumbs } from "./useBreadcrumbs-DIqU5AAp.js";
3
+ import { t as teamPaths } from "./teamRoutes-KFgnsdDP.js";
4
+ import { computed, createBlock, createElementBlock, createElementVNode, defineComponent, openBlock, provide, resolveComponent, toDisplayString, unref } from "vue";
5
+ import { useRoute } from "vue-router";
6
+
7
+ //#region src/slices/team/TeamParent.vue
8
+ const _hoisted_1 = {
9
+ key: 0,
10
+ class: "flex justify-center items-center p-8"
11
+ };
12
+ const _hoisted_2 = {
13
+ key: 1,
14
+ class: "alert alert-error mb-4"
15
+ };
16
+ const _sfc_main = /* @__PURE__ */ defineComponent({
17
+ __name: "TeamParent",
18
+ setup(__props) {
19
+ const route = useRoute();
20
+ const teamId = route.params.id;
21
+ const { data, loading: isLoading, error, refetch } = useQuery((api) => api.teams.getTeam(teamId), {});
22
+ const team = computed(() => data.value ?? null);
23
+ const refreshTeam = async () => {
24
+ await refetch();
25
+ };
26
+ provide("refreshTeam", refreshTeam);
27
+ const currentTabLabel = computed(() => {
28
+ const currentTab = route.meta.currentTab;
29
+ if (!currentTab) return null;
30
+ const sectionTabs = route.meta.sectionTabs;
31
+ if (sectionTabs) return sectionTabs.find((t) => t.id === currentTab)?.label || null;
32
+ return null;
33
+ });
34
+ useBreadcrumbs(() => {
35
+ const memberId = route.params.member_id;
36
+ const currentTab = route.meta.currentTab;
37
+ const breadcrumbs = [{
38
+ label: "Teams",
39
+ to: { name: teamPaths.list.name }
40
+ }, {
41
+ label: team.value?.display_name || team.value?.unique_name || team.value?.legal_name || "Team",
42
+ loading: !team.value,
43
+ to: {
44
+ name: teamPaths.view.name,
45
+ params: { id: teamId }
46
+ }
47
+ }];
48
+ if (!memberId && currentTabLabel.value && currentTab !== "view") breadcrumbs.push({
49
+ label: currentTabLabel.value,
50
+ to: route
51
+ });
52
+ return breadcrumbs;
53
+ }, true);
54
+ return (_ctx, _cache) => {
55
+ const _component_RouterView = resolveComponent("RouterView");
56
+ return unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_1, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : unref(error) ? (openBlock(), createElementBlock("div", _hoisted_2, [_cache[1] || (_cache[1] = createElementVNode("svg", {
57
+ xmlns: "http://www.w3.org/2000/svg",
58
+ class: "stroke-current shrink-0 h-6 w-6",
59
+ fill: "none",
60
+ viewBox: "0 0 24 24"
61
+ }, [createElementVNode("path", {
62
+ "stroke-linecap": "round",
63
+ "stroke-linejoin": "round",
64
+ "stroke-width": "2",
65
+ d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
66
+ })], -1)), createElementVNode("span", null, toDisplayString(unref(error).message), 1)])) : (openBlock(), createBlock(_component_RouterView, {
67
+ key: 2,
68
+ team: team.value,
69
+ isLoading: unref(isLoading),
70
+ error: unref(error)
71
+ }, null, 8, [
72
+ "team",
73
+ "isLoading",
74
+ "error"
75
+ ]));
76
+ };
77
+ }
78
+ });
79
+ var TeamParent_default = _sfc_main;
80
+
81
+ //#endregion
82
+ export { TeamParent_default as t };
83
+ //# sourceMappingURL=TeamParent-BwXqA3rj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamParent-BwXqA3rj.js","names":[],"sources":["../src/slices/team/TeamParent.vue"],"sourcesContent":["<template>\n <div v-if=\"isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"error\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ error.message }}</span>\n </div>\n\n <RouterView v-else :team=\"team\" :isLoading=\"isLoading\" :error=\"error\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '../../composables/useBreadcrumbs';\nimport { useQuery } from '../../composables/useQuery';\nimport { computed, provide } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { teamPaths } from './teamRoutes';\n\nconst route = useRoute();\nconst teamId = route.params.id as string;\n\n// Fetch team data once at parent level\nconst {\n data,\n loading: isLoading,\n error,\n refetch,\n} = useQuery((api) => api.teams.getTeam(teamId), {});\n\nconst team = computed(() => data.value ?? null);\n\n// Provide refresh function to child components\nconst refreshTeam = async () => {\n await refetch();\n};\n\nprovide('refreshTeam', refreshTeam);\n\n// Get current tab name from route meta\nconst currentTabLabel = computed(() => {\n const currentTab = route.meta.currentTab as string | undefined;\n if (!currentTab) return null;\n\n // Find the tab label from sectionTabs\n const sectionTabs = route.meta.sectionTabs as\n | Array<{ id: string; label: string }>\n | undefined;\n if (sectionTabs) {\n const tab = sectionTabs.find((t) => t.id === currentTab);\n return tab?.label || null;\n }\n return null;\n});\n\n// Manage breadcrumbs at parent level - watch route to ensure reactivity\n// Use segment mode to allow TeamMemberParent to append its own breadcrumbs\nuseBreadcrumbs(\n () => {\n // Access route params and meta to ensure reactivity to route changes\n const memberId = route.params.member_id;\n const currentTab = route.meta.currentTab as string | undefined;\n\n const breadcrumbs = [\n {\n label: 'Teams',\n to: { name: teamPaths.list.name },\n },\n {\n label:\n team.value?.display_name ||\n team.value?.unique_name ||\n team.value?.legal_name ||\n 'Team',\n loading: !team.value,\n to: {\n name: teamPaths.view.name,\n params: { id: teamId },\n },\n },\n ];\n\n // Add current tab if we're not on the main view tab and not viewing a member\n if (!memberId && currentTabLabel.value && currentTab !== 'view') {\n breadcrumbs.push({\n label: currentTabLabel.value,\n to: route as any, // Route object for current tab\n });\n }\n\n return breadcrumbs;\n },\n true, // Use segment mode for nested breadcrumbs\n);\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAgCA,MAAM,QAAQ,UAAU;EACxB,MAAM,SAAS,MAAM,OAAO;EAG5B,MAAM,EACJ,MACA,SAAS,WACT,OACA,YACE,UAAU,QAAQ,IAAI,MAAM,QAAQ,OAAO,EAAE,EAAE,CAAC;EAEpD,MAAM,OAAO,eAAe,KAAK,SAAS,KAAK;EAG/C,MAAM,cAAc,YAAY;AAC9B,SAAM,SAAS;;AAGjB,UAAQ,eAAe,YAAY;EAGnC,MAAM,kBAAkB,eAAe;GACrC,MAAM,aAAa,MAAM,KAAK;AAC9B,OAAI,CAAC,WAAY,QAAO;GAGxB,MAAM,cAAc,MAAM,KAAK;AAG/B,OAAI,YAEF,QADY,YAAY,MAAM,MAAM,EAAE,OAAO,WAAW,EAC5C,SAAS;AAEvB,UAAO;IACP;AAIF,uBACQ;GAEJ,MAAM,WAAW,MAAM,OAAO;GAC9B,MAAM,aAAa,MAAM,KAAK;GAE9B,MAAM,cAAc,CAClB;IACE,OAAO;IACP,IAAI,EAAE,MAAM,UAAU,KAAK,MAAM;IAClC,EACD;IACE,OACE,KAAK,OAAO,gBACZ,KAAK,OAAO,eACZ,KAAK,OAAO,cACZ;IACF,SAAS,CAAC,KAAK;IACf,IAAI;KACF,MAAM,UAAU,KAAK;KACrB,QAAQ,EAAE,IAAI,QAAQ;KACvB;IACF,CACF;AAGD,OAAI,CAAC,YAAY,gBAAgB,SAAS,eAAe,OACvD,aAAY,KAAK;IACf,OAAO,gBAAgB;IACvB,IAAI;IACL,CAAC;AAGJ,UAAO;KAET,KACD;;;UAzGY,MAAA,UAAS,IAAA,WAAA,EAApB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAGlC,MAAA,MAAK,IAAA,WAAA,EAArB,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAGxB,YAAwE,uBAAA;;IAApD,MAAM,KAAA;IAAO,WAAW,MAAA,UAAS;IAAG,OAAO,MAAA,MAAK"}
@@ -0,0 +1,11 @@
1
+ import "./useRpcAuth-CJtq1dqM.js";
2
+ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
3
+ import "./useQueryCache-alzaRWEb.js";
4
+ import "./useQuery-BzUGEOj0.js";
5
+ import "./useBreadcrumbs-DIqU5AAp.js";
6
+ import "./userAuthorized-C09FHWGL.js";
7
+ import "./team_memberRoutes-Cjpw_ql6.js";
8
+ import "./teamRoutes-KFgnsdDP.js";
9
+ import { t as TeamParent_default } from "./TeamParent-BwXqA3rj.js";
10
+
11
+ export { TeamParent_default as default };
@@ -1,4 +1,5 @@
1
- import { r as formatTicketDate, s as InlineAttachments_default } from "./TimelineSystemEvent-BHzFr46C.js";
1
+ import { t as InlineAttachments_default } from "./InlineAttachments-DAn_QknY.js";
2
+ import { r as formatTicketDate } from "./TimelineSystemEvent-zCMUx5Zz.js";
2
3
  import { Comment, Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, normalizeClass, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, useSlots, vModelCheckbox, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
3
4
  import { supportTicketNumberToPriority } from "@dragonmastery/dragoncore-shared";
4
5
  import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
@@ -510,4 +511,4 @@ var TimelineNoteInput_default = _sfc_main;
510
511
 
511
512
  //#endregion
512
513
  export { SupportTicketAttachmentsCollapsible_default as a, parseRecordVersions as i, MetadataField_default as n, ActionBannerAlert_default as r, TimelineNoteInput_default as t };
513
- //# sourceMappingURL=TimelineNoteInput-0p-M4Qie.js.map
514
+ //# sourceMappingURL=TimelineNoteInput-DXaodm43.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimelineNoteInput-0p-M4Qie.js","names":["events: SystemEvent[]","collectedChanges: Array<{\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName: string;\n }>","map: Record<AlertVariant, string>","copyTimeoutId: ReturnType<typeof setTimeout> | null"],"sources":["../src/slices/support_ticket/shared/SupportTicketAttachmentsCollapsible.vue","../src/slices/support_ticket/utils/parseRecordVersions.ts","../src/slices/support_ticket/shared/ActionBannerAlert.vue","../src/slices/support_ticket/shared/MetadataField.vue","../src/slices/support_ticket/shared/timelineNoteFormMetadata.ts","../src/slices/support_ticket/shared/TimelineNoteInput.vue"],"sourcesContent":["<template>\n <div v-if=\"recordId\" class=\"w-full\">\n <div class=\"collapse collapse-arrow bg-base-200\">\n <input type=\"checkbox\" v-model=\"attachmentsExpanded\" />\n <div class=\"collapse-title text-sm font-medium px-4 py-2 min-h-0\">\n <div class=\"flex items-center gap-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\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=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\"\n />\n </svg>\n <span>Attachments ({{ attachmentsCount }})</span>\n </div>\n </div>\n <div class=\"collapse-content px-0\">\n <div class=\"px-4 pb-4\">\n <InlineAttachments\n :record-id=\"recordId\"\n :can-upload=\"editable && !locked\"\n :can-delete=\"editable && !locked\"\n @update:attachments-count=\"attachmentsCount = $event\"\n @uploaded=\"emit('uploaded')\"\n @deleted=\"emit('deleted')\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport InlineAttachments from './InlineAttachments.vue';\n\nconst attachmentsCount = ref(0);\n\ninterface Props {\n recordId: string;\n locked: boolean;\n editable: boolean;\n}\n\ndefineProps<Props>();\n\nconst emit = defineEmits<{ uploaded: []; deleted: [] }>();\n\nconst attachmentsExpanded = ref(false);\n</script>\n","import {\n supportTicketNumberToPriority,\n type RecordVersionReadDto,\n} from '@dragonmastery/dragoncore-shared';\nimport { formatTicketDate } from './formatTicketDate';\n\nexport interface SystemEventChange {\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName?: string;\n}\n\nexport interface SystemEvent {\n id: string;\n timestamp: string;\n author: string;\n message: string;\n /** When set, used for structured display: action (italic) + type (badge) + details */\n action?: string;\n type?: string | null;\n details?: string | null;\n oldValue?: string | null;\n newValue?: string | null;\n fieldName?: string; // Field name that changed (for filtering)\n /** When multiple fields changed in same record version, grouped changes */\n changes?: SystemEventChange[];\n}\n\nconst SKIP_FIELDS = new Set(['updated_at', 'updated_by', 'id', 'display_id']);\n\n/** Fields that store user IDs - display names from lookup instead of raw IDs */\nconst USER_ID_FIELDS = new Set([\n 'assigned_to',\n 'created_by',\n 'updated_by',\n 'archived_by',\n 'deleted_by',\n]);\n\nfunction truncate(value: string, maxLength: number = 50): string {\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength) + '...';\n}\n\nfunction formatEnumValue(value: string): string {\n return value\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n\nfunction formatFieldValue(\n fieldName: string,\n value: unknown,\n truncateLong: boolean = false,\n displayMap?: Map<string, string>,\n): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n return formatTicketDate(value).formatted;\n }\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n // User ID fields: display name from lookup when available\n if (typeof value === 'string' && USER_ID_FIELDS.has(fieldName) && displayMap) {\n return displayMap.get(value) ?? value;\n }\n // Priority: DB stores number (1-4), record_versions may have legacy string or new number\n if (fieldName === 'priority') {\n if (typeof value === 'number') {\n return formatEnumValue(supportTicketNumberToPriority(value));\n }\n if (typeof value === 'string') return formatEnumValue(value);\n }\n if (typeof value === 'string') {\n if (\n fieldName.includes('status') ||\n fieldName.includes('type') ||\n fieldName.includes('lifecycle')\n ) {\n return formatEnumValue(value);\n }\n // Truncate title and description\n if (truncateLong && (fieldName === 'title' || fieldName === 'description')) {\n return truncate(value);\n }\n }\n return String(value);\n}\n\nfunction generateActionMessage(\n fieldName: string,\n oldValue: unknown,\n newValue: unknown,\n): string {\n switch (fieldName) {\n case 'assigned_to':\n if (oldValue === null || oldValue === undefined) return 'assigned to';\n return 'reassigned to';\n case 'title':\n return 'changed the title';\n case 'description':\n return 'updated the description';\n case 'type':\n return 'changed type';\n case 'priority':\n return 'changed priority';\n case 'approval_status':\n return 'changed status';\n case 'dev_lifecycle':\n return 'moved';\n case 'credit_value':\n if (oldValue === null || oldValue === undefined) return 'set credits';\n return 'changed credits';\n case 'delivered_value':\n if (oldValue === null || oldValue === undefined) return 'set delivered value';\n return 'changed delivered value';\n case 'start_at':\n if (oldValue === null || oldValue === undefined) return 'set start date';\n if (newValue === null || newValue === undefined) return 'cleared start date';\n return 'changed start date';\n case 'target_at':\n if (oldValue === null || oldValue === undefined) return 'set target date';\n if (newValue === null || newValue === undefined) return 'cleared target date';\n return 'changed target date';\n case 'completed_at':\n if (oldValue === null || oldValue === undefined) return 'marked as completed';\n if (newValue === null || newValue === undefined) return 'cleared completed date';\n return 'changed completed date';\n case 'locked_approval_at':\n if (\n oldValue === null ||\n (oldValue === undefined && newValue !== null && newValue !== undefined)\n ) {\n return 'locked the ticket';\n }\n return 'changed lock status';\n case 'archived_at':\n if (\n oldValue === null ||\n (oldValue === undefined && newValue !== null && newValue !== undefined)\n ) {\n return 'archived the ticket';\n }\n if (\n oldValue !== null &&\n oldValue !== undefined &&\n (newValue === null || newValue === undefined)\n ) {\n return 'unarchived the ticket';\n }\n return 'changed archive status';\n case 'requester_email':\n return 'changed requester email';\n case 'requester_name':\n return 'changed requester name';\n case 'attachment_added':\n return 'added attachment';\n case 'attachment_removed':\n return 'removed attachment';\n default:\n return `updated ${fieldName.replace(/_/g, ' ')}`;\n }\n}\n\nfunction parseRecord(recordJson: string | null | undefined): Record<string, unknown> | null {\n if (!recordJson) return null;\n try {\n return JSON.parse(recordJson);\n } catch {\n return null;\n }\n}\n\nexport function parseRecordVersions(\n versions: RecordVersionReadDto[],\n displayMap?: Map<string, string>,\n): SystemEvent[] {\n const events: SystemEvent[] = [];\n\n for (const version of versions) {\n const author = version.auth_username || 'Unknown';\n const timestamp = version.recorded_at;\n\n if (version.operation === 'insert') {\n events.push({\n id: `${version.id}-insert`,\n timestamp,\n author,\n message: 'created this ticket',\n action: 'created',\n type: 'ticket',\n });\n continue;\n }\n\n if (version.operation === 'update') {\n const oldRecord = parseRecord(version.old_record);\n const newRecord = parseRecord(version.record);\n\n if (!oldRecord || !newRecord) continue;\n\n const collectedChanges: Array<{\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName: string;\n }> = [];\n\n for (const [fieldName, newValue] of Object.entries(newRecord)) {\n if (SKIP_FIELDS.has(fieldName)) continue;\n\n const oldValue = oldRecord[fieldName];\n\n if (oldValue !== newValue) {\n const oldFormatted =\n oldValue !== null && oldValue !== undefined\n ? formatFieldValue(fieldName, oldValue, true, displayMap)\n : null;\n const newFormatted =\n newValue !== null && newValue !== undefined\n ? formatFieldValue(fieldName, newValue, true, displayMap)\n : null;\n\n const actionMsg = generateActionMessage(fieldName, oldValue, newValue);\n\n collectedChanges.push({\n action: actionMsg,\n oldValue: oldFormatted || null,\n newValue: newFormatted || null,\n fieldName,\n });\n }\n }\n\n if (collectedChanges.length > 0) {\n const primaryChange = collectedChanges[0]!;\n const details =\n primaryChange.oldValue != null && primaryChange.newValue != null\n ? `${primaryChange.oldValue} → ${primaryChange.newValue}`\n : primaryChange.newValue ?? null;\n\n events.push({\n id: version.id,\n timestamp,\n author,\n message: primaryChange.action,\n action: collectedChanges.length === 1 ? primaryChange.action : 'updated',\n type: 'ticket',\n details: collectedChanges.length === 1 ? details : null,\n oldValue: collectedChanges.length === 1 ? primaryChange.oldValue : undefined,\n newValue: collectedChanges.length === 1 ? primaryChange.newValue : undefined,\n fieldName: collectedChanges.length === 1 ? primaryChange.fieldName : undefined,\n changes:\n collectedChanges.length > 1\n ? collectedChanges.map((c) => ({\n action: c.action,\n oldValue: c.oldValue,\n newValue: c.newValue,\n fieldName: c.fieldName,\n }))\n : undefined,\n });\n }\n }\n }\n\n events.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n return events;\n}\n","<template>\n <div\n role=\"alert\"\n :class=\"[\n 'py-3 px-4 w-full rounded-lg border border-base-300 border-l-4 bg-base-200/60',\n variantBorderClass,\n ]\"\n >\n <!-- Mobile-first: stack vertically on small screens, row on desktop -->\n <div\n class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-3\"\n >\n <div class=\"flex items-start gap-3 min-w-0\">\n <component :is=\"iconComponent\" v-if=\"icon\" class=\"shrink-0 w-5 h-5 opacity-90 mt-0.5\" />\n <span class=\"flex-1 min-w-0\">\n <slot />\n </span>\n </div>\n <div\n v-if=\"hasActions\"\n class=\"grid grid-cols-2 gap-2 sm:flex sm:flex-row sm:flex-wrap sm:ml-auto sm:shrink-0 sm:[&>*]:w-auto\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots, h } from 'vue';\n\ntype AlertVariant = 'warning' | 'success' | 'error' | 'info' | 'neutral';\ntype IconType = 'lock' | 'clock' | 'info' | 'archive';\n\ninterface Props {\n variant: AlertVariant;\n icon?: IconType;\n}\n\nconst props = defineProps<Props>();\n\nconst slots = useSlots();\n\nconst variantBorderClass = computed(() => {\n const map: Record<AlertVariant, string> = {\n warning: 'border-l-warning',\n success: 'border-l-success',\n error: 'border-l-error',\n info: 'border-l-info',\n neutral: 'border-l-base-content/30',\n };\n return map[props.variant];\n});\n\nconst hasActions = computed(() => {\n const actionsSlot = slots.actions;\n if (!actionsSlot) return false;\n const vnodes = actionsSlot();\n return !!vnodes?.length;\n});\n\nconst iconComponent = computed(() => {\n if (!props.icon) return null;\n const icons = {\n lock: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z',\n }),\n ],\n ),\n clock: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z',\n }),\n ],\n ),\n info: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z',\n }),\n ],\n ),\n archive: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z',\n }),\n ],\n ),\n };\n return icons[props.icon] ?? null;\n});\n</script>\n","<template>\n <div class=\"flex flex-col\">\n <span class=\"text-xs font-semibold uppercase tracking-wide text-base-content/50 mb-0.5\">\n {{ label }}\n </span>\n <template v-if=\"hasContent\">\n <span\n v-if=\"copyable\"\n ref=\"valueRef\"\n role=\"button\"\n tabindex=\"0\"\n class=\"font-mono cursor-pointer select-all\"\n @click=\"handleCopy\"\n @keydown.enter=\"handleCopy\"\n @keydown.space.prevent=\"handleCopy\"\n >\n {{ copied ? 'Copied!' : undefined }}\n <template v-if=\"!copied\"><slot /></template>\n </span>\n <span v-else>\n <slot />\n </span>\n </template>\n <template v-else>\n <slot name=\"empty\">\n <span class=\"text-base-content/50 italic text-sm\">Not set</span>\n </slot>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Comment } from 'vue';\nimport { ref, computed, useSlots } from 'vue';\n\ninterface Props {\n label: string;\n copyable?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n copyable: false,\n});\n\nconst slots = useSlots();\nconst valueRef = ref<HTMLSpanElement | null>(null);\nconst copied = ref(false);\nlet copyTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\nconst hasContent = computed(() => {\n const defaultSlot = slots.default;\n if (!defaultSlot) return false;\n const vnodes = defaultSlot();\n if (!vnodes || !Array.isArray(vnodes)) return false;\n return vnodes.some((v) => v.type !== Comment);\n});\n\nasync function handleCopy() {\n if (!props.copyable) return;\n const text = valueRef.value?.textContent?.trim();\n if (!text) return;\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n if (copyTimeoutId) clearTimeout(copyTimeoutId);\n copyTimeoutId = setTimeout(() => {\n copied.value = false;\n copyTimeoutId = null;\n }, 1500);\n } catch {\n // ignore clipboard errors\n }\n}\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { z } from 'zod';\n\n/** Schema for adding a comment/note on support ticket timeline. */\nconst TimelineNoteCreateSchema = z.object({\n body: z.string().min(1, 'Comment is required').trim(),\n is_internal: z.boolean().optional().default(false),\n});\n\nexport const timelineNoteCreateMetadata = withMetadata(\n TimelineNoteCreateSchema,\n 'timelineNoteCreateForm',\n {\n body: {\n label: 'Comment',\n placeholder: 'Add a comment...',\n inputType: 'textarea',\n },\n is_internal: {\n label: 'Internal Note',\n helpText: 'Internal notes are not visible to the customer',\n },\n },\n);\n\nexport type TimelineNoteCreateDto = z.infer<typeof TimelineNoteCreateSchema>;\n","<template>\n <div class=\"border-t border-base-200 pt-4 mt-4 w-full\">\n <template v-if=\"disabled\">\n <div class=\"bg-base-200/50 rounded-lg p-4 text-center\">\n <span class=\"text-base-content/50 text-sm inline-flex items-center gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-4 h-4\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n />\n </svg>\n This ticket has been locked. You can no longer add comments.\n </span>\n </div>\n </template>\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <div ref=\"formWrapperRef\" class=\"grid grid-cols-1 gap-4 w-full\" @keydown=\"handleKeydown\">\n <p\n v-if=\"showTypeToggle\"\n class=\"col-span-full text-xs mb-1\"\n :class=\"form.values.is_internal ? 'text-warning' : 'text-info'\"\n >\n {{\n form.values.is_internal\n ? '🔒 Internal — not visible to customer'\n : 'Visible to customer'\n }}\n </p>\n <div class=\"col-span-full\">\n <zinia.BodyField class=\"textarea w-full\" />\n </div>\n <div class=\"col-span-full flex flex-wrap gap-2 justify-between items-center\">\n <div v-if=\"showTypeToggle\" class=\"join\">\n <button\n type=\"button\"\n :class=\"[\n 'btn btn-sm join-item',\n !form.values.is_internal ? 'btn-info btn-active' : '',\n ]\"\n :disabled=\"form.isSubmitting\"\n @click=\"form.setValue('is_internal', false)\"\n >\n Customer Note\n </button>\n <button\n type=\"button\"\n :class=\"[\n 'btn btn-sm join-item',\n form.values.is_internal ? 'btn-warning btn-active' : '',\n ]\"\n :disabled=\"form.isSubmitting\"\n @click=\"form.setValue('is_internal', true)\"\n >\n Internal Note\n </button>\n </div>\n <div v-else></div>\n <ZiniaSubmitButton submitText=\"Comment\" submittingText=\"Adding...\" />\n </div>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { ref, watch } from 'vue';\nimport { timelineNoteCreateMetadata } from './timelineNoteFormMetadata';\n\ninterface Props {\n showTypeToggle: boolean;\n disabled: boolean;\n /** When provided, noteType is controlled (e.g. synced with URL query param) */\n noteType?: 'customer' | 'internal';\n /** Called when form submits with validated data. Must return a Promise. */\n onSubmit: (payload: { content: string; noteType: 'customer' | 'internal' }) => Promise<void>;\n}\n\nconst props = defineProps<Props>();\nconst formWrapperRef = ref<HTMLElement | null>(null);\n\nconst emit = defineEmits<{\n 'update:noteType': [value: 'customer' | 'internal'];\n}>();\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, refreshFormData } = useForm(\n timelineNoteCreateMetadata,\n {\n storeName: 'timeline-note-input',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => ({\n body: '',\n is_internal: props.noteType === 'internal',\n }),\n },\n);\n\n// Sync form's is_internal when controlled noteType prop changes (e.g. from URL)\nwatch(\n () => props.noteType,\n (noteType) => {\n if (noteType !== undefined) {\n form.setValue('is_internal', noteType === 'internal');\n }\n },\n { immediate: true },\n);\n\n// Emit when user toggles note type (for URL sync in StaffTimeline)\nwatch(\n () => form.values.is_internal,\n (isInternal) => {\n if (props.showTypeToggle) {\n emit('update:noteType', isInternal ? 'internal' : 'customer');\n }\n },\n);\n\nfunction handleKeydown(e: KeyboardEvent) {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n const form = formWrapperRef.value?.closest('form');\n form?.requestSubmit();\n }\n}\n\nasync function handleSubmit(formData: { body: string; is_internal: boolean }) {\n await props.onSubmit({\n content: (formData.body ?? '').trim(),\n noteType: props.showTypeToggle && formData.is_internal ? 'internal' : 'customer',\n });\n}\n\nfunction handleSuccess() {\n refreshFormData();\n (document.activeElement as HTMLElement)?.blur();\n}\n\nfunction handleError(_error: Error | unknown) {\n // Form displays errors via ZiniaFormErrorsSummary\n}\n\nfunction reset() {\n refreshFormData();\n}\n\ndefineExpose({ reset });\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TimelineNoteInput-DXaodm43.js","names":["events: SystemEvent[]","collectedChanges: Array<{\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName: string;\n }>","map: Record<AlertVariant, string>","copyTimeoutId: ReturnType<typeof setTimeout> | null"],"sources":["../src/slices/support_ticket/shared/SupportTicketAttachmentsCollapsible.vue","../src/slices/support_ticket/utils/parseRecordVersions.ts","../src/slices/support_ticket/shared/ActionBannerAlert.vue","../src/slices/support_ticket/shared/MetadataField.vue","../src/slices/support_ticket/shared/timelineNoteFormMetadata.ts","../src/slices/support_ticket/shared/TimelineNoteInput.vue"],"sourcesContent":["<template>\n <div v-if=\"recordId\" class=\"w-full\">\n <div class=\"collapse collapse-arrow bg-base-200\">\n <input type=\"checkbox\" v-model=\"attachmentsExpanded\" />\n <div class=\"collapse-title text-sm font-medium px-4 py-2 min-h-0\">\n <div class=\"flex items-center gap-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\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=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\"\n />\n </svg>\n <span>Attachments ({{ attachmentsCount }})</span>\n </div>\n </div>\n <div class=\"collapse-content px-0\">\n <div class=\"px-4 pb-4\">\n <InlineAttachments\n :record-id=\"recordId\"\n :can-upload=\"editable && !locked\"\n :can-delete=\"editable && !locked\"\n @update:attachments-count=\"attachmentsCount = $event\"\n @uploaded=\"emit('uploaded')\"\n @deleted=\"emit('deleted')\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport InlineAttachments from './InlineAttachments.vue';\n\nconst attachmentsCount = ref(0);\n\ninterface Props {\n recordId: string;\n locked: boolean;\n editable: boolean;\n}\n\ndefineProps<Props>();\n\nconst emit = defineEmits<{ uploaded: []; deleted: [] }>();\n\nconst attachmentsExpanded = ref(false);\n</script>\n","import {\n supportTicketNumberToPriority,\n type RecordVersionReadDto,\n} from '@dragonmastery/dragoncore-shared';\nimport { formatTicketDate } from './formatTicketDate';\n\nexport interface SystemEventChange {\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName?: string;\n}\n\nexport interface SystemEvent {\n id: string;\n timestamp: string;\n author: string;\n message: string;\n /** When set, used for structured display: action (italic) + type (badge) + details */\n action?: string;\n type?: string | null;\n details?: string | null;\n oldValue?: string | null;\n newValue?: string | null;\n fieldName?: string; // Field name that changed (for filtering)\n /** When multiple fields changed in same record version, grouped changes */\n changes?: SystemEventChange[];\n}\n\nconst SKIP_FIELDS = new Set(['updated_at', 'updated_by', 'id', 'display_id']);\n\n/** Fields that store user IDs - display names from lookup instead of raw IDs */\nconst USER_ID_FIELDS = new Set([\n 'assigned_to',\n 'created_by',\n 'updated_by',\n 'archived_by',\n 'deleted_by',\n]);\n\nfunction truncate(value: string, maxLength: number = 50): string {\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength) + '...';\n}\n\nfunction formatEnumValue(value: string): string {\n return value\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n\nfunction formatFieldValue(\n fieldName: string,\n value: unknown,\n truncateLong: boolean = false,\n displayMap?: Map<string, string>,\n): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n return formatTicketDate(value).formatted;\n }\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n // User ID fields: display name from lookup when available\n if (typeof value === 'string' && USER_ID_FIELDS.has(fieldName) && displayMap) {\n return displayMap.get(value) ?? value;\n }\n // Priority: DB stores number (1-4), record_versions may have legacy string or new number\n if (fieldName === 'priority') {\n if (typeof value === 'number') {\n return formatEnumValue(supportTicketNumberToPriority(value));\n }\n if (typeof value === 'string') return formatEnumValue(value);\n }\n if (typeof value === 'string') {\n if (\n fieldName.includes('status') ||\n fieldName.includes('type') ||\n fieldName.includes('lifecycle')\n ) {\n return formatEnumValue(value);\n }\n // Truncate title and description\n if (truncateLong && (fieldName === 'title' || fieldName === 'description')) {\n return truncate(value);\n }\n }\n return String(value);\n}\n\nfunction generateActionMessage(\n fieldName: string,\n oldValue: unknown,\n newValue: unknown,\n): string {\n switch (fieldName) {\n case 'assigned_to':\n if (oldValue === null || oldValue === undefined) return 'assigned to';\n return 'reassigned to';\n case 'title':\n return 'changed the title';\n case 'description':\n return 'updated the description';\n case 'type':\n return 'changed type';\n case 'priority':\n return 'changed priority';\n case 'approval_status':\n return 'changed status';\n case 'dev_lifecycle':\n return 'moved';\n case 'credit_value':\n if (oldValue === null || oldValue === undefined) return 'set credits';\n return 'changed credits';\n case 'delivered_value':\n if (oldValue === null || oldValue === undefined) return 'set delivered value';\n return 'changed delivered value';\n case 'start_at':\n if (oldValue === null || oldValue === undefined) return 'set start date';\n if (newValue === null || newValue === undefined) return 'cleared start date';\n return 'changed start date';\n case 'target_at':\n if (oldValue === null || oldValue === undefined) return 'set target date';\n if (newValue === null || newValue === undefined) return 'cleared target date';\n return 'changed target date';\n case 'completed_at':\n if (oldValue === null || oldValue === undefined) return 'marked as completed';\n if (newValue === null || newValue === undefined) return 'cleared completed date';\n return 'changed completed date';\n case 'locked_approval_at':\n if (\n oldValue === null ||\n (oldValue === undefined && newValue !== null && newValue !== undefined)\n ) {\n return 'locked the ticket';\n }\n return 'changed lock status';\n case 'archived_at':\n if (\n oldValue === null ||\n (oldValue === undefined && newValue !== null && newValue !== undefined)\n ) {\n return 'archived the ticket';\n }\n if (\n oldValue !== null &&\n oldValue !== undefined &&\n (newValue === null || newValue === undefined)\n ) {\n return 'unarchived the ticket';\n }\n return 'changed archive status';\n case 'requester_email':\n return 'changed requester email';\n case 'requester_name':\n return 'changed requester name';\n case 'attachment_added':\n return 'added attachment';\n case 'attachment_removed':\n return 'removed attachment';\n default:\n return `updated ${fieldName.replace(/_/g, ' ')}`;\n }\n}\n\nfunction parseRecord(recordJson: string | null | undefined): Record<string, unknown> | null {\n if (!recordJson) return null;\n try {\n return JSON.parse(recordJson);\n } catch {\n return null;\n }\n}\n\nexport function parseRecordVersions(\n versions: RecordVersionReadDto[],\n displayMap?: Map<string, string>,\n): SystemEvent[] {\n const events: SystemEvent[] = [];\n\n for (const version of versions) {\n const author = version.auth_username || 'Unknown';\n const timestamp = version.recorded_at;\n\n if (version.operation === 'insert') {\n events.push({\n id: `${version.id}-insert`,\n timestamp,\n author,\n message: 'created this ticket',\n action: 'created',\n type: 'ticket',\n });\n continue;\n }\n\n if (version.operation === 'update') {\n const oldRecord = parseRecord(version.old_record);\n const newRecord = parseRecord(version.record);\n\n if (!oldRecord || !newRecord) continue;\n\n const collectedChanges: Array<{\n action: string;\n oldValue: string | null;\n newValue: string | null;\n fieldName: string;\n }> = [];\n\n for (const [fieldName, newValue] of Object.entries(newRecord)) {\n if (SKIP_FIELDS.has(fieldName)) continue;\n\n const oldValue = oldRecord[fieldName];\n\n if (oldValue !== newValue) {\n const oldFormatted =\n oldValue !== null && oldValue !== undefined\n ? formatFieldValue(fieldName, oldValue, true, displayMap)\n : null;\n const newFormatted =\n newValue !== null && newValue !== undefined\n ? formatFieldValue(fieldName, newValue, true, displayMap)\n : null;\n\n const actionMsg = generateActionMessage(fieldName, oldValue, newValue);\n\n collectedChanges.push({\n action: actionMsg,\n oldValue: oldFormatted || null,\n newValue: newFormatted || null,\n fieldName,\n });\n }\n }\n\n if (collectedChanges.length > 0) {\n const primaryChange = collectedChanges[0]!;\n const details =\n primaryChange.oldValue != null && primaryChange.newValue != null\n ? `${primaryChange.oldValue} → ${primaryChange.newValue}`\n : primaryChange.newValue ?? null;\n\n events.push({\n id: version.id,\n timestamp,\n author,\n message: primaryChange.action,\n action: collectedChanges.length === 1 ? primaryChange.action : 'updated',\n type: 'ticket',\n details: collectedChanges.length === 1 ? details : null,\n oldValue: collectedChanges.length === 1 ? primaryChange.oldValue : undefined,\n newValue: collectedChanges.length === 1 ? primaryChange.newValue : undefined,\n fieldName: collectedChanges.length === 1 ? primaryChange.fieldName : undefined,\n changes:\n collectedChanges.length > 1\n ? collectedChanges.map((c) => ({\n action: c.action,\n oldValue: c.oldValue,\n newValue: c.newValue,\n fieldName: c.fieldName,\n }))\n : undefined,\n });\n }\n }\n }\n\n events.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n return events;\n}\n","<template>\n <div\n role=\"alert\"\n :class=\"[\n 'py-3 px-4 w-full rounded-lg border border-base-300 border-l-4 bg-base-200/60',\n variantBorderClass,\n ]\"\n >\n <!-- Mobile-first: stack vertically on small screens, row on desktop -->\n <div\n class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-3\"\n >\n <div class=\"flex items-start gap-3 min-w-0\">\n <component :is=\"iconComponent\" v-if=\"icon\" class=\"shrink-0 w-5 h-5 opacity-90 mt-0.5\" />\n <span class=\"flex-1 min-w-0\">\n <slot />\n </span>\n </div>\n <div\n v-if=\"hasActions\"\n class=\"grid grid-cols-2 gap-2 sm:flex sm:flex-row sm:flex-wrap sm:ml-auto sm:shrink-0 sm:[&>*]:w-auto\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots, h } from 'vue';\n\ntype AlertVariant = 'warning' | 'success' | 'error' | 'info' | 'neutral';\ntype IconType = 'lock' | 'clock' | 'info' | 'archive';\n\ninterface Props {\n variant: AlertVariant;\n icon?: IconType;\n}\n\nconst props = defineProps<Props>();\n\nconst slots = useSlots();\n\nconst variantBorderClass = computed(() => {\n const map: Record<AlertVariant, string> = {\n warning: 'border-l-warning',\n success: 'border-l-success',\n error: 'border-l-error',\n info: 'border-l-info',\n neutral: 'border-l-base-content/30',\n };\n return map[props.variant];\n});\n\nconst hasActions = computed(() => {\n const actionsSlot = slots.actions;\n if (!actionsSlot) return false;\n const vnodes = actionsSlot();\n return !!vnodes?.length;\n});\n\nconst iconComponent = computed(() => {\n if (!props.icon) return null;\n const icons = {\n lock: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z',\n }),\n ],\n ),\n clock: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z',\n }),\n ],\n ),\n info: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z',\n }),\n ],\n ),\n archive: () =>\n h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n fill: 'none',\n viewBox: '0 0 24 24',\n 'stroke-width': '1.5',\n stroke: 'currentColor',\n class: 'w-5 h-5',\n },\n [\n h('path', {\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n d: 'M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z',\n }),\n ],\n ),\n };\n return icons[props.icon] ?? null;\n});\n</script>\n","<template>\n <div class=\"flex flex-col\">\n <span class=\"text-xs font-semibold uppercase tracking-wide text-base-content/50 mb-0.5\">\n {{ label }}\n </span>\n <template v-if=\"hasContent\">\n <span\n v-if=\"copyable\"\n ref=\"valueRef\"\n role=\"button\"\n tabindex=\"0\"\n class=\"font-mono cursor-pointer select-all\"\n @click=\"handleCopy\"\n @keydown.enter=\"handleCopy\"\n @keydown.space.prevent=\"handleCopy\"\n >\n {{ copied ? 'Copied!' : undefined }}\n <template v-if=\"!copied\"><slot /></template>\n </span>\n <span v-else>\n <slot />\n </span>\n </template>\n <template v-else>\n <slot name=\"empty\">\n <span class=\"text-base-content/50 italic text-sm\">Not set</span>\n </slot>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Comment } from 'vue';\nimport { ref, computed, useSlots } from 'vue';\n\ninterface Props {\n label: string;\n copyable?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n copyable: false,\n});\n\nconst slots = useSlots();\nconst valueRef = ref<HTMLSpanElement | null>(null);\nconst copied = ref(false);\nlet copyTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\nconst hasContent = computed(() => {\n const defaultSlot = slots.default;\n if (!defaultSlot) return false;\n const vnodes = defaultSlot();\n if (!vnodes || !Array.isArray(vnodes)) return false;\n return vnodes.some((v) => v.type !== Comment);\n});\n\nasync function handleCopy() {\n if (!props.copyable) return;\n const text = valueRef.value?.textContent?.trim();\n if (!text) return;\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n if (copyTimeoutId) clearTimeout(copyTimeoutId);\n copyTimeoutId = setTimeout(() => {\n copied.value = false;\n copyTimeoutId = null;\n }, 1500);\n } catch {\n // ignore clipboard errors\n }\n}\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { z } from 'zod';\n\n/** Schema for adding a comment/note on support ticket timeline. */\nconst TimelineNoteCreateSchema = z.object({\n body: z.string().min(1, 'Comment is required').trim(),\n is_internal: z.boolean().optional().default(false),\n});\n\nexport const timelineNoteCreateMetadata = withMetadata(\n TimelineNoteCreateSchema,\n 'timelineNoteCreateForm',\n {\n body: {\n label: 'Comment',\n placeholder: 'Add a comment...',\n inputType: 'textarea',\n },\n is_internal: {\n label: 'Internal Note',\n helpText: 'Internal notes are not visible to the customer',\n },\n },\n);\n\nexport type TimelineNoteCreateDto = z.infer<typeof TimelineNoteCreateSchema>;\n","<template>\n <div class=\"border-t border-base-200 pt-4 mt-4 w-full\">\n <template v-if=\"disabled\">\n <div class=\"bg-base-200/50 rounded-lg p-4 text-center\">\n <span class=\"text-base-content/50 text-sm inline-flex items-center gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-4 h-4\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n />\n </svg>\n This ticket has been locked. You can no longer add comments.\n </span>\n </div>\n </template>\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <div ref=\"formWrapperRef\" class=\"grid grid-cols-1 gap-4 w-full\" @keydown=\"handleKeydown\">\n <p\n v-if=\"showTypeToggle\"\n class=\"col-span-full text-xs mb-1\"\n :class=\"form.values.is_internal ? 'text-warning' : 'text-info'\"\n >\n {{\n form.values.is_internal\n ? '🔒 Internal — not visible to customer'\n : 'Visible to customer'\n }}\n </p>\n <div class=\"col-span-full\">\n <zinia.BodyField class=\"textarea w-full\" />\n </div>\n <div class=\"col-span-full flex flex-wrap gap-2 justify-between items-center\">\n <div v-if=\"showTypeToggle\" class=\"join\">\n <button\n type=\"button\"\n :class=\"[\n 'btn btn-sm join-item',\n !form.values.is_internal ? 'btn-info btn-active' : '',\n ]\"\n :disabled=\"form.isSubmitting\"\n @click=\"form.setValue('is_internal', false)\"\n >\n Customer Note\n </button>\n <button\n type=\"button\"\n :class=\"[\n 'btn btn-sm join-item',\n form.values.is_internal ? 'btn-warning btn-active' : '',\n ]\"\n :disabled=\"form.isSubmitting\"\n @click=\"form.setValue('is_internal', true)\"\n >\n Internal Note\n </button>\n </div>\n <div v-else></div>\n <ZiniaSubmitButton submitText=\"Comment\" submittingText=\"Adding...\" />\n </div>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { ref, watch } from 'vue';\nimport { timelineNoteCreateMetadata } from './timelineNoteFormMetadata';\n\ninterface Props {\n showTypeToggle: boolean;\n disabled: boolean;\n /** When provided, noteType is controlled (e.g. synced with URL query param) */\n noteType?: 'customer' | 'internal';\n /** Called when form submits with validated data. Must return a Promise. */\n onSubmit: (payload: { content: string; noteType: 'customer' | 'internal' }) => Promise<void>;\n}\n\nconst props = defineProps<Props>();\nconst formWrapperRef = ref<HTMLElement | null>(null);\n\nconst emit = defineEmits<{\n 'update:noteType': [value: 'customer' | 'internal'];\n}>();\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, refreshFormData } = useForm(\n timelineNoteCreateMetadata,\n {\n storeName: 'timeline-note-input',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => ({\n body: '',\n is_internal: props.noteType === 'internal',\n }),\n },\n);\n\n// Sync form's is_internal when controlled noteType prop changes (e.g. from URL)\nwatch(\n () => props.noteType,\n (noteType) => {\n if (noteType !== undefined) {\n form.setValue('is_internal', noteType === 'internal');\n }\n },\n { immediate: true },\n);\n\n// Emit when user toggles note type (for URL sync in StaffTimeline)\nwatch(\n () => form.values.is_internal,\n (isInternal) => {\n if (props.showTypeToggle) {\n emit('update:noteType', isInternal ? 'internal' : 'customer');\n }\n },\n);\n\nfunction handleKeydown(e: KeyboardEvent) {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n const form = formWrapperRef.value?.closest('form');\n form?.requestSubmit();\n }\n}\n\nasync function handleSubmit(formData: { body: string; is_internal: boolean }) {\n await props.onSubmit({\n content: (formData.body ?? '').trim(),\n noteType: props.showTypeToggle && formData.is_internal ? 'internal' : 'customer',\n });\n}\n\nfunction handleSuccess() {\n refreshFormData();\n (document.activeElement as HTMLElement)?.blur();\n}\n\nfunction handleError(_error: Error | unknown) {\n // Form displays errors via ZiniaFormErrorsSummary\n}\n\nfunction reset() {\n refreshFormData();\n}\n\ndefineExpose({ reset });\n</script>\n"],"mappings":"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"}