@phonghq/go-chat 1.0.73 → 1.0.75

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 (46) hide show
  1. package/dist/assets/icons/chat/IconCalendar.vue.d.ts +14 -0
  2. package/dist/assets/icons/chat/IconCalendar.vue.js +42 -0
  3. package/dist/assets/icons/chat/IconCheck.vue.d.ts +2 -0
  4. package/dist/assets/icons/chat/IconCheck.vue.js +22 -0
  5. package/dist/assets/icons/chat/IconCopy.vue.d.ts +2 -0
  6. package/dist/assets/icons/chat/IconCopy.vue.js +22 -0
  7. package/dist/assets/icons/chat/IconInfo.vue.d.ts +2 -0
  8. package/dist/assets/icons/chat/IconInfo.vue.js +20 -0
  9. package/dist/assets/icons/chat/IconLink.vue.d.ts +14 -0
  10. package/dist/assets/icons/chat/IconLink.vue.js +42 -0
  11. package/dist/assets/icons/chat/IconMenuDot.vue.js +2 -2
  12. package/dist/assets/icons/chat/IconResend.vue.d.ts +2 -0
  13. package/dist/assets/icons/chat/IconResend.vue.js +48 -0
  14. package/dist/chat/App.vue.js +58 -46
  15. package/dist/chat/page/customer-detail/CustomerDetail.vue.js +7 -6
  16. package/dist/chat/page/home/ChatMessage.vue.d.ts +2 -0
  17. package/dist/chat/page/home/ChatMessage.vue.js +12 -6
  18. package/dist/chat/page/home/ChatMessageItem.vue.d.ts +2 -0
  19. package/dist/chat/page/home/ChatMessageItem.vue.js +145 -18
  20. package/dist/chat/page/home/Home.vue.d.ts +4 -1
  21. package/dist/chat/page/home/Home.vue.js +104 -58
  22. package/dist/chat/page/home/InputChat.vue.d.ts +3 -0
  23. package/dist/chat/page/home/InputChat.vue.js +6 -6
  24. package/dist/chat/page/home/header/DropdownInfo.vue.d.ts +6 -0
  25. package/dist/chat/page/home/header/DropdownInfo.vue.js +137 -0
  26. package/dist/chat/page/home/{HomeHeader.vue.d.ts → header/HomeHeader.vue.d.ts} +6 -2
  27. package/dist/chat/page/home/{HomeHeader.vue.js → header/HomeHeader.vue.js} +147 -86
  28. package/dist/components/chat/ScrollEvent/ScrollEvent.vue.js +4 -2
  29. package/dist/components/chat/common/popover/PopoverBase.vue.d.ts +2 -0
  30. package/dist/components/chat/common/popover/PopoverBase.vue.js +5 -1
  31. package/dist/components/ui/dropdown-menu/DropdownMenuSeparator.vue.js +2 -2
  32. package/dist/components/ui/popover/PopoverContent.vue.js +6 -2
  33. package/dist/constant/datetime.d.ts +1 -0
  34. package/dist/constant/datetime.js +2 -1
  35. package/dist/go-chat.es.js +11569 -11266
  36. package/dist/go-chat.umd.js +20 -20
  37. package/dist/plugins/axios.js +2 -2
  38. package/dist/style.css +1 -1
  39. package/dist/types/chat/global.d.ts +2 -1
  40. package/dist/utils/chat/chat-router.d.ts +2 -0
  41. package/dist/utils/chat/chat-router.js +9 -3
  42. package/dist/utils/chat/store/user.d.ts +1 -1
  43. package/dist/utils/chat/store/user.js +2 -1
  44. package/dist/utils/dayjs-helper.d.ts +3 -0
  45. package/dist/utils/dayjs-helper.js +8 -0
  46. package/package.json +1 -1
@@ -0,0 +1,137 @@
1
+ /// <reference types="C:/phonghq/go-chat-v2/node_modules/.vue-global-types/vue_3.5_0.d.ts" />
2
+ import { PAGE } from '../../../../constant/general';
3
+ import { userHistory } from '../../../../utils/chat/store/user';
4
+ import { computed, ref } from 'vue';
5
+ import IconMenuDot from '../../../../assets/icons/chat/IconMenuDot.vue';
6
+ import DropdownBase from '../../../../components/common/dropdown/DropdownBase.vue';
7
+ import IconInfo from '../../../../assets/icons/chat/IconInfo.vue';
8
+ import IconCalendar from '../../../../assets/icons/chat/IconCalendar.vue';
9
+ import IconCheck from '../../../../assets/icons/chat/IconCheck.vue';
10
+ const props = withDefaults(defineProps(), {});
11
+ const customerDropContent = computed(() => {
12
+ return [
13
+ {
14
+ icon: IconInfo,
15
+ title: 'Profile',
16
+ click: goToViewUser,
17
+ disabled: false
18
+ },
19
+ {
20
+ icon: IconCalendar,
21
+ title: 'View Appointment',
22
+ click: goToViewAppointment,
23
+ disabled: !userHistory.value?.appointment?.length
24
+ },
25
+ {
26
+ icon: IconCheck,
27
+ title: 'View Checkin',
28
+ click: goToViewView,
29
+ disabled: !userHistory.value?.visit_count
30
+ }
31
+ ];
32
+ });
33
+ const selectOpen = ref(false);
34
+ const goToViewUser = () => {
35
+ selectOpen.value = false;
36
+ props.goToPage(PAGE.CUSTOMER_DETAIL);
37
+ };
38
+ const goToViewAppointment = () => {
39
+ selectOpen.value = false;
40
+ props.goToPage(PAGE.CUSTOMER_APPOINTMENT);
41
+ };
42
+ const goToViewView = () => {
43
+ selectOpen.value = false;
44
+ props.goToPage(PAGE.CUSTOMER_CHECK_IN);
45
+ };
46
+ debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
47
+ const __VLS_defaults = {};
48
+ const __VLS_ctx = {
49
+ ...{},
50
+ ...{},
51
+ ...{},
52
+ ...{},
53
+ };
54
+ let __VLS_elements;
55
+ let __VLS_components;
56
+ let __VLS_directives;
57
+ /** @type {[typeof DropdownBase, typeof DropdownBase, ]} */ ;
58
+ // @ts-ignore
59
+ const __VLS_0 = __VLS_asFunctionalComponent(DropdownBase, new DropdownBase({
60
+ side: "bottom",
61
+ align: "end",
62
+ open: (__VLS_ctx.selectOpen),
63
+ }));
64
+ const __VLS_1 = __VLS_0({
65
+ side: "bottom",
66
+ align: "end",
67
+ open: (__VLS_ctx.selectOpen),
68
+ }, ...__VLS_functionalComponentArgsRest(__VLS_0));
69
+ var __VLS_3 = {};
70
+ const { default: __VLS_4 } = __VLS_2.slots;
71
+ // @ts-ignore
72
+ [selectOpen,];
73
+ {
74
+ const { default: __VLS_5 } = __VLS_2.slots;
75
+ __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
76
+ ...{ class: "shrink-0 flex-center w-4" },
77
+ });
78
+ /** @type {[typeof IconMenuDot, ]} */ ;
79
+ // @ts-ignore
80
+ const __VLS_6 = __VLS_asFunctionalComponent(IconMenuDot, new IconMenuDot({
81
+ ...{ class: "scale-[1.2]" },
82
+ }));
83
+ const __VLS_7 = __VLS_6({
84
+ ...{ class: "scale-[1.2]" },
85
+ }, ...__VLS_functionalComponentArgsRest(__VLS_6));
86
+ }
87
+ {
88
+ const { content: __VLS_10 } = __VLS_2.slots;
89
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
90
+ ...{ class: "text-chat-text" },
91
+ });
92
+ for (const [item, i] of __VLS_getVForSourceType((__VLS_ctx.customerDropContent))) {
93
+ // @ts-ignore
94
+ [customerDropContent,];
95
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
96
+ ...{ onClick: (...[$event]) => {
97
+ item.click?.();
98
+ } },
99
+ ...{ class: "flex items-center gap-2 p-2 hover:bg-chat-primary hover:text-white duration-200 cursor-pointer rounded-lg" },
100
+ key: (i),
101
+ ...{ class: ({ 'opacity-[0.3] pointer-events-none': item.disabled }) },
102
+ });
103
+ const __VLS_11 = ((item.icon));
104
+ // @ts-ignore
105
+ const __VLS_12 = __VLS_asFunctionalComponent(__VLS_11, new __VLS_11({
106
+ ...{ class: "w-5 h-5" },
107
+ }));
108
+ const __VLS_13 = __VLS_12({
109
+ ...{ class: "w-5 h-5" },
110
+ }, ...__VLS_functionalComponentArgsRest(__VLS_12));
111
+ (item.title);
112
+ }
113
+ }
114
+ var __VLS_2;
115
+ /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
116
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
117
+ /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
118
+ /** @type {__VLS_StyleScopedClasses['scale-[1.2]']} */ ;
119
+ /** @type {__VLS_StyleScopedClasses['text-chat-text']} */ ;
120
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
121
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
122
+ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
123
+ /** @type {__VLS_StyleScopedClasses['p-2']} */ ;
124
+ /** @type {__VLS_StyleScopedClasses['hover:bg-chat-primary']} */ ;
125
+ /** @type {__VLS_StyleScopedClasses['hover:text-white']} */ ;
126
+ /** @type {__VLS_StyleScopedClasses['duration-200']} */ ;
127
+ /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
128
+ /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
129
+ /** @type {__VLS_StyleScopedClasses['opacity-[0.3]']} */ ;
130
+ /** @type {__VLS_StyleScopedClasses['pointer-events-none']} */ ;
131
+ /** @type {__VLS_StyleScopedClasses['w-5']} */ ;
132
+ /** @type {__VLS_StyleScopedClasses['h-5']} */ ;
133
+ const __VLS_export = (await import('vue')).defineComponent({
134
+ __typeProps: {},
135
+ props: {},
136
+ });
137
+ export default {};
@@ -1,14 +1,18 @@
1
- import type { IResUser } from '../../../types/message';
2
- import type { PAGE_RESPONSIVE } from '../../../types/chat/global';
1
+ import type { IResUser } from '../../../../types/message';
2
+ import type { PAGE_RESPONSIVE, PARENT_PAGE_NAME } from '../../../../types/chat/global';
3
3
  type Props = {
4
4
  data: IResUser | null;
5
5
  responsive: PAGE_RESPONSIVE | null;
6
+ parentPageName: PARENT_PAGE_NAME;
7
+ customerLoading: boolean;
6
8
  };
7
9
  declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
10
  call: () => any;
9
11
  back: () => any;
12
+ viewAppointment: (id: any) => any;
10
13
  }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
11
14
  onCall?: (() => any) | undefined;
12
15
  onBack?: (() => any) | undefined;
16
+ onViewAppointment?: ((id: any) => any) | undefined;
13
17
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
18
  export default _default;
@@ -1,42 +1,52 @@
1
1
  /// <reference types="C:/phonghq/go-chat-v2/node_modules/.vue-global-types/vue_3.5_0.d.ts" />
2
- import IconPhone from '../../../assets/icons/global/IconPhone.vue';
3
- import { PAGE } from '../../../constant/general';
4
- import Avatar from '../../../components/chat/customer/Avatar.vue';
5
- import { routerPush } from '../../../utils/chat/chat-router';
6
- import { user } from '../../../utils/chat/store/user';
7
- import { dataProfile } from '../../../utils/chat/store/auth';
8
- import { digibotId } from '../../../composable/useDigibot';
9
- import IconArrowLeft from '../../../assets/icons/global/IconArrowLeft.vue';
10
- import { phoneNumberFormat } from '../../../utils/string-helper';
11
- import IconSms from '../../../assets/icons/global/IconSms.vue';
12
- import { activePlivoMode } from '../../../utils/chat/store/message';
13
- import { ref } from 'vue';
14
- import ButtonBase from '../../../components/common/button/ButtonBase.vue';
15
- import IconMenuDot from '../../../assets/icons/chat/IconMenuDot.vue';
16
- import DropdownBase from '../../../components/common/dropdown/DropdownBase.vue';
2
+ import IconPhone from '../../../../assets/icons/global/IconPhone.vue';
3
+ import Avatar from '../../../../components/chat/customer/Avatar.vue';
4
+ import { routerPush } from '../../../../utils/chat/chat-router';
5
+ import { user, userHistory } from '../../../../utils/chat/store/user';
6
+ import { dataProfile } from '../../../../utils/chat/store/auth';
7
+ import { digibotId } from '../../../../composable/useDigibot';
8
+ import IconArrowLeft from '../../../../assets/icons/global/IconArrowLeft.vue';
9
+ import { phoneNumberFormat } from '../../../../utils/string-helper';
10
+ import IconSms from '../../../../assets/icons/global/IconSms.vue';
11
+ import { activePlivoMode } from '../../../../utils/chat/store/message';
12
+ import { computed, ref } from 'vue';
13
+ import ButtonBase from '../../../../components/common/button/ButtonBase.vue';
14
+ import IconCalendar from '../../../../assets/icons/chat/IconCalendar.vue';
15
+ import IconLink from '../../../../assets/icons/chat/IconLink.vue';
16
+ import { getTimeLocal } from '../../../../utils/dayjs-helper';
17
+ import { DATE_FORMATS } from '../../../../constant/datetime';
18
+ import BaseSpin from '../../../../components/chat/common/spin/BaseSpin.vue';
19
+ import DropdownInfo from '../../../../chat/page/home/header/DropdownInfo.vue';
20
+ import { PAGE } from '../../../../constant/general';
17
21
  const props = withDefaults(defineProps(), {});
18
22
  const emit = defineEmits();
23
+ const tabContent = computed(() => {
24
+ let result = [];
25
+ if (userHistory.value?.appointment?.length && props.parentPageName == 'booking-admin') {
26
+ const last_item = userHistory.value?.appointment[userHistory.value?.appointment?.length - 1];
27
+ result.push({
28
+ id: last_item.id,
29
+ icon: IconCalendar,
30
+ label: 'Last Appointment:',
31
+ time: getTimeLocal(last_item?.start_time)?.format(DATE_FORMATS['DATE_FORMAT_MEDIUM']) ?? '',
32
+ click: () => {
33
+ emit('viewAppointment', last_item.id);
34
+ }
35
+ });
36
+ }
37
+ return result;
38
+ });
19
39
  const activePlivoSms = ref(dataProfile.value?.is_sms_active == 1);
20
40
  const loading = ref(false);
21
- const selectOpen = ref(false);
22
41
  const goToViewUser = () => {
23
- selectOpen.value = false;
42
+ goToPage(PAGE.CUSTOMER_DETAIL);
43
+ };
44
+ const goToPage = (page) => {
24
45
  if (props.data?.id.toString() == digibotId.toString())
25
46
  return;
26
47
  if (dataProfile.value?.user_type == 'tenant') {
27
48
  user.value = props.data;
28
- routerPush(PAGE.CUSTOMER_DETAIL);
29
- }
30
- };
31
- const customer_select_option = [
32
- { label: 'Profile', value: 0 },
33
- { label: 'Later Appointment', value: 1 }
34
- ];
35
- const handleSelectChange = (value) => {
36
- if (value == 0) {
37
- goToViewUser();
38
- }
39
- else {
49
+ routerPush(page);
40
50
  }
41
51
  };
42
52
  const handleActivePlivoSmsChange = async (is_active) => {
@@ -66,15 +76,16 @@ const __VLS_ctx = {
66
76
  let __VLS_elements;
67
77
  let __VLS_components;
68
78
  let __VLS_directives;
79
+ /** @type {__VLS_StyleScopedClasses['loading-container']} */ ;
69
80
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
70
- ...{ class: "w-full px-8 py-4 h-[96px] layout-shadow border-b border-chat-gray-5 z-10" },
81
+ ...{ class: "w-full layout-shadow border-b border-chat-gray-5 z-10" },
82
+ });
83
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
84
+ ...{ class: "w-full flex items-center gap-2 overflow-hidden h-[96px] px-8 py-4" },
71
85
  ...{ class: ({ '!px-4': __VLS_ctx.responsive == 'mobile' }) },
72
86
  });
73
87
  // @ts-ignore
74
88
  [responsive,];
75
- __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
76
- ...{ class: "w-full flex items-center gap-2 h-full overflow-hidden" },
77
- });
78
89
  if (__VLS_ctx.responsive == 'mobile') {
79
90
  // @ts-ignore
80
91
  [responsive,];
@@ -128,7 +139,7 @@ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
128
139
  });
129
140
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
130
141
  ...{ onClick: (__VLS_ctx.goToViewUser) },
131
- ...{ class: "grow overflow-hidden" },
142
+ ...{ class: "grow overflow-hidden " },
132
143
  ...{ class: ({ 'cursor-pointer': __VLS_ctx.dataProfile?.user_type == 'tenant' }) },
133
144
  });
134
145
  // @ts-ignore
@@ -207,7 +218,7 @@ if (__VLS_ctx.data?.id &&
207
218
  // @ts-ignore
208
219
  [emit,];
209
220
  } },
210
- ...{ class: "shrink-0 flex-center text-[#0051E6] bg-chat-haze-200 w-9 h-9 rounded-lg" },
221
+ ...{ class: "shrink-0 flex-center text-chat-primary-dark bg-[#e8f0fe] w-9 h-9 rounded-lg" },
211
222
  });
212
223
  /** @type {[typeof IconPhone, ]} */ ;
213
224
  // @ts-ignore
@@ -219,70 +230,98 @@ if (__VLS_ctx.data?.id &&
219
230
  __VLS_ctx.dataProfile?.user_type == 'tenant') {
220
231
  // @ts-ignore
221
232
  [dataProfile, data, data, digibotId,];
222
- /** @type {[typeof DropdownBase, typeof DropdownBase, ]} */ ;
233
+ /** @type {[typeof DropdownInfo, ]} */ ;
223
234
  // @ts-ignore
224
- const __VLS_26 = __VLS_asFunctionalComponent(DropdownBase, new DropdownBase({
225
- side: "bottom",
226
- align: "end",
227
- open: (__VLS_ctx.selectOpen),
235
+ const __VLS_26 = __VLS_asFunctionalComponent(DropdownInfo, new DropdownInfo({
236
+ goToPage: (__VLS_ctx.goToPage),
228
237
  }));
229
238
  const __VLS_27 = __VLS_26({
230
- side: "bottom",
231
- align: "end",
232
- open: (__VLS_ctx.selectOpen),
239
+ goToPage: (__VLS_ctx.goToPage),
233
240
  }, ...__VLS_functionalComponentArgsRest(__VLS_26));
234
- const { default: __VLS_29 } = __VLS_28.slots;
235
241
  // @ts-ignore
236
- [selectOpen,];
237
- {
238
- const { default: __VLS_30 } = __VLS_28.slots;
242
+ [goToPage,];
243
+ }
244
+ if (__VLS_ctx.parentPageName) {
245
+ // @ts-ignore
246
+ [parentPageName,];
247
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
248
+ ...{ class: "flex items-center border-chat-gray-5 loading-container h-12" },
249
+ ...{ class: ({ 'show p-4 border-t': __VLS_ctx.customerLoading || __VLS_ctx.tabContent.length }) },
250
+ });
251
+ // @ts-ignore
252
+ [customerLoading, tabContent,];
253
+ /** @type {[typeof BaseSpin, ]} */ ;
254
+ // @ts-ignore
255
+ const __VLS_30 = __VLS_asFunctionalComponent(BaseSpin, new BaseSpin({
256
+ size: (16),
257
+ border: (1),
258
+ }));
259
+ const __VLS_31 = __VLS_30({
260
+ size: (16),
261
+ border: (1),
262
+ }, ...__VLS_functionalComponentArgsRest(__VLS_30));
263
+ __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.customerLoading) }, null, null);
264
+ // @ts-ignore
265
+ [customerLoading,];
266
+ for (const [tab, i] of __VLS_getVForSourceType((__VLS_ctx.tabContent))) {
267
+ // @ts-ignore
268
+ [tabContent,];
239
269
  __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
240
- ...{ class: "shrink-0 flex-center w-4" },
270
+ ...{ onClick: (...[$event]) => {
271
+ if (!(__VLS_ctx.parentPageName))
272
+ return;
273
+ tab.click?.();
274
+ } },
275
+ key: (i),
276
+ ...{ class: "flex items-center h-8 gap-1.5 px-2.5 py-1 bg-[#e8f0fe] rounded-lg cursor-pointer transition-all duration-200 border-chat-primary text-sm text-chat-primary-dark" },
241
277
  });
242
- /** @type {[typeof IconMenuDot, ]} */ ;
278
+ const __VLS_34 = ((tab.icon));
243
279
  // @ts-ignore
244
- const __VLS_31 = __VLS_asFunctionalComponent(IconMenuDot, new IconMenuDot({
245
- ...{ class: "scale-[1.2]" },
280
+ const __VLS_35 = __VLS_asFunctionalComponent(__VLS_34, new __VLS_34({
281
+ ...{ class: "w-4 h-4" },
282
+ weight: "2.5",
246
283
  }));
247
- const __VLS_32 = __VLS_31({
248
- ...{ class: "scale-[1.2]" },
249
- }, ...__VLS_functionalComponentArgsRest(__VLS_31));
250
- }
251
- {
252
- const { content: __VLS_35 } = __VLS_28.slots;
253
- __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
254
- ...{ class: "text-base font-medium" },
284
+ const __VLS_36 = __VLS_35({
285
+ ...{ class: "w-4 h-4" },
286
+ weight: "2.5",
287
+ }, ...__VLS_functionalComponentArgsRest(__VLS_35));
288
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({
289
+ ...{ class: "leading-xs" },
290
+ });
291
+ (tab.label);
292
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({
293
+ ...{ class: "font-semibold" },
255
294
  });
295
+ (tab.time);
256
296
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
257
- ...{ onClick: (...[$event]) => {
258
- if (!(__VLS_ctx.data?.id &&
259
- __VLS_ctx.data?.id.toString() != __VLS_ctx.digibotId.toString() &&
260
- __VLS_ctx.dataProfile?.user_type == 'tenant'))
261
- return;
262
- __VLS_ctx.goToViewUser();
263
- // @ts-ignore
264
- [goToViewUser,];
265
- } },
266
- ...{ class: "p-2 hover:bg-chat-haze-200 duration-200 cursor-pointer rounded-lg" },
297
+ ...{ class: "w-6 h-6 bg-white flex-center rounded-full" },
267
298
  });
299
+ /** @type {[typeof IconLink, ]} */ ;
300
+ // @ts-ignore
301
+ const __VLS_39 = __VLS_asFunctionalComponent(IconLink, new IconLink({
302
+ ...{ class: "w-4 h-4" },
303
+ weight: "2.5",
304
+ }));
305
+ const __VLS_40 = __VLS_39({
306
+ ...{ class: "w-4 h-4" },
307
+ weight: "2.5",
308
+ }, ...__VLS_functionalComponentArgsRest(__VLS_39));
268
309
  }
269
- var __VLS_28;
270
310
  }
271
311
  /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
272
- /** @type {__VLS_StyleScopedClasses['px-8']} */ ;
273
- /** @type {__VLS_StyleScopedClasses['py-4']} */ ;
274
- /** @type {__VLS_StyleScopedClasses['h-[96px]']} */ ;
275
312
  /** @type {__VLS_StyleScopedClasses['layout-shadow']} */ ;
276
313
  /** @type {__VLS_StyleScopedClasses['border-b']} */ ;
277
314
  /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
278
315
  /** @type {__VLS_StyleScopedClasses['z-10']} */ ;
279
- /** @type {__VLS_StyleScopedClasses['!px-4']} */ ;
280
316
  /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
281
317
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
282
318
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
283
319
  /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
284
- /** @type {__VLS_StyleScopedClasses['h-full']} */ ;
285
320
  /** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ;
321
+ /** @type {__VLS_StyleScopedClasses['h-[96px]']} */ ;
322
+ /** @type {__VLS_StyleScopedClasses['px-8']} */ ;
323
+ /** @type {__VLS_StyleScopedClasses['py-4']} */ ;
324
+ /** @type {__VLS_StyleScopedClasses['!px-4']} */ ;
286
325
  /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
287
326
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
288
327
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
@@ -317,22 +356,44 @@ if (__VLS_ctx.data?.id &&
317
356
  /** @type {__VLS_StyleScopedClasses['md:block']} */ ;
318
357
  /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
319
358
  /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
320
- /** @type {__VLS_StyleScopedClasses['text-[#0051E6]']} */ ;
321
- /** @type {__VLS_StyleScopedClasses['bg-chat-haze-200']} */ ;
359
+ /** @type {__VLS_StyleScopedClasses['text-chat-primary-dark']} */ ;
360
+ /** @type {__VLS_StyleScopedClasses['bg-[#e8f0fe]']} */ ;
322
361
  /** @type {__VLS_StyleScopedClasses['w-9']} */ ;
323
362
  /** @type {__VLS_StyleScopedClasses['h-9']} */ ;
324
363
  /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
325
- /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
364
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
365
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
366
+ /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
367
+ /** @type {__VLS_StyleScopedClasses['loading-container']} */ ;
368
+ /** @type {__VLS_StyleScopedClasses['h-12']} */ ;
369
+ /** @type {__VLS_StyleScopedClasses['show']} */ ;
370
+ /** @type {__VLS_StyleScopedClasses['p-4']} */ ;
371
+ /** @type {__VLS_StyleScopedClasses['border-t']} */ ;
372
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
373
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
374
+ /** @type {__VLS_StyleScopedClasses['h-8']} */ ;
375
+ /** @type {__VLS_StyleScopedClasses['gap-1.5']} */ ;
376
+ /** @type {__VLS_StyleScopedClasses['px-2.5']} */ ;
377
+ /** @type {__VLS_StyleScopedClasses['py-1']} */ ;
378
+ /** @type {__VLS_StyleScopedClasses['bg-[#e8f0fe]']} */ ;
379
+ /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
380
+ /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
381
+ /** @type {__VLS_StyleScopedClasses['transition-all']} */ ;
382
+ /** @type {__VLS_StyleScopedClasses['duration-200']} */ ;
383
+ /** @type {__VLS_StyleScopedClasses['border-chat-primary']} */ ;
384
+ /** @type {__VLS_StyleScopedClasses['text-sm']} */ ;
385
+ /** @type {__VLS_StyleScopedClasses['text-chat-primary-dark']} */ ;
386
+ /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
387
+ /** @type {__VLS_StyleScopedClasses['h-4']} */ ;
388
+ /** @type {__VLS_StyleScopedClasses['leading-xs']} */ ;
389
+ /** @type {__VLS_StyleScopedClasses['font-semibold']} */ ;
390
+ /** @type {__VLS_StyleScopedClasses['w-6']} */ ;
391
+ /** @type {__VLS_StyleScopedClasses['h-6']} */ ;
392
+ /** @type {__VLS_StyleScopedClasses['bg-white']} */ ;
326
393
  /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
394
+ /** @type {__VLS_StyleScopedClasses['rounded-full']} */ ;
327
395
  /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
328
- /** @type {__VLS_StyleScopedClasses['scale-[1.2]']} */ ;
329
- /** @type {__VLS_StyleScopedClasses['text-base']} */ ;
330
- /** @type {__VLS_StyleScopedClasses['font-medium']} */ ;
331
- /** @type {__VLS_StyleScopedClasses['p-2']} */ ;
332
- /** @type {__VLS_StyleScopedClasses['hover:bg-chat-haze-200']} */ ;
333
- /** @type {__VLS_StyleScopedClasses['duration-200']} */ ;
334
- /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
335
- /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
396
+ /** @type {__VLS_StyleScopedClasses['h-4']} */ ;
336
397
  const __VLS_export = (await import('vue')).defineComponent({
337
398
  __typeEmits: {},
338
399
  __typeProps: {},
@@ -181,20 +181,22 @@ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
181
181
  // @ts-ignore
182
182
  [scrollEvent,];
183
183
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
184
- ...{ class: "loader-line" },
184
+ ...{ class: "loader-line top" },
185
185
  });
186
186
  __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.loadingTop && __VLS_ctx.top) }, null, null);
187
187
  // @ts-ignore
188
188
  [loadingTop, top,];
189
189
  var __VLS_0 = {};
190
190
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
191
- ...{ class: "loader-line" },
191
+ ...{ class: "loader-line bottom" },
192
192
  });
193
193
  __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.loading && __VLS_ctx.bottom) }, null, null);
194
194
  // @ts-ignore
195
195
  [loading, bottom,];
196
196
  /** @type {__VLS_StyleScopedClasses['loader-line']} */ ;
197
+ /** @type {__VLS_StyleScopedClasses['top']} */ ;
197
198
  /** @type {__VLS_StyleScopedClasses['loader-line']} */ ;
199
+ /** @type {__VLS_StyleScopedClasses['bottom']} */ ;
198
200
  // @ts-ignore
199
201
  var __VLS_1 = __VLS_0;
200
202
  const __VLS_base = (await import('vue')).defineComponent({
@@ -3,6 +3,7 @@ type ShortPopoverContentProps = Pick<PopoverContentProps, 'side' | 'align' | 'si
3
3
  delay?: number;
4
4
  trigger?: 'hover' | 'click';
5
5
  triggerClass?: string;
6
+ contentClass?: string;
6
7
  disabled?: boolean;
7
8
  };
8
9
  type __VLS_Props = ShortPopoverContentProps;
@@ -26,6 +27,7 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<__VLS_Publ
26
27
  delay: number;
27
28
  trigger: "click" | "hover";
28
29
  triggerClass: string;
30
+ contentClass: string;
29
31
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, __VLS_Slots>;
30
32
  export default _default;
31
33
  type __VLS_WithSlots<T, S> = T & {
@@ -6,6 +6,7 @@ const props = withDefaults(defineProps(), {
6
6
  delay: 100,
7
7
  trigger: 'click',
8
8
  triggerClass: '',
9
+ contentClass: '',
9
10
  });
10
11
  let closeTimer = null;
11
12
  const isOpen = defineModel('open');
@@ -46,6 +47,7 @@ const __VLS_defaults = {
46
47
  delay: 100,
47
48
  trigger: 'click',
48
49
  triggerClass: '',
50
+ contentClass: '',
49
51
  };
50
52
  const __VLS_ctx = {
51
53
  ...{},
@@ -117,12 +119,14 @@ if (!__VLS_ctx.disabled) {
117
119
  ...{ 'onMouseleave': {} },
118
120
  side: (__VLS_ctx.side),
119
121
  align: (__VLS_ctx.align),
122
+ ...{ class: (__VLS_ctx.contentClass) },
120
123
  }));
121
124
  const __VLS_22 = __VLS_21({
122
125
  ...{ 'onMouseenter': {} },
123
126
  ...{ 'onMouseleave': {} },
124
127
  side: (__VLS_ctx.side),
125
128
  align: (__VLS_ctx.align),
129
+ ...{ class: (__VLS_ctx.contentClass) },
126
130
  }, ...__VLS_functionalComponentArgsRest(__VLS_21));
127
131
  let __VLS_24;
128
132
  let __VLS_25;
@@ -132,7 +136,7 @@ if (!__VLS_ctx.disabled) {
132
136
  { onMouseleave: (__VLS_ctx.onMouseLeave) });
133
137
  const { default: __VLS_28 } = __VLS_23.slots;
134
138
  // @ts-ignore
135
- [onMouseEnter, onMouseLeave, side, align,];
139
+ [onMouseEnter, onMouseLeave, side, align, contentClass,];
136
140
  var __VLS_29 = {};
137
141
  var __VLS_23;
138
142
  }
@@ -21,11 +21,11 @@ DropdownMenuSeparator;
21
21
  // @ts-ignore
22
22
  const __VLS_1 = __VLS_asFunctionalComponent(__VLS_0, new __VLS_0({
23
23
  ...(__VLS_ctx.delegatedProps),
24
- ...{ class: (__VLS_ctx.cn('-mx-1 my-1 h-px bg-muted', props.class)) },
24
+ ...{ class: (__VLS_ctx.cn('-mx-1 my-1 h-px bg-chat-haze-300', props.class)) },
25
25
  }));
26
26
  const __VLS_2 = __VLS_1({
27
27
  ...(__VLS_ctx.delegatedProps),
28
- ...{ class: (__VLS_ctx.cn('-mx-1 my-1 h-px bg-muted', props.class)) },
28
+ ...{ class: (__VLS_ctx.cn('-mx-1 my-1 h-px bg-chat-haze-300', props.class)) },
29
29
  }, ...__VLS_functionalComponentArgsRest(__VLS_1));
30
30
  var __VLS_4 = {};
31
31
  // @ts-ignore
@@ -30,6 +30,9 @@ const __VLS_1 = __VLS_asFunctionalComponent(__VLS_0, new __VLS_0({}));
30
30
  const __VLS_2 = __VLS_1({}, ...__VLS_functionalComponentArgsRest(__VLS_1));
31
31
  var __VLS_4 = {};
32
32
  const { default: __VLS_5 } = __VLS_3.slots;
33
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
34
+ ...{ class: "go-chat-app" },
35
+ });
33
36
  const __VLS_6 = {}.PopoverContent;
34
37
  /** @type {[typeof __VLS_components.PopoverContent, typeof __VLS_components.PopoverContent, ]} */ ;
35
38
  // @ts-ignore
@@ -37,11 +40,11 @@ PopoverContent;
37
40
  // @ts-ignore
38
41
  const __VLS_7 = __VLS_asFunctionalComponent(__VLS_6, new __VLS_6({
39
42
  ...({ ...__VLS_ctx.forwarded, ...__VLS_ctx.$attrs }),
40
- ...{ class: (__VLS_ctx.cn('z-[2000] min-w-72 w-max rounded-md bg-white outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class)) },
43
+ ...{ class: (__VLS_ctx.cn('z-[2000] shadow-3xl min-w-72 w-max rounded-md bg-white outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class)) },
41
44
  }));
42
45
  const __VLS_8 = __VLS_7({
43
46
  ...({ ...__VLS_ctx.forwarded, ...__VLS_ctx.$attrs }),
44
- ...{ class: (__VLS_ctx.cn('z-[2000] min-w-72 w-max rounded-md bg-white outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class)) },
47
+ ...{ class: (__VLS_ctx.cn('z-[2000] shadow-3xl min-w-72 w-max rounded-md bg-white outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class)) },
45
48
  }, ...__VLS_functionalComponentArgsRest(__VLS_7));
46
49
  const { default: __VLS_10 } = __VLS_9.slots;
47
50
  // @ts-ignore
@@ -49,6 +52,7 @@ const { default: __VLS_10 } = __VLS_9.slots;
49
52
  var __VLS_11 = {};
50
53
  var __VLS_9;
51
54
  var __VLS_3;
55
+ /** @type {__VLS_StyleScopedClasses['go-chat-app']} */ ;
52
56
  // @ts-ignore
53
57
  var __VLS_12 = __VLS_11;
54
58
  const __VLS_base = (await import('vue')).defineComponent({
@@ -1,6 +1,7 @@
1
1
  export declare const DATE_FORMATS: {
2
2
  readonly DATE_FORMAT: "YYYY-MM-DD";
3
3
  readonly DATE_FORMAT_FULL: "YYYY-MM-DD HH:mm:ss";
4
+ readonly DATE_FORMAT_MEDIUM: "MMM D, YYYY";
4
5
  readonly TIME_12_FORMAT: "hh:mm A";
5
6
  };
6
7
  export declare const TIME_ZONE_UTC = "Africa/Freetown";
@@ -1,6 +1,7 @@
1
1
  export const DATE_FORMATS = {
2
2
  DATE_FORMAT: 'YYYY-MM-DD',
3
3
  DATE_FORMAT_FULL: 'YYYY-MM-DD HH:mm:ss',
4
- TIME_12_FORMAT: 'hh:mm A'
4
+ DATE_FORMAT_MEDIUM: 'MMM D, YYYY',
5
+ TIME_12_FORMAT: 'hh:mm A',
5
6
  };
6
7
  export const TIME_ZONE_UTC = 'Africa/Freetown';