@phonghq/go-chat 1.0.73 → 1.0.74

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.
@@ -2,7 +2,7 @@
2
2
  import HomeHeader from '../../../chat/page/home/HomeHeader.vue';
3
3
  import NewCustomer from '../../../chat/page/home/NewCustomer.vue';
4
4
  import InputChat from '../../../chat/page/home/InputChat.vue';
5
- import { getDetailReceiver, getMessage, sendMessage, upLoadImage } from '../../../utils/chat/store/message';
5
+ import { getMessage, sendMessage, upLoadImage } from '../../../utils/chat/store/message';
6
6
  import { computed, nextTick, onMounted, onUnmounted, ref, shallowRef } from 'vue';
7
7
  import ChatMessage from '../../../chat/page/home/ChatMessage.vue';
8
8
  import { addHandleMqttMessage, connectMqtt, publishMessage, removeHandleMqttMessage, subscribeToTopic, unsubscribeFromTopic } from '../../../plugins/mqtt';
@@ -13,6 +13,7 @@ import { getCache, removeOldestCache, setCache } from '../../../utils/chat/cache
13
13
  import { digibotId } from '../../../composable/useDigibot';
14
14
  import dayjs from 'dayjs';
15
15
  import { useDebounce } from '../../../utils/debounce';
16
+ import { getUserHistory, userHistory } from '../../../utils/chat/store/user';
16
17
  const props = withDefaults(defineProps(), {});
17
18
  const emit = defineEmits();
18
19
  const MESSAGE_STORAGE_KEY = 'chat-message-';
@@ -26,6 +27,7 @@ const infoUser = shallowRef(null);
26
27
  const listMessage = ref([]);
27
28
  const chatMessageRef = ref(null);
28
29
  const inputChatRef = ref(null);
30
+ const customerLoading = ref(false);
29
31
  onMounted(() => {
30
32
  document.addEventListener('visibilitychange', handleVisibilitychange);
31
33
  });
@@ -134,15 +136,30 @@ const handleGetDetailReceiverQuickly = (data) => {
134
136
  };
135
137
  const handleGetDetailReceiver = async (data) => {
136
138
  const id = props.receiverId;
137
- if (data)
138
- infoUser.value = { ...data, conversation_id: data.id };
139
- const res = (await getDetailReceiver(props.receiverId)) ?? null;
139
+ if (!data)
140
+ return;
141
+ infoUser.value = { ...data, conversation_id: data.id };
142
+ // const res = (await getDetailReceiver(props.receiverId)) ?? null
143
+ userHistory.value = null;
144
+ customerLoading.value = true;
145
+ handleGetUserHistoryDebounce(infoUser.value?.phone?.slice(1) ?? '');
140
146
  if (id == props.receiverId) {
141
- infoUser.value = res;
147
+ // infoUser.value = res
142
148
  await handleDisconnectMqtt();
143
149
  await handleConnectMqtt();
144
150
  }
145
151
  };
152
+ const handleGetUserHistory = async (phone) => {
153
+ try {
154
+ // customerLoading.value = true
155
+ await getUserHistory(phone);
156
+ }
157
+ catch (e) {
158
+ console.log(e);
159
+ }
160
+ customerLoading.value = false;
161
+ };
162
+ const handleGetUserHistoryDebounce = useDebounce((phone) => handleGetUserHistory(phone), 500);
146
163
  const getData = async (data) => {
147
164
  try {
148
165
  isLoading.value = true;
@@ -289,29 +306,43 @@ if (__VLS_ctx.infoUser) {
289
306
  // @ts-ignore
290
307
  const __VLS_0 = __VLS_asFunctionalComponent(HomeHeader, new HomeHeader({
291
308
  ...{ 'onCall': {} },
309
+ ...{ 'onViewAppointment': {} },
292
310
  ...{ 'onBack': {} },
293
311
  ...{ class: "shrink-0" },
294
312
  data: (__VLS_ctx.infoUser),
295
313
  responsive: (__VLS_ctx.responsive),
314
+ parentPageName: (__VLS_ctx.parentPageName),
315
+ customerLoading: (__VLS_ctx.customerLoading),
296
316
  }));
297
317
  const __VLS_1 = __VLS_0({
298
318
  ...{ 'onCall': {} },
319
+ ...{ 'onViewAppointment': {} },
299
320
  ...{ 'onBack': {} },
300
321
  ...{ class: "shrink-0" },
301
322
  data: (__VLS_ctx.infoUser),
302
323
  responsive: (__VLS_ctx.responsive),
324
+ parentPageName: (__VLS_ctx.parentPageName),
325
+ customerLoading: (__VLS_ctx.customerLoading),
303
326
  }, ...__VLS_functionalComponentArgsRest(__VLS_0));
304
327
  let __VLS_3;
305
328
  let __VLS_4;
306
329
  const __VLS_5 = ({ call: {} },
307
330
  { onCall: (__VLS_ctx.call) });
308
- const __VLS_6 = ({ back: {} },
331
+ const __VLS_6 = ({ viewAppointment: {} },
332
+ { onViewAppointment: (...[$event]) => {
333
+ if (!(__VLS_ctx.infoUser))
334
+ return;
335
+ __VLS_ctx.emit('viewAppointment', $event);
336
+ // @ts-ignore
337
+ [infoUser, responsive, parentPageName, customerLoading, call, emit,];
338
+ } });
339
+ const __VLS_7 = ({ back: {} },
309
340
  { onBack: (...[$event]) => {
310
341
  if (!(__VLS_ctx.infoUser))
311
342
  return;
312
343
  __VLS_ctx.emit('back');
313
344
  // @ts-ignore
314
- [infoUser, responsive, call, emit,];
345
+ [emit,];
315
346
  } });
316
347
  var __VLS_2;
317
348
  if (__VLS_ctx.listMessage?.length) {
@@ -319,7 +350,7 @@ if (__VLS_ctx.infoUser) {
319
350
  [listMessage,];
320
351
  /** @type {[typeof ChatMessage, ]} */ ;
321
352
  // @ts-ignore
322
- const __VLS_8 = __VLS_asFunctionalComponent(ChatMessage, new ChatMessage({
353
+ const __VLS_9 = __VLS_asFunctionalComponent(ChatMessage, new ChatMessage({
323
354
  ...{ 'onScrollTop': {} },
324
355
  ...{ 'onCallBack': {} },
325
356
  ref: "chatMessageRef",
@@ -330,7 +361,7 @@ if (__VLS_ctx.infoUser) {
330
361
  showNewCustomer: (__VLS_ctx.page >= __VLS_ctx.pageCount),
331
362
  isLoading: (__VLS_ctx.isLoading),
332
363
  }));
333
- const __VLS_9 = __VLS_8({
364
+ const __VLS_10 = __VLS_9({
334
365
  ...{ 'onScrollTop': {} },
335
366
  ...{ 'onCallBack': {} },
336
367
  ref: "chatMessageRef",
@@ -340,34 +371,34 @@ if (__VLS_ctx.infoUser) {
340
371
  responsive: (__VLS_ctx.responsive),
341
372
  showNewCustomer: (__VLS_ctx.page >= __VLS_ctx.pageCount),
342
373
  isLoading: (__VLS_ctx.isLoading),
343
- }, ...__VLS_functionalComponentArgsRest(__VLS_8));
344
- let __VLS_11;
374
+ }, ...__VLS_functionalComponentArgsRest(__VLS_9));
345
375
  let __VLS_12;
346
- const __VLS_13 = ({ scrollTop: {} },
376
+ let __VLS_13;
377
+ const __VLS_14 = ({ scrollTop: {} },
347
378
  { onScrollTop: (__VLS_ctx.handleScrollTop) });
348
- const __VLS_14 = ({ callBack: {} },
379
+ const __VLS_15 = ({ callBack: {} },
349
380
  { onCallBack: (__VLS_ctx.call) });
350
381
  /** @type {typeof __VLS_ctx.chatMessageRef} */ ;
351
- var __VLS_15 = {};
382
+ var __VLS_16 = {};
352
383
  // @ts-ignore
353
384
  [infoUser, responsive, call, reversedList, page, pageCount, isLoading, handleScrollTop, chatMessageRef,];
354
- var __VLS_10;
385
+ var __VLS_11;
355
386
  }
356
387
  else if (!__VLS_ctx.isLoading) {
357
388
  // @ts-ignore
358
389
  [isLoading,];
359
390
  /** @type {[typeof NewCustomer, ]} */ ;
360
391
  // @ts-ignore
361
- const __VLS_18 = __VLS_asFunctionalComponent(NewCustomer, new NewCustomer({
392
+ const __VLS_19 = __VLS_asFunctionalComponent(NewCustomer, new NewCustomer({
362
393
  data: (__VLS_ctx.infoUser),
363
394
  ...{ class: "grow" },
364
395
  isNew: (!__VLS_ctx.listMessage.length),
365
396
  }));
366
- const __VLS_19 = __VLS_18({
397
+ const __VLS_20 = __VLS_19({
367
398
  data: (__VLS_ctx.infoUser),
368
399
  ...{ class: "grow" },
369
400
  isNew: (!__VLS_ctx.listMessage.length),
370
- }, ...__VLS_functionalComponentArgsRest(__VLS_18));
401
+ }, ...__VLS_functionalComponentArgsRest(__VLS_19));
371
402
  // @ts-ignore
372
403
  [infoUser, listMessage,];
373
404
  }
@@ -381,7 +412,7 @@ if (__VLS_ctx.infoUser) {
381
412
  [receiverId, digibotId,];
382
413
  /** @type {[typeof InputChat, ]} */ ;
383
414
  // @ts-ignore
384
- const __VLS_22 = __VLS_asFunctionalComponent(InputChat, new InputChat({
415
+ const __VLS_23 = __VLS_asFunctionalComponent(InputChat, new InputChat({
385
416
  ...{ 'onSendMessage': {} },
386
417
  ...{ 'onFocus': {} },
387
418
  data: (__VLS_ctx.infoUser),
@@ -390,7 +421,7 @@ if (__VLS_ctx.infoUser) {
390
421
  ref: "inputChatRef",
391
422
  ...{ class: "p-2 sm:p-6" },
392
423
  }));
393
- const __VLS_23 = __VLS_22({
424
+ const __VLS_24 = __VLS_23({
394
425
  ...{ 'onSendMessage': {} },
395
426
  ...{ 'onFocus': {} },
396
427
  data: (__VLS_ctx.infoUser),
@@ -398,12 +429,12 @@ if (__VLS_ctx.infoUser) {
398
429
  conversation: (__VLS_ctx.conversation),
399
430
  ref: "inputChatRef",
400
431
  ...{ class: "p-2 sm:p-6" },
401
- }, ...__VLS_functionalComponentArgsRest(__VLS_22));
402
- let __VLS_25;
432
+ }, ...__VLS_functionalComponentArgsRest(__VLS_23));
403
433
  let __VLS_26;
404
- const __VLS_27 = ({ sendMessage: {} },
434
+ let __VLS_27;
435
+ const __VLS_28 = ({ sendMessage: {} },
405
436
  { onSendMessage: (__VLS_ctx.handleSendMessage) });
406
- const __VLS_28 = ({ focus: {} },
437
+ const __VLS_29 = ({ focus: {} },
407
438
  { onFocus: (...[$event]) => {
408
439
  if (!(__VLS_ctx.infoUser))
409
440
  return;
@@ -414,10 +445,10 @@ if (__VLS_ctx.infoUser) {
414
445
  [infoUser, responsive, emit, conversation, handleSendMessage,];
415
446
  } });
416
447
  /** @type {typeof __VLS_ctx.inputChatRef} */ ;
417
- var __VLS_29 = {};
448
+ var __VLS_30 = {};
418
449
  // @ts-ignore
419
450
  [inputChatRef,];
420
- var __VLS_24;
451
+ var __VLS_25;
421
452
  }
422
453
  }
423
454
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
@@ -431,7 +462,7 @@ if (__VLS_ctx.infoUser) {
431
462
  /** @type {__VLS_StyleScopedClasses['p-2']} */ ;
432
463
  /** @type {__VLS_StyleScopedClasses['sm:p-6']} */ ;
433
464
  // @ts-ignore
434
- var __VLS_16 = __VLS_15, __VLS_30 = __VLS_29;
465
+ var __VLS_17 = __VLS_16, __VLS_31 = __VLS_30;
435
466
  const __VLS_export = (await import('vue')).defineComponent({
436
467
  setup: () => (__VLS_exposed),
437
468
  __typeEmits: {},
@@ -1,14 +1,18 @@
1
1
  import type { IResUser } from '../../../types/message';
2
- import type { PAGE_RESPONSIVE } from '../../../types/chat/global';
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;
@@ -3,29 +3,83 @@ import IconPhone from '../../../assets/icons/global/IconPhone.vue';
3
3
  import { PAGE } from '../../../constant/general';
4
4
  import Avatar from '../../../components/chat/customer/Avatar.vue';
5
5
  import { routerPush } from '../../../utils/chat/chat-router';
6
- import { user } from '../../../utils/chat/store/user';
6
+ import { user, userHistory } from '../../../utils/chat/store/user';
7
7
  import { dataProfile } from '../../../utils/chat/store/auth';
8
8
  import { digibotId } from '../../../composable/useDigibot';
9
9
  import IconArrowLeft from '../../../assets/icons/global/IconArrowLeft.vue';
10
10
  import { phoneNumberFormat } from '../../../utils/string-helper';
11
11
  import IconSms from '../../../assets/icons/global/IconSms.vue';
12
12
  import { activePlivoMode } from '../../../utils/chat/store/message';
13
- import { ref } from 'vue';
13
+ import { computed, ref } from 'vue';
14
14
  import ButtonBase from '../../../components/common/button/ButtonBase.vue';
15
15
  import IconMenuDot from '../../../assets/icons/chat/IconMenuDot.vue';
16
16
  import DropdownBase from '../../../components/common/dropdown/DropdownBase.vue';
17
+ import IconInfo from '../../../assets/icons/chat/IconInfo.vue';
18
+ import IconCalendar from '../../../assets/icons/chat/IconCalendar.vue';
19
+ import IconCheck from '../../../assets/icons/chat/IconCheck.vue';
20
+ import IconLink from '../../../assets/icons/chat/IconLink.vue';
21
+ import { getTimeLocal } from '../../../utils/dayjs-helper';
22
+ import { DATE_FORMATS } from '../../../constant/datetime';
23
+ import BaseSpin from '../../../components/chat/common/spin/BaseSpin.vue';
17
24
  const props = withDefaults(defineProps(), {});
18
25
  const emit = defineEmits();
26
+ const customerDropContent = computed(() => {
27
+ return [
28
+ {
29
+ icon: IconInfo,
30
+ title: 'Profile',
31
+ click: goToViewUser,
32
+ disabled: false
33
+ },
34
+ {
35
+ icon: IconCalendar,
36
+ title: 'View Appointment',
37
+ click: goToViewAppointment,
38
+ disabled: !userHistory.value?.appointment?.length
39
+ },
40
+ {
41
+ icon: IconCheck,
42
+ title: 'View Checkin',
43
+ click: goToViewView,
44
+ disabled: !userHistory.value?.visit_count
45
+ }
46
+ ];
47
+ });
48
+ const tabContent = computed(() => {
49
+ let result = [];
50
+ if (userHistory.value?.appointment?.length && props.parentPageName == 'booking-admin') {
51
+ const last_item = userHistory.value?.appointment[userHistory.value?.appointment?.length - 1];
52
+ result.push({
53
+ id: last_item.id,
54
+ icon: IconCalendar,
55
+ label: 'Last Appointment:',
56
+ time: getTimeLocal(last_item?.start_time)?.format(DATE_FORMATS['DATE_FORMAT_MEDIUM']) ?? '',
57
+ click: () => {
58
+ emit('viewAppointment', last_item.id);
59
+ }
60
+ });
61
+ }
62
+ return result;
63
+ });
19
64
  const activePlivoSms = ref(dataProfile.value?.is_sms_active == 1);
20
65
  const loading = ref(false);
21
66
  const selectOpen = ref(false);
22
67
  const goToViewUser = () => {
68
+ goToPage(PAGE.CUSTOMER_DETAIL);
69
+ };
70
+ const goToViewAppointment = () => {
71
+ goToPage(PAGE.CUSTOMER_APPOINTMENT);
72
+ };
73
+ const goToViewView = () => {
74
+ goToPage(PAGE.CUSTOMER_CHECK_IN);
75
+ };
76
+ const goToPage = (page) => {
23
77
  selectOpen.value = false;
24
78
  if (props.data?.id.toString() == digibotId.toString())
25
79
  return;
26
80
  if (dataProfile.value?.user_type == 'tenant') {
27
81
  user.value = props.data;
28
- routerPush(PAGE.CUSTOMER_DETAIL);
82
+ routerPush(page);
29
83
  }
30
84
  };
31
85
  const customer_select_option = [
@@ -66,15 +120,16 @@ const __VLS_ctx = {
66
120
  let __VLS_elements;
67
121
  let __VLS_components;
68
122
  let __VLS_directives;
123
+ /** @type {__VLS_StyleScopedClasses['loading-container']} */ ;
69
124
  __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" },
125
+ ...{ class: "w-full layout-shadow border-b border-chat-gray-5 z-10" },
126
+ });
127
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
128
+ ...{ class: "w-full flex items-center gap-2 overflow-hidden h-[96px] px-8 py-4" },
71
129
  ...{ class: ({ '!px-4': __VLS_ctx.responsive == 'mobile' }) },
72
130
  });
73
131
  // @ts-ignore
74
132
  [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
133
  if (__VLS_ctx.responsive == 'mobile') {
79
134
  // @ts-ignore
80
135
  [responsive,];
@@ -207,7 +262,7 @@ if (__VLS_ctx.data?.id &&
207
262
  // @ts-ignore
208
263
  [emit,];
209
264
  } },
210
- ...{ class: "shrink-0 flex-center text-[#0051E6] bg-chat-haze-200 w-9 h-9 rounded-lg" },
265
+ ...{ class: "shrink-0 flex-center text-chat-primary-dark bg-[#e8f0fe] w-9 h-9 rounded-lg" },
211
266
  });
212
267
  /** @type {[typeof IconPhone, ]} */ ;
213
268
  // @ts-ignore
@@ -251,38 +306,117 @@ if (__VLS_ctx.data?.id &&
251
306
  {
252
307
  const { content: __VLS_35 } = __VLS_28.slots;
253
308
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
254
- ...{ class: "text-base font-medium" },
309
+ ...{ class: "text-chat-text" },
255
310
  });
256
- __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
311
+ for (const [item, i] of __VLS_getVForSourceType((__VLS_ctx.customerDropContent))) {
312
+ // @ts-ignore
313
+ [customerDropContent,];
314
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
315
+ ...{ onClick: (...[$event]) => {
316
+ if (!(__VLS_ctx.data?.id &&
317
+ __VLS_ctx.data?.id.toString() != __VLS_ctx.digibotId.toString() &&
318
+ __VLS_ctx.dataProfile?.user_type == 'tenant'))
319
+ return;
320
+ item.click?.();
321
+ } },
322
+ ...{ class: "flex items-center gap-2 p-2 hover:bg-chat-haze-200 duration-200 cursor-pointer rounded-lg" },
323
+ key: (i),
324
+ ...{ class: ({ 'opacity-[0.3] pointer-events-none': item.disabled }) },
325
+ });
326
+ const __VLS_36 = ((item.icon));
327
+ // @ts-ignore
328
+ const __VLS_37 = __VLS_asFunctionalComponent(__VLS_36, new __VLS_36({
329
+ ...{ class: "w-5 h-5" },
330
+ }));
331
+ const __VLS_38 = __VLS_37({
332
+ ...{ class: "w-5 h-5" },
333
+ }, ...__VLS_functionalComponentArgsRest(__VLS_37));
334
+ (item.title);
335
+ }
336
+ }
337
+ var __VLS_28;
338
+ }
339
+ if (__VLS_ctx.parentPageName) {
340
+ // @ts-ignore
341
+ [parentPageName,];
342
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
343
+ ...{ class: " flex items-center border-chat-gray-5 loading-container h-12" },
344
+ ...{ class: ({ 'show p-4 border-t': __VLS_ctx.customerLoading || __VLS_ctx.tabContent.length }) },
345
+ });
346
+ // @ts-ignore
347
+ [customerLoading, tabContent,];
348
+ /** @type {[typeof BaseSpin, ]} */ ;
349
+ // @ts-ignore
350
+ const __VLS_41 = __VLS_asFunctionalComponent(BaseSpin, new BaseSpin({
351
+ size: (16),
352
+ border: (1),
353
+ }));
354
+ const __VLS_42 = __VLS_41({
355
+ size: (16),
356
+ border: (1),
357
+ }, ...__VLS_functionalComponentArgsRest(__VLS_41));
358
+ __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.customerLoading) }, null, null);
359
+ // @ts-ignore
360
+ [customerLoading,];
361
+ for (const [tab, i] of __VLS_getVForSourceType((__VLS_ctx.tabContent))) {
362
+ // @ts-ignore
363
+ [tabContent,];
364
+ __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
257
365
  ...{ 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'))
366
+ if (!(__VLS_ctx.parentPageName))
261
367
  return;
262
- __VLS_ctx.goToViewUser();
263
- // @ts-ignore
264
- [goToViewUser,];
368
+ tab.click?.();
265
369
  } },
266
- ...{ class: "p-2 hover:bg-chat-haze-200 duration-200 cursor-pointer rounded-lg" },
370
+ key: (i),
371
+ ...{ 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" },
372
+ });
373
+ const __VLS_45 = ((tab.icon));
374
+ // @ts-ignore
375
+ const __VLS_46 = __VLS_asFunctionalComponent(__VLS_45, new __VLS_45({
376
+ ...{ class: "w-4 h-4" },
377
+ weight: "2.5",
378
+ }));
379
+ const __VLS_47 = __VLS_46({
380
+ ...{ class: "w-4 h-4" },
381
+ weight: "2.5",
382
+ }, ...__VLS_functionalComponentArgsRest(__VLS_46));
383
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({
384
+ ...{ class: "leading-xs" },
385
+ });
386
+ (tab.label);
387
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({
388
+ ...{ class: "font-semibold" },
267
389
  });
390
+ (tab.time);
391
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
392
+ ...{ class: "w-6 h-6 bg-white flex-center rounded-full" },
393
+ });
394
+ /** @type {[typeof IconLink, ]} */ ;
395
+ // @ts-ignore
396
+ const __VLS_50 = __VLS_asFunctionalComponent(IconLink, new IconLink({
397
+ ...{ class: "w-4 h-4" },
398
+ weight: "2.5",
399
+ }));
400
+ const __VLS_51 = __VLS_50({
401
+ ...{ class: "w-4 h-4" },
402
+ weight: "2.5",
403
+ }, ...__VLS_functionalComponentArgsRest(__VLS_50));
268
404
  }
269
- var __VLS_28;
270
405
  }
271
406
  /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
272
- /** @type {__VLS_StyleScopedClasses['px-8']} */ ;
273
- /** @type {__VLS_StyleScopedClasses['py-4']} */ ;
274
- /** @type {__VLS_StyleScopedClasses['h-[96px]']} */ ;
275
407
  /** @type {__VLS_StyleScopedClasses['layout-shadow']} */ ;
276
408
  /** @type {__VLS_StyleScopedClasses['border-b']} */ ;
277
409
  /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
278
410
  /** @type {__VLS_StyleScopedClasses['z-10']} */ ;
279
- /** @type {__VLS_StyleScopedClasses['!px-4']} */ ;
280
411
  /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
281
412
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
282
413
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
283
414
  /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
284
- /** @type {__VLS_StyleScopedClasses['h-full']} */ ;
285
415
  /** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ;
416
+ /** @type {__VLS_StyleScopedClasses['h-[96px]']} */ ;
417
+ /** @type {__VLS_StyleScopedClasses['px-8']} */ ;
418
+ /** @type {__VLS_StyleScopedClasses['py-4']} */ ;
419
+ /** @type {__VLS_StyleScopedClasses['!px-4']} */ ;
286
420
  /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
287
421
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
288
422
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
@@ -317,8 +451,8 @@ if (__VLS_ctx.data?.id &&
317
451
  /** @type {__VLS_StyleScopedClasses['md:block']} */ ;
318
452
  /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
319
453
  /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
320
- /** @type {__VLS_StyleScopedClasses['text-[#0051E6]']} */ ;
321
- /** @type {__VLS_StyleScopedClasses['bg-chat-haze-200']} */ ;
454
+ /** @type {__VLS_StyleScopedClasses['text-chat-primary-dark']} */ ;
455
+ /** @type {__VLS_StyleScopedClasses['bg-[#e8f0fe]']} */ ;
322
456
  /** @type {__VLS_StyleScopedClasses['w-9']} */ ;
323
457
  /** @type {__VLS_StyleScopedClasses['h-9']} */ ;
324
458
  /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
@@ -326,13 +460,52 @@ if (__VLS_ctx.data?.id &&
326
460
  /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
327
461
  /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
328
462
  /** @type {__VLS_StyleScopedClasses['scale-[1.2]']} */ ;
329
- /** @type {__VLS_StyleScopedClasses['text-base']} */ ;
330
- /** @type {__VLS_StyleScopedClasses['font-medium']} */ ;
463
+ /** @type {__VLS_StyleScopedClasses['text-chat-text']} */ ;
464
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
465
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
466
+ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
331
467
  /** @type {__VLS_StyleScopedClasses['p-2']} */ ;
332
468
  /** @type {__VLS_StyleScopedClasses['hover:bg-chat-haze-200']} */ ;
333
469
  /** @type {__VLS_StyleScopedClasses['duration-200']} */ ;
334
470
  /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
335
471
  /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
472
+ /** @type {__VLS_StyleScopedClasses['opacity-[0.3]']} */ ;
473
+ /** @type {__VLS_StyleScopedClasses['pointer-events-none']} */ ;
474
+ /** @type {__VLS_StyleScopedClasses['w-5']} */ ;
475
+ /** @type {__VLS_StyleScopedClasses['h-5']} */ ;
476
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
477
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
478
+ /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
479
+ /** @type {__VLS_StyleScopedClasses['loading-container']} */ ;
480
+ /** @type {__VLS_StyleScopedClasses['h-12']} */ ;
481
+ /** @type {__VLS_StyleScopedClasses['show']} */ ;
482
+ /** @type {__VLS_StyleScopedClasses['p-4']} */ ;
483
+ /** @type {__VLS_StyleScopedClasses['border-t']} */ ;
484
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
485
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
486
+ /** @type {__VLS_StyleScopedClasses['h-8']} */ ;
487
+ /** @type {__VLS_StyleScopedClasses['gap-1.5']} */ ;
488
+ /** @type {__VLS_StyleScopedClasses['px-2.5']} */ ;
489
+ /** @type {__VLS_StyleScopedClasses['py-1']} */ ;
490
+ /** @type {__VLS_StyleScopedClasses['bg-[#e8f0fe]']} */ ;
491
+ /** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
492
+ /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
493
+ /** @type {__VLS_StyleScopedClasses['transition-all']} */ ;
494
+ /** @type {__VLS_StyleScopedClasses['duration-200']} */ ;
495
+ /** @type {__VLS_StyleScopedClasses['border-chat-primary']} */ ;
496
+ /** @type {__VLS_StyleScopedClasses['text-sm']} */ ;
497
+ /** @type {__VLS_StyleScopedClasses['text-chat-primary-dark']} */ ;
498
+ /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
499
+ /** @type {__VLS_StyleScopedClasses['h-4']} */ ;
500
+ /** @type {__VLS_StyleScopedClasses['leading-xs']} */ ;
501
+ /** @type {__VLS_StyleScopedClasses['font-semibold']} */ ;
502
+ /** @type {__VLS_StyleScopedClasses['w-6']} */ ;
503
+ /** @type {__VLS_StyleScopedClasses['h-6']} */ ;
504
+ /** @type {__VLS_StyleScopedClasses['bg-white']} */ ;
505
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
506
+ /** @type {__VLS_StyleScopedClasses['rounded-full']} */ ;
507
+ /** @type {__VLS_StyleScopedClasses['w-4']} */ ;
508
+ /** @type {__VLS_StyleScopedClasses['h-4']} */ ;
336
509
  const __VLS_export = (await import('vue')).defineComponent({
337
510
  __typeEmits: {},
338
511
  __typeProps: {},
@@ -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
@@ -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';