@dragonmastery/dragoncore-vue 0.0.8 → 0.0.9

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 (108) hide show
  1. package/package.json +4 -13
  2. package/dist/AppLink-CHMMrSFI.js +0 -54
  3. package/dist/AppLink-CHMMrSFI.js.map +0 -1
  4. package/dist/Appearance-BfPdKMXw.js +0 -70
  5. package/dist/Appearance-BfPdKMXw.js.map +0 -1
  6. package/dist/Appearance-C3WguxT-.js +0 -3
  7. package/dist/ChangePasswordPage-DCews8GU.js +0 -86
  8. package/dist/ChangePasswordPage-DCews8GU.js.map +0 -1
  9. package/dist/ChangePasswordPage-Dm5vW0nl.js +0 -6
  10. package/dist/CreateTeamForm-Cg4sD65k.js +0 -27
  11. package/dist/CreateTeamMemberForm-CiG-fCJD.js +0 -27
  12. package/dist/CreateUserPage-B8qeBZij.js +0 -76
  13. package/dist/CreateUserPage-B8qeBZij.js.map +0 -1
  14. package/dist/CreateUserPage-WjYDkwpb.js +0 -6
  15. package/dist/CreditBalanceDashboard-BUdKWieE.js +0 -27
  16. package/dist/CreditManagement-BcyUY_J0.js +0 -27
  17. package/dist/CustomerCreateSupportTicketForm-BplS0xSi.js +0 -27
  18. package/dist/CustomerSupportTicketDetailPage-DZQCplSM.js +0 -717
  19. package/dist/CustomerSupportTicketDetailPage-DZQCplSM.js.map +0 -1
  20. package/dist/CustomerSupportTicketList-DGwy4Wje.js +0 -27
  21. package/dist/CustomerSupportTicketParent-BnmTFigo.js +0 -7
  22. package/dist/CustomerSupportTicketParent-BzY4pmBk.js +0 -66
  23. package/dist/CustomerSupportTicketParent-BzY4pmBk.js.map +0 -1
  24. package/dist/CustomerSupportTicketSuccess-DC1jJG1E.js +0 -27
  25. package/dist/EditTeamForm-BnPwhv5B.js +0 -27
  26. package/dist/EditTeamMemberForm-B8-pI6Xm.js +0 -6
  27. package/dist/EditTeamMemberForm-CKbKomrL.js +0 -191
  28. package/dist/EditTeamMemberForm-CKbKomrL.js.map +0 -1
  29. package/dist/EditUserPage-BG-Fkx_c.js +0 -7
  30. package/dist/EditUserPage-XqF25iwz.js +0 -112
  31. package/dist/EditUserPage-XqF25iwz.js.map +0 -1
  32. package/dist/ForgotPassword-CjWv2V7p.js +0 -7
  33. package/dist/ForgotPassword-D3bjL48L.js +0 -73
  34. package/dist/ForgotPassword-D3bjL48L.js.map +0 -1
  35. package/dist/LoginForm--br4Il85.js +0 -7
  36. package/dist/LoginForm-C85U2E2r.js +0 -116
  37. package/dist/LoginForm-C85U2E2r.js.map +0 -1
  38. package/dist/Logout-DHT-5Qz3.js +0 -6
  39. package/dist/Logout-DZuWLh0O.js +0 -38
  40. package/dist/Logout-DZuWLh0O.js.map +0 -1
  41. package/dist/ResetPassword-M6mvTS24.js +0 -27
  42. package/dist/SavedFiltersPage-D3vJrfzt.js +0 -419
  43. package/dist/SavedFiltersPage-D3vJrfzt.js.map +0 -1
  44. package/dist/Signup-VZa7U-Ur.js +0 -7
  45. package/dist/Signup-hpV8J5cM.js +0 -106
  46. package/dist/Signup-hpV8J5cM.js.map +0 -1
  47. package/dist/StaffCreateSupportTicketForm-Bc7UnK0Q.js +0 -27
  48. package/dist/StaffSupportTicketDetailPage-DY07Ez0R.js +0 -1928
  49. package/dist/StaffSupportTicketDetailPage-DY07Ez0R.js.map +0 -1
  50. package/dist/StaffSupportTicketList-ChJP_67k.js +0 -27
  51. package/dist/StaffSupportTicketParent-CWWhaM37.js +0 -66
  52. package/dist/StaffSupportTicketParent-CWWhaM37.js.map +0 -1
  53. package/dist/StaffSupportTicketParent-Dp1G85wc.js +0 -7
  54. package/dist/StaffSupportTicketSuccess-B6X_dP4f.js +0 -27
  55. package/dist/SupportStaffPage-nd0HowtH.js +0 -156
  56. package/dist/SupportStaffPage-nd0HowtH.js.map +0 -1
  57. package/dist/SupportTicketDevLifecycleBadge-Ba-Rm6QW.js +0 -116
  58. package/dist/SupportTicketDevLifecycleBadge-Ba-Rm6QW.js.map +0 -1
  59. package/dist/SupportTicketMaintenancePage-rcJ7EfDj.js +0 -56
  60. package/dist/SupportTicketMaintenancePage-rcJ7EfDj.js.map +0 -1
  61. package/dist/TeamAttachmentsTab-Dk_Bnk-1.js +0 -27
  62. package/dist/TeamHistoryTab-CNelXR3Q.js +0 -232
  63. package/dist/TeamHistoryTab-CNelXR3Q.js.map +0 -1
  64. package/dist/TeamHistoryTab-siesF93u.js +0 -4
  65. package/dist/TeamList-BtLzbjls.js +0 -27
  66. package/dist/TeamMemberList-EoDXIr0w.js +0 -27
  67. package/dist/TeamMemberParent-DZ5YVyi6.js +0 -27
  68. package/dist/TeamMembersTab-4gmnP9sD.js +0 -21
  69. package/dist/TeamMembersTab-4gmnP9sD.js.map +0 -1
  70. package/dist/TeamMembersTab-DTJxmb-M.js +0 -3
  71. package/dist/TeamNotesTab-BhVRLG8h.js +0 -458
  72. package/dist/TeamNotesTab-BhVRLG8h.js.map +0 -1
  73. package/dist/TeamNotesTab-Crp-afAe.js +0 -7
  74. package/dist/TeamParent-CbrXXzAr.js +0 -27
  75. package/dist/TimelineNoteInput-BVqF4MtZ.js +0 -513
  76. package/dist/TimelineNoteInput-BVqF4MtZ.js.map +0 -1
  77. package/dist/TimelineSystemEvent-D58zN850.js +0 -1897
  78. package/dist/TimelineSystemEvent-D58zN850.js.map +0 -1
  79. package/dist/UserListPage-D68AjrjM.js +0 -4
  80. package/dist/UserListPage-OGYOLwlw.js +0 -153
  81. package/dist/UserListPage-OGYOLwlw.js.map +0 -1
  82. package/dist/UserProfilePage-Q68NAGQQ.js +0 -7
  83. package/dist/UserProfilePage-uAIfC_NW.js +0 -125
  84. package/dist/UserProfilePage-uAIfC_NW.js.map +0 -1
  85. package/dist/ViewTeam-DpE_NfRq.js +0 -27
  86. package/dist/ViewTeamMember-BdBwkuXC.js +0 -27
  87. package/dist/convertToLocalDateTime-DOSGtMn8.js +0 -121
  88. package/dist/convertToLocalDateTime-DOSGtMn8.js.map +0 -1
  89. package/dist/displayIdFormatter-B1ZKgofu.js +0 -13
  90. package/dist/displayIdFormatter-B1ZKgofu.js.map +0 -1
  91. package/dist/extractRpcErrorMessage-C_UbKgHL.js +0 -20
  92. package/dist/extractRpcErrorMessage-C_UbKgHL.js.map +0 -1
  93. package/dist/index.d.ts +0 -6366
  94. package/dist/index.js +0 -30
  95. package/dist/src-CEBiyg_f.css +0 -13
  96. package/dist/src-CEBiyg_f.css.map +0 -1
  97. package/dist/src-CHw8DdkR.js +0 -9200
  98. package/dist/src-CHw8DdkR.js.map +0 -1
  99. package/dist/useBreadcrumbs-DmgSucoe.js +0 -41
  100. package/dist/useBreadcrumbs-DmgSucoe.js.map +0 -1
  101. package/dist/useMutation-B4_S4Xoa.js +0 -50
  102. package/dist/useMutation-B4_S4Xoa.js.map +0 -1
  103. package/dist/useQuery-B7ndu5_P.js +0 -107
  104. package/dist/useQuery-B7ndu5_P.js.map +0 -1
  105. package/dist/useQueryCache-DqcDMsxb.js +0 -254
  106. package/dist/useQueryCache-DqcDMsxb.js.map +0 -1
  107. package/dist/useRpcAuth-Dp2sec-X.js +0 -731
  108. package/dist/useRpcAuth-Dp2sec-X.js.map +0 -1
@@ -1,419 +0,0 @@
1
- import "./useRpcAuth-Dp2sec-X.js";
2
- import "./useQueryCache-DqcDMsxb.js";
3
- import { t as useMutation } from "./useMutation-B4_S4Xoa.js";
4
- import { t as useQuery } from "./useQuery-B7ndu5_P.js";
5
- import { tn as useInjectedPinnedPresets } from "./src-CHw8DdkR.js";
6
- import "./AppLink-CHMMrSFI.js";
7
- import { d as ConfirmDialog_default } from "./TimelineSystemEvent-D58zN850.js";
8
- import "./TeamMembersTab-4gmnP9sD.js";
9
- import "./Appearance-BfPdKMXw.js";
10
- import "./useBreadcrumbs-DmgSucoe.js";
11
- import "./EditTeamMemberForm-CKbKomrL.js";
12
- import "./TeamHistoryTab-CNelXR3Q.js";
13
- import "./UserProfilePage-uAIfC_NW.js";
14
- import "./ChangePasswordPage-DCews8GU.js";
15
- import "./TeamNotesTab-BhVRLG8h.js";
16
- import "./CustomerSupportTicketParent-BzY4pmBk.js";
17
- import "./SupportTicketDevLifecycleBadge-Ba-Rm6QW.js";
18
- import "./StaffSupportTicketParent-CWWhaM37.js";
19
- import "./LoginForm-C85U2E2r.js";
20
- import "./Signup-hpV8J5cM.js";
21
- import "./ForgotPassword-D3bjL48L.js";
22
- import "./Logout-DZuWLh0O.js";
23
- import "./UserListPage-OGYOLwlw.js";
24
- import "./CreateUserPage-B8qeBZij.js";
25
- import "./EditUserPage-XqF25iwz.js";
26
- import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, openBlock, ref, renderList, resolveComponent, toDisplayString, unref, vModelText, withCtx, withDirectives, withKeys } from "vue";
27
-
28
- //#region src/slices/saved_filter/SavedFiltersPage.vue
29
- const _hoisted_1 = { class: "max-w-4xl mx-auto" };
30
- const _hoisted_2 = {
31
- key: 0,
32
- class: "flex justify-center py-12"
33
- };
34
- const _hoisted_3 = {
35
- key: 0,
36
- class: "mb-8"
37
- };
38
- const _hoisted_4 = { class: "space-y-2" };
39
- const _hoisted_5 = { class: "flex flex-col gap-0.5 shrink-0" };
40
- const _hoisted_6 = ["disabled", "onClick"];
41
- const _hoisted_7 = ["disabled", "onClick"];
42
- const _hoisted_8 = { class: "text-xs text-base-content/60 shrink-0" };
43
- const _hoisted_9 = { class: "flex gap-1 shrink-0" };
44
- const _hoisted_10 = ["disabled", "onClick"];
45
- const _hoisted_11 = ["disabled", "onClick"];
46
- const _hoisted_12 = ["disabled", "onClick"];
47
- const _hoisted_13 = {
48
- key: 0,
49
- class: "text-base-content/70 text-sm"
50
- };
51
- const _hoisted_14 = {
52
- key: 1,
53
- class: "space-y-6"
54
- };
55
- const _hoisted_15 = { class: "text-sm font-medium text-base-content/80 uppercase tracking-wide" };
56
- const _hoisted_16 = { class: "space-y-2" };
57
- const _hoisted_17 = ["onKeydown"];
58
- const _hoisted_18 = ["disabled", "onClick"];
59
- const _hoisted_19 = ["disabled"];
60
- const _hoisted_20 = { class: "flex gap-1 shrink-0" };
61
- const _hoisted_21 = [
62
- "title",
63
- "disabled",
64
- "onClick"
65
- ];
66
- const _hoisted_22 = ["disabled", "onClick"];
67
- const _hoisted_23 = ["disabled", "onClick"];
68
- const CACHE_KEY_ALL = "saved-filters:all";
69
- const _sfc_main = /* @__PURE__ */ defineComponent({
70
- __name: "SavedFiltersPage",
71
- setup(__props) {
72
- const { data: allPresets, loading, refetch: refetchAllPresets } = useQuery((api) => api.savedFilters.listAllSavedFilters(), {
73
- cacheKey: CACHE_KEY_ALL,
74
- staleTime: 1440 * 60 * 1e3
75
- });
76
- const injectedPinned = useInjectedPinnedPresets();
77
- const pinnedPresets = computed(() => injectedPinned.pinned.value ?? []);
78
- const groupedPresets = computed(() => {
79
- const groups = /* @__PURE__ */ new Map();
80
- for (const preset of allPresets.value ?? []) {
81
- const key = preset.route_path || preset.context || "other";
82
- if (!groups.has(key)) groups.set(key, []);
83
- groups.get(key).push(preset);
84
- }
85
- return Array.from(groups.entries()).sort(([a], [b]) => a.localeCompare(b));
86
- });
87
- const pinnedIdsSet = computed(() => new Set(pinnedPresets.value.map((p) => p.id)));
88
- const canPinMore = computed(() => pinnedPresets.value.length < 5);
89
- function isPinned(id) {
90
- return pinnedIdsSet.value.has(id);
91
- }
92
- function getPresetLink(preset) {
93
- return {
94
- path: preset.route_path,
95
- query: preset.filters ?? {}
96
- };
97
- }
98
- const CONTEXT_LABELS = {
99
- tracker: "Trackers",
100
- followup: "Followups",
101
- support_ticket_staff: "Staff Support Tickets",
102
- support_ticket_customer: "Customer Support Tickets"
103
- };
104
- function contextLabel(context) {
105
- return CONTEXT_LABELS[context] ?? context;
106
- }
107
- function contextLabelFromPath(routePath) {
108
- if (routePath.startsWith("/trackers")) return "Trackers";
109
- if (routePath.startsWith("/followups")) return "Followups";
110
- if (routePath.startsWith("/support-tickets/staff")) return "Staff Support Tickets";
111
- if (routePath.startsWith("/support-tickets")) return "Customer Support Tickets";
112
- return routePath || "Other";
113
- }
114
- const { mutate: reorderPins, loading: reordering } = useMutation((api, ids) => api.savedFilters.reorderPinnedPresets(ids), { invalidate: "pinned-presets" });
115
- const { mutate: updatePreset, loading: renaming } = useMutation((api, input) => api.savedFilters.updateSavedFilter({
116
- id: input.id,
117
- name: input.name
118
- }), { invalidate: /^saved-filters:/ });
119
- const { mutate: deletePreset, loading: deleting } = useMutation((api, id) => api.savedFilters.deleteSavedFilter(id), { invalidate: /^saved-filters:|^pinned-presets/ });
120
- const pinning = ref(false);
121
- const unpinning = ref(false);
122
- async function handlePin(preset) {
123
- pinning.value = true;
124
- try {
125
- await injectedPinned.pinPreset(preset);
126
- } finally {
127
- pinning.value = false;
128
- }
129
- }
130
- async function handleUnpin(preset) {
131
- unpinning.value = true;
132
- try {
133
- await injectedPinned.unpinPreset(preset.id);
134
- } finally {
135
- unpinning.value = false;
136
- }
137
- }
138
- async function movePinned(idx, delta) {
139
- const list = [...pinnedPresets.value];
140
- const newIdx = idx + delta;
141
- if (newIdx < 0 || newIdx >= list.length) return;
142
- [list[idx], list[newIdx]] = [list[newIdx], list[idx]];
143
- try {
144
- await reorderPins(list.map((p) => p.id));
145
- await injectedPinned.refetchPinned();
146
- } catch {}
147
- }
148
- const showDeleteConfirm = ref(false);
149
- const presetToDelete = ref(null);
150
- function handleDelete(preset) {
151
- presetToDelete.value = preset;
152
- showDeleteConfirm.value = true;
153
- }
154
- async function confirmDelete() {
155
- if (!presetToDelete.value) return;
156
- try {
157
- await deletePreset(presetToDelete.value.id);
158
- if (isPinned(presetToDelete.value.id)) await injectedPinned.unpinPreset(presetToDelete.value.id);
159
- await refetchAllPresets();
160
- presetToDelete.value = null;
161
- showDeleteConfirm.value = false;
162
- } catch {}
163
- }
164
- const editingId = ref(null);
165
- const editingName = ref("");
166
- const renameInputRef = ref(null);
167
- function startRename(preset) {
168
- editingId.value = preset.id;
169
- editingName.value = preset.name;
170
- nextTick(() => renameInputRef.value?.focus());
171
- }
172
- function cancelRename() {
173
- editingId.value = null;
174
- editingName.value = "";
175
- }
176
- async function saveRename(presetId) {
177
- const name = editingName.value.trim();
178
- if (!name) return;
179
- try {
180
- await updatePreset({
181
- id: presetId,
182
- name
183
- });
184
- cancelRename();
185
- await refetchAllPresets();
186
- if (isPinned(presetId)) await injectedPinned.refetchPinned();
187
- } catch {}
188
- }
189
- return (_ctx, _cache) => {
190
- const _component_router_link = resolveComponent("router-link");
191
- return openBlock(), createElementBlock("div", _hoisted_1, [
192
- _cache[15] || (_cache[15] = createElementVNode("h1", { class: "text-2xl font-bold mb-6" }, "Saved Filters", -1)),
193
- unref(loading) ? (openBlock(), createElementBlock("div", _hoisted_2, [..._cache[3] || (_cache[3] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
194
- createCommentVNode(" Favorites (pinned) section with reorder "),
195
- pinnedPresets.value.length > 0 ? (openBlock(), createElementBlock("section", _hoisted_3, [
196
- _cache[9] || (_cache[9] = createElementVNode("h2", { class: "text-lg font-semibold mb-3 flex items-center gap-2" }, [createElementVNode("svg", {
197
- class: "w-5 h-5 text-primary",
198
- fill: "currentColor",
199
- viewBox: "0 0 24 24"
200
- }, [createElementVNode("path", { d: "M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z" })]), createTextVNode(" Favorites ")], -1)),
201
- _cache[10] || (_cache[10] = createElementVNode("p", { class: "text-sm text-base-content/70 mb-3" }, " Pinned presets appear on your home page and in the sidebar. Use the arrows to reorder. ", -1)),
202
- createElementVNode("ul", _hoisted_4, [(openBlock(true), createElementBlock(Fragment, null, renderList(pinnedPresets.value, (preset, idx) => {
203
- return openBlock(), createElementBlock("li", {
204
- key: preset.id,
205
- class: "flex items-center gap-2 p-3 rounded-lg bg-base-200"
206
- }, [
207
- createElementVNode("div", _hoisted_5, [createElementVNode("button", {
208
- type: "button",
209
- class: "btn btn-ghost btn-xs btn-square",
210
- disabled: unref(reordering) || idx === 0,
211
- title: "Move up",
212
- onClick: ($event) => movePinned(idx, -1)
213
- }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
214
- class: "w-4 h-4",
215
- fill: "none",
216
- stroke: "currentColor",
217
- viewBox: "0 0 24 24"
218
- }, [createElementVNode("path", {
219
- "stroke-linecap": "round",
220
- "stroke-linejoin": "round",
221
- "stroke-width": "2",
222
- d: "M5 15l7-7 7 7"
223
- })], -1)])], 8, _hoisted_6), createElementVNode("button", {
224
- type: "button",
225
- class: "btn btn-ghost btn-xs btn-square",
226
- disabled: unref(reordering) || idx === pinnedPresets.value.length - 1,
227
- title: "Move down",
228
- onClick: ($event) => movePinned(idx, 1)
229
- }, [..._cache[5] || (_cache[5] = [createElementVNode("svg", {
230
- class: "w-4 h-4",
231
- fill: "none",
232
- stroke: "currentColor",
233
- viewBox: "0 0 24 24"
234
- }, [createElementVNode("path", {
235
- "stroke-linecap": "round",
236
- "stroke-linejoin": "round",
237
- "stroke-width": "2",
238
- d: "M19 9l-7 7-7-7"
239
- })], -1)])], 8, _hoisted_7)]),
240
- createVNode(_component_router_link, {
241
- to: getPresetLink(preset),
242
- class: "flex-1 min-w-0 font-medium truncate hover:underline"
243
- }, {
244
- default: withCtx(() => [createTextVNode(toDisplayString(preset.name), 1)]),
245
- _: 2
246
- }, 1032, ["to"]),
247
- createElementVNode("span", _hoisted_8, toDisplayString(contextLabel(preset.context)), 1),
248
- createElementVNode("div", _hoisted_9, [
249
- createElementVNode("button", {
250
- type: "button",
251
- class: "btn btn-ghost btn-sm",
252
- title: "Rename",
253
- disabled: unref(renaming),
254
- onClick: ($event) => startRename(preset)
255
- }, [..._cache[6] || (_cache[6] = [createElementVNode("svg", {
256
- class: "w-4 h-4",
257
- fill: "none",
258
- stroke: "currentColor",
259
- viewBox: "0 0 24 24"
260
- }, [createElementVNode("path", {
261
- "stroke-linecap": "round",
262
- "stroke-linejoin": "round",
263
- "stroke-width": "2",
264
- d: "M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"
265
- })], -1)])], 8, _hoisted_10),
266
- createElementVNode("button", {
267
- type: "button",
268
- class: "btn btn-ghost btn-sm text-primary",
269
- title: "Unpin",
270
- disabled: unpinning.value,
271
- onClick: ($event) => handleUnpin(preset)
272
- }, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
273
- class: "w-4 h-4",
274
- fill: "currentColor",
275
- viewBox: "0 0 24 24"
276
- }, [createElementVNode("path", { d: "M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z" })], -1)])], 8, _hoisted_11),
277
- createElementVNode("button", {
278
- type: "button",
279
- class: "btn btn-ghost btn-sm text-error",
280
- title: "Delete",
281
- disabled: unref(deleting),
282
- onClick: ($event) => handleDelete(preset)
283
- }, [..._cache[8] || (_cache[8] = [createElementVNode("svg", {
284
- class: "w-4 h-4",
285
- fill: "none",
286
- stroke: "currentColor",
287
- viewBox: "0 0 24 24"
288
- }, [createElementVNode("path", {
289
- "stroke-linecap": "round",
290
- "stroke-linejoin": "round",
291
- "stroke-width": "2",
292
- d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
293
- })], -1)])], 8, _hoisted_12)
294
- ])
295
- ]);
296
- }), 128))])
297
- ])) : createCommentVNode("v-if", true),
298
- createCommentVNode(" All presets grouped by path "),
299
- createElementVNode("section", null, [_cache[14] || (_cache[14] = createElementVNode("h2", { class: "text-lg font-semibold mb-3" }, "All Presets", -1)), groupedPresets.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_13, " No saved presets yet. Use the Presets button on any list page to save your filters. ")) : (openBlock(), createElementBlock("div", _hoisted_14, [(openBlock(true), createElementBlock(Fragment, null, renderList(groupedPresets.value, ([routePath, presets]) => {
300
- return openBlock(), createElementBlock("div", {
301
- key: routePath,
302
- class: "space-y-2"
303
- }, [createElementVNode("h3", _hoisted_15, toDisplayString(contextLabelFromPath(routePath)), 1), createElementVNode("ul", _hoisted_16, [(openBlock(true), createElementBlock(Fragment, null, renderList(presets, (preset) => {
304
- return openBlock(), createElementBlock("li", {
305
- key: preset.id,
306
- class: "flex items-center gap-2 p-3 rounded-lg bg-base-200"
307
- }, [editingId.value === preset.id ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
308
- withDirectives(createElementVNode("input", {
309
- ref_for: true,
310
- ref_key: "renameInputRef",
311
- ref: renameInputRef,
312
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => editingName.value = $event),
313
- type: "text",
314
- class: "input input-sm input-bordered flex-1 min-w-0",
315
- maxlength: "100",
316
- placeholder: "Preset name",
317
- onKeydown: [withKeys(($event) => saveRename(preset.id), ["enter"]), withKeys(cancelRename, ["escape"])]
318
- }, null, 40, _hoisted_17), [[vModelText, editingName.value]]),
319
- createElementVNode("button", {
320
- type: "button",
321
- class: "btn btn-sm btn-primary shrink-0",
322
- disabled: unref(renaming) || !editingName.value.trim(),
323
- onClick: ($event) => saveRename(preset.id)
324
- }, toDisplayString(unref(renaming) ? "..." : "Save"), 9, _hoisted_18),
325
- createElementVNode("button", {
326
- type: "button",
327
- class: "btn btn-sm btn-ghost shrink-0",
328
- disabled: unref(renaming),
329
- onClick: cancelRename
330
- }, " Cancel ", 8, _hoisted_19)
331
- ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createVNode(_component_router_link, {
332
- to: getPresetLink(preset),
333
- class: "flex-1 min-w-0 font-medium truncate hover:underline"
334
- }, {
335
- default: withCtx(() => [createTextVNode(toDisplayString(preset.name), 1)]),
336
- _: 2
337
- }, 1032, ["to"]), createElementVNode("div", _hoisted_20, [
338
- !isPinned(preset.id) ? (openBlock(), createElementBlock("button", {
339
- key: 0,
340
- type: "button",
341
- class: "btn btn-ghost btn-sm",
342
- title: canPinMore.value ? "Pin to favorites" : "Maximum 5 pinned",
343
- disabled: !canPinMore.value || pinning.value,
344
- onClick: ($event) => handlePin(preset)
345
- }, [..._cache[11] || (_cache[11] = [createElementVNode("svg", {
346
- class: "w-4 h-4",
347
- fill: "none",
348
- stroke: "currentColor",
349
- viewBox: "0 0 24 24"
350
- }, [createElementVNode("path", {
351
- "stroke-linecap": "round",
352
- "stroke-linejoin": "round",
353
- "stroke-width": "2",
354
- d: "M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"
355
- })], -1)])], 8, _hoisted_21)) : createCommentVNode("v-if", true),
356
- createElementVNode("button", {
357
- type: "button",
358
- class: "btn btn-ghost btn-sm",
359
- title: "Rename",
360
- disabled: unref(renaming),
361
- onClick: ($event) => startRename(preset)
362
- }, [..._cache[12] || (_cache[12] = [createElementVNode("svg", {
363
- class: "w-4 h-4",
364
- fill: "none",
365
- stroke: "currentColor",
366
- viewBox: "0 0 24 24"
367
- }, [createElementVNode("path", {
368
- "stroke-linecap": "round",
369
- "stroke-linejoin": "round",
370
- "stroke-width": "2",
371
- d: "M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"
372
- })], -1)])], 8, _hoisted_22),
373
- createElementVNode("button", {
374
- type: "button",
375
- class: "btn btn-ghost btn-sm text-error",
376
- title: "Delete",
377
- disabled: unref(deleting),
378
- onClick: ($event) => handleDelete(preset)
379
- }, [..._cache[13] || (_cache[13] = [createElementVNode("svg", {
380
- class: "w-4 h-4",
381
- fill: "none",
382
- stroke: "currentColor",
383
- viewBox: "0 0 24 24"
384
- }, [createElementVNode("path", {
385
- "stroke-linecap": "round",
386
- "stroke-linejoin": "round",
387
- "stroke-width": "2",
388
- d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
389
- })], -1)])], 8, _hoisted_23)
390
- ])], 64))]);
391
- }), 128))])]);
392
- }), 128))]))])
393
- ], 64)),
394
- createCommentVNode(" Delete confirmation modal "),
395
- createVNode(ConfirmDialog_default, {
396
- modelValue: showDeleteConfirm.value,
397
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showDeleteConfirm.value = $event),
398
- title: "Delete preset?",
399
- "confirm-text": "Delete",
400
- "cancel-text": "Cancel",
401
- "processing-text": "Deleting...",
402
- "confirm-button-class": "btn-error",
403
- "is-processing": unref(deleting),
404
- onConfirm: confirmDelete,
405
- onCancel: _cache[2] || (_cache[2] = ($event) => presetToDelete.value = null)
406
- }, {
407
- message: withCtx(() => [createElementVNode("p", null, " Are you sure you want to delete \"" + toDisplayString(presetToDelete.value?.name) + "\"? This cannot be undone. ", 1)]),
408
- _: 1
409
- }, 8, ["modelValue", "is-processing"]),
410
- createCommentVNode(" Rename modal / inline could stay as is ")
411
- ]);
412
- };
413
- }
414
- });
415
- var SavedFiltersPage_default = _sfc_main;
416
-
417
- //#endregion
418
- export { SavedFiltersPage_default as default };
419
- //# sourceMappingURL=SavedFiltersPage-D3vJrfzt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SavedFiltersPage-D3vJrfzt.js","names":["CONTEXT_LABELS: Record<string, string>"],"sources":["../src/slices/saved_filter/SavedFiltersPage.vue"],"sourcesContent":["<template>\n <div class=\"max-w-4xl mx-auto\">\n <h1 class=\"text-2xl font-bold mb-6\">Saved Filters</h1>\n\n <div v-if=\"loading\" class=\"flex justify-center py-12\">\n <span class=\"loading loading-spinner loading-lg\" />\n </div>\n\n <template v-else>\n <!-- Favorites (pinned) section with reorder -->\n <section v-if=\"pinnedPresets.length > 0\" class=\"mb-8\">\n <h2 class=\"text-lg font-semibold mb-3 flex items-center gap-2\">\n <svg\n class=\"w-5 h-5 text-primary\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n Favorites\n </h2>\n <p class=\"text-sm text-base-content/70 mb-3\">\n Pinned presets appear on your home page and in the sidebar. Use the arrows to reorder.\n </p>\n <ul class=\"space-y-2\">\n <li\n v-for=\"(preset, idx) in pinnedPresets\"\n :key=\"preset.id\"\n class=\"flex items-center gap-2 p-3 rounded-lg bg-base-200\"\n >\n <div class=\"flex flex-col gap-0.5 shrink-0\">\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-xs btn-square\"\n :disabled=\"reordering || idx === 0\"\n title=\"Move up\"\n @click=\"movePinned(idx, -1)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-xs btn-square\"\n :disabled=\"reordering || idx === pinnedPresets.length - 1\"\n title=\"Move down\"\n @click=\"movePinned(idx, 1)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n <router-link\n :to=\"getPresetLink(preset)\"\n class=\"flex-1 min-w-0 font-medium truncate hover:underline\"\n >\n {{ preset.name }}\n </router-link>\n <span class=\"text-xs text-base-content/60 shrink-0\">\n {{ contextLabel(preset.context) }}\n </span>\n <div class=\"flex gap-1 shrink-0\">\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm\"\n title=\"Rename\"\n :disabled=\"renaming\"\n @click=\"startRename(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm text-primary\"\n title=\"Unpin\"\n :disabled=\"unpinning\"\n @click=\"handleUnpin(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm text-error\"\n title=\"Delete\"\n :disabled=\"deleting\"\n @click=\"handleDelete(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n </button>\n </div>\n </li>\n </ul>\n </section>\n\n <!-- All presets grouped by path -->\n <section>\n <h2 class=\"text-lg font-semibold mb-3\">All Presets</h2>\n <p v-if=\"groupedPresets.length === 0\" class=\"text-base-content/70 text-sm\">\n No saved presets yet. Use the Presets button on any list page to save your filters.\n </p>\n <div v-else class=\"space-y-6\">\n <div\n v-for=\"[routePath, presets] in groupedPresets\"\n :key=\"routePath\"\n class=\"space-y-2\"\n >\n <h3 class=\"text-sm font-medium text-base-content/80 uppercase tracking-wide\">\n {{ contextLabelFromPath(routePath) }}\n </h3>\n <ul class=\"space-y-2\">\n <li\n v-for=\"preset in presets\"\n :key=\"preset.id\"\n class=\"flex items-center gap-2 p-3 rounded-lg bg-base-200\"\n >\n <template v-if=\"editingId === preset.id\">\n <input\n ref=\"renameInputRef\"\n v-model=\"editingName\"\n type=\"text\"\n class=\"input input-sm input-bordered flex-1 min-w-0\"\n maxlength=\"100\"\n placeholder=\"Preset name\"\n @keydown.enter=\"saveRename(preset.id)\"\n @keydown.escape=\"cancelRename\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary shrink-0\"\n :disabled=\"renaming || !editingName.trim()\"\n @click=\"saveRename(preset.id)\"\n >\n {{ renaming ? '...' : 'Save' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost shrink-0\"\n :disabled=\"renaming\"\n @click=\"cancelRename\"\n >\n Cancel\n </button>\n </template>\n <template v-else>\n <router-link\n :to=\"getPresetLink(preset)\"\n class=\"flex-1 min-w-0 font-medium truncate hover:underline\"\n >\n {{ preset.name }}\n </router-link>\n <div class=\"flex gap-1 shrink-0\">\n <button\n v-if=\"!isPinned(preset.id)\"\n type=\"button\"\n class=\"btn btn-ghost btn-sm\"\n :title=\"canPinMore ? 'Pin to favorites' : 'Maximum 5 pinned'\"\n :disabled=\"!canPinMore || pinning\"\n @click=\"handlePin(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm\"\n title=\"Rename\"\n :disabled=\"renaming\"\n @click=\"startRename(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm text-error\"\n title=\"Delete\"\n :disabled=\"deleting\"\n @click=\"handleDelete(preset)\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n </button>\n </div>\n </template>\n </li>\n </ul>\n </div>\n </div>\n </section>\n </template>\n\n <!-- Delete confirmation modal -->\n <ConfirmDialog\n v-model=\"showDeleteConfirm\"\n title=\"Delete preset?\"\n confirm-text=\"Delete\"\n cancel-text=\"Cancel\"\n processing-text=\"Deleting...\"\n confirm-button-class=\"btn-error\"\n :is-processing=\"deleting\"\n @confirm=\"confirmDelete\"\n @cancel=\"presetToDelete = null\"\n >\n <template #message>\n <p>\n Are you sure you want to delete \"{{ presetToDelete?.name }}\"?\n This cannot be undone.\n </p>\n </template>\n </ConfirmDialog>\n\n <!-- Rename modal / inline could stay as is -->\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SavedFilterReadDto } from '@dragonmastery/dragoncore-shared';\nimport { useMutation, useQuery } from '@dragonmastery/dragoncore-vue';\nimport { computed, nextTick, ref } from 'vue';\nimport ConfirmDialog from '../../components/ConfirmDialog.vue';\nimport { useInjectedPinnedPresets } from './usePinnedPresets';\n\nconst CACHE_KEY_ALL = 'saved-filters:all';\n\nconst { data: allPresets, loading, refetch: refetchAllPresets } = useQuery(\n (api) => api.savedFilters.listAllSavedFilters(),\n { cacheKey: CACHE_KEY_ALL, staleTime: 24 * 60 * 60 * 1000 },\n);\n\nconst injectedPinned = useInjectedPinnedPresets();\nconst pinnedPresets = computed(() => injectedPinned.pinned.value ?? []);\n\nconst groupedPresets = computed(() => {\n const groups = new Map<string, SavedFilterReadDto[]>();\n for (const preset of allPresets.value ?? []) {\n const key = preset.route_path || preset.context || 'other';\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(preset);\n }\n return Array.from(groups.entries()).sort(([a], [b]) => a.localeCompare(b));\n});\n\nconst pinnedIdsSet = computed(() => new Set(pinnedPresets.value.map((p) => p.id)));\nconst canPinMore = computed(() => pinnedPresets.value.length < 5);\n\nfunction isPinned(id: string) {\n return pinnedIdsSet.value.has(id);\n}\n\nfunction getPresetLink(preset: SavedFilterReadDto) {\n return {\n path: preset.route_path,\n query: preset.filters ?? {},\n };\n}\n\nconst CONTEXT_LABELS: Record<string, string> = {\n tracker: 'Trackers',\n followup: 'Followups',\n support_ticket_staff: 'Staff Support Tickets',\n support_ticket_customer: 'Customer Support Tickets',\n};\n\nfunction contextLabel(context: string): string {\n return CONTEXT_LABELS[context] ?? context;\n}\n\nfunction contextLabelFromPath(routePath: string): string {\n if (routePath.startsWith('/trackers')) return 'Trackers';\n if (routePath.startsWith('/followups')) return 'Followups';\n if (routePath.startsWith('/support-tickets/staff')) return 'Staff Support Tickets';\n if (routePath.startsWith('/support-tickets')) return 'Customer Support Tickets';\n return routePath || 'Other';\n}\n\nconst { mutate: reorderPins, loading: reordering } = useMutation(\n (api, ids: string[]) => api.savedFilters.reorderPinnedPresets(ids),\n { invalidate: 'pinned-presets' },\n);\n\nconst { mutate: updatePreset, loading: renaming } = useMutation(\n (api, input: { id: string; name: string }) =>\n api.savedFilters.updateSavedFilter({ id: input.id, name: input.name }),\n { invalidate: /^saved-filters:/ },\n);\n\nconst { mutate: deletePreset, loading: deleting } = useMutation(\n (api, id: string) => api.savedFilters.deleteSavedFilter(id),\n { invalidate: /^saved-filters:|^pinned-presets/ },\n);\n\nconst pinning = ref(false);\nconst unpinning = ref(false);\n\nasync function handlePin(preset: SavedFilterReadDto) {\n pinning.value = true;\n try {\n await injectedPinned.pinPreset(preset);\n } finally {\n pinning.value = false;\n }\n}\n\nasync function handleUnpin(preset: SavedFilterReadDto) {\n unpinning.value = true;\n try {\n await injectedPinned.unpinPreset(preset.id);\n } finally {\n unpinning.value = false;\n }\n}\n\nasync function movePinned(idx: number, delta: number) {\n const list = [...pinnedPresets.value];\n const newIdx = idx + delta;\n if (newIdx < 0 || newIdx >= list.length) return;\n [list[idx], list[newIdx]] = [list[newIdx]!, list[idx]!];\n try {\n await reorderPins(list.map((p) => p.id));\n await injectedPinned.refetchPinned();\n } catch {\n // Error handled by mutation\n }\n}\n\nconst showDeleteConfirm = ref(false);\nconst presetToDelete = ref<SavedFilterReadDto | null>(null);\n\nfunction handleDelete(preset: SavedFilterReadDto) {\n presetToDelete.value = preset;\n showDeleteConfirm.value = true;\n}\n\nasync function confirmDelete() {\n if (!presetToDelete.value) return;\n try {\n await deletePreset(presetToDelete.value.id);\n if (isPinned(presetToDelete.value.id)) {\n await injectedPinned.unpinPreset(presetToDelete.value.id);\n }\n await refetchAllPresets();\n presetToDelete.value = null;\n showDeleteConfirm.value = false;\n } catch {\n // Error handled by mutation\n }\n}\n\nconst editingId = ref<string | null>(null);\nconst editingName = ref('');\nconst renameInputRef = ref<HTMLInputElement | null>(null);\n\nfunction startRename(preset: SavedFilterReadDto) {\n editingId.value = preset.id;\n editingName.value = preset.name;\n nextTick(() => renameInputRef.value?.focus());\n}\n\nfunction cancelRename() {\n editingId.value = null;\n editingName.value = '';\n}\n\nasync function saveRename(presetId: string) {\n const name = editingName.value.trim();\n if (!name) return;\n try {\n await updatePreset({ id: presetId, name });\n cancelRename();\n await refetchAllPresets();\n if (isPinned(presetId)) {\n await injectedPinned.refetchPinned();\n }\n } catch {\n // Error handled by mutation\n }\n}\n</script>\n"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import "./useRpcAuth-Dp2sec-X.js";
2
- import "./useQueryCache-DqcDMsxb.js";
3
- import "./useMutation-B4_S4Xoa.js";
4
- import "./AppLink-CHMMrSFI.js";
5
- import { t as Signup_default } from "./Signup-hpV8J5cM.js";
6
-
7
- export { Signup_default as default };
@@ -1,106 +0,0 @@
1
- import { l as useUserSessionStore } from "./useRpcAuth-Dp2sec-X.js";
2
- import { t as useMutation } from "./useMutation-B4_S4Xoa.js";
3
- import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
- import { createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
5
- import { useRouter } from "vue-router";
6
- import { signupSchema } from "@dragonmastery/dragoncore-shared";
7
- import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
8
- import { toast } from "vue3-toastify";
9
-
10
- //#region src/slices/auth/features/signup/signupSchema.ts
11
- const signupSchemaWithMetadata = withMetadata(signupSchema, "signupSchema", {
12
- email: {
13
- inputType: "email",
14
- placeholder: "you@example.com",
15
- helpText: "Enter the email address you used to register",
16
- autocomplete: "email",
17
- className: "login-field",
18
- autofocus: true
19
- },
20
- "passwords.password": {
21
- inputType: "password",
22
- placeholder: "••••••••",
23
- helpText: "Must be at least 8 characters",
24
- autocomplete: "current-password",
25
- className: "login-field"
26
- },
27
- "passwords.password_confirm": {
28
- inputType: "password",
29
- placeholder: "••••••••",
30
- helpText: "Must be at least 8 characters",
31
- autocomplete: "current-password",
32
- className: "login-field"
33
- }
34
- });
35
-
36
- //#endregion
37
- //#region src/slices/auth/features/signup/Signup.vue
38
- const _hoisted_1 = { class: "max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container" };
39
- const _hoisted_2 = { class: "text-center mt-2" };
40
- const _sfc_main = /* @__PURE__ */ defineComponent({
41
- __name: "Signup",
42
- setup(__props) {
43
- const { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(signupSchemaWithMetadata, {
44
- storeName: "signup-form",
45
- persistToLocalStorage: false,
46
- renderStyle: "daisy_ui"
47
- });
48
- const sessionStore = useUserSessionStore();
49
- const router = useRouter();
50
- const { mutate: signupMutate } = useMutation((api, input) => api.users.signupUser(input), { skipAuthCheck: true });
51
- const { mutate: loginMutate } = useMutation((api, input) => api.userSessions.login(input), { credentials: "include" });
52
- const handleSubmit = async (data) => {
53
- if (!await signupMutate(data)) throw new Error("Signup failed");
54
- const loginResult = await loginMutate({
55
- email: data.email,
56
- password: data.passwords.password
57
- });
58
- if (!loginResult?.access_token || !loginResult?.user_details_token) throw new Error("Failed to login after signup");
59
- return {
60
- access_token: loginResult.access_token,
61
- user_details_token: loginResult.user_details_token
62
- };
63
- };
64
- const handleSuccess = async (data) => {
65
- sessionStore.setSession(data.user_details_token);
66
- sessionStore.setAccessToken(data.access_token);
67
- form.reset();
68
- await router.push("/");
69
- toast.success("Registration successful! You are now logged in.");
70
- };
71
- const handleError = (error) => {
72
- console.log("Signup failed", error);
73
- toast.error(error.message || "Registration failed");
74
- };
75
- return (_ctx, _cache) => {
76
- return openBlock(), createElementBlock("div", _hoisted_1, [_cache[2] || (_cache[2] = createElementVNode("h1", { class: "text-2xl font-bold mb-6 text-center" }, "Sign Up", -1)), createVNode(unref(ZiniaForm), {
77
- onHandleSubmit: handleSubmit,
78
- onSuccess: handleSuccess,
79
- onError: handleError
80
- }, {
81
- default: withCtx(() => [
82
- createVNode(unref(zinia).EmailField),
83
- createVNode(unref(zinia).PasswordsPasswordField),
84
- createVNode(unref(zinia).PasswordsPasswordConfirmField),
85
- createVNode(unref(ZiniaSubmitButton), {
86
- submitText: "Sign Up",
87
- submittingText: "Signing up..."
88
- }),
89
- createElementVNode("div", _hoisted_2, [createElementVNode("p", null, [_cache[1] || (_cache[1] = createTextVNode(" Already have an account? ", -1)), createVNode(AppLink_default, {
90
- class: "link-accent link",
91
- to: "/auth/login"
92
- }, {
93
- default: withCtx(() => [..._cache[0] || (_cache[0] = [createTextVNode("Login", -1)])]),
94
- _: 1
95
- })])])
96
- ]),
97
- _: 1
98
- })]);
99
- };
100
- }
101
- });
102
- var Signup_default = _sfc_main;
103
-
104
- //#endregion
105
- export { signupSchemaWithMetadata as n, Signup_default as t };
106
- //# sourceMappingURL=Signup-hpV8J5cM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Signup-hpV8J5cM.js","names":[],"sources":["../src/slices/auth/features/signup/signupSchema.ts","../src/slices/auth/features/signup/Signup.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { signupSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type SignupForm = z.infer<typeof signupSchema>;\n\n// Enhance the schema with metadata\nexport const signupSchemaWithMetadata = withMetadata(signupSchema, 'signupSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'email',\n className: 'login-field',\n autofocus: true,\n },\n 'passwords.password': {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-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: 'current-password',\n className: 'login-field',\n },\n});\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Sign Up</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n <zinia.PasswordsPasswordField />\n <zinia.PasswordsPasswordConfirmField />\n\n <ZiniaSubmitButton submitText=\"Sign Up\" submittingText=\"Signing up...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" to=\"/auth/login\">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 { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { SignupInputDto } from '@dragonmastery/dragoncore-shared';\nimport { useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { signupSchemaWithMetadata } from './signupSchema';\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(signupSchemaWithMetadata, {\n storeName: 'signup-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: signupMutate } = useMutation(\n (api, input: SignupInputDto) => api.users.signupUser(input),\n { skipAuthCheck: true }, // Signup is a public endpoint\n);\nconst { mutate: loginMutate } = useMutation(\n (api, input: { email: string; password: string }) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\n// Handle form submission\nconst handleSubmit = async (data: SignupInputDto) => {\n const result = await signupMutate(data);\n if (!result) throw new Error('Signup failed');\n\n // After creating user, login to get tokens\n const loginResult = await loginMutate({\n email: data.email,\n password: data.passwords.password,\n });\n\n if (!loginResult?.access_token || !loginResult?.user_details_token) {\n throw new Error('Failed to login after signup');\n }\n\n return {\n access_token: loginResult.access_token,\n user_details_token: loginResult.user_details_token,\n };\n};\n\n// Handle success\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n await router.push('/');\n toast.success('Registration successful! You are now logged in.');\n};\n\n// Handle error\nconst handleError = (error: any) => {\n console.log('Signup failed', error);\n toast.error(error.message || 'Registration failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,2BAA2B,aAAa,cAAc,gBAAgB;CACjF,OAAO;EACL,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACX,WAAW;EACZ;CACD,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,CAAC;;;;;;;;;ECCF,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,0BAA0B;GACtF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,eAAe,qBAAqB;EAC1C,MAAM,SAAS,WAAW;EAC1B,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,KAAK,UAA0B,IAAI,MAAM,WAAW,MAAM,EAC3D,EAAE,eAAe,MAAM,CACxB;EACD,MAAM,EAAE,QAAQ,gBAAgB,aAC7B,KAAK,UAA+C,IAAI,aAAa,MAAM,MAAM,EAClF,EAAE,aAAa,WAAW,CAC3B;EAGD,MAAM,eAAe,OAAO,SAAyB;AAEnD,OAAI,CADW,MAAM,aAAa,KAAK,CAC1B,OAAM,IAAI,MAAM,gBAAgB;GAG7C,MAAM,cAAc,MAAM,YAAY;IACpC,OAAO,KAAK;IACZ,UAAU,KAAK,UAAU;IAC1B,CAAC;AAEF,OAAI,CAAC,aAAa,gBAAgB,CAAC,aAAa,mBAC9C,OAAM,IAAI,MAAM,+BAA+B;AAGjD,UAAO;IACL,cAAc,YAAY;IAC1B,oBAAoB,YAAY;IACjC;;EAIH,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAE9C,QAAK,OAAO;AACZ,SAAM,OAAO,KAAK,IAAI;AACtB,SAAM,QAAQ,kDAAkD;;EAIlE,MAAM,eAAe,UAAe;AAClC,WAAQ,IAAI,iBAAiB,MAAM;AACnC,SAAM,MAAM,MAAM,WAAW,sBAAsB;;;uBAlFnD,mBAiBM,OAjBN,YAiBM,CAAA,OAAA,OAAA,OAAA,KAhBJ,mBAA4D,MAAA,EAAxD,OAAM,uCAAqC,EAAC,WAAO,GAAA,GAEvD,YAaY,MAAA,UAAA,EAAA;IAbA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACpD;KAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;KACpB,YAAgC,MAAA,MAAA,CAAA,uBAAA;KAChC,YAAuC,MAAA,MAAA,CAAA,8BAAA;KAEvC,YAAyE,MAAA,kBAAA,EAAA;MAAtD,YAAW;MAAU,gBAAe;;KAEvD,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAkE,iBAAA;MAAzD,OAAM;MAAmB,IAAG;;6BAAmB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
@@ -1,27 +0,0 @@
1
- import "./useRpcAuth-Dp2sec-X.js";
2
- import "./useQueryCache-DqcDMsxb.js";
3
- import "./useMutation-B4_S4Xoa.js";
4
- import "./useQuery-B7ndu5_P.js";
5
- import { O as StaffCreateSupportTicketForm_default } from "./src-CHw8DdkR.js";
6
- import "./AppLink-CHMMrSFI.js";
7
- import "./TimelineSystemEvent-D58zN850.js";
8
- import "./TeamMembersTab-4gmnP9sD.js";
9
- import "./Appearance-BfPdKMXw.js";
10
- import "./useBreadcrumbs-DmgSucoe.js";
11
- import "./EditTeamMemberForm-CKbKomrL.js";
12
- import "./TeamHistoryTab-CNelXR3Q.js";
13
- import "./UserProfilePage-uAIfC_NW.js";
14
- import "./ChangePasswordPage-DCews8GU.js";
15
- import "./TeamNotesTab-BhVRLG8h.js";
16
- import "./CustomerSupportTicketParent-BzY4pmBk.js";
17
- import "./SupportTicketDevLifecycleBadge-Ba-Rm6QW.js";
18
- import "./StaffSupportTicketParent-CWWhaM37.js";
19
- import "./LoginForm-C85U2E2r.js";
20
- import "./Signup-hpV8J5cM.js";
21
- import "./ForgotPassword-D3bjL48L.js";
22
- import "./Logout-DZuWLh0O.js";
23
- import "./UserListPage-OGYOLwlw.js";
24
- import "./CreateUserPage-B8qeBZij.js";
25
- import "./EditUserPage-XqF25iwz.js";
26
-
27
- export { StaffCreateSupportTicketForm_default as default };