@propbinder/mobile-design 0.2.90 → 0.2.92
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.
- package/fesm2022/propbinder-mobile-design.mjs +1671 -458
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
- package/index.d.ts +234 -16
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy, OnInit, ElementRef, EventEmitter, TemplateRef, OnChanges, SimpleChanges, AfterViewInit, Injector, ChangeDetectorRef, ApplicationRef, EnvironmentInjector, Type, AfterContentInit } from '@angular/core';
|
|
2
|
+
import { OnDestroy, OnInit, ElementRef, EventEmitter, TemplateRef, OnChanges, SimpleChanges, AfterViewInit, Injector, ChangeDetectorRef, ApplicationRef, EnvironmentInjector, Type, AfterContentInit, InjectionToken, PipeTransform } from '@angular/core';
|
|
3
3
|
import { ModalController, IonContent, NavController, GestureController, ModalOptions as ModalOptions$1 } from '@ionic/angular/standalone';
|
|
4
4
|
import { Style } from '@capacitor/status-bar';
|
|
5
5
|
import { ImpactStyle } from '@capacitor/haptics';
|
|
@@ -737,7 +737,7 @@ declare class DsMobileProfileActionsSheetComponent implements OnInit, OnChanges
|
|
|
737
737
|
/**
|
|
738
738
|
* Current view state
|
|
739
739
|
*/
|
|
740
|
-
currentView: _angular_core.WritableSignal<"
|
|
740
|
+
currentView: _angular_core.WritableSignal<"language" | "main">;
|
|
741
741
|
/**
|
|
742
742
|
* Reference to the view container for height calculations
|
|
743
743
|
*/
|
|
@@ -861,6 +861,7 @@ declare class DsMobilePageMainComponent extends MobilePageBase implements AfterV
|
|
|
861
861
|
avatarInitials: _angular_core.InputSignal<string>;
|
|
862
862
|
avatarSrc: _angular_core.InputSignal<string>;
|
|
863
863
|
avatarIconName: _angular_core.InputSignal<string>;
|
|
864
|
+
notificationCount: _angular_core.InputSignal<number>;
|
|
864
865
|
showRefresh: _angular_core.InputSignal<boolean>;
|
|
865
866
|
showCondensedHeader: _angular_core.InputSignal<boolean>;
|
|
866
867
|
scrollThreshold: _angular_core.InputSignal<number>;
|
|
@@ -909,6 +910,7 @@ declare class DsMobilePageMainComponent extends MobilePageBase implements AfterV
|
|
|
909
910
|
* ```
|
|
910
911
|
*/
|
|
911
912
|
profileMenuItems: _angular_core.InputSignal<ActionGroup[] | undefined>;
|
|
913
|
+
notificationClick: _angular_core.OutputEmitterRef<void>;
|
|
912
914
|
avatarClick: _angular_core.OutputEmitterRef<void>;
|
|
913
915
|
/**
|
|
914
916
|
* Emitted when a profile menu action is selected.
|
|
@@ -936,7 +938,7 @@ declare class DsMobilePageMainComponent extends MobilePageBase implements AfterV
|
|
|
936
938
|
*/
|
|
937
939
|
handleRefresh(event: any): Promise<void>;
|
|
938
940
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobilePageMainComponent, never>;
|
|
939
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePageMainComponent, "ds-mobile-page-main", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerSubtitle": { "alias": "headerSubtitle"; "required": false; "isSignal": true; }; "firstEntry": { "alias": "firstEntry"; "required": false; "isSignal": true; }; "avatarType": { "alias": "avatarType"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "showCondensedHeader": { "alias": "showCondensedHeader"; "required": false; "isSignal": true; }; "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "headerFadeDistance": { "alias": "headerFadeDistance"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; "profileMenuItems": { "alias": "profileMenuItems"; "required": false; "isSignal": true; }; }, { "avatarClick": "avatarClick"; "profileActionSelected": "profileActionSelected"; "refresh": "refresh"; "scroll": "scroll"; }, never, ["[header-content]", "[offline-indicator]", "*"], true, never>;
|
|
941
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePageMainComponent, "ds-mobile-page-main", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerSubtitle": { "alias": "headerSubtitle"; "required": false; "isSignal": true; }; "firstEntry": { "alias": "firstEntry"; "required": false; "isSignal": true; }; "avatarType": { "alias": "avatarType"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; "isSignal": true; }; "notificationCount": { "alias": "notificationCount"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "showCondensedHeader": { "alias": "showCondensedHeader"; "required": false; "isSignal": true; }; "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "headerFadeDistance": { "alias": "headerFadeDistance"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; "profileMenuItems": { "alias": "profileMenuItems"; "required": false; "isSignal": true; }; }, { "notificationClick": "notificationClick"; "avatarClick": "avatarClick"; "profileActionSelected": "profileActionSelected"; "refresh": "refresh"; "scroll": "scroll"; }, never, ["[header-content]", "[offline-indicator]", "*"], true, never>;
|
|
940
942
|
}
|
|
941
943
|
|
|
942
944
|
interface InlineTabItem {
|
|
@@ -1038,7 +1040,7 @@ declare class WhitelabelService {
|
|
|
1038
1040
|
readonly logoUrl: _angular_core.Signal<string>;
|
|
1039
1041
|
readonly logoMarkUrl: _angular_core.Signal<string>;
|
|
1040
1042
|
readonly logoAlt: _angular_core.Signal<string>;
|
|
1041
|
-
readonly logoSize: _angular_core.Signal<"
|
|
1043
|
+
readonly logoSize: _angular_core.Signal<"md" | "sm" | "lg" | "xl">;
|
|
1042
1044
|
readonly logoHeight: _angular_core.Signal<number>;
|
|
1043
1045
|
readonly appIconSurface: _angular_core.Signal<string>;
|
|
1044
1046
|
readonly appIconContent: _angular_core.Signal<string>;
|
|
@@ -2803,7 +2805,7 @@ declare class DsMobileListItemComponent implements AfterViewInit {
|
|
|
2803
2805
|
* - 'center' - Align to center
|
|
2804
2806
|
* - 'bottom' - Align to bottom
|
|
2805
2807
|
*/
|
|
2806
|
-
align: _angular_core.InputSignal<"
|
|
2808
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
2807
2809
|
/**
|
|
2808
2810
|
* Remove top padding — use on the first item in a section when there is
|
|
2809
2811
|
* no preceding content, to avoid unnecessary whitespace.
|
|
@@ -3091,7 +3093,7 @@ declare class DsMobileInteractiveListItemPostComponent {
|
|
|
3091
3093
|
* - 'center' - Align to center
|
|
3092
3094
|
* - 'bottom' - Align to bottom
|
|
3093
3095
|
*/
|
|
3094
|
-
align: _angular_core.InputSignal<"
|
|
3096
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
3095
3097
|
/**
|
|
3096
3098
|
* Whether the post card is clickable
|
|
3097
3099
|
*/
|
|
@@ -3319,7 +3321,7 @@ declare class DsMobileInteractiveListItemInquiryComponent {
|
|
|
3319
3321
|
* - 'center' - Align to center
|
|
3320
3322
|
* - 'bottom' - Align to bottom
|
|
3321
3323
|
*/
|
|
3322
|
-
align: _angular_core.InputSignal<"
|
|
3324
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
3323
3325
|
/**
|
|
3324
3326
|
* Whether the inquiry item is clickable
|
|
3325
3327
|
*/
|
|
@@ -4755,7 +4757,7 @@ declare class DsMobileInteractiveListItemMessageComponent {
|
|
|
4755
4757
|
* - 'center' - Align to center
|
|
4756
4758
|
* - 'bottom' - Align to bottom
|
|
4757
4759
|
*/
|
|
4758
|
-
align: _angular_core.InputSignal<"
|
|
4760
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
4759
4761
|
/**
|
|
4760
4762
|
* Whitelabel logomark on the avatar corner (e.g. org branding for staff).
|
|
4761
4763
|
* Default true — preserves backward compatibility with inquiry assignee rows.
|
|
@@ -4817,7 +4819,7 @@ declare class DsMobileContactListItemComponent {
|
|
|
4817
4819
|
/** Show a trailing trash-bin icon; emits {@link deleteClick} on tap. */
|
|
4818
4820
|
showDeleteAction: _angular_core.InputSignal<boolean>;
|
|
4819
4821
|
variant: _angular_core.InputSignal<"compact" | undefined>;
|
|
4820
|
-
align: _angular_core.InputSignal<"
|
|
4822
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
4821
4823
|
contactClick: _angular_core.OutputEmitterRef<void>;
|
|
4822
4824
|
selectionToggle: _angular_core.OutputEmitterRef<void>;
|
|
4823
4825
|
moreClick: _angular_core.OutputEmitterRef<void>;
|
|
@@ -4991,7 +4993,7 @@ declare class DsMobileGroupAvatarStackComponent {
|
|
|
4991
4993
|
/** Full member list; {@link currentUserId} is removed for display when set. */
|
|
4992
4994
|
members: _angular_core.InputSignal<ChatParticipant[]>;
|
|
4993
4995
|
customAvatarUrl: _angular_core.InputSignal<string>;
|
|
4994
|
-
size: _angular_core.InputSignal<"
|
|
4996
|
+
size: _angular_core.InputSignal<"md" | "sm" | "lg" | "xl">;
|
|
4995
4997
|
/** Row avatar (32×32, diagonal **xs** faces) vs header / hero stack. */
|
|
4996
4998
|
layout: _angular_core.InputSignal<"stack" | "list">;
|
|
4997
4999
|
/** When set, this participant is omitted from the stack (e.g. current user id). */
|
|
@@ -5304,7 +5306,7 @@ declare class DsMobileInteractiveListItemBookingComponent {
|
|
|
5304
5306
|
* - 'center' - Align to center
|
|
5305
5307
|
* - 'bottom' - Align to bottom
|
|
5306
5308
|
*/
|
|
5307
|
-
align: _angular_core.InputSignal<"
|
|
5309
|
+
align: _angular_core.InputSignal<"top" | "bottom" | "center">;
|
|
5308
5310
|
/**
|
|
5309
5311
|
* Whether the booking item is clickable
|
|
5310
5312
|
*/
|
|
@@ -5440,10 +5442,12 @@ declare class DsMobileTabBarComponent implements OnInit, AfterViewInit, OnDestro
|
|
|
5440
5442
|
* ```
|
|
5441
5443
|
*/
|
|
5442
5444
|
profileMenuItems?: ActionGroup[];
|
|
5445
|
+
notificationCount: number;
|
|
5443
5446
|
moreMenuItems: MoreMenuItem[];
|
|
5444
5447
|
moreMenuLabel: string;
|
|
5445
5448
|
moreMenuIcon: string;
|
|
5446
5449
|
moreMenuIconActive: string;
|
|
5450
|
+
notificationClick: EventEmitter<void>;
|
|
5447
5451
|
avatarClick: EventEmitter<void>;
|
|
5448
5452
|
/**
|
|
5449
5453
|
* Emitted when a profile menu action is selected.
|
|
@@ -5484,7 +5488,7 @@ declare class DsMobileTabBarComponent implements OnInit, AfterViewInit, OnDestro
|
|
|
5484
5488
|
*/
|
|
5485
5489
|
handleAvatarClick(): Promise<void>;
|
|
5486
5490
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileTabBarComponent, never>;
|
|
5487
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabBarComponent, "ds-mobile-tab-bar", never, { "tabs": { "alias": "tabs"; "required": false; }; "avatarType": { "alias": "avatarType"; "required": false; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; }; "profileMenuItems": { "alias": "profileMenuItems"; "required": false; }; "moreMenuItems": { "alias": "moreMenuItems"; "required": false; }; "moreMenuLabel": { "alias": "moreMenuLabel"; "required": false; }; "moreMenuIcon": { "alias": "moreMenuIcon"; "required": false; }; "moreMenuIconActive": { "alias": "moreMenuIconActive"; "required": false; }; }, { "avatarClick": "avatarClick"; "profileActionSelected": "profileActionSelected"; "moreMenuItemSelected": "moreMenuItemSelected"; }, never, never, true, never>;
|
|
5491
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabBarComponent, "ds-mobile-tab-bar", never, { "tabs": { "alias": "tabs"; "required": false; }; "avatarType": { "alias": "avatarType"; "required": false; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; }; "profileMenuItems": { "alias": "profileMenuItems"; "required": false; }; "notificationCount": { "alias": "notificationCount"; "required": false; }; "moreMenuItems": { "alias": "moreMenuItems"; "required": false; }; "moreMenuLabel": { "alias": "moreMenuLabel"; "required": false; }; "moreMenuIcon": { "alias": "moreMenuIcon"; "required": false; }; "moreMenuIconActive": { "alias": "moreMenuIconActive"; "required": false; }; }, { "notificationClick": "notificationClick"; "avatarClick": "avatarClick"; "profileActionSelected": "profileActionSelected"; "moreMenuItemSelected": "moreMenuItemSelected"; }, never, never, true, never>;
|
|
5488
5492
|
}
|
|
5489
5493
|
|
|
5490
5494
|
/**
|
|
@@ -6449,6 +6453,7 @@ declare class DsMobileModalBaseComponent extends MobileModalBase implements OnIn
|
|
|
6449
6453
|
* Check whether header-leading slot has actual projected content.
|
|
6450
6454
|
*/
|
|
6451
6455
|
hasHeaderLeadingContent(): boolean;
|
|
6456
|
+
hasHeaderTrailingContent(): boolean;
|
|
6452
6457
|
/**
|
|
6453
6458
|
* Check if a content child slot has actual content
|
|
6454
6459
|
*/
|
|
@@ -8600,7 +8605,7 @@ declare class DsMobileFabComponent implements AfterViewInit, OnDestroy {
|
|
|
8600
8605
|
* Note: FAB is always 56px circular, but this affects the icon size
|
|
8601
8606
|
* @default 'md'
|
|
8602
8607
|
*/
|
|
8603
|
-
size: _angular_core.InputSignal<"
|
|
8608
|
+
size: _angular_core.InputSignal<"md" | "sm" | "lg">;
|
|
8604
8609
|
/**
|
|
8605
8610
|
* ARIA label for accessibility
|
|
8606
8611
|
* @required - Always provide a descriptive label
|
|
@@ -8881,6 +8886,130 @@ declare class DsMobilePropertyBannerComponent {
|
|
|
8881
8886
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePropertyBannerComponent, "ds-mobile-property-banner", never, { "address": { "alias": "address"; "required": true; "isSignal": true; }; "photoUrl": { "alias": "photoUrl"; "required": true; "isSignal": true; }; "tenantCount": { "alias": "tenantCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8882
8887
|
}
|
|
8883
8888
|
|
|
8889
|
+
declare class DsMobileNotificationPromptComponent {
|
|
8890
|
+
protected readonly whitelabel: WhitelabelService;
|
|
8891
|
+
protected readonly dismissing: _angular_core.WritableSignal<boolean>;
|
|
8892
|
+
heading: _angular_core.InputSignal<string>;
|
|
8893
|
+
subtitle: _angular_core.InputSignal<string>;
|
|
8894
|
+
allowLabel: _angular_core.InputSignal<string>;
|
|
8895
|
+
dismissLabel: _angular_core.InputSignal<string>;
|
|
8896
|
+
allow: _angular_core.OutputEmitterRef<void>;
|
|
8897
|
+
dismiss: _angular_core.OutputEmitterRef<void>;
|
|
8898
|
+
private static readonly EXIT_DURATION;
|
|
8899
|
+
handleAllow(): void;
|
|
8900
|
+
handleDismiss(): void;
|
|
8901
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileNotificationPromptComponent, never>;
|
|
8902
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileNotificationPromptComponent, "ds-mobile-notification-prompt", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "allowLabel": { "alias": "allowLabel"; "required": false; "isSignal": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; }, { "allow": "allow"; "dismiss": "dismiss"; }, never, never, true, never>;
|
|
8903
|
+
}
|
|
8904
|
+
|
|
8905
|
+
declare class DsMobileNotificationButtonComponent {
|
|
8906
|
+
count: _angular_core.InputSignal<number>;
|
|
8907
|
+
clicked: _angular_core.OutputEmitterRef<void>;
|
|
8908
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileNotificationButtonComponent, never>;
|
|
8909
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileNotificationButtonComponent, "ds-mobile-notification-button", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
|
|
8910
|
+
}
|
|
8911
|
+
|
|
8912
|
+
type NotificationType = 'inquiry_update' | 'inquiry_assigned' | 'inquiry_resolved' | 'community_post' | 'community_comment' | 'community_like' | 'community_mention' | 'booking_confirmed' | 'booking_cancelled' | 'booking_reminder' | 'facility_available' | 'message_new' | 'message_group' | 'service_update' | 'handbook_update' | 'system_announcement' | 'system_welcome' | 'invite_received' | 'family_access';
|
|
8913
|
+
type NotificationLeading = 'icon' | 'avatar' | 'image' | 'logo';
|
|
8914
|
+
interface NotificationItem {
|
|
8915
|
+
id: string;
|
|
8916
|
+
type: NotificationType;
|
|
8917
|
+
title: string;
|
|
8918
|
+
message: string;
|
|
8919
|
+
createdAt: Date;
|
|
8920
|
+
read: boolean;
|
|
8921
|
+
leading: NotificationLeading;
|
|
8922
|
+
/** ID of the target entity (inquiry ID, post ID, conversation ID, facility ID, vendor ID) */
|
|
8923
|
+
targetId?: string;
|
|
8924
|
+
avatarInitials?: string;
|
|
8925
|
+
avatarSrc?: string;
|
|
8926
|
+
imageSrc?: string;
|
|
8927
|
+
iconName?: string;
|
|
8928
|
+
}
|
|
8929
|
+
declare const NOTIFICATION_ICON_MAP: Record<NotificationType, string>;
|
|
8930
|
+
|
|
8931
|
+
interface NotificationGroup {
|
|
8932
|
+
label: string;
|
|
8933
|
+
items: NotificationItem[];
|
|
8934
|
+
}
|
|
8935
|
+
declare class DsMobileNotificationModalComponent {
|
|
8936
|
+
private modalController;
|
|
8937
|
+
private notificationService;
|
|
8938
|
+
private bottomSheet;
|
|
8939
|
+
groups: _angular_core.Signal<NotificationGroup[]>;
|
|
8940
|
+
iconFor(type: string): string;
|
|
8941
|
+
private readonly TYPE_LABELS;
|
|
8942
|
+
labelFor(type: string): string;
|
|
8943
|
+
handleNotificationClick(item: NotificationItem): void;
|
|
8944
|
+
handleLongPress(item: NotificationItem): Promise<void>;
|
|
8945
|
+
openBulkActions(): Promise<void>;
|
|
8946
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileNotificationModalComponent, never>;
|
|
8947
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileNotificationModalComponent, "ds-mobile-notification-modal", never, {}, {}, never, never, true, never>;
|
|
8948
|
+
}
|
|
8949
|
+
|
|
8950
|
+
interface VendorModalOpener {
|
|
8951
|
+
open(props: {
|
|
8952
|
+
vendorName: string;
|
|
8953
|
+
vendorDescription?: string;
|
|
8954
|
+
vendorImage?: string;
|
|
8955
|
+
vendorLogo?: string;
|
|
8956
|
+
}): Promise<unknown>;
|
|
8957
|
+
}
|
|
8958
|
+
declare const VENDOR_MODAL_SERVICE: InjectionToken<VendorModalOpener>;
|
|
8959
|
+
declare class DsMobileNotificationModalService extends BaseModalService {
|
|
8960
|
+
private router;
|
|
8961
|
+
private notificationService;
|
|
8962
|
+
private postsService;
|
|
8963
|
+
private userService;
|
|
8964
|
+
private postModal;
|
|
8965
|
+
private peerMessaging;
|
|
8966
|
+
private peerChat;
|
|
8967
|
+
private bookingDetailSheet;
|
|
8968
|
+
private vendorModal;
|
|
8969
|
+
constructor(modalController: ModalController);
|
|
8970
|
+
/**
|
|
8971
|
+
* Open the notification modal. The modal reads notifications reactively
|
|
8972
|
+
* from NotificationService, so it updates live when items are marked
|
|
8973
|
+
* read or removed via long-press actions.
|
|
8974
|
+
*
|
|
8975
|
+
* Returns the tapped notification (if the user navigated to one), or null.
|
|
8976
|
+
*/
|
|
8977
|
+
open(): Promise<NotificationItem | null>;
|
|
8978
|
+
/**
|
|
8979
|
+
* Navigate to the screen associated with a notification item.
|
|
8980
|
+
* Public so downstream devs can call it from a Capacitor
|
|
8981
|
+
* `pushNotificationActionPerformed` listener for deep-link handling.
|
|
8982
|
+
*/
|
|
8983
|
+
routeTo(item: NotificationItem): Promise<void>;
|
|
8984
|
+
private openChat;
|
|
8985
|
+
private openVendorModal;
|
|
8986
|
+
private openBookingDetail;
|
|
8987
|
+
private openPostModal;
|
|
8988
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileNotificationModalService, never>;
|
|
8989
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsMobileNotificationModalService>;
|
|
8990
|
+
}
|
|
8991
|
+
|
|
8992
|
+
declare const SAMPLE_NOTIFICATIONS: NotificationItem[];
|
|
8993
|
+
|
|
8994
|
+
declare class RelativeTimePipe implements PipeTransform {
|
|
8995
|
+
transform(date: Date | null | undefined): string;
|
|
8996
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RelativeTimePipe, never>;
|
|
8997
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<RelativeTimePipe, "relativeTime", true>;
|
|
8998
|
+
}
|
|
8999
|
+
/**
|
|
9000
|
+
* Bucket a date into 'today' | 'yesterday' | 'earlier' for grouping notifications.
|
|
9001
|
+
*/
|
|
9002
|
+
declare function dateBucket(date: Date): 'today' | 'yesterday' | 'earlier';
|
|
9003
|
+
|
|
9004
|
+
declare class DsMobileCountBadgeComponent {
|
|
9005
|
+
count: _angular_core.InputSignal<number>;
|
|
9006
|
+
variant: _angular_core.InputSignal<"accent" | "muted" | "notification">;
|
|
9007
|
+
display: _angular_core.Signal<string>;
|
|
9008
|
+
label: _angular_core.Signal<string>;
|
|
9009
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileCountBadgeComponent, never>;
|
|
9010
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileCountBadgeComponent, "ds-mobile-count-badge", never, { "count": { "alias": "count"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
9011
|
+
}
|
|
9012
|
+
|
|
8884
9013
|
/**
|
|
8885
9014
|
* Post and Comment Models
|
|
8886
9015
|
* Unified data structures for community posts
|
|
@@ -8981,6 +9110,29 @@ declare class PostsService {
|
|
|
8981
9110
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PostsService>;
|
|
8982
9111
|
}
|
|
8983
9112
|
|
|
9113
|
+
declare class NotificationService {
|
|
9114
|
+
readonly notifications: _angular_core.WritableSignal<NotificationItem[]>;
|
|
9115
|
+
readonly unreadCount: _angular_core.Signal<number>;
|
|
9116
|
+
/**
|
|
9117
|
+
* Add a new notification to the top of the list.
|
|
9118
|
+
* Intended for downstream push integration — call this when a
|
|
9119
|
+
* real push payload arrives via Capacitor's `pushNotificationReceived` listener.
|
|
9120
|
+
*/
|
|
9121
|
+
addNotification(item: NotificationItem): void;
|
|
9122
|
+
markAsRead(id: string): void;
|
|
9123
|
+
markAllAsRead(): void;
|
|
9124
|
+
/**
|
|
9125
|
+
* Remove a single notification from the list permanently.
|
|
9126
|
+
*/
|
|
9127
|
+
removeNotification(id: string): void;
|
|
9128
|
+
/**
|
|
9129
|
+
* Remove all notifications from the list permanently.
|
|
9130
|
+
*/
|
|
9131
|
+
clearAll(): void;
|
|
9132
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationService, never>;
|
|
9133
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NotificationService>;
|
|
9134
|
+
}
|
|
9135
|
+
|
|
8984
9136
|
declare class MobileCommunityPageComponent {
|
|
8985
9137
|
private router;
|
|
8986
9138
|
private route;
|
|
@@ -8991,6 +9143,8 @@ declare class MobileCommunityPageComponent {
|
|
|
8991
9143
|
private postsService;
|
|
8992
9144
|
pageComponent: DsMobilePageMainComponent;
|
|
8993
9145
|
pinnedSwiper?: DsMobileSwiperComponent;
|
|
9146
|
+
private notificationModal;
|
|
9147
|
+
readonly notificationService: NotificationService;
|
|
8994
9148
|
allPosts: _angular_core.Signal<Post[]>;
|
|
8995
9149
|
pinnedPosts: _angular_core.Signal<Post[]>;
|
|
8996
9150
|
hasAnyPosts: _angular_core.Signal<boolean>;
|
|
@@ -9001,6 +9155,7 @@ declare class MobileCommunityPageComponent {
|
|
|
9001
9155
|
* Loads more posts when user scrolls to bottom
|
|
9002
9156
|
*/
|
|
9003
9157
|
onInfiniteScroll(event: any): Promise<void>;
|
|
9158
|
+
handleNotificationClick(): Promise<void>;
|
|
9004
9159
|
handleRefresh(event: any): void;
|
|
9005
9160
|
/**
|
|
9006
9161
|
* Open post detail modal
|
|
@@ -9041,11 +9196,14 @@ declare class MobileCommunityPageComponent {
|
|
|
9041
9196
|
declare class MobileHandbookPageComponent {
|
|
9042
9197
|
userService: UserService;
|
|
9043
9198
|
pageComponent: DsMobilePageMainComponent;
|
|
9199
|
+
private notificationModal;
|
|
9200
|
+
readonly notificationService: NotificationService;
|
|
9044
9201
|
utilitiesItems: HandbookItem[];
|
|
9045
9202
|
sikkerhedsudstyrItems: HandbookItem[];
|
|
9046
9203
|
serviceContractsItems: HandbookItem[];
|
|
9047
9204
|
equipmentItems: HandbookItem[];
|
|
9048
9205
|
constructor(userService: UserService);
|
|
9206
|
+
handleNotificationClick(): Promise<void>;
|
|
9049
9207
|
handleRefresh(event: any): void;
|
|
9050
9208
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileHandbookPageComponent, never>;
|
|
9051
9209
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileHandbookPageComponent, "app-mobile-handbook-page", never, {}, {}, never, never, true, never>;
|
|
@@ -9194,9 +9352,12 @@ declare class MobileHomePageComponent implements OnInit {
|
|
|
9194
9352
|
private modalCtrl;
|
|
9195
9353
|
private vendorModal;
|
|
9196
9354
|
private newInquiryModal;
|
|
9355
|
+
private notificationModal;
|
|
9356
|
+
readonly notificationService: NotificationService;
|
|
9197
9357
|
constructor(router: Router, navCtrl: NavController, userService: UserService, postsService: PostsService, postModal: DsMobilePostDetailModalService, trackingPermissionService: TrackingPermissionService, bottomSheet: DsMobileBottomSheetService, familyAccessService: FamilyAccessService, peerMessaging: PeerMessagingService, peerChat: PeerChatLauncherService, lightboxService: DsMobileLightboxService);
|
|
9198
9358
|
ngOnInit(): void;
|
|
9199
9359
|
private simulateLoad;
|
|
9360
|
+
handleNotificationClick(): Promise<void>;
|
|
9200
9361
|
handleRefresh(event: any): void;
|
|
9201
9362
|
openPost(postId: string, focusComment?: boolean): Promise<void>;
|
|
9202
9363
|
openInquiryDetail(inquiryId: string): void;
|
|
@@ -9239,6 +9400,8 @@ declare class MobileInquiriesPageComponent {
|
|
|
9239
9400
|
private newInquiryModal;
|
|
9240
9401
|
pageComponent: DsMobilePageMainComponent;
|
|
9241
9402
|
private inquiriesService;
|
|
9403
|
+
private notificationModal;
|
|
9404
|
+
readonly notificationService: NotificationService;
|
|
9242
9405
|
constructor(userService: UserService, navCtrl: NavController, newInquiryModal: DsMobileNewInquiryModalService);
|
|
9243
9406
|
filterStatus: _angular_core.WritableSignal<"open" | "closed" | "all">;
|
|
9244
9407
|
tabItems: InlineTabItem[];
|
|
@@ -9247,6 +9410,7 @@ declare class MobileInquiriesPageComponent {
|
|
|
9247
9410
|
getInquiryIcon(category: string): string;
|
|
9248
9411
|
openInquiryDetail(inquiryId: string): void;
|
|
9249
9412
|
showInquiryActions(inquiryId: string): void;
|
|
9413
|
+
handleNotificationClick(): Promise<void>;
|
|
9250
9414
|
handleRefresh(event: any): void;
|
|
9251
9415
|
createNewInquiry(): Promise<void>;
|
|
9252
9416
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileInquiriesPageComponent, never>;
|
|
@@ -9314,10 +9478,14 @@ declare class MobileTabsExampleComponent implements OnInit {
|
|
|
9314
9478
|
private navCtrl;
|
|
9315
9479
|
private whitelabelDemoModal;
|
|
9316
9480
|
private trackingPermissionService;
|
|
9481
|
+
private notificationModal;
|
|
9482
|
+
readonly notificationService: NotificationService;
|
|
9483
|
+
private notificationPrompt;
|
|
9317
9484
|
readonly pageLoading: PageLoadingService;
|
|
9485
|
+
readonly showNotificationPrompt: _angular_core.WritableSignal<boolean>;
|
|
9318
9486
|
private trackedProfileMenuItems;
|
|
9319
9487
|
constructor(userService: UserService, router: Router, navCtrl: NavController);
|
|
9320
|
-
ngOnInit(): void
|
|
9488
|
+
ngOnInit(): Promise<void>;
|
|
9321
9489
|
tabs: TabConfig[];
|
|
9322
9490
|
moreMenuItems: MoreMenuItem[];
|
|
9323
9491
|
/**
|
|
@@ -9337,6 +9505,9 @@ declare class MobileTabsExampleComponent implements OnInit {
|
|
|
9337
9505
|
*/
|
|
9338
9506
|
handleProfileAction(result: ActionResult): void;
|
|
9339
9507
|
handleMoreMenuAction(item: MoreMenuItem): void;
|
|
9508
|
+
handleNotificationAllow(): Promise<void>;
|
|
9509
|
+
handleNotificationDismiss(): void;
|
|
9510
|
+
handleNotificationClick(): Promise<void>;
|
|
9340
9511
|
/** Called by the error overlay retry button — clears error and re-navigates to home */
|
|
9341
9512
|
handleRetry(): void;
|
|
9342
9513
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileTabsExampleComponent, never>;
|
|
@@ -9403,6 +9574,8 @@ declare class MobileBookingPageComponent {
|
|
|
9403
9574
|
userService: UserService;
|
|
9404
9575
|
pageComponent: DsMobilePageMainComponent;
|
|
9405
9576
|
bookingsSwiper?: DsMobileSwiperComponent;
|
|
9577
|
+
private notificationModal;
|
|
9578
|
+
readonly notificationService: NotificationService;
|
|
9406
9579
|
cancellingBookingId: _angular_core.WritableSignal<string | null>;
|
|
9407
9580
|
private lang;
|
|
9408
9581
|
historyLinkText: _angular_core.Signal<string>;
|
|
@@ -9411,6 +9584,7 @@ declare class MobileBookingPageComponent {
|
|
|
9411
9584
|
activeBookings: _angular_core.WritableSignal<FacilityDetail[]>;
|
|
9412
9585
|
availableFacilities: _angular_core.WritableSignal<FacilityDetail[]>;
|
|
9413
9586
|
visibleFacilities: _angular_core.Signal<FacilityDetail[]>;
|
|
9587
|
+
handleNotificationClick(): Promise<void>;
|
|
9414
9588
|
handleRefresh(event: any): void;
|
|
9415
9589
|
/**
|
|
9416
9590
|
* Navigate to previous slide
|
|
@@ -9697,9 +9871,12 @@ declare class WhitelabelDemoModalService {
|
|
|
9697
9871
|
declare class TenantChatPageComponent {
|
|
9698
9872
|
private modalCtrl;
|
|
9699
9873
|
readonly userService: UserService;
|
|
9874
|
+
private notificationModal;
|
|
9875
|
+
readonly notificationService: NotificationService;
|
|
9700
9876
|
peerMessaging: PeerMessagingService;
|
|
9701
9877
|
peerChat: PeerChatLauncherService;
|
|
9702
9878
|
readonly isPeerGroupConversation: typeof isPeerGroupConversation;
|
|
9879
|
+
handleNotificationClick(): Promise<void>;
|
|
9703
9880
|
handleRefresh(event: {
|
|
9704
9881
|
target: {
|
|
9705
9882
|
complete: () => void;
|
|
@@ -9722,6 +9899,8 @@ declare function stripHtml(html: string): string;
|
|
|
9722
9899
|
declare class ServicesPageComponent {
|
|
9723
9900
|
pageComponent: DsMobilePageMainComponent;
|
|
9724
9901
|
private vendorModal;
|
|
9902
|
+
private notificationModal;
|
|
9903
|
+
readonly notificationService: NotificationService;
|
|
9725
9904
|
private newInquiryModal;
|
|
9726
9905
|
private inquiriesService;
|
|
9727
9906
|
private navCtrl;
|
|
@@ -9731,6 +9910,7 @@ declare class ServicesPageComponent {
|
|
|
9731
9910
|
stripHtml: typeof stripHtml;
|
|
9732
9911
|
openVendorSheet(vendor: ServiceVendor): Promise<void>;
|
|
9733
9912
|
private openInquiryForVendor;
|
|
9913
|
+
handleNotificationClick(): Promise<void>;
|
|
9734
9914
|
handleRefresh(event: CustomEvent): void;
|
|
9735
9915
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ServicesPageComponent, never>;
|
|
9736
9916
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ServicesPageComponent, "app-services-page", never, {}, {}, never, never, true, never>;
|
|
@@ -9816,5 +9996,43 @@ declare class MediaPickerService {
|
|
|
9816
9996
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MediaPickerService>;
|
|
9817
9997
|
}
|
|
9818
9998
|
|
|
9819
|
-
|
|
9820
|
-
|
|
9999
|
+
/**
|
|
10000
|
+
* Manages the notification permission prompt lifecycle.
|
|
10001
|
+
*
|
|
10002
|
+
* - Stores the user's "Not now" dismissal timestamp in localStorage
|
|
10003
|
+
* - Re-shows the prompt after a 24-hour cooldown
|
|
10004
|
+
* - Skips the prompt entirely if native permissions are already granted
|
|
10005
|
+
*
|
|
10006
|
+
* Downstream integration: call `checkPermissions()` before checking
|
|
10007
|
+
* `shouldShowPrompt()` to incorporate native permission status.
|
|
10008
|
+
*/
|
|
10009
|
+
declare class NotificationPromptService {
|
|
10010
|
+
private permissionGranted;
|
|
10011
|
+
/**
|
|
10012
|
+
* Record that the user dismissed the prompt. Stores the current
|
|
10013
|
+
* timestamp so the prompt can be suppressed for 24 hours.
|
|
10014
|
+
*/
|
|
10015
|
+
dismiss(): void;
|
|
10016
|
+
/**
|
|
10017
|
+
* Whether the prompt should be displayed right now.
|
|
10018
|
+
* Returns false if:
|
|
10019
|
+
* - Native permission is already granted
|
|
10020
|
+
* - The user dismissed less than 24 hours ago
|
|
10021
|
+
*/
|
|
10022
|
+
shouldShowPrompt(): boolean;
|
|
10023
|
+
/**
|
|
10024
|
+
* Call this on app launch to check native notification permission status.
|
|
10025
|
+
* If already granted, the prompt will never be shown.
|
|
10026
|
+
*/
|
|
10027
|
+
checkPermissions(): Promise<void>;
|
|
10028
|
+
/**
|
|
10029
|
+
* Mark that the user has granted permission (called after a successful
|
|
10030
|
+
* allow flow so the prompt is permanently hidden for this session).
|
|
10031
|
+
*/
|
|
10032
|
+
markGranted(): void;
|
|
10033
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationPromptService, never>;
|
|
10034
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NotificationPromptService>;
|
|
10035
|
+
}
|
|
10036
|
+
|
|
10037
|
+
export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCountBadgeComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileNotificationButtonComponent, DsMobileNotificationModalComponent, DsMobileNotificationModalService, DsMobileNotificationPromptComponent, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, NOTIFICATION_ICON_MAP, NotificationPromptService, NotificationService, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket };
|
|
10038
|
+
export type { ActionGroup, ActionItem, ActionResult, AddGroupTenantPickerRow, AppIconSize, AttachmentData, AttachmentFileType, AttachmentItem, AvatarSize, AvatarType, BadgePosition, BookingModalExtras, BookingResult, BottomSheetOptions, ChatAttachment, ChatGroupPanelLabels, ChatMessage, ChatModalData, ChatModalGroupData, ChatModalLabels, ChatParticipant, Comment, ActionResult as CommentActionResult, CommentData, CommunityAdminRow, ContactItem, ContactType, ContentWidth, CreateGroupMember, CreateGroupResult, DateOption, DropdownAlign, DropdownPosition, DsMobileDropdownItem, EditGroupMember, EditGroupResult, FacilityCreationModalOptions, FacilityDetailData, FacilityDetailDisplayData, FacilityDetailEditContext, FamilyInvite, FamilyMember, FamilyMemberStatus, GroupMemberRow, HandbookDetailData, HandbookItem, InlineTabItem, Inquiry, InquiryPhoto, Language, LightboxAuthor, LightboxImage, LightboxImageOptions, LightboxImageWithDescription, LightboxImageWithDescriptionOptions, LightboxMediaFile, LightboxMediaType, LightboxOptions, LightboxPdf, LightboxPdfOptions, LoadingPhase, LogoSize, LogoVariant, MediaPickerResult, ModalOptions, MoreMenuItem, NetworkStatus, NewFacilityData, NewInquiryData, NewInquiryModalOptions, NotificationItem, NotificationLeading, NotificationType, Post, ActionResult as PostActionResult, PostDetailData, PromptBottomSheetResult, PromptGroupPreviewMember, ServicePageLabels, ServiceVendor, TabConfig, TimeSlot, VendorModalOpener, WhitelabelConfig };
|