@dragonmastery/dragoncore-vue 0.0.4 → 0.0.6

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 (56) hide show
  1. package/dist/{CreateTeamForm-zVlGgmL9.js → CreateTeamForm-O_viMOrD.js} +5 -5
  2. package/dist/{CreateTeamMemberForm-DkCbsJDn.js → CreateTeamMemberForm-BzwDug0x.js} +5 -5
  3. package/dist/{CreditBalanceDashboard-BTW4IK66.js → CreditBalanceDashboard-CBaQsjyo.js} +5 -5
  4. package/dist/{CreditManagement-0JxmCIAd.js → CreditManagement-Bal5mbQC.js} +5 -5
  5. package/dist/CustomerCreateSupportTicketForm-CpnbsCqr.js +27 -0
  6. package/dist/{CustomerSupportTicketDetailPage-DQa_Zvfe.js → CustomerSupportTicketDetailPage-DZQCplSM.js} +197 -183
  7. package/dist/CustomerSupportTicketDetailPage-DZQCplSM.js.map +1 -0
  8. package/dist/CustomerSupportTicketList-CKf8Kyzu.js +27 -0
  9. package/dist/{CustomerSupportTicketParent-BOYIren9.js → CustomerSupportTicketParent-BnmTFigo.js} +1 -1
  10. package/dist/{CustomerSupportTicketParent-sT8hpgrA.js → CustomerSupportTicketParent-BzY4pmBk.js} +2 -2
  11. package/dist/{CustomerSupportTicketParent-sT8hpgrA.js.map → CustomerSupportTicketParent-BzY4pmBk.js.map} +1 -1
  12. package/dist/CustomerSupportTicketSuccess-B-1n0gP-.js +27 -0
  13. package/dist/{EditTeamForm-BM90JTjr.js → EditTeamForm-CKnK07nF.js} +5 -5
  14. package/dist/{ResetPassword-DAn7dYAp.js → ResetPassword-Q8vhelQz.js} +5 -5
  15. package/dist/{SavedFiltersPage-BNasEKOY.js → SavedFiltersPage-DhhcU1R1.js} +51 -23
  16. package/dist/SavedFiltersPage-DhhcU1R1.js.map +1 -0
  17. package/dist/StaffCreateSupportTicketForm-D5ne_W9A.js +27 -0
  18. package/dist/{StaffSupportTicketDetailPage-D49ibqrO.js → StaffSupportTicketDetailPage-DY07Ez0R.js} +176 -132
  19. package/dist/StaffSupportTicketDetailPage-DY07Ez0R.js.map +1 -0
  20. package/dist/StaffSupportTicketList-xD3FaXkS.js +27 -0
  21. package/dist/{StaffSupportTicketParent-CxrPxXSH.js → StaffSupportTicketParent-CWWhaM37.js} +2 -2
  22. package/dist/{StaffSupportTicketParent-CxrPxXSH.js.map → StaffSupportTicketParent-CWWhaM37.js.map} +1 -1
  23. package/dist/{StaffSupportTicketParent-C7Mm7W_0.js → StaffSupportTicketParent-Dp1G85wc.js} +1 -1
  24. package/dist/StaffSupportTicketSuccess-D1nBsbcC.js +27 -0
  25. package/dist/{SupportTicketDevLifecycleBadge-Cl4y47Sy.js → SupportTicketDevLifecycleBadge-Ba-Rm6QW.js} +1 -1
  26. package/dist/{SupportTicketDevLifecycleBadge-Cl4y47Sy.js.map → SupportTicketDevLifecycleBadge-Ba-Rm6QW.js.map} +1 -1
  27. package/dist/{TeamAttachmentsTab-BoOIuTU1.js → TeamAttachmentsTab-DaCRkUsF.js} +5 -5
  28. package/dist/{ViewTeam-Bb1WH_Us.js → TeamList-BaZfSOG4.js} +6 -6
  29. package/dist/{TeamMemberList-CQTxcWNS.js → TeamMemberList-DOG48Y0Q.js} +5 -5
  30. package/dist/{TeamMemberParent-Bt0kbyKQ.js → TeamMemberParent-CTrhsG1K.js} +5 -5
  31. package/dist/{TeamParent-BvLiiJq6.js → TeamParent-myjqz30R.js} +5 -5
  32. package/dist/{TimelineNoteInput-BRsQ2QTz.js → TimelineNoteInput-BVqF4MtZ.js} +31 -8
  33. package/dist/TimelineNoteInput-BVqF4MtZ.js.map +1 -0
  34. package/dist/{TimelineSystemEvent-B69B3eeL.js → TimelineSystemEvent-D58zN850.js} +288 -205
  35. package/dist/TimelineSystemEvent-D58zN850.js.map +1 -0
  36. package/dist/{TeamList-TpS3BhPd.js → ViewTeam-DRQuV1A3.js} +6 -6
  37. package/dist/{ViewTeamMember-CBTAnAhS.js → ViewTeamMember-DjbxMkB4.js} +5 -5
  38. package/dist/{displayIdFormatter-BoKcrgF5.js → displayIdFormatter-B1ZKgofu.js} +1 -1
  39. package/dist/{displayIdFormatter-BoKcrgF5.js.map → displayIdFormatter-B1ZKgofu.js.map} +1 -1
  40. package/dist/index.d.ts +962 -938
  41. package/dist/index.js +6 -6
  42. package/dist/{src-ChwBeNHB.js → src-wQ7pAFHx.js} +1488 -1416
  43. package/dist/src-wQ7pAFHx.js.map +1 -0
  44. package/package.json +2 -2
  45. package/dist/CustomerCreateSupportTicketForm-CQcv4vrX.js +0 -27
  46. package/dist/CustomerSupportTicketDetailPage-DQa_Zvfe.js.map +0 -1
  47. package/dist/CustomerSupportTicketList-CMPRQ_7O.js +0 -27
  48. package/dist/CustomerSupportTicketSuccess-CnRWm6gX.js +0 -27
  49. package/dist/SavedFiltersPage-BNasEKOY.js.map +0 -1
  50. package/dist/StaffCreateSupportTicketForm-DoHCw60c.js +0 -27
  51. package/dist/StaffSupportTicketDetailPage-D49ibqrO.js.map +0 -1
  52. package/dist/StaffSupportTicketList-BgCIa_9v.js +0 -27
  53. package/dist/StaffSupportTicketSuccess-DZF2WpZc.js +0 -27
  54. package/dist/TimelineNoteInput-BRsQ2QTz.js.map +0 -1
  55. package/dist/TimelineSystemEvent-B69B3eeL.js.map +0 -1
  56. package/dist/src-ChwBeNHB.js.map +0 -1
@@ -98,14 +98,14 @@ const _hoisted_7$2 = {
98
98
  key: 0,
99
99
  class: "absolute inset-0 flex items-center justify-center"
100
100
  };
101
- const _hoisted_8$1 = {
101
+ const _hoisted_8$2 = {
102
102
  key: 1,
103
103
  class: "absolute inset-0 flex flex-col items-center justify-center p-4 text-center"
104
104
  };
105
- const _hoisted_9$1 = ["src", "alt"];
106
- const _hoisted_10$1 = ["disabled"];
107
- const _hoisted_11$1 = ["disabled"];
108
- const _hoisted_12$1 = {
105
+ const _hoisted_9$2 = ["src", "alt"];
106
+ const _hoisted_10$2 = ["disabled"];
107
+ const _hoisted_11$2 = ["disabled"];
108
+ const _hoisted_12$2 = {
109
109
  method: "dialog",
110
110
  class: "modal-backdrop"
111
111
  };
@@ -633,7 +633,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
633
633
  createCommentVNode(" Loading state "),
634
634
  isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_7$2, [..._cache[8] || (_cache[8] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : createCommentVNode("v-if", true),
635
635
  createCommentVNode(" Error state "),
636
- hasError.value ? (openBlock(), createElementBlock("div", _hoisted_8$1, [..._cache[9] || (_cache[9] = [createElementVNode("svg", {
636
+ hasError.value ? (openBlock(), createElementBlock("div", _hoisted_8$2, [..._cache[9] || (_cache[9] = [createElementVNode("svg", {
637
637
  xmlns: "http://www.w3.org/2000/svg",
638
638
  class: "h-12 w-12 text-error mb-2",
639
639
  fill: "none",
@@ -660,7 +660,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
660
660
  onTouchstart: withModifiers(handleImageTouchStart, ["stop"]),
661
661
  onTouchmove: withModifiers(handleImageTouchMove, ["stop"]),
662
662
  onTouchend: withModifiers(handleImageTouchEnd, ["stop"])
663
- }, null, 46, _hoisted_9$1)) : createCommentVNode("v-if", true),
663
+ }, null, 46, _hoisted_9$2)) : createCommentVNode("v-if", true),
664
664
  createCommentVNode(" Zoom controls "),
665
665
  __props.imageSrc && !hasError.value ? (openBlock(), createElementBlock("div", {
666
666
  key: 3,
@@ -688,7 +688,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
688
688
  "stroke-linejoin": "round",
689
689
  "stroke-width": "2",
690
690
  d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7"
691
- })], -1)])], 8, _hoisted_10$1),
691
+ })], -1)])], 8, _hoisted_10$2),
692
692
  createElementVNode("button", {
693
693
  onClick: withModifiers(resetZoom, ["prevent"]),
694
694
  class: "text-xs flex items-center px-2 text-base-content/70 hover:text-base-content hover:bg-base-200 rounded transition-colors cursor-pointer",
@@ -714,7 +714,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
714
714
  "stroke-linejoin": "round",
715
715
  "stroke-width": "2",
716
716
  d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v6m3-3H7"
717
- })], -1)])], 8, _hoisted_11$1),
717
+ })], -1)])], 8, _hoisted_11$2),
718
718
  createElementVNode("button", {
719
719
  onClick: withModifiers(rotateImage, ["prevent"]),
720
720
  class: "btn btn-sm btn-circle btn-ghost",
@@ -737,7 +737,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
737
737
  })], -1)])])
738
738
  ], 32)) : createCommentVNode("v-if", true)
739
739
  ], 512)
740
- ]), createElementVNode("form", _hoisted_12$1, [createElementVNode("button", {
740
+ ]), createElementVNode("form", _hoisted_12$2, [createElementVNode("button", {
741
741
  type: "button",
742
742
  onClick: withModifiers(handleClose, ["prevent"])
743
743
  }, "close")])], 34);
@@ -746,160 +746,6 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
746
746
  });
747
747
  var ImageModal_default = _sfc_main$6;
748
748
 
749
- //#endregion
750
- //#region src/slices/support_ticket/shared/SupportTicketPriorityBadge.vue
751
- const _hoisted_1$5 = ["aria-label"];
752
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
753
- __name: "SupportTicketPriorityBadge",
754
- props: {
755
- priority: {},
756
- size: { default: "md" },
757
- variant: { default: "default" }
758
- },
759
- setup(__props) {
760
- /**
761
- * SupportTicketPriorityBadge - A reusable Vue component for displaying support ticket priority
762
- * as color-coded badges with consistent DaisyUI styling and accessibility features.
763
- *
764
- * @example
765
- * <SupportTicketPriorityBadge :priority="'HIGH'" size="md" />
766
- * <SupportTicketPriorityBadge :priority="'CRITICAL'" size="sm" variant="outline" />
767
- */
768
- const props = __props;
769
- /**
770
- * Configuration for each priority badge
771
- */
772
- const priorityConfig = {
773
- LOW: {
774
- color: "badge-neutral",
775
- text: "Low",
776
- ariaLabel: "Priority: Low priority"
777
- },
778
- MEDIUM: {
779
- color: "badge-neutral",
780
- text: "Medium",
781
- ariaLabel: "Priority: Medium priority"
782
- },
783
- HIGH: {
784
- color: "badge-neutral",
785
- text: "High",
786
- ariaLabel: "Priority: High priority"
787
- },
788
- CRITICAL: {
789
- color: "badge-neutral",
790
- text: "Critical",
791
- ariaLabel: "Priority: Critical priority"
792
- }
793
- };
794
- const getPriorityConfig = (priority) => {
795
- const config$1 = priorityConfig[priority];
796
- if (!config$1) return {
797
- color: "badge-neutral",
798
- text: priority || "Unknown",
799
- ariaLabel: `Priority: ${priority || "Unknown priority"}`
800
- };
801
- return config$1;
802
- };
803
- const config = computed(() => getPriorityConfig(props.priority));
804
- const badgeClasses = computed(() => {
805
- const baseClasses = ["badge", "text-xs"];
806
- baseClasses.push(config.value.color);
807
- if (props.size === "sm") baseClasses.push("badge-sm", "text-xs");
808
- else if (props.size === "lg") baseClasses.push("badge-lg", "text-sm");
809
- else baseClasses.push("text-xs", "sm:text-sm");
810
- if (props.variant === "outline") baseClasses.push("badge-outline");
811
- return baseClasses.join(" ");
812
- });
813
- const displayText = computed(() => config.value.text);
814
- const ariaLabel = computed(() => config.value.ariaLabel);
815
- return (_ctx, _cache) => {
816
- return openBlock(), createElementBlock("div", {
817
- class: normalizeClass(badgeClasses.value),
818
- "aria-label": ariaLabel.value,
819
- role: "status"
820
- }, toDisplayString(displayText.value), 11, _hoisted_1$5);
821
- };
822
- }
823
- });
824
- var SupportTicketPriorityBadge_default = _sfc_main$5;
825
-
826
- //#endregion
827
- //#region src/slices/support_ticket/shared/SupportTicketTypeBadge.vue
828
- const _hoisted_1$4 = ["aria-label"];
829
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
830
- __name: "SupportTicketTypeBadge",
831
- props: {
832
- type: {},
833
- size: { default: "md" },
834
- variant: { default: "default" }
835
- },
836
- setup(__props) {
837
- /**
838
- * SupportTicketTypeBadge - A reusable Vue component for displaying support ticket type
839
- * as color-coded badges with consistent DaisyUI styling and accessibility features.
840
- *
841
- * @example
842
- * <SupportTicketTypeBadge :type="'BUG'" size="md" />
843
- * <SupportTicketTypeBadge :type="'FEATURE_REQUEST'" size="sm" variant="outline" />
844
- */
845
- const props = __props;
846
- /**
847
- * Configuration for each type badge
848
- */
849
- const typeConfig = {
850
- BUG: {
851
- color: "badge-neutral",
852
- text: "Bug",
853
- ariaLabel: "Type: Bug report requiring fix"
854
- },
855
- FEATURE_REQUEST: {
856
- color: "badge-neutral",
857
- text: "Feature",
858
- ariaLabel: "Type: New feature request"
859
- },
860
- IMPROVEMENT: {
861
- color: "badge-neutral",
862
- text: "Improvement",
863
- ariaLabel: "Type: Enhancement to existing feature"
864
- },
865
- OPERATIONAL: {
866
- color: "badge-neutral",
867
- text: "Ops",
868
- ariaLabel: "Type: Operational/admin work"
869
- }
870
- };
871
- const getTypeConfig = (type) => {
872
- const config$1 = typeConfig[type];
873
- if (!config$1) return {
874
- color: "badge-neutral",
875
- text: type || "Unknown",
876
- ariaLabel: `Type: ${type || "Unknown type"}`
877
- };
878
- return config$1;
879
- };
880
- const config = computed(() => getTypeConfig(props.type));
881
- const badgeClasses = computed(() => {
882
- const baseClasses = ["badge", "text-xs"];
883
- baseClasses.push(config.value.color);
884
- if (props.size === "sm") baseClasses.push("badge-sm", "text-xs");
885
- else if (props.size === "lg") baseClasses.push("badge-lg", "text-sm");
886
- else baseClasses.push("text-xs", "sm:text-sm");
887
- if (props.variant === "outline") baseClasses.push("badge-outline");
888
- return baseClasses.join(" ");
889
- });
890
- const displayText = computed(() => config.value.text);
891
- const ariaLabel = computed(() => config.value.ariaLabel);
892
- return (_ctx, _cache) => {
893
- return openBlock(), createElementBlock("div", {
894
- class: normalizeClass(badgeClasses.value),
895
- "aria-label": ariaLabel.value,
896
- role: "status"
897
- }, toDisplayString(displayText.value), 11, _hoisted_1$4);
898
- };
899
- }
900
- });
901
- var SupportTicketTypeBadge_default = _sfc_main$4;
902
-
903
749
  //#endregion
904
750
  //#region src/slices/support_ticket/utils/creditValueFormatter.ts
905
751
  /**
@@ -949,7 +795,7 @@ function formatCustomerCreditValue(creditValue) {
949
795
 
950
796
  //#endregion
951
797
  //#region src/slices/support_ticket/shared/InlineAttachments.vue
952
- const _hoisted_1$3 = { class: "mt-4 sm:mt-6" };
798
+ const _hoisted_1$5 = { class: "mt-4 sm:mt-6" };
953
799
  const _hoisted_2$2 = {
954
800
  key: 0,
955
801
  class: "grid grid-cols-2 gap-2 sm:gap-4 mb-4"
@@ -968,23 +814,23 @@ const _hoisted_7$1 = {
968
814
  key: 0,
969
815
  class: "w-full bg-base-300 rounded-full h-1.5 mt-1"
970
816
  };
971
- const _hoisted_8 = {
817
+ const _hoisted_8$1 = {
972
818
  key: 1,
973
819
  class: "text-xs text-error mt-1 break-words"
974
820
  };
975
- const _hoisted_9 = { class: "flex gap-2 sm:gap-1" };
976
- const _hoisted_10 = ["onClick"];
977
- const _hoisted_11 = ["onClick"];
978
- const _hoisted_12 = {
821
+ const _hoisted_9$1 = { class: "flex gap-2 sm:gap-1" };
822
+ const _hoisted_10$1 = ["onClick"];
823
+ const _hoisted_11$1 = ["onClick"];
824
+ const _hoisted_12$1 = {
979
825
  key: 2,
980
826
  class: "space-y-2"
981
827
  };
982
- const _hoisted_13 = {
828
+ const _hoisted_13$1 = {
983
829
  key: 0,
984
830
  class: "flex justify-center py-4"
985
831
  };
986
- const _hoisted_14 = ["onClick"];
987
- const _hoisted_15 = { class: "flex items-center gap-2 sm:gap-3 flex-1 min-w-0 w-full sm:w-auto" };
832
+ const _hoisted_14$1 = ["onClick"];
833
+ const _hoisted_15$1 = { class: "flex items-center gap-2 sm:gap-3 flex-1 min-w-0 w-full sm:w-auto" };
988
834
  const _hoisted_16 = { class: "flex-shrink-0" };
989
835
  const _hoisted_17 = {
990
836
  key: 0,
@@ -1005,7 +851,7 @@ const _hoisted_26 = {
1005
851
  key: 3,
1006
852
  class: "text-center py-8 text-base-content/50"
1007
853
  };
1008
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
854
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1009
855
  __name: "InlineAttachments",
1010
856
  props: {
1011
857
  recordId: {},
@@ -1358,7 +1204,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1358
1204
  });
1359
1205
  }, { immediate: true });
1360
1206
  return (_ctx, _cache) => {
1361
- return openBlock(), createElementBlock("div", _hoisted_1$3, [
1207
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
1362
1208
  createElementVNode("input", {
1363
1209
  ref_key: "fileInput",
1364
1210
  ref: fileInput,
@@ -1431,26 +1277,26 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1431
1277
  class: "bg-primary h-1.5 rounded-full transition-all",
1432
1278
  style: normalizeStyle({ width: `${item.progress}%` })
1433
1279
  }, null, 4)])) : createCommentVNode("v-if", true),
1434
- item.status === "error" ? (openBlock(), createElementBlock("div", _hoisted_8, toDisplayString(item.errorMessage), 1)) : createCommentVNode("v-if", true)
1435
- ]), createElementVNode("div", _hoisted_9, [item.status === "error" ? (openBlock(), createElementBlock("button", {
1280
+ item.status === "error" ? (openBlock(), createElementBlock("div", _hoisted_8$1, toDisplayString(item.errorMessage), 1)) : createCommentVNode("v-if", true)
1281
+ ]), createElementVNode("div", _hoisted_9$1, [item.status === "error" ? (openBlock(), createElementBlock("button", {
1436
1282
  key: 0,
1437
1283
  onClick: withModifiers(($event) => retryUpload(item), ["prevent"]),
1438
1284
  class: "btn btn-xs btn-ghost flex-1 sm:flex-none",
1439
1285
  type: "button"
1440
- }, " Retry ", 8, _hoisted_10)) : createCommentVNode("v-if", true), item.status !== "uploading" ? (openBlock(), createElementBlock("button", {
1286
+ }, " Retry ", 8, _hoisted_10$1)) : createCommentVNode("v-if", true), item.status !== "uploading" ? (openBlock(), createElementBlock("button", {
1441
1287
  key: 1,
1442
1288
  onClick: withModifiers(($event) => removeFromQueue(item.id), ["prevent"]),
1443
1289
  class: "btn btn-xs btn-ghost text-error flex-1 sm:flex-none",
1444
1290
  type: "button"
1445
- }, " Remove ", 8, _hoisted_11)) : createCommentVNode("v-if", true)])]);
1291
+ }, " Remove ", 8, _hoisted_11$1)) : createCommentVNode("v-if", true)])]);
1446
1292
  }), 128))])) : createCommentVNode("v-if", true),
1447
1293
  createCommentVNode(" Attachments List "),
1448
- (attachments.value.length > 0 || unref(attachmentsLoading)) && __props.recordId ? (openBlock(), createElementBlock("div", _hoisted_12, [unref(attachmentsLoading) ? (openBlock(), createElementBlock("div", _hoisted_13, [..._cache[8] || (_cache[8] = [createElementVNode("span", { class: "loading loading-spinner loading-sm" }, null, -1)])])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(attachments.value, (file) => {
1294
+ (attachments.value.length > 0 || unref(attachmentsLoading)) && __props.recordId ? (openBlock(), createElementBlock("div", _hoisted_12$1, [unref(attachmentsLoading) ? (openBlock(), createElementBlock("div", _hoisted_13$1, [..._cache[8] || (_cache[8] = [createElementVNode("span", { class: "loading loading-spinner loading-sm" }, null, -1)])])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(attachments.value, (file) => {
1449
1295
  return openBlock(), createElementBlock("div", {
1450
1296
  key: file.id,
1451
1297
  class: normalizeClass(["flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 p-2 sm:p-3 bg-base-100 border border-base-300 rounded-lg hover:bg-base-200 transition-colors", { "cursor-pointer": isImage(file.type) }]),
1452
1298
  onClick: withModifiers(($event) => isImage(file.type) && viewImage(file), ["prevent"])
1453
- }, [createElementVNode("div", _hoisted_15, [createElementVNode("div", _hoisted_16, [createCommentVNode(" Image thumbnail preview "), isImage(file.type) ? (openBlock(), createElementBlock("div", _hoisted_17, [getImageUrlSync(file.id) ? (openBlock(), createElementBlock("img", {
1299
+ }, [createElementVNode("div", _hoisted_15$1, [createElementVNode("div", _hoisted_16, [createCommentVNode(" Image thumbnail preview "), isImage(file.type) ? (openBlock(), createElementBlock("div", _hoisted_17, [getImageUrlSync(file.id) ? (openBlock(), createElementBlock("img", {
1454
1300
  key: 0,
1455
1301
  src: getImageUrlSync(file.id),
1456
1302
  alt: file.name,
@@ -1518,7 +1364,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1518
1364
  "stroke-width": "2",
1519
1365
  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"
1520
1366
  })], -1)])], 8, _hoisted_25)) : createCommentVNode("v-if", true)
1521
- ])], 10, _hoisted_14);
1367
+ ])], 10, _hoisted_14$1);
1522
1368
  }), 128))])) : !unref(attachmentsLoading) && __props.recordId ? (openBlock(), createElementBlock("div", _hoisted_26, [..._cache[13] || (_cache[13] = [createElementVNode("svg", {
1523
1369
  xmlns: "http://www.w3.org/2000/svg",
1524
1370
  class: "h-12 w-12 mx-auto mb-2 opacity-50",
@@ -1570,7 +1416,161 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1570
1416
  };
1571
1417
  }
1572
1418
  });
1573
- var InlineAttachments_default = _sfc_main$3;
1419
+ var InlineAttachments_default = _sfc_main$5;
1420
+
1421
+ //#endregion
1422
+ //#region src/slices/support_ticket/shared/SupportTicketPriorityBadge.vue
1423
+ const _hoisted_1$4 = ["aria-label"];
1424
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1425
+ __name: "SupportTicketPriorityBadge",
1426
+ props: {
1427
+ priority: {},
1428
+ size: { default: "md" },
1429
+ variant: { default: "default" }
1430
+ },
1431
+ setup(__props) {
1432
+ /**
1433
+ * SupportTicketPriorityBadge - A reusable Vue component for displaying support ticket priority
1434
+ * as color-coded badges with consistent DaisyUI styling and accessibility features.
1435
+ *
1436
+ * @example
1437
+ * <SupportTicketPriorityBadge :priority="'HIGH'" size="md" />
1438
+ * <SupportTicketPriorityBadge :priority="'CRITICAL'" size="sm" variant="outline" />
1439
+ */
1440
+ const props = __props;
1441
+ /**
1442
+ * Configuration for each priority badge
1443
+ */
1444
+ const priorityConfig = {
1445
+ LOW: {
1446
+ color: "badge-neutral",
1447
+ text: "Low",
1448
+ ariaLabel: "Priority: Low priority"
1449
+ },
1450
+ MEDIUM: {
1451
+ color: "badge-neutral",
1452
+ text: "Medium",
1453
+ ariaLabel: "Priority: Medium priority"
1454
+ },
1455
+ HIGH: {
1456
+ color: "badge-neutral",
1457
+ text: "High",
1458
+ ariaLabel: "Priority: High priority"
1459
+ },
1460
+ CRITICAL: {
1461
+ color: "badge-neutral",
1462
+ text: "Critical",
1463
+ ariaLabel: "Priority: Critical priority"
1464
+ }
1465
+ };
1466
+ const getPriorityConfig = (priority) => {
1467
+ const config$1 = priorityConfig[priority];
1468
+ if (!config$1) return {
1469
+ color: "badge-neutral",
1470
+ text: priority || "Unknown",
1471
+ ariaLabel: `Priority: ${priority || "Unknown priority"}`
1472
+ };
1473
+ return config$1;
1474
+ };
1475
+ const config = computed(() => getPriorityConfig(props.priority));
1476
+ const badgeClasses = computed(() => {
1477
+ const baseClasses = ["badge", "text-xs"];
1478
+ baseClasses.push(config.value.color);
1479
+ if (props.size === "sm") baseClasses.push("badge-sm", "text-xs");
1480
+ else if (props.size === "lg") baseClasses.push("badge-lg", "text-sm");
1481
+ else baseClasses.push("text-xs", "sm:text-sm");
1482
+ if (props.variant === "outline") baseClasses.push("badge-outline");
1483
+ return baseClasses.join(" ");
1484
+ });
1485
+ const displayText = computed(() => config.value.text);
1486
+ const ariaLabel = computed(() => config.value.ariaLabel);
1487
+ return (_ctx, _cache) => {
1488
+ return openBlock(), createElementBlock("div", {
1489
+ class: normalizeClass(badgeClasses.value),
1490
+ "aria-label": ariaLabel.value,
1491
+ role: "status"
1492
+ }, toDisplayString(displayText.value), 11, _hoisted_1$4);
1493
+ };
1494
+ }
1495
+ });
1496
+ var SupportTicketPriorityBadge_default = _sfc_main$4;
1497
+
1498
+ //#endregion
1499
+ //#region src/slices/support_ticket/shared/SupportTicketTypeBadge.vue
1500
+ const _hoisted_1$3 = ["aria-label"];
1501
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1502
+ __name: "SupportTicketTypeBadge",
1503
+ props: {
1504
+ type: {},
1505
+ size: { default: "md" },
1506
+ variant: { default: "default" }
1507
+ },
1508
+ setup(__props) {
1509
+ /**
1510
+ * SupportTicketTypeBadge - A reusable Vue component for displaying support ticket type
1511
+ * as color-coded badges with consistent DaisyUI styling and accessibility features.
1512
+ *
1513
+ * @example
1514
+ * <SupportTicketTypeBadge :type="'BUG'" size="md" />
1515
+ * <SupportTicketTypeBadge :type="'FEATURE_REQUEST'" size="sm" variant="outline" />
1516
+ */
1517
+ const props = __props;
1518
+ /**
1519
+ * Configuration for each type badge
1520
+ */
1521
+ const typeConfig = {
1522
+ BUG: {
1523
+ color: "badge-neutral",
1524
+ text: "Bug",
1525
+ ariaLabel: "Type: Bug report requiring fix"
1526
+ },
1527
+ FEATURE_REQUEST: {
1528
+ color: "badge-neutral",
1529
+ text: "Feature",
1530
+ ariaLabel: "Type: New feature request"
1531
+ },
1532
+ IMPROVEMENT: {
1533
+ color: "badge-neutral",
1534
+ text: "Improvement",
1535
+ ariaLabel: "Type: Enhancement to existing feature"
1536
+ },
1537
+ OPERATIONAL: {
1538
+ color: "badge-neutral",
1539
+ text: "Ops",
1540
+ ariaLabel: "Type: Operational/admin work"
1541
+ }
1542
+ };
1543
+ const getTypeConfig = (type) => {
1544
+ const config$1 = typeConfig[type];
1545
+ if (!config$1) return {
1546
+ color: "badge-neutral",
1547
+ text: type || "Unknown",
1548
+ ariaLabel: `Type: ${type || "Unknown type"}`
1549
+ };
1550
+ return config$1;
1551
+ };
1552
+ const config = computed(() => getTypeConfig(props.type));
1553
+ const badgeClasses = computed(() => {
1554
+ const baseClasses = ["badge", "text-xs"];
1555
+ baseClasses.push(config.value.color);
1556
+ if (props.size === "sm") baseClasses.push("badge-sm", "text-xs");
1557
+ else if (props.size === "lg") baseClasses.push("badge-lg", "text-sm");
1558
+ else baseClasses.push("text-xs", "sm:text-sm");
1559
+ if (props.variant === "outline") baseClasses.push("badge-outline");
1560
+ return baseClasses.join(" ");
1561
+ });
1562
+ const displayText = computed(() => config.value.text);
1563
+ const ariaLabel = computed(() => config.value.ariaLabel);
1564
+ return (_ctx, _cache) => {
1565
+ return openBlock(), createElementBlock("div", {
1566
+ class: normalizeClass(badgeClasses.value),
1567
+ "aria-label": ariaLabel.value,
1568
+ role: "status"
1569
+ }, toDisplayString(displayText.value), 11, _hoisted_1$3);
1570
+ };
1571
+ }
1572
+ });
1573
+ var SupportTicketTypeBadge_default = _sfc_main$3;
1574
1574
 
1575
1575
  //#endregion
1576
1576
  //#region src/slices/support_ticket/shared/SupportTicketApprovalBadge.vue
@@ -1655,18 +1655,24 @@ var SupportTicketApprovalBadge_default = _sfc_main$2;
1655
1655
  * Takes an ISO date string and returns:
1656
1656
  * - formatted: "Jan 15, 2025"
1657
1657
  * - relative: "3 days ago" / "2 hours ago" / "just now"
1658
+ * - localTime: "2:30 PM" (user's local time)
1658
1659
  */
1659
1660
  function formatTicketDate(isoString) {
1660
1661
  const date = new Date(isoString);
1661
1662
  if (isNaN(date.getTime())) return {
1662
1663
  formatted: isoString,
1663
- relative: ""
1664
+ relative: "",
1665
+ localTime: ""
1664
1666
  };
1665
1667
  const formatted = date.toLocaleDateString(void 0, {
1666
1668
  year: "numeric",
1667
1669
  month: "short",
1668
1670
  day: "numeric"
1669
1671
  });
1672
+ const localTime = date.toLocaleTimeString(void 0, {
1673
+ hour: "numeric",
1674
+ minute: "2-digit"
1675
+ });
1670
1676
  const diffMs = (/* @__PURE__ */ new Date()).getTime() - date.getTime();
1671
1677
  const diffSec = Math.floor(diffMs / 1e3);
1672
1678
  const diffMin = Math.floor(diffSec / 60);
@@ -1697,7 +1703,8 @@ function formatTicketDate(isoString) {
1697
1703
  }
1698
1704
  return {
1699
1705
  formatted,
1700
- relative
1706
+ relative,
1707
+ localTime
1701
1708
  };
1702
1709
  }
1703
1710
 
@@ -1757,28 +1764,76 @@ var TimelineItem_default = _sfc_main$1;
1757
1764
  //#endregion
1758
1765
  //#region src/slices/support_ticket/shared/TimelineSystemEvent.vue
1759
1766
  const _hoisted_1 = { class: "py-2 flex items-start gap-2 text-sm" };
1760
- const _hoisted_2 = { class: "flex-1 min-w-0" };
1761
- const _hoisted_3 = { class: "font-medium text-base-content/70" };
1762
- const _hoisted_4 = { class: "text-base-content/50 ml-1" };
1763
- const _hoisted_5 = { class: "line-through text-base-content/40 ml-1" };
1764
- const _hoisted_6 = { class: "ml-1" };
1765
- const _hoisted_7 = { class: "text-base-content/30 text-xs" };
1767
+ const _hoisted_2 = { class: "flex-1 min-w-0 space-y-0.5" };
1768
+ const _hoisted_3 = { class: "flex flex-wrap items-baseline gap-x-2 gap-y-1" };
1769
+ const _hoisted_4 = { class: "text-base-content/60 font-medium" };
1770
+ const _hoisted_5 = { class: "font-semibold text-base-content" };
1771
+ const _hoisted_6 = { class: "badge badge-sm badge-outline border-base-content/20 text-base-content/80 font-normal px-1.5 py-0 capitalize" };
1772
+ const _hoisted_7 = { class: "text-base-content/70" };
1773
+ const _hoisted_8 = { class: "text-base-content/70" };
1774
+ const _hoisted_9 = { class: "line-through text-base-content/50" };
1775
+ const _hoisted_10 = {
1776
+ key: 0,
1777
+ class: "mt-1.5 ml-6 list-disc list-inside text-base-content/70 text-sm space-y-0.5"
1778
+ };
1779
+ const _hoisted_11 = { class: "italic text-base-content/60" };
1780
+ const _hoisted_12 = { class: "line-through text-base-content/50 ml-1" };
1781
+ const _hoisted_13 = {
1782
+ key: 1,
1783
+ class: "ml-1"
1784
+ };
1785
+ const _hoisted_14 = { class: "text-base-content/40 text-xs" };
1786
+ const _hoisted_15 = ["title"];
1787
+ const RECENT_THRESHOLD_HOURS = 18;
1766
1788
  const _sfc_main = /* @__PURE__ */ defineComponent({
1767
1789
  __name: "TimelineSystemEvent",
1768
1790
  props: {
1769
1791
  author: {},
1770
1792
  message: {},
1771
1793
  timestamp: {},
1794
+ action: {},
1795
+ type: {},
1796
+ details: {},
1772
1797
  oldValue: {},
1773
- newValue: {}
1798
+ newValue: {},
1799
+ changes: {}
1774
1800
  },
1775
1801
  setup(__props) {
1776
1802
  const props = __props;
1777
- const relativeTime = computed(() => {
1778
- return props.timestamp ? formatTicketDate(props.timestamp).relative : "";
1803
+ const showFull = ref(false);
1804
+ const displayAction = computed(() => props.action ?? props.message);
1805
+ const displayDetails = computed(() => {
1806
+ if (props.details) return props.details;
1807
+ if (props.oldValue != null && props.newValue != null) return `${props.oldValue} → ${props.newValue}`;
1808
+ return props.newValue ?? null;
1809
+ });
1810
+ const hasChangeDetails = computed(() => props.oldValue != null && props.newValue != null || props.details != null || props.newValue != null);
1811
+ const detailsPrefix = computed(() => {
1812
+ if (!props.details || props.oldValue == null && props.newValue == null) return null;
1813
+ if (props.details.includes(" · ")) {
1814
+ const parts = props.details.split(" · ");
1815
+ return parts.length > 1 ? parts[0] : null;
1816
+ }
1817
+ return props.details;
1818
+ });
1819
+ /** Use relative time when within ~18 hours, otherwise full date and time */
1820
+ const shortTime = computed(() => {
1821
+ if (!props.timestamp) return "";
1822
+ const { relative, formatted, localTime } = formatTicketDate(props.timestamp);
1823
+ const dateTime = [formatted, localTime].filter(Boolean).join(", ");
1824
+ if (!relative && !dateTime) return "";
1825
+ const date = new Date(props.timestamp);
1826
+ const hoursAgo = (Date.now() - date.getTime()) / (1e3 * 60 * 60);
1827
+ return hoursAgo >= 0 && hoursAgo < RECENT_THRESHOLD_HOURS ? relative : dateTime;
1828
+ });
1829
+ const fullDateTime = computed(() => {
1830
+ if (!props.timestamp) return "";
1831
+ const { formatted, localTime } = formatTicketDate(props.timestamp);
1832
+ return [formatted, localTime].filter(Boolean).join(", ");
1779
1833
  });
1834
+ const displayTime = computed(() => showFull.value ? fullDateTime.value : shortTime.value);
1780
1835
  return (_ctx, _cache) => {
1781
- return openBlock(), createElementBlock("div", _hoisted_1, [_cache[1] || (_cache[1] = createElementVNode("svg", {
1836
+ return openBlock(), createElementBlock("div", _hoisted_1, [_cache[7] || (_cache[7] = createElementVNode("svg", {
1782
1837
  xmlns: "http://www.w3.org/2000/svg",
1783
1838
  fill: "none",
1784
1839
  viewBox: "0 0 24 24",
@@ -1795,14 +1850,42 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1795
1850
  "stroke-linejoin": "round",
1796
1851
  d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
1797
1852
  })], -1)), createElementVNode("div", _hoisted_2, [
1798
- createElementVNode("span", _hoisted_3, toDisplayString(__props.author), 1),
1799
- createElementVNode("span", _hoisted_4, [__props.oldValue && __props.newValue ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1800
- createTextVNode(toDisplayString(__props.message) + " ", 1),
1801
- createElementVNode("span", _hoisted_5, toDisplayString(__props.oldValue), 1),
1802
- _cache[0] || (_cache[0] = createElementVNode("span", { class: "mx-1" }, "→", -1)),
1803
- createElementVNode("span", null, toDisplayString(__props.newValue), 1)
1804
- ], 64)) : __props.newValue ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(__props.message) + " ", 1), createElementVNode("span", _hoisted_6, toDisplayString(__props.newValue), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(toDisplayString(__props.message), 1)], 64))]),
1805
- createElementVNode("span", _hoisted_7, " · " + toDisplayString(relativeTime.value), 1)
1853
+ createElementVNode("div", _hoisted_3, [
1854
+ createElementVNode("span", _hoisted_4, toDisplayString(__props.author), 1),
1855
+ _cache[5] || (_cache[5] = createElementVNode("span", {
1856
+ class: "text-base-content/40 text-xs",
1857
+ "aria-hidden": "true"
1858
+ }, "·", -1)),
1859
+ createElementVNode("span", _hoisted_5, toDisplayString(displayAction.value), 1),
1860
+ __props.type ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [_cache[1] || (_cache[1] = createElementVNode("span", {
1861
+ class: "text-base-content/40 text-xs",
1862
+ "aria-hidden": "true"
1863
+ }, "·", -1)), createElementVNode("span", _hoisted_6, toDisplayString(__props.type), 1)], 64)) : createCommentVNode("v-if", true),
1864
+ __props.changes && __props.changes.length > 1 ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [__props.details ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [_cache[2] || (_cache[2] = createElementVNode("span", {
1865
+ class: "text-base-content/40 text-xs",
1866
+ "aria-hidden": "true"
1867
+ }, "·", -1)), createElementVNode("span", _hoisted_7, toDisplayString(__props.details), 1)], 64)) : createCommentVNode("v-if", true)], 64)) : hasChangeDetails.value ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [_cache[4] || (_cache[4] = createElementVNode("span", {
1868
+ class: "text-base-content/40 text-xs",
1869
+ "aria-hidden": "true"
1870
+ }, "·", -1)), createElementVNode("span", _hoisted_8, [detailsPrefix.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(detailsPrefix.value), 1)], 64)) : createCommentVNode("v-if", true), __props.oldValue != null && __props.newValue != null ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1871
+ createElementVNode("span", _hoisted_9, toDisplayString(__props.oldValue), 1),
1872
+ _cache[3] || (_cache[3] = createElementVNode("span", { class: "mx-1 text-base-content/40" }, "→", -1)),
1873
+ createElementVNode("span", null, toDisplayString(__props.newValue), 1)
1874
+ ], 64)) : displayDetails.value ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(toDisplayString(displayDetails.value), 1)], 64)) : createCommentVNode("v-if", true)])], 64)) : createCommentVNode("v-if", true)
1875
+ ]),
1876
+ __props.changes && __props.changes.length > 1 ? (openBlock(), createElementBlock("ul", _hoisted_10, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.changes, (change, i) => {
1877
+ return openBlock(), createElementBlock("li", { key: i }, [createElementVNode("span", _hoisted_11, toDisplayString(change.action) + ":", 1), change.oldValue != null && change.newValue != null ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1878
+ createElementVNode("span", _hoisted_12, toDisplayString(change.oldValue), 1),
1879
+ _cache[6] || (_cache[6] = createElementVNode("span", { class: "mx-1 text-base-content/40" }, "→", -1)),
1880
+ createElementVNode("span", null, toDisplayString(change.newValue), 1)
1881
+ ], 64)) : change.newValue != null ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(change.newValue), 1)) : createCommentVNode("v-if", true)]);
1882
+ }), 128))])) : createCommentVNode("v-if", true),
1883
+ createElementVNode("div", _hoisted_14, [createElementVNode("button", {
1884
+ type: "button",
1885
+ class: "cursor-pointer hover:text-base-content/60 hover:underline focus:outline-none focus:underline",
1886
+ title: fullDateTime.value,
1887
+ onClick: _cache[0] || (_cache[0] = ($event) => showFull.value = !showFull.value)
1888
+ }, toDisplayString(displayTime.value), 9, _hoisted_15)])
1806
1889
  ])]);
1807
1890
  };
1808
1891
  }
@@ -1810,5 +1893,5 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1810
1893
  var TimelineSystemEvent_default = _sfc_main;
1811
1894
 
1812
1895
  //#endregion
1813
- export { InlineAttachments_default as a, SupportTicketTypeBadge_default as c, ConfirmDialog_default as d, SupportTicketApprovalBadge_default as i, SupportTicketPriorityBadge_default as l, TimelineItem_default as n, formatCustomerCreditValue as o, formatTicketDate as r, formatStaffCreditValue as s, TimelineSystemEvent_default as t, ImageModal_default as u };
1814
- //# sourceMappingURL=TimelineSystemEvent-B69B3eeL.js.map
1896
+ export { SupportTicketTypeBadge_default as a, formatCustomerCreditValue as c, ConfirmDialog_default as d, SupportTicketApprovalBadge_default as i, formatStaffCreditValue as l, TimelineItem_default as n, SupportTicketPriorityBadge_default as o, formatTicketDate as r, InlineAttachments_default as s, TimelineSystemEvent_default as t, ImageModal_default as u };
1897
+ //# sourceMappingURL=TimelineSystemEvent-D58zN850.js.map