@dragonmastery/dragoncore-vue 0.0.19 → 0.0.21

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 (182) hide show
  1. package/dist/AppLink-CHMMrSFI.js +54 -0
  2. package/dist/AppLink-CHMMrSFI.js.map +1 -0
  3. package/dist/Appearance-D5pwxuf4.js +3 -0
  4. package/dist/{Appearance-BfPdKMXw.js → Appearance-DxWTyx1M.js} +1 -1
  5. package/dist/{Appearance-BfPdKMXw.js.map → Appearance-DxWTyx1M.js.map} +1 -1
  6. package/dist/{ChangePasswordPage-DXzU3NI9.js → ChangePasswordPage--3XwluwE.js} +2 -2
  7. package/dist/{ChangePasswordPage-DXzU3NI9.js.map → ChangePasswordPage--3XwluwE.js.map} +1 -1
  8. package/dist/ChangePasswordPage-CpDPmEml.js +6 -0
  9. package/dist/ConsentRequired-C4IRMA0c.js +213 -0
  10. package/dist/ConsentRequired-C4IRMA0c.js.map +1 -0
  11. package/dist/CreateTeamForm-B4cIuYAf.js +35 -0
  12. package/dist/CreateTeamMemberForm-Chrw1y00.js +35 -0
  13. package/dist/{CreateUserPage-bwR6fq5C.js → CreateUserPage-DLwXeLAq.js} +2 -2
  14. package/dist/{CreateUserPage-bwR6fq5C.js.map → CreateUserPage-DLwXeLAq.js.map} +1 -1
  15. package/dist/CreateUserPage-WruMs7WP.js +6 -0
  16. package/dist/CreditBalanceDashboard-CkcsrZ_e.js +35 -0
  17. package/dist/CreditManagement-Ddvu9dMw.js +35 -0
  18. package/dist/CustomerCreateSupportTicketForm-BKperKGS.js +35 -0
  19. package/dist/{CustomerSupportTicketDetailPage-D_1t2EpN.js → CustomerSupportTicketDetailPage-BdyaKG1v.js} +9 -9
  20. package/dist/{CustomerSupportTicketDetailPage-D_1t2EpN.js.map → CustomerSupportTicketDetailPage-BdyaKG1v.js.map} +1 -1
  21. package/dist/CustomerSupportTicketList-DcbrjDa9.js +35 -0
  22. package/dist/CustomerSupportTicketParent-BeNzUwuP.js +7 -0
  23. package/dist/{CustomerSupportTicketParent-B09_iFpJ.js → CustomerSupportTicketParent-HIxwSVdu.js} +4 -4
  24. package/dist/{CustomerSupportTicketParent-B09_iFpJ.js.map → CustomerSupportTicketParent-HIxwSVdu.js.map} +1 -1
  25. package/dist/CustomerSupportTicketSuccess-CC967u3y.js +35 -0
  26. package/dist/EditTeamForm-B5Tee5wL.js +35 -0
  27. package/dist/{EditTeamMemberForm-DJW7yRQW.js → EditTeamMemberForm-CaS2GLjV.js} +2 -2
  28. package/dist/{EditTeamMemberForm-DJW7yRQW.js.map → EditTeamMemberForm-CaS2GLjV.js.map} +1 -1
  29. package/dist/EditTeamMemberForm-OtcS8QWt.js +6 -0
  30. package/dist/{EditUserPage-aDygGmfD.js → EditUserPage-DURc5rmi.js} +4 -4
  31. package/dist/{EditUserPage-aDygGmfD.js.map → EditUserPage-DURc5rmi.js.map} +1 -1
  32. package/dist/EditUserPage-T4DQlKhf.js +7 -0
  33. package/dist/ForgotPassword-CUifhmqP.js +7 -0
  34. package/dist/{ForgotPassword-CJjzm9GK.js → ForgotPassword-OjIPi9s9.js} +4 -3
  35. package/dist/{ForgotPassword-CJjzm9GK.js.map → ForgotPassword-OjIPi9s9.js.map} +1 -1
  36. package/dist/LoginForm-9UFnA-fO.js +118 -0
  37. package/dist/LoginForm-9UFnA-fO.js.map +1 -0
  38. package/dist/LoginForm-Bg7GoZEA.js +7 -0
  39. package/dist/Logout-Bs92csWH.js +7 -0
  40. package/dist/{Logout-Cm9kEzgH.js → Logout-YgTgOFUH.js} +5 -4
  41. package/dist/{Logout-Cm9kEzgH.js.map → Logout-YgTgOFUH.js.map} +1 -1
  42. package/dist/MfaSetup-BACX5XP-.js +8 -0
  43. package/dist/{MfaSetup-Ch0w-gTN.js → MfaSetup-RtFMY_dj.js} +5 -4
  44. package/dist/{MfaSetup-Ch0w-gTN.js.map → MfaSetup-RtFMY_dj.js.map} +1 -1
  45. package/dist/{MfaVerify-BwzjVrTj.js → MfaVerify-Cvhe8bEM.js} +6 -5
  46. package/dist/{MfaVerify-BwzjVrTj.js.map → MfaVerify-Cvhe8bEM.js.map} +1 -1
  47. package/dist/MfaVerify-ak4iSdQ2.js +8 -0
  48. package/dist/RecordVersionViewer-BWZ78vvE.js +490 -0
  49. package/dist/RecordVersionViewer-BWZ78vvE.js.map +1 -0
  50. package/dist/{ResetPassword-DuLuXaNp.js → ResetPassword-BE4mXK9q.js} +4 -3
  51. package/dist/{ResetPassword-DuLuXaNp.js.map → ResetPassword-BE4mXK9q.js.map} +1 -1
  52. package/dist/ResetPassword-pY1uhTdl.js +7 -0
  53. package/dist/{SavedFiltersPage-CawED9Oz.js → SavedFiltersPage-DQt6uc8m.js} +33 -30
  54. package/dist/{SavedFiltersPage-CawED9Oz.js.map → SavedFiltersPage-DQt6uc8m.js.map} +1 -1
  55. package/dist/Signup-9TjMMnU4.js +204 -0
  56. package/dist/Signup-9TjMMnU4.js.map +1 -0
  57. package/dist/Signup-Bq-G3D-s.js +9 -0
  58. package/dist/SignupConsentFlow-QUZGKjdB.js +269 -0
  59. package/dist/SignupConsentFlow-QUZGKjdB.js.map +1 -0
  60. package/dist/SignupRequirementsPage-DfbYmpQD.js +360 -0
  61. package/dist/SignupRequirementsPage-DfbYmpQD.js.map +1 -0
  62. package/dist/StaffCreateSupportTicketForm-D0ZuisDk.js +35 -0
  63. package/dist/{StaffSupportTicketDetailPage-DZZN3jmt.js → StaffSupportTicketDetailPage-DQdfh6H1.js} +11 -11
  64. package/dist/{StaffSupportTicketDetailPage-DZZN3jmt.js.map → StaffSupportTicketDetailPage-DQdfh6H1.js.map} +1 -1
  65. package/dist/StaffSupportTicketList-CiqC05XB.js +35 -0
  66. package/dist/{StaffSupportTicketParent-BYxQPuhI.js → StaffSupportTicketParent-CilR4RGM.js} +4 -4
  67. package/dist/{StaffSupportTicketParent-BYxQPuhI.js.map → StaffSupportTicketParent-CilR4RGM.js.map} +1 -1
  68. package/dist/StaffSupportTicketParent-DkV329NI.js +7 -0
  69. package/dist/StaffSupportTicketSuccess-CUYnimaI.js +35 -0
  70. package/dist/{SupportStaffPage-B05UR5LK.js → SupportStaffPage-KKugAnFm.js} +7 -7
  71. package/dist/{SupportStaffPage-B05UR5LK.js.map → SupportStaffPage-KKugAnFm.js.map} +1 -1
  72. package/dist/{SupportTicketDevLifecycleBadge-Ba-Rm6QW.js → SupportTicketDevLifecycleBadge-EMrQHfyG.js} +1 -1
  73. package/dist/{SupportTicketDevLifecycleBadge-Ba-Rm6QW.js.map → SupportTicketDevLifecycleBadge-EMrQHfyG.js.map} +1 -1
  74. package/dist/{SupportTicketMaintenancePage-BoZpjcAF.js → SupportTicketMaintenancePage-smItdkrD.js} +4 -4
  75. package/dist/{SupportTicketMaintenancePage-BoZpjcAF.js.map → SupportTicketMaintenancePage-smItdkrD.js.map} +1 -1
  76. package/dist/TeamAttachmentsTab-DUtCD1Yi.js +35 -0
  77. package/dist/TeamHistoryTab-BsUoH4VK.js +4 -0
  78. package/dist/{TeamHistoryTab-BrC6FFIw.js → TeamHistoryTab-D5biUPmq.js} +3 -3
  79. package/dist/{TeamHistoryTab-BrC6FFIw.js.map → TeamHistoryTab-D5biUPmq.js.map} +1 -1
  80. package/dist/TeamList-BkPIqZ8V.js +35 -0
  81. package/dist/TeamMemberList-1mxUGCNa.js +35 -0
  82. package/dist/TeamMemberParent-DzeBIElY.js +35 -0
  83. package/dist/{TeamNotesTab-B2eETkAz.js → TeamNotesTab-BzGZZ1h8.js} +5 -5
  84. package/dist/{TeamNotesTab-B2eETkAz.js.map → TeamNotesTab-BzGZZ1h8.js.map} +1 -1
  85. package/dist/TeamNotesTab-ClHl2nXd.js +7 -0
  86. package/dist/TeamParent-DJa9UZTP.js +35 -0
  87. package/dist/{TimelineNoteInput-C0a0WRQC.js → TimelineNoteInput-0p-M4Qie.js} +2 -2
  88. package/dist/{TimelineNoteInput-C0a0WRQC.js.map → TimelineNoteInput-0p-M4Qie.js.map} +1 -1
  89. package/dist/{TimelineSystemEvent-Dj2TMOF6.js → TimelineSystemEvent-BHzFr46C.js} +4 -4
  90. package/dist/{TimelineSystemEvent-Dj2TMOF6.js.map → TimelineSystemEvent-BHzFr46C.js.map} +1 -1
  91. package/dist/UserListPage-BTLE4J0s.js +4 -0
  92. package/dist/{UserListPage-QSdxrJT6.js → UserListPage-DUE5gJTo.js} +3 -3
  93. package/dist/{UserListPage-QSdxrJT6.js.map → UserListPage-DUE5gJTo.js.map} +1 -1
  94. package/dist/{UserProfilePage-X4z2lG-J.js → UserProfilePage-C3b93Keh.js} +4 -4
  95. package/dist/{UserProfilePage-X4z2lG-J.js.map → UserProfilePage-C3b93Keh.js.map} +1 -1
  96. package/dist/UserProfilePage-CVTORtSx.js +7 -0
  97. package/dist/VerifyEmail-DCP4DWIw.js +9 -0
  98. package/dist/VerifyEmail-DlOmWGG-.js +257 -0
  99. package/dist/VerifyEmail-DlOmWGG-.js.map +1 -0
  100. package/dist/ViewTeam-DVfnLMhV.js +35 -0
  101. package/dist/ViewTeamMember-L4v3gCIn.js +35 -0
  102. package/dist/{convertToLocalDateTime-DOSGtMn8.js → convertToLocalDateTime-CFhtN6PI.js} +12 -2
  103. package/dist/convertToLocalDateTime-CFhtN6PI.js.map +1 -0
  104. package/dist/{displayIdFormatter-B1ZKgofu.js → displayIdFormatter-Dz900Awr.js} +1 -1
  105. package/dist/{displayIdFormatter-B1ZKgofu.js.map → displayIdFormatter-Dz900Awr.js.map} +1 -1
  106. package/dist/{extractRpcErrorMessage-C_UbKgHL.js → extractRpcErrorMessage-Di8E8-Wh.js} +1 -1
  107. package/dist/{extractRpcErrorMessage-C_UbKgHL.js.map → extractRpcErrorMessage-Di8E8-Wh.js.map} +1 -1
  108. package/dist/index.d.ts +62 -17
  109. package/dist/index.js +37 -33
  110. package/dist/{mfaSchema-nfNCcEhM.js → mfaSchema-BnRWf0ma.js} +1 -1
  111. package/dist/{mfaSchema-nfNCcEhM.js.map → mfaSchema-BnRWf0ma.js.map} +1 -1
  112. package/dist/{src-CkgUIye9.js → src-QZJyMfGX.js} +422 -812
  113. package/dist/src-QZJyMfGX.js.map +1 -0
  114. package/dist/{useBreadcrumbs-DmgSucoe.js → useBreadcrumbs-qB6ghsAf.js} +1 -1
  115. package/dist/{useBreadcrumbs-DmgSucoe.js.map → useBreadcrumbs-qB6ghsAf.js.map} +1 -1
  116. package/dist/useEmailVerificationChannel-BNi926Ho.js +37 -0
  117. package/dist/useEmailVerificationChannel-BNi926Ho.js.map +1 -0
  118. package/dist/{useMutation-DbzXtqf1.js → useMutation-BTsyHKyn.js} +3 -3
  119. package/dist/{useMutation-DbzXtqf1.js.map → useMutation-BTsyHKyn.js.map} +1 -1
  120. package/dist/{useQuery-BKb5JXVS.js → useQuery-BggIE52P.js} +5 -5
  121. package/dist/useQuery-BggIE52P.js.map +1 -0
  122. package/dist/{useQueryCache-CHG4-HGF.js → useQueryCache-Bjm-S8v5.js} +2 -2
  123. package/dist/{useQueryCache-CHG4-HGF.js.map → useQueryCache-Bjm-S8v5.js.map} +1 -1
  124. package/dist/{useReturnUrl-Da8PpLb9.js → useReturnUrl-qFeazn-G.js} +2 -54
  125. package/dist/useReturnUrl-qFeazn-G.js.map +1 -0
  126. package/dist/{useRpcAuth-8Byr6SSI.js → useRpcAuth-rmHf7bYx.js} +42 -2
  127. package/dist/useRpcAuth-rmHf7bYx.js.map +1 -0
  128. package/dist/useSignupPendingData-BWHwUHhL.js +47 -0
  129. package/dist/useSignupPendingData-BWHwUHhL.js.map +1 -0
  130. package/package.json +5 -2
  131. package/src/daisyui.css +1 -0
  132. package/dist/Appearance-C3WguxT-.js +0 -3
  133. package/dist/ChangePasswordPage-BuVNYC_G.js +0 -6
  134. package/dist/CreateTeamForm-BuMrZ169.js +0 -32
  135. package/dist/CreateTeamMemberForm-D0xqR9me.js +0 -32
  136. package/dist/CreateUserPage-BWIvFF-4.js +0 -6
  137. package/dist/CreditBalanceDashboard-BR-er7gs.js +0 -32
  138. package/dist/CreditManagement-CyjrE1ep.js +0 -32
  139. package/dist/CustomerCreateSupportTicketForm-C9-CLRRQ.js +0 -32
  140. package/dist/CustomerSupportTicketList-B0dC7lgD.js +0 -32
  141. package/dist/CustomerSupportTicketParent-D0wLnKXf.js +0 -7
  142. package/dist/CustomerSupportTicketSuccess-BvuBglg8.js +0 -32
  143. package/dist/EditTeamForm-BJlOKEkI.js +0 -32
  144. package/dist/EditTeamMemberForm-CbDvTLXI.js +0 -6
  145. package/dist/EditUserPage-CsHl1h_g.js +0 -7
  146. package/dist/ForgotPassword-DJjmzU_m.js +0 -7
  147. package/dist/LoginForm-BeiI_y3E.js +0 -7
  148. package/dist/LoginForm-IEP-hEh0.js +0 -115
  149. package/dist/LoginForm-IEP-hEh0.js.map +0 -1
  150. package/dist/Logout-DmZTNQDP.js +0 -7
  151. package/dist/MfaSetup-BwkenBRD.js +0 -8
  152. package/dist/MfaVerify-BaUROEol.js +0 -8
  153. package/dist/ResetPassword-DEFj1pgV.js +0 -7
  154. package/dist/Signup-C94alv87.js +0 -166
  155. package/dist/Signup-C94alv87.js.map +0 -1
  156. package/dist/Signup-CFUbdrYs.js +0 -7
  157. package/dist/StaffCreateSupportTicketForm-AxprwWRv.js +0 -32
  158. package/dist/StaffSupportTicketList-DYKysNs3.js +0 -32
  159. package/dist/StaffSupportTicketParent-CT8oYFd6.js +0 -7
  160. package/dist/StaffSupportTicketSuccess-zWEagE4E.js +0 -32
  161. package/dist/TeamAttachmentsTab-BFRMbPlZ.js +0 -32
  162. package/dist/TeamHistoryTab-CYrt5KnE.js +0 -4
  163. package/dist/TeamList-CF5BQhfx.js +0 -32
  164. package/dist/TeamMemberList-Dfi2iKOH.js +0 -32
  165. package/dist/TeamMemberParent-DXcumR-Q.js +0 -32
  166. package/dist/TeamNotesTab-Bv_HPC6f.js +0 -7
  167. package/dist/TeamParent-DLoNn-mW.js +0 -32
  168. package/dist/UserListPage-CBwfXo15.js +0 -4
  169. package/dist/UserProfilePage-cTrZuwOT.js +0 -7
  170. package/dist/VerifyEmail-8bsvoDdM.js +0 -175
  171. package/dist/VerifyEmail-8bsvoDdM.js.map +0 -1
  172. package/dist/VerifyEmail-Cpc0umIu.js +0 -7
  173. package/dist/VerifyEmailRequired-CN1FU1AE.js +0 -74
  174. package/dist/VerifyEmailRequired-CN1FU1AE.js.map +0 -1
  175. package/dist/ViewTeam-DpjnoTwo.js +0 -32
  176. package/dist/ViewTeamMember-CRb2oBHG.js +0 -32
  177. package/dist/convertToLocalDateTime-DOSGtMn8.js.map +0 -1
  178. package/dist/src-CkgUIye9.js.map +0 -1
  179. package/dist/useQuery-BKb5JXVS.js.map +0 -1
  180. package/dist/useReturnUrl-Da8PpLb9.js.map +0 -1
  181. package/dist/useRpcAuth-8Byr6SSI.js.map +0 -1
  182. /package/dist/{TeamMembersTab-DTJxmb-M.js → TeamMembersTab-CBB2Yl_I.js} +0 -0
@@ -0,0 +1,490 @@
1
+ import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString } from "vue";
2
+
3
+ //#region src/components/ui/LoadingErrorStates.vue
4
+ const _hoisted_1$3 = {
5
+ key: 0,
6
+ class: "text-center py-8"
7
+ };
8
+ const _hoisted_2$3 = { class: "text-base-content/70 mt-2" };
9
+ const _hoisted_3$3 = { class: "text-center py-8" };
10
+ const _hoisted_4$3 = { class: "alert alert-error max-w-md mx-auto" };
11
+ const _hoisted_5$3 = { class: "font-bold" };
12
+ const _hoisted_6$3 = { class: "text-sm" };
13
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14
+ __name: "LoadingErrorStates",
15
+ props: {
16
+ isLoading: { type: Boolean },
17
+ error: {},
18
+ config: {}
19
+ },
20
+ emits: ["retry"],
21
+ setup(__props, { emit: __emit }) {
22
+ const props = __props;
23
+ const emit = __emit;
24
+ const config = computed(() => props.config || {});
25
+ function getErrorMessage(error) {
26
+ if (config.value.customErrorMessage) return config.value.customErrorMessage(error);
27
+ return error.message || "An unexpected error occurred";
28
+ }
29
+ function handleRetry() {
30
+ emit("retry");
31
+ }
32
+ return (_ctx, _cache) => {
33
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" Loading State "), __props.isLoading ? (openBlock(), createElementBlock("div", _hoisted_1$3, [renderSlot(_ctx.$slots, "loading", {}, () => [_cache[0] || (_cache[0] = createElementVNode("div", { class: "flex justify-center" }, [createElementVNode("span", { class: "loading loading-spinner loading-lg" })], -1)), createElementVNode("p", _hoisted_2$3, toDisplayString(config.value.loadingText || "Loading..."), 1)])])) : __props.error ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Error State "), createElementVNode("div", _hoisted_3$3, [renderSlot(_ctx.$slots, "error", {
34
+ error: __props.error,
35
+ retry: handleRetry
36
+ }, () => [createElementVNode("div", _hoisted_4$3, [_cache[1] || (_cache[1] = createElementVNode("svg", {
37
+ xmlns: "http://www.w3.org/2000/svg",
38
+ class: "stroke-current shrink-0 h-6 w-6",
39
+ fill: "none",
40
+ viewBox: "0 0 24 24"
41
+ }, [createElementVNode("path", {
42
+ "stroke-linecap": "round",
43
+ "stroke-linejoin": "round",
44
+ "stroke-width": "2",
45
+ d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
46
+ })], -1)), createElementVNode("div", null, [
47
+ createElementVNode("h3", _hoisted_5$3, toDisplayString(config.value.errorTitle || "Error"), 1),
48
+ createElementVNode("div", _hoisted_6$3, toDisplayString(getErrorMessage(__props.error)), 1),
49
+ config.value.showRetry !== false ? (openBlock(), createElementBlock("button", {
50
+ key: 0,
51
+ class: "btn btn-sm btn-outline mt-2",
52
+ onClick: handleRetry
53
+ }, toDisplayString(config.value.retryText || "Try Again"), 1)) : createCommentVNode("v-if", true)
54
+ ])])])])], 2112)) : createCommentVNode("v-if", true)], 2112);
55
+ };
56
+ }
57
+ });
58
+ var LoadingErrorStates_default = _sfc_main$3;
59
+
60
+ //#endregion
61
+ //#region src/components/ui/RecordChangesSummary.vue
62
+ const _hoisted_1$2 = {
63
+ key: 0,
64
+ class: "card bg-base-100 shadow-sm mb-4"
65
+ };
66
+ const _hoisted_2$2 = { class: "card-body p-3 sm:p-5" };
67
+ const _hoisted_3$2 = { class: "flex justify-between items-center" };
68
+ const _hoisted_4$2 = { class: "card-title text-base sm:text-lg" };
69
+ const _hoisted_5$2 = { key: 0 };
70
+ const _hoisted_6$2 = { class: "hidden md:block overflow-x-auto mt-4" };
71
+ const _hoisted_7$2 = { class: "table table-zebra table-sm" };
72
+ const _hoisted_8$2 = { class: "font-mono text-xs" };
73
+ const _hoisted_9$2 = { class: "md:hidden space-y-4 mt-4" };
74
+ const _hoisted_10$2 = { class: "mb-2" };
75
+ const _hoisted_11$2 = { class: "font-mono text-xs font-bold" };
76
+ const _hoisted_12$2 = { class: "grid grid-cols-2 gap-2" };
77
+ const _hoisted_13$2 = { class: "text-xs text-base-content/70 mb-1" };
78
+ const _hoisted_14$2 = { class: "text-sm break-words" };
79
+ const _hoisted_15$2 = { class: "text-xs text-base-content/70 mb-1" };
80
+ const _hoisted_16$2 = { class: "text-sm break-words" };
81
+ const _hoisted_17$2 = {
82
+ key: 1,
83
+ class: "mt-2 text-sm text-base-content/70"
84
+ };
85
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
86
+ __name: "RecordChangesSummary",
87
+ props: {
88
+ changedFields: {},
89
+ config: {}
90
+ },
91
+ setup(__props) {
92
+ const props = __props;
93
+ const config = computed(() => props.config || {});
94
+ const showChanges = ref(false);
95
+ function defaultFieldNameFormatter(path) {
96
+ if (config.value.customFieldLabels?.[path]) return config.value.customFieldLabels[path];
97
+ return path.split(".").map((segment) => segment.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()).trim()).join(" → ");
98
+ }
99
+ function formatFieldName(path) {
100
+ if (config.value.fieldNameFormatter) return config.value.fieldNameFormatter(path);
101
+ return defaultFieldNameFormatter(path);
102
+ }
103
+ function defaultValueFormatter(value) {
104
+ if (value === null || value === void 0) return "N/A";
105
+ if (typeof value === "object") {
106
+ if (Array.isArray(value)) return value.length === 0 ? "Empty array" : `Array (${value.length} items)`;
107
+ return JSON.stringify(value, null, 2);
108
+ }
109
+ if (typeof value === "boolean") return value ? "Yes" : "No";
110
+ if (typeof value === "number") {
111
+ if (value > 0 && (value % 1 === 0 || value.toString().includes("."))) return value.toLocaleString("en-US", {
112
+ minimumFractionDigits: 2,
113
+ maximumFractionDigits: 2
114
+ });
115
+ return value.toString();
116
+ }
117
+ return String(value);
118
+ }
119
+ function formatValue(value, path) {
120
+ if (config.value.valueFormatter) return config.value.valueFormatter(value, path || "");
121
+ return defaultValueFormatter(value);
122
+ }
123
+ return (_ctx, _cache) => {
124
+ return __props.changedFields.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$2, [createElementVNode("div", _hoisted_2$2, [createElementVNode("div", _hoisted_3$2, [createElementVNode("h2", _hoisted_4$2, toDisplayString(config.value.title || "Changes in This Version"), 1), createElementVNode("button", {
125
+ onClick: _cache[0] || (_cache[0] = ($event) => showChanges.value = !showChanges.value),
126
+ class: "btn btn-sm btn-info"
127
+ }, toDisplayString(showChanges.value ? config.value.hideText || "Hide Changes" : config.value.showText || "Show Changes"), 1)]), showChanges.value ? (openBlock(), createElementBlock("div", _hoisted_5$2, [
128
+ createCommentVNode(" Desktop view - table format "),
129
+ createElementVNode("div", _hoisted_6$2, [createElementVNode("table", _hoisted_7$2, [createElementVNode("thead", null, [createElementVNode("tr", null, [
130
+ createElementVNode("th", null, toDisplayString(config.value.fieldColumnHeader || "Field"), 1),
131
+ createElementVNode("th", null, toDisplayString(config.value.previousColumnHeader || "Previous Value"), 1),
132
+ createElementVNode("th", null, toDisplayString(config.value.newColumnHeader || "New Value"), 1)
133
+ ])]), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.changedFields, (change, index) => {
134
+ return openBlock(), createElementBlock("tr", { key: index }, [
135
+ createElementVNode("td", _hoisted_8$2, toDisplayString(formatFieldName(change.path)), 1),
136
+ createElementVNode("td", null, toDisplayString(formatValue(change.oldValue)), 1),
137
+ createElementVNode("td", null, toDisplayString(formatValue(change.newValue)), 1)
138
+ ]);
139
+ }), 128))])])]),
140
+ createCommentVNode(" Mobile view - card format "),
141
+ createElementVNode("div", _hoisted_9$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.changedFields, (change, index) => {
142
+ return openBlock(), createElementBlock("div", {
143
+ key: index,
144
+ class: "border border-base-300 rounded-lg p-3"
145
+ }, [createElementVNode("div", _hoisted_10$2, [createElementVNode("span", _hoisted_11$2, toDisplayString(formatFieldName(change.path)), 1)]), createElementVNode("div", _hoisted_12$2, [createElementVNode("div", null, [createElementVNode("div", _hoisted_13$2, toDisplayString(config.value.previousLabel || "Previous:"), 1), createElementVNode("div", _hoisted_14$2, toDisplayString(formatValue(change.oldValue)), 1)]), createElementVNode("div", null, [createElementVNode("div", _hoisted_15$2, toDisplayString(config.value.newLabel || "New:"), 1), createElementVNode("div", _hoisted_16$2, toDisplayString(formatValue(change.newValue)), 1)])])]);
146
+ }), 128))])
147
+ ])) : (openBlock(), createElementBlock("div", _hoisted_17$2, toDisplayString(__props.changedFields.length) + " " + toDisplayString(__props.changedFields.length === 1 ? config.value.fieldSingular || "field" : config.value.fieldPlural || "fields") + " changed ", 1))])])) : createCommentVNode("v-if", true);
148
+ };
149
+ }
150
+ });
151
+ var RecordChangesSummary_default = _sfc_main$2;
152
+
153
+ //#endregion
154
+ //#region src/components/ui/RecordVersionList.vue
155
+ const _hoisted_1$1 = { class: "space-y-4" };
156
+ const _hoisted_2$1 = {
157
+ key: 0,
158
+ class: "space-y-4"
159
+ };
160
+ const _hoisted_3$1 = { class: "alert alert-error shadow-lg text-sm" };
161
+ const _hoisted_4$1 = { class: "font-bold" };
162
+ const _hoisted_5$1 = { class: "text-sm" };
163
+ const _hoisted_6$1 = { class: "alert alert-info shadow-lg text-sm" };
164
+ const _hoisted_7$1 = { class: "space-y-3 max-w-4xl mx-auto" };
165
+ const _hoisted_8$1 = { class: "card-body p-4" };
166
+ const _hoisted_9$1 = { class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2" };
167
+ const _hoisted_10$1 = { class: "font-medium text-sm" };
168
+ const _hoisted_11$1 = { class: "flex items-center gap-2 text-xs text-base-content/70" };
169
+ const _hoisted_12$1 = {
170
+ key: 0,
171
+ class: "mt-1"
172
+ };
173
+ const _hoisted_13$1 = { class: "flex gap-2" };
174
+ const _hoisted_14$1 = ["onClick"];
175
+ const _hoisted_15$1 = {
176
+ key: 0,
177
+ class: "text-center py-4"
178
+ };
179
+ const _hoisted_16$1 = {
180
+ key: 1,
181
+ class: "text-center py-4"
182
+ };
183
+ const _hoisted_17$1 = ["disabled"];
184
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
185
+ __name: "RecordVersionList",
186
+ props: {
187
+ versions: {},
188
+ loading: { type: Boolean },
189
+ error: {},
190
+ hasNextPage: { type: Boolean },
191
+ loadingMore: { type: Boolean },
192
+ config: {},
193
+ excludeLatest: { type: Boolean }
194
+ },
195
+ emits: ["retry", "load-more"],
196
+ setup(__props) {
197
+ const props = __props;
198
+ const config = computed(() => props.config || {});
199
+ const filteredVersions = computed(() => {
200
+ if (!props.excludeLatest) return props.versions;
201
+ if (props.versions.length <= 1) return [];
202
+ return props.versions.slice(1);
203
+ });
204
+ const defaultOperationLabels = {
205
+ insert: "Created",
206
+ update: "Updated",
207
+ delete: "Deleted"
208
+ };
209
+ const defaultOperationBadgeClasses = {
210
+ insert: "badge-success",
211
+ update: "badge-warning",
212
+ delete: "badge-error"
213
+ };
214
+ /**
215
+ * Format a date string to a readable format
216
+ */
217
+ function formatDate(dateString) {
218
+ if (!dateString) return "Unknown date";
219
+ try {
220
+ const date = new Date(dateString);
221
+ return new Intl.DateTimeFormat("en-US", {
222
+ year: "numeric",
223
+ month: "short",
224
+ day: "numeric",
225
+ hour: "2-digit",
226
+ minute: "2-digit"
227
+ }).format(date);
228
+ } catch (e) {
229
+ return "Invalid date";
230
+ }
231
+ }
232
+ /**
233
+ * Format the operation type for display
234
+ */
235
+ function formatOperation(operation) {
236
+ if (!operation) return "Unknown";
237
+ return {
238
+ ...defaultOperationLabels,
239
+ ...config.value.operationLabels
240
+ }[operation] || operation;
241
+ }
242
+ /**
243
+ * Get CSS class for operation badge
244
+ */
245
+ function getOperationBadgeClass(operation) {
246
+ if (!operation) return "badge-neutral";
247
+ return {
248
+ ...defaultOperationBadgeClasses,
249
+ ...config.value.operationBadgeClasses
250
+ }[operation] || "badge-neutral";
251
+ }
252
+ return (_ctx, _cache) => {
253
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [createCommentVNode(" Loading State "), __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2$1, [(openBlock(), createElementBlock(Fragment, null, renderList(3, (i) => {
254
+ return createElementVNode("div", {
255
+ key: i,
256
+ class: "card bg-base-100 shadow-xs animate-pulse"
257
+ }, [..._cache[2] || (_cache[2] = [createElementVNode("div", { class: "card-body p-4" }, [createElementVNode("div", { class: "h-4 bg-base-300 rounded-sm w-1/4 mb-2" }), createElementVNode("div", { class: "h-3 bg-base-300 rounded-sm w-1/3" })], -1)])]);
258
+ }), 64))])) : __props.error ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Error State "), createElementVNode("div", _hoisted_3$1, [
259
+ _cache[3] || (_cache[3] = createElementVNode("svg", {
260
+ xmlns: "http://www.w3.org/2000/svg",
261
+ class: "stroke-current shrink-0 h-5 w-5",
262
+ fill: "none",
263
+ viewBox: "0 0 24 24"
264
+ }, [createElementVNode("path", {
265
+ "stroke-linecap": "round",
266
+ "stroke-linejoin": "round",
267
+ "stroke-width": "2",
268
+ d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
269
+ })], -1)),
270
+ createElementVNode("div", null, [createElementVNode("h3", _hoisted_4$1, toDisplayString(config.value.errorTitle || "Error Loading Version History"), 1), createElementVNode("div", _hoisted_5$1, toDisplayString(__props.error.message), 1)]),
271
+ createElementVNode("button", {
272
+ class: "btn btn-xs",
273
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("retry"))
274
+ }, toDisplayString(config.value.retryText || "Retry"), 1)
275
+ ])], 2112)) : !filteredVersions.value.length ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" No Versions "), createElementVNode("div", _hoisted_6$1, [_cache[4] || (_cache[4] = createElementVNode("svg", {
276
+ xmlns: "http://www.w3.org/2000/svg",
277
+ fill: "none",
278
+ viewBox: "0 0 24 24",
279
+ class: "stroke-current shrink-0 w-5 h-5"
280
+ }, [createElementVNode("path", {
281
+ "stroke-linecap": "round",
282
+ "stroke-linejoin": "round",
283
+ "stroke-width": "2",
284
+ d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
285
+ })], -1)), createElementVNode("span", null, toDisplayString(config.value.noVersionsText || `No previous versions available for this ${config.value.recordDisplayName || "record"}.`), 1)])], 2112)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createCommentVNode(" Version List "), createElementVNode("div", _hoisted_7$1, [
286
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredVersions.value, (version) => {
287
+ return openBlock(), createElementBlock("div", {
288
+ key: version.id,
289
+ class: "card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200"
290
+ }, [createElementVNode("div", _hoisted_8$1, [createElementVNode("div", _hoisted_9$1, [createElementVNode("div", null, [
291
+ createElementVNode("h3", _hoisted_10$1, toDisplayString(config.value.versionLabelFormat ? config.value.versionLabelFormat(version) : `Version from ${formatDate(version.recorded_at)}`), 1),
292
+ createElementVNode("div", _hoisted_11$1, [createElementVNode("span", { class: normalizeClass(["badge badge-xs", getOperationBadgeClass(version.operation)]) }, toDisplayString(formatOperation(version.operation)), 3), createElementVNode("span", null, "by " + toDisplayString(version.auth_username || "Unknown"), 1)]),
293
+ createCommentVNode(" Custom metadata slot "),
294
+ _ctx.$slots.versionMetadata ? (openBlock(), createElementBlock("div", _hoisted_12$1, [renderSlot(_ctx.$slots, "versionMetadata", { version })])) : createCommentVNode("v-if", true)
295
+ ]), createElementVNode("div", _hoisted_13$1, [createCommentVNode(" Custom actions slot "), renderSlot(_ctx.$slots, "versionActions", { version }, () => [createCommentVNode(" Default view action "), config.value.viewAction ? (openBlock(), createElementBlock("button", {
296
+ key: 0,
297
+ class: "btn btn-primary btn-xs",
298
+ onClick: ($event) => config.value.viewAction(version)
299
+ }, toDisplayString(config.value.viewActionText || "View Version"), 9, _hoisted_14$1)) : createCommentVNode("v-if", true)])])])])]);
300
+ }), 128)),
301
+ createCommentVNode(" Pagination "),
302
+ __props.loadingMore ? (openBlock(), createElementBlock("div", _hoisted_15$1, [..._cache[5] || (_cache[5] = [createElementVNode("span", { class: "loading loading-spinner loading-md" }, null, -1)])])) : createCommentVNode("v-if", true),
303
+ __props.hasNextPage ? (openBlock(), createElementBlock("div", _hoisted_16$1, [createElementVNode("button", {
304
+ class: "btn btn-sm btn-neutral",
305
+ onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("load-more")),
306
+ disabled: __props.loadingMore
307
+ }, toDisplayString(config.value.loadMoreText || "Load More"), 9, _hoisted_17$1)])) : createCommentVNode("v-if", true)
308
+ ])], 2112))]);
309
+ };
310
+ }
311
+ });
312
+ var RecordVersionList_default = _sfc_main$1;
313
+
314
+ //#endregion
315
+ //#region src/components/ui/RecordVersionViewer.vue
316
+ const _hoisted_1 = { class: "sticky top-0 z-10 bg-base-100 shadow-sm" };
317
+ const _hoisted_2 = { class: "flex justify-between items-center p-4 border-b" };
318
+ const _hoisted_3 = { class: "text-lg font-semibold" };
319
+ const _hoisted_4 = {
320
+ key: 0,
321
+ class: "text-sm text-base-content/70"
322
+ };
323
+ const _hoisted_5 = { class: "flex gap-2" };
324
+ const _hoisted_6 = ["disabled"];
325
+ const _hoisted_7 = {
326
+ key: 0,
327
+ class: "loading loading-spinner loading-sm mr-1"
328
+ };
329
+ const _hoisted_8 = {
330
+ key: 0,
331
+ class: "max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm"
332
+ };
333
+ const _hoisted_9 = {
334
+ key: 0,
335
+ class: "mb-4"
336
+ };
337
+ const _hoisted_10 = {
338
+ key: 1,
339
+ class: "mb-4"
340
+ };
341
+ const _hoisted_11 = { class: "alert alert-warning" };
342
+ const _hoisted_12 = { class: "font-bold" };
343
+ const _hoisted_13 = { class: "text-sm" };
344
+ const _hoisted_14 = { class: "mb-4 p-3 bg-base-100 rounded-lg shadow-sm" };
345
+ const _hoisted_15 = { class: "font-semibold mb-2" };
346
+ const _hoisted_16 = { class: "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" };
347
+ const _hoisted_17 = { class: "text-base-content/70" };
348
+ const _hoisted_18 = { class: "ml-2" };
349
+ const _hoisted_19 = { class: "space-y-4" };
350
+ const _hoisted_20 = { class: "p-4 bg-base-100 rounded-lg shadow-sm" };
351
+ const _hoisted_21 = { class: "font-semibold mb-2" };
352
+ const _hoisted_22 = { class: "text-xs bg-base-200 p-3 rounded overflow-auto max-h-96" };
353
+ const _sfc_main = /* @__PURE__ */ defineComponent({
354
+ __name: "RecordVersionViewer",
355
+ props: {
356
+ version: {},
357
+ recordData: {},
358
+ changedFields: { default: () => [] },
359
+ isLoading: { type: Boolean },
360
+ isRestoring: { type: Boolean },
361
+ error: {},
362
+ config: {}
363
+ },
364
+ setup(__props) {
365
+ const props = __props;
366
+ const config = computed(() => props.config || {});
367
+ const shouldShowChanges = computed(() => {
368
+ return props.changedFields && props.changedFields.length > 0 && props.version?.operation === "update";
369
+ });
370
+ const filteredRecordData = computed(() => {
371
+ if (!props.recordData) return {};
372
+ const excludeFields = new Set([
373
+ "id",
374
+ "created_at",
375
+ "updated_at",
376
+ "created_by",
377
+ "updated_by",
378
+ "__typename",
379
+ ...config.value.excludeFields || []
380
+ ]);
381
+ return Object.entries(props.recordData).filter(([key]) => !excludeFields.has(key)).reduce((acc, [key, value]) => {
382
+ acc[key] = value;
383
+ return acc;
384
+ }, {});
385
+ });
386
+ function formatVersionInfo(version) {
387
+ const date = new Date(version.recorded_at).toLocaleString();
388
+ return `${version.operation.charAt(0).toUpperCase() + version.operation.slice(1)} on ${date} by ${version.auth_username || "Unknown"}`;
389
+ }
390
+ function formatFieldName(field) {
391
+ if (config.value.formatFieldName) return config.value.formatFieldName(field);
392
+ return field.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()).trim();
393
+ }
394
+ function formatValue(value) {
395
+ if (config.value.formatValue) return config.value.formatValue(value);
396
+ if (value === null || value === void 0) return "N/A";
397
+ if (typeof value === "boolean") return value ? "Yes" : "No";
398
+ if (typeof value === "object") return JSON.stringify(value);
399
+ return String(value);
400
+ }
401
+ async function handleRestore() {
402
+ if (config.value.onRestore && props.version) await config.value.onRestore(props.version);
403
+ }
404
+ return (_ctx, _cache) => {
405
+ return openBlock(), createElementBlock("div", null, [
406
+ createCommentVNode(" Version Header - sticky on mobile "),
407
+ createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "header", {
408
+ version: __props.version,
409
+ isLoading: __props.isLoading,
410
+ isRestoring: __props.isRestoring
411
+ }, () => [createCommentVNode(" Default header "), createElementVNode("div", _hoisted_2, [createElementVNode("div", null, [createElementVNode("h1", _hoisted_3, toDisplayString(config.value.title || `View ${config.value.recordDisplayName || "Record"} Version`), 1), __props.version ? (openBlock(), createElementBlock("div", _hoisted_4, toDisplayString(formatVersionInfo(__props.version)), 1)) : createCommentVNode("v-if", true)]), createElementVNode("div", _hoisted_5, [
412
+ createCommentVNode(" Back button "),
413
+ config.value.onBack ? (openBlock(), createElementBlock("button", {
414
+ key: 0,
415
+ onClick: _cache[0] || (_cache[0] = (...args) => config.value.onBack && config.value.onBack(...args)),
416
+ class: "btn btn-ghost btn-sm"
417
+ }, [_cache[1] || (_cache[1] = createElementVNode("svg", {
418
+ xmlns: "http://www.w3.org/2000/svg",
419
+ class: "h-4 w-4 mr-1",
420
+ fill: "none",
421
+ viewBox: "0 0 24 24",
422
+ stroke: "currentColor"
423
+ }, [createElementVNode("path", {
424
+ "stroke-linecap": "round",
425
+ "stroke-linejoin": "round",
426
+ "stroke-width": "2",
427
+ d: "M10 19l-7-7m0 0l7-7m-7 7h18"
428
+ })], -1)), createTextVNode(" " + toDisplayString(config.value.backText || "Back"), 1)])) : createCommentVNode("v-if", true),
429
+ createCommentVNode(" Restore button "),
430
+ config.value.onRestore && __props.version && __props.version.operation !== "delete" ? (openBlock(), createElementBlock("button", {
431
+ key: 1,
432
+ onClick: handleRestore,
433
+ disabled: __props.isRestoring,
434
+ class: "btn btn-primary btn-sm"
435
+ }, [__props.isRestoring ? (openBlock(), createElementBlock("span", _hoisted_7)) : createCommentVNode("v-if", true), createTextVNode(" " + toDisplayString(config.value.restoreText || "Restore Version"), 1)], 8, _hoisted_6)) : createCommentVNode("v-if", true)
436
+ ])])])]),
437
+ createCommentVNode(" Loading and Error States "),
438
+ createVNode(LoadingErrorStates_default, {
439
+ "is-loading": __props.isLoading,
440
+ error: __props.error
441
+ }, null, 8, ["is-loading", "error"]),
442
+ createCommentVNode(" Main content area "),
443
+ !__props.isLoading && !__props.error && __props.recordData ? (openBlock(), createElementBlock("div", _hoisted_8, [
444
+ createCommentVNode(" Changes Summary - Only show for update operations "),
445
+ shouldShowChanges.value ? (openBlock(), createElementBlock("div", _hoisted_9, [renderSlot(_ctx.$slots, "changes", {
446
+ changedFields: __props.changedFields,
447
+ version: __props.version
448
+ }, () => [createVNode(RecordChangesSummary_default, {
449
+ "changed-fields": __props.changedFields,
450
+ config: config.value.changesSummaryConfig
451
+ }, null, 8, ["changed-fields", "config"])])])) : createCommentVNode("v-if", true),
452
+ createCommentVNode(" Deletion Notice "),
453
+ __props.version?.operation === "delete" ? (openBlock(), createElementBlock("div", _hoisted_10, [renderSlot(_ctx.$slots, "deletion-notice", { version: __props.version }, () => [createElementVNode("div", _hoisted_11, [_cache[2] || (_cache[2] = createElementVNode("svg", {
454
+ xmlns: "http://www.w3.org/2000/svg",
455
+ class: "stroke-current shrink-0 h-6 w-6",
456
+ fill: "none",
457
+ viewBox: "0 0 24 24"
458
+ }, [createElementVNode("path", {
459
+ "stroke-linecap": "round",
460
+ "stroke-linejoin": "round",
461
+ "stroke-width": "2",
462
+ d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z"
463
+ })], -1)), createElementVNode("div", null, [createElementVNode("h3", _hoisted_12, toDisplayString(config.value.deletionNoticeTitle || "Record Was Deleted"), 1), createElementVNode("div", _hoisted_13, toDisplayString(config.value.deletionNoticeText || "This version shows the state of the record before it was deleted."), 1)])])])])) : createCommentVNode("v-if", true),
464
+ createCommentVNode(" Record Information "),
465
+ createElementVNode("div", _hoisted_14, [renderSlot(_ctx.$slots, "record-info", {
466
+ recordData: __props.recordData,
467
+ version: __props.version
468
+ }, () => [
469
+ createCommentVNode(" Default record info display "),
470
+ createElementVNode("h3", _hoisted_15, toDisplayString(config.value.recordInfoTitle || "Record Information"), 1),
471
+ createElementVNode("div", _hoisted_16, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredRecordData.value, (value, key) => {
472
+ return openBlock(), createElementBlock("div", { key }, [createElementVNode("strong", _hoisted_17, toDisplayString(formatFieldName(key)) + ":", 1), createElementVNode("span", _hoisted_18, toDisplayString(formatValue(value)), 1)]);
473
+ }), 128))])
474
+ ])]),
475
+ createCommentVNode(" Custom Content Area "),
476
+ createElementVNode("div", _hoisted_19, [renderSlot(_ctx.$slots, "content", {
477
+ recordData: __props.recordData,
478
+ version: __props.version,
479
+ changedFields: __props.changedFields
480
+ }, () => [createCommentVNode(" Fallback content if no slot provided "), createElementVNode("div", _hoisted_20, [createElementVNode("h3", _hoisted_21, toDisplayString(config.value.rawDataTitle || "Raw Data"), 1), createElementVNode("pre", _hoisted_22, toDisplayString(JSON.stringify(__props.recordData, null, 2)), 1)])])])
481
+ ])) : createCommentVNode("v-if", true)
482
+ ]);
483
+ };
484
+ }
485
+ });
486
+ var RecordVersionViewer_default = _sfc_main;
487
+
488
+ //#endregion
489
+ export { LoadingErrorStates_default as i, RecordVersionList_default as n, RecordChangesSummary_default as r, RecordVersionViewer_default as t };
490
+ //# sourceMappingURL=RecordVersionViewer-BWZ78vvE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordVersionViewer-BWZ78vvE.js","names":["$emit","$slots"],"sources":["../src/components/ui/LoadingErrorStates.vue","../src/components/ui/RecordChangesSummary.vue","../src/components/ui/RecordVersionList.vue","../src/components/ui/RecordVersionViewer.vue"],"sourcesContent":["<template>\n <!-- Loading State -->\n <div v-if=\"isLoading\" class=\"text-center py-8\">\n <slot name=\"loading\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <p class=\"text-base-content/70 mt-2\">\n {{ config.loadingText || 'Loading...' }}\n </p>\n </slot>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"text-center py-8\">\n <slot name=\"error\" :error=\"error\" :retry=\"handleRetry\">\n <div class=\"alert alert-error max-w-md mx-auto\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.errorTitle || 'Error' }}\n </h3>\n <div class=\"text-sm\">\n {{ getErrorMessage(error) }}\n </div>\n <button\n v-if=\"config.showRetry !== false\"\n class=\"btn btn-sm btn-outline mt-2\"\n @click=\"handleRetry\"\n >\n {{ config.retryText || 'Try Again' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface LoadingErrorStatesConfig {\n loadingText?: string;\n errorTitle?: string;\n retryText?: string;\n showRetry?: boolean;\n customErrorMessage?: (error: Error) => string;\n}\n\nconst props = defineProps<{\n isLoading?: boolean;\n error?: Error | null;\n config?: LoadingErrorStatesConfig;\n}>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\nconst config = computed(() => props.config || {});\n\nfunction getErrorMessage(error: Error): string {\n if (config.value.customErrorMessage) {\n return config.value.customErrorMessage(error);\n }\n\n return error.message || 'An unexpected error occurred';\n}\n\nfunction handleRetry() {\n emit('retry');\n}\n</script>\n","<template>\n <div v-if=\"changedFields.length > 0\" class=\"card bg-base-100 shadow-sm mb-4\">\n <div class=\"card-body p-3 sm:p-5\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title text-base sm:text-lg\">\n {{ config.title || 'Changes in This Version' }}\n </h2>\n <button @click=\"showChanges = !showChanges\" class=\"btn btn-sm btn-info\">\n {{\n showChanges ? config.hideText || 'Hide Changes' : config.showText || 'Show Changes'\n }}\n </button>\n </div>\n\n <div v-if=\"showChanges\">\n <!-- Desktop view - table format -->\n <div class=\"hidden md:block overflow-x-auto mt-4\">\n <table class=\"table table-zebra table-sm\">\n <thead>\n <tr>\n <th>{{ config.fieldColumnHeader || 'Field' }}</th>\n <th>{{ config.previousColumnHeader || 'Previous Value' }}</th>\n <th>{{ config.newColumnHeader || 'New Value' }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(change, index) in changedFields\" :key=\"index\">\n <td class=\"font-mono text-xs\">\n {{ formatFieldName(change.path) }}\n </td>\n <td>{{ formatValue(change.oldValue) }}</td>\n <td>{{ formatValue(change.newValue) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Mobile view - card format -->\n <div class=\"md:hidden space-y-4 mt-4\">\n <div\n v-for=\"(change, index) in changedFields\"\n :key=\"index\"\n class=\"border border-base-300 rounded-lg p-3\"\n >\n <div class=\"mb-2\">\n <span class=\"font-mono text-xs font-bold\">{{\n formatFieldName(change.path)\n }}</span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.previousLabel || 'Previous:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.oldValue) }}\n </div>\n </div>\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.newLabel || 'New:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.newValue) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else class=\"mt-2 text-sm text-base-content/70\">\n {{ changedFields.length }}\n {{\n changedFields.length === 1\n ? config.fieldSingular || 'field'\n : config.fieldPlural || 'fields'\n }}\n changed\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { PropertyChange } from './RecordVersionViewerConfig';\n\ninterface RecordChangesSummaryConfig {\n title?: string;\n showText?: string;\n hideText?: string;\n fieldColumnHeader?: string;\n previousColumnHeader?: string;\n newColumnHeader?: string;\n previousLabel?: string;\n newLabel?: string;\n fieldSingular?: string;\n fieldPlural?: string;\n fieldNameFormatter?: (path: string) => string;\n valueFormatter?: (value: any, path: string) => string;\n customFieldLabels?: Record<string, string>;\n}\n\nconst props = defineProps<{\n changedFields: PropertyChange[];\n config?: RecordChangesSummaryConfig;\n}>();\n\nconst config = computed(() => props.config || {});\n\n// State for showing/hiding changes - hidden by default\nconst showChanges = ref(false);\n\n// Default field name formatter - converts camelCase and dot notation to readable labels\nfunction defaultFieldNameFormatter(path: string): string {\n // Check for custom field labels first\n if (config.value.customFieldLabels?.[path]) {\n return config.value.customFieldLabels[path];\n }\n\n return path\n .split('.')\n .map((segment) =>\n segment\n .replace(/([A-Z])/g, ' $1') // Add space before capital letters\n .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter\n .trim(),\n )\n .join(' → '); // Use arrow to show nesting\n}\n\n// Format field name for display\nfunction formatFieldName(path: string): string {\n if (config.value.fieldNameFormatter) {\n return config.value.fieldNameFormatter(path);\n }\n return defaultFieldNameFormatter(path);\n}\n\n// Default value formatter\nfunction defaultValueFormatter(value: any): string {\n if (value === null || value === undefined) return 'N/A';\n\n // Handle objects and arrays\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.length === 0 ? 'Empty array' : `Array (${value.length} items)`;\n }\n return JSON.stringify(value, null, 2);\n }\n\n // Handle boolean values\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers with potential formatting\n if (typeof value === 'number') {\n // Format currency if it looks like a monetary value\n if (value > 0 && (value % 1 === 0 || value.toString().includes('.'))) {\n // Simple currency detection - could be made more sophisticated\n return value.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n return value.toString();\n }\n\n // Default to string representation\n return String(value);\n}\n\n// Format value for display\nfunction formatValue(value: any, path?: string): string {\n if (config.value.valueFormatter) {\n return config.value.valueFormatter(value, path || '');\n }\n return defaultValueFormatter(value);\n}\n</script>\n","<template>\n <div class=\"space-y-4\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"card bg-base-100 shadow-xs animate-pulse\">\n <div class=\"card-body p-4\">\n <div class=\"h-4 bg-base-300 rounded-sm w-1/4 mb-2\"></div>\n <div class=\"h-3 bg-base-300 rounded-sm w-1/3\"></div>\n </div>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">{{ config.errorTitle || 'Error Loading Version History' }}</h3>\n <div class=\"text-sm\">{{ error.message }}</div>\n </div>\n <button class=\"btn btn-xs\" @click=\"$emit('retry')\">\n {{ config.retryText || 'Retry' }}\n </button>\n </div>\n\n <!-- No Versions -->\n <div v-else-if=\"!filteredVersions.length\" class=\"alert alert-info shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n class=\"stroke-current shrink-0 w-5 h-5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{\n config.noVersionsText ||\n `No previous versions available for this ${config.recordDisplayName || 'record'}.`\n }}</span>\n </div>\n\n <!-- Version List -->\n <div v-else class=\"space-y-3 max-w-4xl mx-auto\">\n <div\n v-for=\"version in filteredVersions\"\n :key=\"version.id\"\n class=\"card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200\"\n >\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div>\n <h3 class=\"font-medium text-sm\">\n {{\n config.versionLabelFormat\n ? config.versionLabelFormat(version)\n : `Version from ${formatDate(version.recorded_at)}`\n }}\n </h3>\n <div class=\"flex items-center gap-2 text-xs text-base-content/70\">\n <span\n class=\"badge badge-xs\"\n :class=\"getOperationBadgeClass(version.operation)\"\n >\n {{ formatOperation(version.operation) }}\n </span>\n <span>by {{ version.auth_username || 'Unknown' }}</span>\n </div>\n <!-- Custom metadata slot -->\n <div v-if=\"$slots.versionMetadata\" class=\"mt-1\">\n <slot name=\"versionMetadata\" :version=\"version\"></slot>\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Custom actions slot -->\n <slot name=\"versionActions\" :version=\"version\">\n <!-- Default view action -->\n <button\n v-if=\"config.viewAction\"\n class=\"btn btn-primary btn-xs\"\n @click=\"config.viewAction(version)\"\n >\n {{ config.viewActionText || 'View Version' }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"loadingMore\" class=\"text-center py-4\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n <div v-if=\"hasNextPage\" class=\"text-center py-4\">\n <button\n class=\"btn btn-sm btn-neutral\"\n @click=\"$emit('load-more')\"\n :disabled=\"loadingMore\"\n >\n {{ config.loadMoreText || 'Load More' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport type { RecordVersionListConfig } from './RecordVersionListConfig';\n\nconst props = defineProps<{\n versions: T[];\n loading?: boolean;\n error?: Error | null;\n hasNextPage?: boolean;\n loadingMore?: boolean;\n config?: RecordVersionListConfig;\n excludeLatest?: boolean;\n}>();\n\ndefineEmits<{\n retry: [];\n 'load-more': [];\n}>();\n\nconst config = computed(() => props.config || {});\n\n// Filter out the latest version if requested (default behavior)\nconst filteredVersions = computed(() => {\n if (!props.excludeLatest) {\n return props.versions;\n }\n\n if (props.versions.length <= 1) {\n return [];\n }\n return props.versions.slice(1);\n});\n\n// Default operation labels\nconst defaultOperationLabels = {\n insert: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n};\n\n// Default operation badge classes\nconst defaultOperationBadgeClasses = {\n insert: 'badge-success',\n update: 'badge-warning',\n delete: 'badge-error',\n};\n\n/**\n * Format a date string to a readable format\n */\nfunction formatDate(dateString: string | undefined | null): string {\n if (!dateString) return 'Unknown date';\n\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n } catch (e) {\n return 'Invalid date';\n }\n}\n\n/**\n * Format the operation type for display\n */\nfunction formatOperation(operation?: string): string {\n if (!operation) return 'Unknown';\n\n const labels = { ...defaultOperationLabels, ...config.value.operationLabels };\n return labels[operation as keyof typeof labels] || operation;\n}\n\n/**\n * Get CSS class for operation badge\n */\nfunction getOperationBadgeClass(operation?: string): string {\n if (!operation) return 'badge-neutral';\n\n const classes = { ...defaultOperationBadgeClasses, ...config.value.operationBadgeClasses };\n return classes[operation as keyof typeof classes] || 'badge-neutral';\n}\n</script>\n","<template>\n <div>\n <!-- Version Header - sticky on mobile -->\n <div class=\"sticky top-0 z-10 bg-base-100 shadow-sm\">\n <slot\n name=\"header\"\n :version=\"version\"\n :is-loading=\"isLoading\"\n :is-restoring=\"isRestoring\"\n >\n <!-- Default header -->\n <div class=\"flex justify-between items-center p-4 border-b\">\n <div>\n <h1 class=\"text-lg font-semibold\">\n {{ config.title || `View ${config.recordDisplayName || 'Record'} Version` }}\n </h1>\n <div v-if=\"version\" class=\"text-sm text-base-content/70\">\n {{ formatVersionInfo(version) }}\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Back button -->\n <button v-if=\"config.onBack\" @click=\"config.onBack\" class=\"btn btn-ghost btn-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n {{ config.backText || 'Back' }}\n </button>\n\n <!-- Restore button -->\n <button\n v-if=\"config.onRestore && version && version.operation !== 'delete'\"\n @click=\"handleRestore\"\n :disabled=\"isRestoring\"\n class=\"btn btn-primary btn-sm\"\n >\n <span v-if=\"isRestoring\" class=\"loading loading-spinner loading-sm mr-1\"></span>\n {{ config.restoreText || 'Restore Version' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Loading and Error States -->\n <LoadingErrorStates :is-loading=\"isLoading\" :error=\"error\" />\n\n <!-- Main content area -->\n <div\n v-if=\"!isLoading && !error && recordData\"\n class=\"max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm\"\n >\n <!-- Changes Summary - Only show for update operations -->\n <div v-if=\"shouldShowChanges\" class=\"mb-4\">\n <slot name=\"changes\" :changed-fields=\"changedFields\" :version=\"version\">\n <RecordChangesSummary\n :changed-fields=\"changedFields\"\n :config=\"config.changesSummaryConfig\"\n />\n </slot>\n </div>\n\n <!-- Deletion Notice -->\n <div v-if=\"version?.operation === 'delete'\" class=\"mb-4\">\n <slot name=\"deletion-notice\" :version=\"version\">\n <div class=\"alert alert-warning\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.deletionNoticeTitle || 'Record Was Deleted' }}\n </h3>\n <div class=\"text-sm\">\n {{\n config.deletionNoticeText ||\n 'This version shows the state of the record before it was deleted.'\n }}\n </div>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Record Information -->\n <div class=\"mb-4 p-3 bg-base-100 rounded-lg shadow-sm\">\n <slot name=\"record-info\" :record-data=\"recordData\" :version=\"version\">\n <!-- Default record info display -->\n <h3 class=\"font-semibold mb-2\">\n {{ config.recordInfoTitle || 'Record Information' }}\n </h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm\">\n <div v-for=\"(value, key) in filteredRecordData\" :key=\"key\">\n <strong class=\"text-base-content/70\">{{ formatFieldName(key) }}:</strong>\n <span class=\"ml-2\">{{ formatValue(value) }}</span>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Custom Content Area -->\n <div class=\"space-y-4\">\n <slot\n name=\"content\"\n :record-data=\"recordData\"\n :version=\"version\"\n :changed-fields=\"changedFields\"\n >\n <!-- Fallback content if no slot provided -->\n <div class=\"p-4 bg-base-100 rounded-lg shadow-sm\">\n <h3 class=\"font-semibold mb-2\">{{ config.rawDataTitle || 'Raw Data' }}</h3>\n <pre class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </div>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n TRecord extends Record<string, any>,\n TVersion extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport LoadingErrorStates from './LoadingErrorStates.vue';\nimport RecordChangesSummary from './RecordChangesSummary.vue';\nimport type { PropertyChange, RecordVersionViewerConfig } from './RecordVersionViewerConfig';\n\nconst props = withDefaults(\n defineProps<{\n version: TVersion | null;\n recordData: TRecord | null;\n changedFields?: PropertyChange[];\n isLoading?: boolean;\n isRestoring?: boolean;\n error?: Error | null;\n config?: RecordVersionViewerConfig;\n }>(),\n {\n changedFields: () => [],\n },\n);\n\nconst config = computed(() => props.config || {});\n\n// Compute whether to show changes summary\nconst shouldShowChanges = computed(() => {\n return (\n props.changedFields &&\n props.changedFields.length > 0 &&\n props.version?.operation === 'update'\n );\n});\n\n// Filter out system fields from record data display\nconst filteredRecordData = computed(() => {\n if (!props.recordData) return {};\n\n const excludeFields = new Set([\n 'id',\n 'created_at',\n 'updated_at',\n 'created_by',\n 'updated_by',\n '__typename',\n ...(config.value.excludeFields || []),\n ]);\n\n return Object.entries(props.recordData)\n .filter(([key]) => !excludeFields.has(key))\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n});\n\n// Format version info for display\nfunction formatVersionInfo(version: TVersion): string {\n const date = new Date(version.recorded_at).toLocaleString();\n const operation = version.operation.charAt(0).toUpperCase() + version.operation.slice(1);\n const user = version.auth_username || 'Unknown';\n\n return `${operation} on ${date} by ${user}`;\n}\n\n// Default field name formatter\nfunction formatFieldName(field: string): string {\n if (config.value.formatFieldName) {\n return config.value.formatFieldName(field);\n }\n\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\n// Default value formatter\nfunction formatValue(value: any): string {\n if (config.value.formatValue) {\n return config.value.formatValue(value);\n }\n\n if (value === null || value === undefined) return 'N/A';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n}\n\n// Handle restore action\nasync function handleRestore() {\n if (config.value.onRestore && props.version) {\n await config.value.onRestore(props.version);\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EA6DA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAIb,MAAM,SAAS,eAAe,MAAM,UAAU,EAAE,CAAC;EAEjD,SAAS,gBAAgB,OAAsB;AAC7C,OAAI,OAAO,MAAM,mBACf,QAAO,OAAO,MAAM,mBAAmB,MAAM;AAG/C,UAAO,MAAM,WAAW;;EAG1B,SAAS,cAAc;AACrB,QAAK,QAAQ;;;2DAjFb,mBAAA,kBAAsB,EACX,QAAA,aAAA,WAAA,EAAX,mBASM,OATN,cASM,CARJ,WAOO,KAAA,QAAA,WAAA,EAAA,QAAA,CAAA,OAAA,OAAA,OAAA,KANL,mBAEM,OAAA,EAFD,OAAM,uBAAqB,EAAA,CAC9B,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,CAAA,CAAA,QAElD,mBAEI,KAFJ,cAEI,gBADC,OAAA,MAAO,eAAW,aAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAMX,QAAA,SAAA,WAAA,EAAhB,mBAiCM,UAAA,EAAA,KAAA,GAAA,EAAA,CAlCN,mBAAA,gBAAoB,EACpB,mBAiCM,OAjCN,cAiCM,CAhCJ,WA+BO,KAAA,QAAA,SAAA;IA/Ba,OAAO,QAAA;IAAQ,OAAO;YA+BnC,CA9BL,mBA6BM,OA7BN,cA6BM,CAAA,OAAA,OAAA,OAAA,KA5BJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAcM,OAAA,MAAA;IAbJ,mBAEK,MAFL,cAEK,gBADA,OAAA,MAAO,cAAU,QAAA,EAAA,EAAA;IAEtB,mBAEM,OAFN,cAEM,gBADD,gBAAgB,QAAA,MAAK,CAAA,EAAA,EAAA;IAGlB,OAAA,MAAO,cAAS,SAAA,WAAA,EADxB,mBAMS,UAAA;;KAJP,OAAM;KACL,SAAO;uBAEL,OAAA,MAAO,aAAS,YAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC8D/B,MAAM,QAAQ;EAKd,MAAM,SAAS,eAAe,MAAM,UAAU,EAAE,CAAC;EAGjD,MAAM,cAAc,IAAI,MAAM;EAG9B,SAAS,0BAA0B,MAAsB;AAEvD,OAAI,OAAO,MAAM,oBAAoB,MACnC,QAAO,OAAO,MAAM,kBAAkB;AAGxC,UAAO,KACJ,MAAM,IAAG,CACT,KAAK,YACJ,QACG,QAAQ,YAAY,MAAM,CAC1B,QAAQ,OAAO,QAAQ,IAAI,aAAa,CAAC,CACzC,MAAM,CACX,CACC,KAAK,MAAM;;EAIhB,SAAS,gBAAgB,MAAsB;AAC7C,OAAI,OAAO,MAAM,mBACf,QAAO,OAAO,MAAM,mBAAmB,KAAK;AAE9C,UAAO,0BAA0B,KAAK;;EAIxC,SAAS,sBAAsB,OAAoB;AACjD,OAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAGlD,OAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,WAAW,IAAI,gBAAgB,UAAU,MAAM,OAAO;AAErE,WAAO,KAAK,UAAU,OAAO,MAAM,EAAE;;AAIvC,OAAI,OAAO,UAAU,UACnB,QAAO,QAAQ,QAAQ;AAIzB,OAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,QAAQ,MAAM,QAAQ,MAAM,KAAK,MAAM,UAAU,CAAC,SAAS,IAAI,EAEjE,QAAO,MAAM,eAAe,SAAS;KACnC,uBAAuB;KACvB,uBAAuB;KACxB,CAAC;AAEJ,WAAO,MAAM,UAAU;;AAIzB,UAAO,OAAO,MAAM;;EAItB,SAAS,YAAY,OAAY,MAAuB;AACtD,OAAI,OAAO,MAAM,eACf,QAAO,OAAO,MAAM,eAAe,OAAO,QAAQ,GAAG;AAEvD,UAAO,sBAAsB,MAAM;;;UAlLxB,QAAA,cAAc,SAAM,KAAA,WAAA,EAA/B,mBAgFM,OAhFN,cAgFM,CA/EJ,mBA8EM,OA9EN,cA8EM,CA7EJ,mBASM,OATN,cASM,CARJ,mBAEK,MAFL,cAEK,gBADA,OAAA,MAAO,SAAK,0BAAA,EAAA,EAAA,EAEjB,mBAIS,UAAA;IAJA,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,YAAA,QAAW,CAAI,YAAA;IAAa,OAAM;sBAE9C,YAAA,QAAc,OAAA,MAAO,YAAQ,iBAAqB,OAAA,MAAO,YAAQ,eAAA,EAAA,EAAA,CAAA,CAAA,EAK5D,YAAA,SAAA,WAAA,EAAX,mBAuDM,OAAA,cAAA;IAtDJ,mBAAA,gCAAoC;IACpC,mBAmBM,OAnBN,cAmBM,CAlBJ,mBAiBQ,SAjBR,cAiBQ,CAhBN,mBAMQ,SAAA,MAAA,CALN,mBAIK,MAAA,MAAA;KAHH,mBAAkD,MAAA,MAAA,gBAA3C,OAAA,MAAO,qBAAiB,QAAA,EAAA,EAAA;KAC/B,mBAA8D,MAAA,MAAA,gBAAvD,OAAA,MAAO,wBAAoB,iBAAA,EAAA,EAAA;KAClC,mBAAoD,MAAA,MAAA,gBAA7C,OAAA,MAAO,mBAAe,YAAA,EAAA,EAAA;UAGjC,mBAQQ,SAAA,MAAA,EAAA,UAAA,KAAA,EAPN,mBAMK,UAAA,MAAA,WANyB,QAAA,gBAAlB,QAAQ,UAAK;yBAAzB,mBAMK,MAAA,EANyC,KAAK,OAAK,EAAA;MACtD,mBAEK,MAFL,cAEK,gBADA,gBAAgB,OAAO,KAAI,CAAA,EAAA,EAAA;MAEhC,mBAA2C,MAAA,MAAA,gBAApC,YAAY,OAAO,SAAQ,CAAA,EAAA,EAAA;MAClC,mBAA2C,MAAA,MAAA,gBAApC,YAAY,OAAO,SAAQ,CAAA,EAAA,EAAA;;;IAM1C,mBAAA,8BAAkC;IAClC,mBA8BM,OA9BN,cA8BM,EAAA,UAAA,KAAA,EA7BJ,mBA4BM,UAAA,MAAA,WA3BsB,QAAA,gBAAlB,QAAQ,UAAK;yBADvB,mBA4BM,OAAA;MA1BH,KAAK;MACN,OAAM;SAEN,mBAIM,OAJN,eAIM,CAHJ,mBAES,QAFT,eAES,gBADP,gBAAgB,OAAO,KAAI,CAAA,EAAA,EAAA,CAAA,CAAA,EAG/B,mBAiBM,OAjBN,eAiBM,CAhBJ,mBAOM,OAAA,MAAA,CANJ,mBAEM,OAFN,eAEM,gBADD,OAAA,MAAO,iBAAa,YAAA,EAAA,EAAA,EAEzB,mBAEM,OAFN,eAEM,gBADD,YAAY,OAAO,SAAQ,CAAA,EAAA,EAAA,CAAA,CAAA,EAGlC,mBAOM,OAAA,MAAA,CANJ,mBAEM,OAFN,eAEM,gBADD,OAAA,MAAO,YAAQ,OAAA,EAAA,EAAA,EAEpB,mBAEM,OAFN,eAEM,gBADD,YAAY,OAAO,SAAQ,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;uBAQ1C,mBAQM,OARN,eAQM,gBAPD,QAAA,cAAc,OAAM,GAAG,MAC1B,gBACE,QAAA,cAAc,WAAM,IAAqB,OAAA,MAAO,iBAAa,UAA0B,OAAA,MAAO,eAAW,SAAA,GAGzG,aAEJ,EAAA,EAAA,CAAA,CAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC0DN,MAAM,QAAQ;EAed,MAAM,SAAS,eAAe,MAAM,UAAU,EAAE,CAAC;EAGjD,MAAM,mBAAmB,eAAe;AACtC,OAAI,CAAC,MAAM,cACT,QAAO,MAAM;AAGf,OAAI,MAAM,SAAS,UAAU,EAC3B,QAAO,EAAE;AAEX,UAAO,MAAM,SAAS,MAAM,EAAE;IAC9B;EAGF,MAAM,yBAAyB;GAC7B,QAAQ;GACR,QAAQ;GACR,QAAQ;GACT;EAGD,MAAM,+BAA+B;GACnC,QAAQ;GACR,QAAQ;GACR,QAAQ;GACT;;;;EAKD,SAAS,WAAW,YAA+C;AACjE,OAAI,CAAC,WAAY,QAAO;AAExB,OAAI;IACF,MAAM,OAAO,IAAI,KAAK,WAAW;AACjC,WAAO,IAAI,KAAK,eAAe,SAAS;KACtC,MAAM;KACN,OAAO;KACP,KAAK;KACL,MAAM;KACN,QAAQ;KACT,CAAC,CAAC,OAAO,KAAK;YACR,GAAG;AACV,WAAO;;;;;;EAOX,SAAS,gBAAgB,WAA4B;AACnD,OAAI,CAAC,UAAW,QAAO;AAGvB,UADe;IAAE,GAAG;IAAwB,GAAG,OAAO,MAAM;IAAiB,CAC/D,cAAqC;;;;;EAMrD,SAAS,uBAAuB,WAA4B;AAC1D,OAAI,CAAC,UAAW,QAAO;AAGvB,UADgB;IAAE,GAAG;IAA8B,GAAG,OAAO,MAAM;IAAuB,CAC3E,cAAsC;;;uBAxNrD,mBAsHM,OAtHN,cAsHM,CArHJ,mBAAA,kBAAsB,EACX,QAAA,WAAA,WAAA,EAAX,mBAOM,OAPN,cAOM,EAAA,WAAA,EANJ,mBAKM,UAAA,MAAA,WALW,IAAL,MAAC;WAAb,mBAKM,OAAA;KALe,KAAK;KAAG,OAAM;sCACjC,mBAGM,OAAA,EAHD,OAAM,iBAAe,EAAA,CACxB,mBAAyD,OAAA,EAApD,OAAM,yCAAuC,CAAA,EAClD,mBAAoD,OAAA,EAA/C,OAAM,oCAAkC,CAAA,CAAA;iBAMnC,QAAA,SAAA,WAAA,EAAhB,mBAqBM,UAAA,EAAA,KAAA,GAAA,EAAA,CAtBN,mBAAA,gBAAoB,EACpB,mBAqBM,OArBN,cAqBM;8BApBJ,mBAYM,OAAA;KAXJ,OAAM;KACN,OAAM;KACN,MAAK;KACL,SAAQ;QAER,mBAKE,QAAA;KAJA,kBAAe;KACf,mBAAgB;KAChB,gBAAa;KACb,GAAE;;IAGN,mBAGM,OAAA,MAAA,CAFJ,mBAAqF,MAArF,cAAqF,gBAA5D,OAAA,MAAO,cAAU,gCAAA,EAAA,EAAA,EAC1C,mBAA8C,OAA9C,cAA8C,gBAAtB,QAAA,MAAM,QAAO,EAAA,EAAA,CAAA,CAAA;IAEvC,mBAES,UAAA;KAFD,OAAM;KAAc,SAAK,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,QAAA;uBACnC,OAAA,MAAO,aAAS,QAAA,EAAA,EAAA;kBAKN,iBAAA,MAAiB,UAAA,WAAA,EAAlC,mBAkBM,UAAA,EAAA,KAAA,GAAA,EAAA,CAnBN,mBAAA,gBAAoB,EACpB,mBAkBM,OAlBN,cAkBM,CAAA,OAAA,OAAA,OAAA,KAjBJ,mBAYM,OAAA;IAXJ,OAAM;IACN,MAAK;IACL,SAAQ;IACR,OAAM;OAEN,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAGS,QAAA,MAAA,gBAFP,OAAA,MAAO,kBAAA,2CAAqE,OAAA,MAAO,qBAAiB,SAAA,GAAA,EAAA,EAAA,CAAA,CAAA,CAAA,yBAMxG,mBA4DM,UAAA,EAAA,KAAA,GAAA,EAAA,CA7DN,mBAAA,iBAAqB,EACrB,mBA4DM,OA5DN,cA4DM;sBA3DJ,mBA4CM,UAAA,MAAA,WA3Cc,iBAAA,QAAX,YAAO;yBADhB,mBA4CM,OAAA;MA1CH,KAAK,QAAQ;MACd,OAAM;SAEN,mBAsCM,OAtCN,cAsCM,CArCJ,mBAoCM,OApCN,cAoCM,CAnCJ,mBAqBM,OAAA,MAAA;MApBJ,mBAMK,MANL,eAMK,gBAJD,OAAA,MAAO,qBAAyC,OAAA,MAAO,mBAAmB,QAAO,GAAA,gBAAwC,WAAW,QAAQ,YAAW,GAAA,EAAA,EAAA;MAK3J,mBAQM,OARN,eAQM,CAPJ,mBAKO,QAAA,EAJL,OAAK,eAAA,CAAC,kBACE,uBAAuB,QAAQ,UAAS,CAAA,CAAA,EAAA,kBAE7C,gBAAgB,QAAQ,UAAS,CAAA,EAAA,EAAA,EAEtC,mBAAwD,QAAA,MAAlD,QAAG,gBAAG,QAAQ,iBAAa,UAAA,EAAA,EAAA,CAAA,CAAA;MAEnC,mBAAA,yBAA6B;MAClBC,KAAAA,OAAO,mBAAA,WAAA,EAAlB,mBAEM,OAFN,eAEM,CADJ,WAAuD,KAAA,QAAA,mBAAA,EAAhB,SAAO,CAAA,CAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;SAGlD,mBAYM,OAZN,eAYM,CAXJ,mBAAA,wBAA4B,EAC5B,WASO,KAAA,QAAA,kBAAA,EAT+B,SAAO,QAStC,CARL,mBAAA,wBAA4B,EAEpB,OAAA,MAAO,cAAA,WAAA,EADf,mBAMS,UAAA;;MAJP,OAAM;MACL,UAAK,WAAE,OAAA,MAAO,WAAW,QAAO;wBAE9B,OAAA,MAAO,kBAAc,eAAA,EAAA,GAAA,cAAA,IAAA,mBAAA,QAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;IAQpC,mBAAA,eAAmB;IACR,QAAA,eAAA,WAAA,EAAX,mBAEM,OAFN,eAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;IAEvC,QAAA,eAAA,WAAA,EAAX,mBAQM,OARN,eAQM,CAPJ,mBAMS,UAAA;KALP,OAAM;KACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAED,KAAAA,MAAK,YAAA;KACZ,UAAU,QAAA;uBAER,OAAA,MAAO,gBAAY,YAAA,EAAA,GAAA,cAAA,CAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC6ChC,MAAM,QAAQ;EAed,MAAM,SAAS,eAAe,MAAM,UAAU,EAAE,CAAC;EAGjD,MAAM,oBAAoB,eAAe;AACvC,UACE,MAAM,iBACN,MAAM,cAAc,SAAS,KAC7B,MAAM,SAAS,cAAc;IAE/B;EAGF,MAAM,qBAAqB,eAAe;AACxC,OAAI,CAAC,MAAM,WAAY,QAAO,EAAE;GAEhC,MAAM,gBAAgB,IAAI,IAAI;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA,GAAI,OAAO,MAAM,iBAAiB,EAAE;IACrC,CAAC;AAEF,UAAO,OAAO,QAAQ,MAAM,WAAU,CACnC,QAAQ,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,CAAA,CACzC,QACE,KAAK,CAAC,KAAK,WAAW;AACrB,QAAI,OAAO;AACX,WAAO;MAET,EAAE,CACH;IACH;EAGF,SAAS,kBAAkB,SAA2B;GACpD,MAAM,OAAO,IAAI,KAAK,QAAQ,YAAY,CAAC,gBAAgB;AAI3D,UAAO,GAHW,QAAQ,UAAU,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,UAAU,MAAM,EAAE,CAGpE,MAAM,KAAK,MAFlB,QAAQ,iBAAiB;;EAMxC,SAAS,gBAAgB,OAAuB;AAC9C,OAAI,OAAO,MAAM,gBACf,QAAO,OAAO,MAAM,gBAAgB,MAAM;AAG5C,UAAO,MACJ,QAAQ,YAAY,MAAK,CACzB,QAAQ,OAAO,QAAQ,IAAI,aAAa,CAAA,CACxC,MAAM;;EAIX,SAAS,YAAY,OAAoB;AACvC,OAAI,OAAO,MAAM,YACf,QAAO,OAAO,MAAM,YAAY,MAAM;AAGxC,OAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,OAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,QAAQ;AACvD,OAAI,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,MAAM;AAC3D,UAAO,OAAO,MAAM;;EAItB,eAAe,gBAAgB;AAC7B,OAAI,OAAO,MAAM,aAAa,MAAM,QAClC,OAAM,OAAO,MAAM,UAAU,MAAM,QAAQ;;;uBAtP7C,mBA0IM,OAAA,MAAA;IAzIJ,mBAAA,sCAA0C;IAC1C,mBAkDM,OAlDN,YAkDM,CAjDJ,WAgDO,KAAA,QAAA,UAAA;KA9CJ,SAAS,QAAA;KACT,WAAY,QAAA;KACZ,aAAc,QAAA;aA4CV,CA1CL,mBAAA,mBAAuB,EACvB,mBAwCM,OAxCN,YAwCM,CAvCJ,mBAOM,OAAA,MAAA,CANJ,mBAEK,MAFL,YAEK,gBADA,OAAA,MAAO,SAAK,QAAY,OAAA,MAAO,qBAAiB,SAAA,UAAA,EAAA,EAAA,EAE1C,QAAA,WAAA,WAAA,EAAX,mBAEM,OAFN,YAEM,gBADD,kBAAkB,QAAA,QAAO,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA,CAAA,CAAA,EAGhC,mBA8BM,OA9BN,YA8BM;KA7BJ,mBAAA,gBAAoB;KACN,OAAA,MAAO,UAAA,WAAA,EAArB,mBAgBS,UAAA;;MAhBqB,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,OAAA,MAAO,UAAP,OAAA,MAAO,OAAM,GAAA,KAAA;MAAE,OAAM;mCACxD,mBAaM,OAAA;MAZJ,OAAM;MACN,OAAM;MACN,MAAK;MACL,SAAQ;MACR,QAAO;SAEP,mBAKE,QAAA;MAJA,kBAAe;MACf,mBAAgB;MAChB,gBAAa;MACb,GAAE;gCAEA,MACN,gBAAG,OAAA,MAAO,YAAQ,OAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;KAGpB,mBAAA,mBAAuB;KAEf,OAAA,MAAO,aAAa,QAAA,WAAW,QAAA,QAAQ,cAAS,YAAA,WAAA,EADxD,mBAQS,UAAA;;MANN,SAAO;MACP,UAAU,QAAA;MACX,OAAM;SAEM,QAAA,eAAA,WAAA,EAAZ,mBAAgF,QAAhF,WAAgF,IAAA,mBAAA,QAAA,KAAA,EAAA,gBAAA,MAChF,gBAAG,OAAA,MAAO,eAAW,kBAAA,EAAA,EAAA,CAAA,EAAA,GAAA,WAAA,IAAA,mBAAA,QAAA,KAAA;;IAO/B,mBAAA,6BAAiC;IACjC,YAA6D,4BAAA;KAAxC,cAAY,QAAA;KAAY,OAAO,QAAA;;IAEpD,mBAAA,sBAA0B;KAEjB,QAAA,aAAS,CAAK,QAAA,SAAS,QAAA,cAAA,WAAA,EADhC,mBA+EM,OA/EN,YA+EM;KA3EJ,mBAAA,sDAA0D;KAC/C,kBAAA,SAAA,WAAA,EAAX,mBAOM,OAPN,YAOM,CANJ,WAKO,KAAA,QAAA,WAAA;MALe,eAAgB,QAAA;MAAgB,SAAS,QAAA;cAKxD,CAJL,YAGE,8BAAA;MAFC,kBAAgB,QAAA;MAChB,QAAQ,OAAA,MAAO;;KAKtB,mBAAA,oBAAwB;KACb,QAAA,SAAS,cAAS,YAAA,WAAA,EAA7B,mBA6BM,OA7BN,aA6BM,CA5BJ,WA2BO,KAAA,QAAA,mBAAA,EA3BuB,SAAS,QAAA,SAAO,QA2BvC,CA1BL,mBAyBM,OAzBN,aAyBM,CAAA,OAAA,OAAA,OAAA,KAxBJ,mBAYM,OAAA;MAXJ,OAAM;MACN,OAAM;MACN,MAAK;MACL,SAAQ;SAER,mBAKE,QAAA;MAJA,kBAAe;MACf,mBAAgB;MAChB,gBAAa;MACb,GAAE;gBAGN,mBAUM,OAAA,MAAA,CATJ,mBAEK,MAFL,aAEK,gBADA,OAAA,MAAO,uBAAmB,qBAAA,EAAA,EAAA,EAE/B,mBAKM,OALN,aAKM,gBAHF,OAAA,MAAO,sBAAA,oEAAA;KASnB,mBAAA,uBAA2B;KAC3B,mBAaM,OAbN,aAaM,CAZJ,WAWO,KAAA,QAAA,eAAA;MAXmB,YAAa,QAAA;MAAa,SAAS,QAAA;cAWtD;MAVL,mBAAA,gCAAoC;MACpC,mBAEK,MAFL,aAEK,gBADA,OAAA,MAAO,mBAAe,qBAAA,EAAA,EAAA;MAE3B,mBAKM,OALN,aAKM,EAAA,UAAA,KAAA,EAJJ,mBAGM,UAAA,MAAA,WAHsB,mBAAA,QAAf,OAAO,QAAG;2BAAvB,mBAGM,OAAA,EAHgD,KAAG,EAAA,CACvD,mBAAyE,UAAzE,aAAyE,gBAAjC,gBAAgB,IAAG,CAAA,GAAI,KAAC,EAAA,EAChE,mBAAkD,QAAlD,aAAkD,gBAA5B,YAAY,MAAK,CAAA,EAAA,EAAA,CAAA,CAAA;;;KAM/C,mBAAA,wBAA4B;KAC5B,mBAeM,OAfN,aAeM,CAdJ,WAaO,KAAA,QAAA,WAAA;MAXJ,YAAa,QAAA;MACb,SAAS,QAAA;MACT,eAAgB,QAAA;cASZ,CAPL,mBAAA,yCAA6C,EAC7C,mBAKM,OALN,aAKM,CAJJ,mBAA2E,MAA3E,aAA2E,gBAAzC,OAAA,MAAO,gBAAY,WAAA,EAAA,EAAA,EACrD,mBAEQ,OAFR,aAEQ,gBADN,KAAK,UAAU,QAAA,YAAU,MAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
@@ -1,5 +1,6 @@
1
- import { t as useMutation } from "./useMutation-DbzXtqf1.js";
2
- import { o as withReturnUrl, s as AppLink_default } from "./useReturnUrl-Da8PpLb9.js";
1
+ import { t as useMutation } from "./useMutation-BTsyHKyn.js";
2
+ import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
3
+ import { o as withReturnUrl } from "./useReturnUrl-qFeazn-G.js";
3
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
4
5
  import { useRoute, useRouter } from "vue-router";
5
6
  import { toast } from "vue3-toastify";
@@ -88,4 +89,4 @@ var ResetPassword_default = _sfc_main;
88
89
 
89
90
  //#endregion
90
91
  export { resetPasswordSchemaWithMetadata as n, ResetPassword_default as t };
91
- //# sourceMappingURL=ResetPassword-DuLuXaNp.js.map
92
+ //# sourceMappingURL=ResetPassword-BE4mXK9q.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResetPassword-DuLuXaNp.js","names":[],"sources":["../src/slices/auth/features/reset_password/reset_password_schema.ts","../src/slices/auth/features/reset_password/ResetPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { resetPasswordInputSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ResetPasswordForm = z.infer<typeof resetPasswordInputSchema>;\n\n// Enhance the schema with metadata\nexport const resetPasswordSchemaWithMetadata = withMetadata(\n resetPasswordInputSchema,\n 'resetPasswordSchema',\n {\n 'passwords.password': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n 'passwords.password_confirm': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n },\n);\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Reset Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.PasswordsPasswordField />\n <zinia.PasswordsPasswordConfirmField />\n\n <ZiniaSubmitButton submitText=\"Reset Password\" submittingText=\"Resetting Password...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Login</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { resetPasswordSchemaWithMetadata } from './reset_password_schema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst token = route.params.token as string;\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n resetPasswordSchemaWithMetadata,\n {\n storeName: 'reset-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: resetPasswordMutate } = useMutation(\n (api, input: z.infer<typeof resetPasswordSchemaWithMetadata> & { token: string }) =>\n api.passwordReset.resetPassword(input),\n {\n skipAuthCheck: true, // Reset password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof resetPasswordSchemaWithMetadata>) => {\n const result = await resetPasswordMutate({\n ...data,\n token,\n });\n if (!result?.ok) throw new Error('Reset password failed');\n return result;\n};\n\n// Handle success\nconst handleSuccess = async (_data: { ok: boolean }) => {\n form.reset();\n await router.push(loginLink.value);\n toast.success('Password reset successful!');\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Reset password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;AAQA,MAAa,kCAAkC,aAC7C,0BACA,uBACA;CACE,sBAAsB;EACpB,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACD,8BAA8B;EAC5B,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACF,CACF;;;;;;;;;ECID,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,QAAQ,MAAM,OAAO;EAE3B,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAG/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,iCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,wBAAwB,aACrC,KAAK,UACJ,IAAI,cAAc,cAAc,MAAM,EACxC,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA0D;GACpF,MAAM,SAAS,MAAM,oBAAoB;IACvC,GAAG;IACH;IACD,CAAC;AACF,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,wBAAwB;AACzD,UAAO;;EAIT,MAAM,gBAAgB,OAAO,UAA2B;AACtD,QAAK,OAAO;AACZ,SAAM,OAAO,KAAK,UAAU,MAAM;AAClC,SAAM,QAAQ,6BAA6B;;EAI7C,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,wBAAwB;;;uBA1E7E,mBAgBM,OAhBN,YAgBM,CAAA,OAAA,OAAA,OAAA,KAfJ,mBAAmE,MAAA,EAA/D,OAAM,uCAAqC,EAAC,kBAAc,GAAA,GAE9D,YAYY,MAAA,UAAA,EAAA;IAZA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACxC;KAAhC,YAAgC,MAAA,MAAA,CAAA,uBAAA;KAChC,YAAuC,MAAA,MAAA,CAAA,8BAAA;KAEvC,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAAiB,gBAAe;;KAE9D,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAiE,iBAAA;MAAxD,OAAM;MAAoB,IAAI,UAAA;;6BAAgB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ResetPassword-BE4mXK9q.js","names":[],"sources":["../src/slices/auth/features/reset_password/reset_password_schema.ts","../src/slices/auth/features/reset_password/ResetPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { resetPasswordInputSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ResetPasswordForm = z.infer<typeof resetPasswordInputSchema>;\n\n// Enhance the schema with metadata\nexport const resetPasswordSchemaWithMetadata = withMetadata(\n resetPasswordInputSchema,\n 'resetPasswordSchema',\n {\n 'passwords.password': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n 'passwords.password_confirm': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'new-password',\n className: 'login-field',\n },\n },\n);\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Reset Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.PasswordsPasswordField />\n <zinia.PasswordsPasswordConfirmField />\n\n <ZiniaSubmitButton submitText=\"Reset Password\" submittingText=\"Resetting Password...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Login</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { resetPasswordSchemaWithMetadata } from './reset_password_schema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst token = route.params.token as string;\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n resetPasswordSchemaWithMetadata,\n {\n storeName: 'reset-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: resetPasswordMutate } = useMutation(\n (api, input: z.infer<typeof resetPasswordSchemaWithMetadata> & { token: string }) =>\n api.passwordReset.resetPassword(input),\n {\n skipAuthCheck: true, // Reset password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof resetPasswordSchemaWithMetadata>) => {\n const result = await resetPasswordMutate({\n ...data,\n token,\n });\n if (!result?.ok) throw new Error('Reset password failed');\n return result;\n};\n\n// Handle success\nconst handleSuccess = async (_data: { ok: boolean }) => {\n form.reset();\n await router.push(loginLink.value);\n toast.success('Password reset successful!');\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Reset password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,kCAAkC,aAC7C,0BACA,uBACA;CACE,sBAAsB;EACpB,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACD,8BAA8B;EAC5B,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACF,CACF;;;;;;;;;ECID,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,QAAQ,MAAM,OAAO;EAE3B,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAG/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,iCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,wBAAwB,aACrC,KAAK,UACJ,IAAI,cAAc,cAAc,MAAM,EACxC,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA0D;GACpF,MAAM,SAAS,MAAM,oBAAoB;IACvC,GAAG;IACH;IACD,CAAC;AACF,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,wBAAwB;AACzD,UAAO;;EAIT,MAAM,gBAAgB,OAAO,UAA2B;AACtD,QAAK,OAAO;AACZ,SAAM,OAAO,KAAK,UAAU,MAAM;AAClC,SAAM,QAAQ,6BAA6B;;EAI7C,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,wBAAwB;;;uBA1E7E,mBAgBM,OAhBN,YAgBM,CAAA,OAAA,OAAA,OAAA,KAfJ,mBAAmE,MAAA,EAA/D,OAAM,uCAAqC,EAAC,kBAAc,GAAA,GAE9D,YAYY,MAAA,UAAA,EAAA;IAZA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACxC;KAAhC,YAAgC,MAAA,MAAA,CAAA,uBAAA;KAChC,YAAuC,MAAA,MAAA,CAAA,8BAAA;KAEvC,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAAiB,gBAAe;;KAE9D,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAiE,iBAAA;MAAxD,OAAM;MAAoB,IAAI,UAAA;;6BAAgB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-rmHf7bYx.js";
2
+ import "./useQueryCache-Bjm-S8v5.js";
3
+ import "./useMutation-BTsyHKyn.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as ResetPassword_default } from "./ResetPassword-BE4mXK9q.js";
6
+
7
+ export { ResetPassword_default as default };