@propbinder/mobile-design 0.2.15 → 0.2.17
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 +3778 -5037
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
- package/index.d.ts +456 -1035
- package/package.json +1 -1
- package/styles/ionic.css +22 -61
- package/styles/mobile-common.css +1 -1
- package/styles/mobile-page-base.css +14 -20
package/index.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { AfterViewInit, OnInit, ElementRef, Injector, TemplateRef, OnDestroy, EventEmitter, ApplicationRef, EnvironmentInjector, Type, AfterContentInit, ChangeDetectorRef } from '@angular/core';
|
|
3
3
|
import { ModalController, IonContent, NavController, GestureController, ModalOptions as ModalOptions$1 } from '@ionic/angular/standalone';
|
|
4
|
-
import { Style } from '@capacitor/status-bar';
|
|
5
4
|
import { ImpactStyle } from '@capacitor/haptics';
|
|
6
5
|
import { DsTextareaComponent } from '@propbinder/design-system';
|
|
7
6
|
import { ControlValueAccessor } from '@angular/forms';
|
|
8
|
-
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
9
7
|
import { Router, ActivatedRoute } from '@angular/router';
|
|
10
|
-
import * as rxjs from 'rxjs';
|
|
11
|
-
import * as _propbinder_mobile_design from '@propbinder/mobile-design';
|
|
12
8
|
import { Animation } from '@ionic/angular';
|
|
13
9
|
|
|
14
10
|
/**
|
|
@@ -19,29 +15,20 @@ import { Animation } from '@ionic/angular';
|
|
|
19
15
|
* - 'full' - 100% width (no max)
|
|
20
16
|
*/
|
|
21
17
|
type ContentWidth = 'narrow' | 'standard' | 'wide' | 'full';
|
|
22
|
-
/**
|
|
23
|
-
* Network status type
|
|
24
|
-
*/
|
|
25
|
-
type NetworkStatus = 'online' | 'offline' | 'unknown';
|
|
26
18
|
/**
|
|
27
19
|
* MobilePageBase
|
|
28
20
|
*
|
|
29
21
|
* Shared base class for mobile page components (ds-mobile-page-main, ds-mobile-page-details).
|
|
30
|
-
* Provides consistent content width control
|
|
22
|
+
* Provides consistent content width control across all page types.
|
|
31
23
|
*
|
|
32
24
|
* **Padding Strategy:**
|
|
33
25
|
* - All pages use 20px horizontal padding globally
|
|
34
26
|
* - For tappable lists, use negative margins (e.g., margin: 0 -8px) to create full-width sections
|
|
35
27
|
* - This approach simplifies padding management and provides consistency
|
|
36
28
|
*
|
|
37
|
-
* **Network Monitoring:**
|
|
38
|
-
* - Tracks online/offline status via Capacitor Network plugin (native) or browser API (web)
|
|
39
|
-
* - Exposes `isOffline()` computed signal for easy consumption by child components
|
|
40
|
-
* - Pages can use this to conditionally disable features or show offline indicators
|
|
41
|
-
*
|
|
42
29
|
* @internal This is a base class and should not be used directly.
|
|
43
30
|
*/
|
|
44
|
-
declare abstract class MobilePageBase
|
|
31
|
+
declare abstract class MobilePageBase {
|
|
45
32
|
/**
|
|
46
33
|
* Maximum content width (desktop only)
|
|
47
34
|
*
|
|
@@ -72,68 +59,6 @@ declare abstract class MobilePageBase implements OnDestroy {
|
|
|
72
59
|
* @internal
|
|
73
60
|
*/
|
|
74
61
|
protected maxWidthValue: _angular_core.Signal<string>;
|
|
75
|
-
/**
|
|
76
|
-
* Network status signal
|
|
77
|
-
* Tracks current online/offline state
|
|
78
|
-
*
|
|
79
|
-
* @internal
|
|
80
|
-
*/
|
|
81
|
-
protected networkStatus: _angular_core.WritableSignal<NetworkStatus>;
|
|
82
|
-
/**
|
|
83
|
-
* Is the device currently offline?
|
|
84
|
-
* Public computed signal for consumption by child components and pages
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```typescript
|
|
88
|
-
* // In a page component
|
|
89
|
-
* @ViewChild(DsMobilePageMainComponent) pageComponent!: DsMobilePageMainComponent;
|
|
90
|
-
*
|
|
91
|
-
* get isOffline() {
|
|
92
|
-
* return this.pageComponent?.isOffline();
|
|
93
|
-
* }
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
isOffline: _angular_core.Signal<boolean>;
|
|
97
|
-
/**
|
|
98
|
-
* Is the device currently online?
|
|
99
|
-
* Public computed signal for consumption by child components and pages
|
|
100
|
-
*/
|
|
101
|
-
isOnline: _angular_core.Signal<boolean>;
|
|
102
|
-
/**
|
|
103
|
-
* Network listener ID for Capacitor Network plugin
|
|
104
|
-
* Used to clean up listener on destroy
|
|
105
|
-
*
|
|
106
|
-
* @internal
|
|
107
|
-
*/
|
|
108
|
-
private networkListenerId?;
|
|
109
|
-
/**
|
|
110
|
-
* Browser API event handlers
|
|
111
|
-
* Stored as class properties for proper cleanup
|
|
112
|
-
*
|
|
113
|
-
* @internal
|
|
114
|
-
*/
|
|
115
|
-
private handleOnline;
|
|
116
|
-
private handleOffline;
|
|
117
|
-
/**
|
|
118
|
-
* Initialize network status monitoring
|
|
119
|
-
* Uses Capacitor Network plugin for native apps, browser API for web
|
|
120
|
-
*
|
|
121
|
-
* @param isNative - Whether running on native platform (iOS/Android)
|
|
122
|
-
* @internal Called by child components in ngAfterViewInit
|
|
123
|
-
*/
|
|
124
|
-
protected initNetworkMonitoring(isNative: boolean): Promise<void>;
|
|
125
|
-
/**
|
|
126
|
-
* Initialize browser-based network monitoring
|
|
127
|
-
* Uses navigator.onLine and window events
|
|
128
|
-
*
|
|
129
|
-
* @internal
|
|
130
|
-
*/
|
|
131
|
-
private initBrowserNetworkMonitoring;
|
|
132
|
-
/**
|
|
133
|
-
* Cleanup network monitoring listeners
|
|
134
|
-
* Called automatically on component destroy
|
|
135
|
-
*/
|
|
136
|
-
ngOnDestroy(): void;
|
|
137
62
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobilePageBase, never>;
|
|
138
63
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MobilePageBase, never, never, { "contentWidth": { "alias": "contentWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
139
64
|
}
|
|
@@ -346,7 +271,6 @@ declare class DsMobilePostCreateBottomSheetComponent implements AfterViewInit, O
|
|
|
346
271
|
private elementRef;
|
|
347
272
|
textareaInput?: ElementRef<HTMLTextAreaElement>;
|
|
348
273
|
fileInput?: ElementRef<HTMLInputElement>;
|
|
349
|
-
private whitelabelService;
|
|
350
274
|
autoFocus: boolean;
|
|
351
275
|
isReadonly: boolean;
|
|
352
276
|
isEditMode: boolean;
|
|
@@ -382,6 +306,11 @@ declare class DsMobilePostCreateBottomSheetComponent implements AfterViewInit, O
|
|
|
382
306
|
handleCancel(): Promise<void>;
|
|
383
307
|
handlePost(): Promise<void>;
|
|
384
308
|
handleAddImage(): Promise<void>;
|
|
309
|
+
/**
|
|
310
|
+
* Restore StatusBar configuration (background task)
|
|
311
|
+
* Safe area padding is now handled preventively via applySafeAreaToToolbar()
|
|
312
|
+
*/
|
|
313
|
+
private restoreStatusBar;
|
|
385
314
|
handleRemoveImage(index: number): void;
|
|
386
315
|
handleAddAttachment(): void;
|
|
387
316
|
handleFileSelect(event: Event): void;
|
|
@@ -568,28 +497,6 @@ declare class DsMobilePageMainComponent extends MobilePageBase implements AfterV
|
|
|
568
497
|
showCondensedHeader: _angular_core.InputSignal<boolean>;
|
|
569
498
|
scrollThreshold: _angular_core.InputSignal<number>;
|
|
570
499
|
headerFadeDistance: _angular_core.InputSignal<number>;
|
|
571
|
-
/**
|
|
572
|
-
* Content wrapper padding
|
|
573
|
-
* - '0' (default) - No padding, use ds-mobile-section for content organization
|
|
574
|
-
* - '20px' - Legacy padding for content without sections
|
|
575
|
-
* - Any custom CSS padding value
|
|
576
|
-
*
|
|
577
|
-
* Note: Bottom padding for safe area and tab bar is always preserved
|
|
578
|
-
*
|
|
579
|
-
* @example
|
|
580
|
-
* ```html
|
|
581
|
-
* <!-- Default: sections handle padding -->
|
|
582
|
-
* <ds-mobile-page-main title="Home">
|
|
583
|
-
* <ds-mobile-section>...</ds-mobile-section>
|
|
584
|
-
* </ds-mobile-page-main>
|
|
585
|
-
*
|
|
586
|
-
* <!-- Legacy: content without sections -->
|
|
587
|
-
* <ds-mobile-page-main title="Home" contentPadding="20px">
|
|
588
|
-
* <div>Content without sections...</div>
|
|
589
|
-
* </ds-mobile-page-main>
|
|
590
|
-
* ```
|
|
591
|
-
*/
|
|
592
|
-
contentPadding: _angular_core.InputSignal<string>;
|
|
593
500
|
/**
|
|
594
501
|
* Profile menu action groups to display when avatar is clicked.
|
|
595
502
|
* If not provided, a default menu will be used (without Whitelabel Demo).
|
|
@@ -639,7 +546,7 @@ declare class DsMobilePageMainComponent extends MobilePageBase implements AfterV
|
|
|
639
546
|
*/
|
|
640
547
|
handleRefresh(event: any): Promise<void>;
|
|
641
548
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobilePageMainComponent, never>;
|
|
642
|
-
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; }; "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; }; "
|
|
549
|
+
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; }; "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; }; "profileMenuItems": { "alias": "profileMenuItems"; "required": false; "isSignal": true; }; }, { "avatarClick": "avatarClick"; "profileActionSelected": "profileActionSelected"; "refresh": "refresh"; "scroll": "scroll"; }, never, ["[header-content]", "*"], true, never>;
|
|
643
550
|
}
|
|
644
551
|
|
|
645
552
|
interface InlineTabItem {
|
|
@@ -684,176 +591,6 @@ declare class DsMobileInlineTabsComponent {
|
|
|
684
591
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInlineTabsComponent, "ds-mobile-inline-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": true; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
|
|
685
592
|
}
|
|
686
593
|
|
|
687
|
-
interface WhitelabelConfig {
|
|
688
|
-
logoUrl: string;
|
|
689
|
-
logoMarkUrl: string;
|
|
690
|
-
logoAlt: string;
|
|
691
|
-
logoSize: 'sm' | 'md' | 'lg' | 'xl';
|
|
692
|
-
logoWidth?: number;
|
|
693
|
-
logoHeight?: number;
|
|
694
|
-
logoMarkWidth?: number;
|
|
695
|
-
logoMarkHeight?: number;
|
|
696
|
-
appIconSurface: string;
|
|
697
|
-
appIconContent: string;
|
|
698
|
-
accent: string;
|
|
699
|
-
onAccent: string;
|
|
700
|
-
headerSurface: string;
|
|
701
|
-
headerContent: string;
|
|
702
|
-
headerAccent: string;
|
|
703
|
-
onHeaderAccent: string;
|
|
704
|
-
showCityIllustration: boolean;
|
|
705
|
-
signInBgType: 'solid' | 'gradient';
|
|
706
|
-
signInBgSolid: string;
|
|
707
|
-
signInBgGradientStart: string;
|
|
708
|
-
signInBgGradientEnd: string;
|
|
709
|
-
signInContentColor: string;
|
|
710
|
-
organizationName: string;
|
|
711
|
-
organizationId: string;
|
|
712
|
-
}
|
|
713
|
-
/**
|
|
714
|
-
* WhitelabelService
|
|
715
|
-
*
|
|
716
|
-
* Manages whitelabel configuration including logos and brand colors.
|
|
717
|
-
* Automatically updates CSS custom properties when colors change.
|
|
718
|
-
*
|
|
719
|
-
* @example
|
|
720
|
-
* Initialize with custom config:
|
|
721
|
-
* ```typescript
|
|
722
|
-
* whitelabelService.initialize({
|
|
723
|
-
* logoUrl: '/Assets/logos/acme-logo.svg',
|
|
724
|
-
* logoMarkUrl: '/Assets/logos/acme-mark.svg',
|
|
725
|
-
* accent: '#2563eb',
|
|
726
|
-
* onAccent: '#ffffff',
|
|
727
|
-
* headerSurface: '#1e40af',
|
|
728
|
-
* headerContent: '#ffffff',
|
|
729
|
-
* organizationName: 'Acme Corp'
|
|
730
|
-
* });
|
|
731
|
-
* ```
|
|
732
|
-
*
|
|
733
|
-
* Load from API:
|
|
734
|
-
* ```typescript
|
|
735
|
-
* await whitelabelService.loadFromApi('acme-corp');
|
|
736
|
-
* ```
|
|
737
|
-
*/
|
|
738
|
-
declare class WhitelabelService {
|
|
739
|
-
private _config;
|
|
740
|
-
readonly logoUrl: _angular_core.Signal<string>;
|
|
741
|
-
readonly logoMarkUrl: _angular_core.Signal<string>;
|
|
742
|
-
readonly logoAlt: _angular_core.Signal<string>;
|
|
743
|
-
readonly logoSize: _angular_core.Signal<"sm" | "md" | "lg" | "xl">;
|
|
744
|
-
readonly logoHeight: _angular_core.Signal<number>;
|
|
745
|
-
readonly appIconSurface: _angular_core.Signal<string>;
|
|
746
|
-
readonly appIconContent: _angular_core.Signal<string>;
|
|
747
|
-
readonly accent: _angular_core.Signal<string>;
|
|
748
|
-
readonly onAccent: _angular_core.Signal<string>;
|
|
749
|
-
readonly headerSurface: _angular_core.Signal<string>;
|
|
750
|
-
readonly headerContent: _angular_core.Signal<string>;
|
|
751
|
-
readonly headerAccent: _angular_core.Signal<string>;
|
|
752
|
-
readonly onHeaderAccent: _angular_core.Signal<string>;
|
|
753
|
-
readonly showCityIllustration: _angular_core.Signal<boolean>;
|
|
754
|
-
readonly signInBgType: _angular_core.Signal<"solid" | "gradient">;
|
|
755
|
-
readonly signInBgSolid: _angular_core.Signal<string>;
|
|
756
|
-
readonly signInBgGradientStart: _angular_core.Signal<string>;
|
|
757
|
-
readonly signInBgGradientEnd: _angular_core.Signal<string>;
|
|
758
|
-
readonly signInContentColor: _angular_core.Signal<string>;
|
|
759
|
-
readonly organizationName: _angular_core.Signal<string>;
|
|
760
|
-
readonly organizationId: _angular_core.Signal<string>;
|
|
761
|
-
readonly signInBgStyle: _angular_core.Signal<string>;
|
|
762
|
-
readonly config: _angular_core.Signal<WhitelabelConfig>;
|
|
763
|
-
constructor();
|
|
764
|
-
/**
|
|
765
|
-
* Setup global listener for modal dismiss events
|
|
766
|
-
* Re-applies status bar after modals close to override Ionic's cached state restoration
|
|
767
|
-
*/
|
|
768
|
-
private setupModalDismissListener;
|
|
769
|
-
/**
|
|
770
|
-
* Initialize whitelabel configuration
|
|
771
|
-
* Call this early in app initialization (app.config.ts or app.component.ts)
|
|
772
|
-
*/
|
|
773
|
-
initialize(config: Partial<WhitelabelConfig>): void;
|
|
774
|
-
/**
|
|
775
|
-
* Load whitelabel config from API
|
|
776
|
-
* Typically called on app startup based on subdomain, user tenant, etc.
|
|
777
|
-
*
|
|
778
|
-
* @param organizationId - The organization identifier (subdomain, tenant ID, etc.)
|
|
779
|
-
*/
|
|
780
|
-
loadFromApi(organizationId?: string): Promise<void>;
|
|
781
|
-
/**
|
|
782
|
-
* Update config dynamically (e.g., when user switches organizations)
|
|
783
|
-
*/
|
|
784
|
-
updateConfig(updates: Partial<WhitelabelConfig>): void;
|
|
785
|
-
/**
|
|
786
|
-
* Update only the brand colors
|
|
787
|
-
*/
|
|
788
|
-
updateColors(colors: {
|
|
789
|
-
appIconSurface?: string;
|
|
790
|
-
appIconContent?: string;
|
|
791
|
-
accent?: string;
|
|
792
|
-
onAccent?: string;
|
|
793
|
-
headerSurface?: string;
|
|
794
|
-
headerContent?: string;
|
|
795
|
-
headerAccent?: string;
|
|
796
|
-
onHeaderAccent?: string;
|
|
797
|
-
}): void;
|
|
798
|
-
/**
|
|
799
|
-
* Reset to default configuration
|
|
800
|
-
*/
|
|
801
|
-
resetToDefault(): void;
|
|
802
|
-
/**
|
|
803
|
-
* Convert hex color to RGB values
|
|
804
|
-
*/
|
|
805
|
-
private hexToRgb;
|
|
806
|
-
/**
|
|
807
|
-
* Calculate relative luminance of a color (WCAG standard)
|
|
808
|
-
* Returns a value between 0 (darkest) and 1 (lightest)
|
|
809
|
-
*/
|
|
810
|
-
private getRelativeLuminance;
|
|
811
|
-
/**
|
|
812
|
-
* Determine if a color is light (needs dark status bar content)
|
|
813
|
-
*/
|
|
814
|
-
private isColorLight;
|
|
815
|
-
/**
|
|
816
|
-
* Get the appropriate status bar style for a background color
|
|
817
|
-
* Public method for use by sign-in page
|
|
818
|
-
*/
|
|
819
|
-
getStatusBarStyleForColor(color: string): Style;
|
|
820
|
-
/**
|
|
821
|
-
* Generate a hover state color by applying a black overlay
|
|
822
|
-
* This simulates the effect of overlaying #000000 with 10% opacity
|
|
823
|
-
*
|
|
824
|
-
* @param baseColor - Hex color to overlay on (e.g., '#6B5FF5')
|
|
825
|
-
* @param overlayColor - Overlay color (default: '#000000' for darkening)
|
|
826
|
-
* @param overlayAlpha - Opacity of overlay (0-1, default: 0.1 = 10%)
|
|
827
|
-
* @returns Hex color with overlay applied
|
|
828
|
-
*
|
|
829
|
-
* @example
|
|
830
|
-
* generateHoverColor('#6B5FF5') // Returns darker purple for hover state
|
|
831
|
-
* generateHoverColor('#FF0000', '#FFFFFF', 0.2) // Lighten red by 20%
|
|
832
|
-
*/
|
|
833
|
-
private generateHoverColor;
|
|
834
|
-
/**
|
|
835
|
-
* Generate an active/pressed state color (darker than hover)
|
|
836
|
-
* Uses 20% black overlay for a more pronounced pressed effect
|
|
837
|
-
*
|
|
838
|
-
* @param baseColor - Hex color to overlay on
|
|
839
|
-
* @returns Hex color for active/pressed state
|
|
840
|
-
*/
|
|
841
|
-
private generateActiveColor;
|
|
842
|
-
/**
|
|
843
|
-
* Apply colors to CSS custom properties and native StatusBar
|
|
844
|
-
* This updates the actual CSS variables used throughout the app
|
|
845
|
-
* and the native status bar color on mobile devices
|
|
846
|
-
*/
|
|
847
|
-
private applyColors;
|
|
848
|
-
/**
|
|
849
|
-
* Update the native status bar color AND style
|
|
850
|
-
* Sets background color (Android) and content style (iOS/Android)
|
|
851
|
-
*/
|
|
852
|
-
private updateNativeStatusBar;
|
|
853
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelService, never>;
|
|
854
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WhitelabelService>;
|
|
855
|
-
}
|
|
856
|
-
|
|
857
594
|
/**
|
|
858
595
|
* DsMobilePageDetailsComponent
|
|
859
596
|
*
|
|
@@ -894,19 +631,9 @@ declare class DsMobilePageDetailsComponent extends MobilePageBase implements Aft
|
|
|
894
631
|
private elementRef;
|
|
895
632
|
ionContent?: IonContent;
|
|
896
633
|
private platform;
|
|
897
|
-
whitelabelService: WhitelabelService;
|
|
898
634
|
isNativePlatform: _angular_core.Signal<boolean>;
|
|
899
635
|
title: _angular_core.InputSignal<string>;
|
|
900
636
|
backRoute: _angular_core.InputSignal<string>;
|
|
901
|
-
/**
|
|
902
|
-
* Content wrapper padding
|
|
903
|
-
* - '0' (default) - No padding, use ds-mobile-section for content organization
|
|
904
|
-
* - '20px' - Legacy padding for content without sections
|
|
905
|
-
* - Any custom CSS padding value
|
|
906
|
-
*
|
|
907
|
-
* Note: Bottom padding for safe area and tab bar is always preserved
|
|
908
|
-
*/
|
|
909
|
-
contentPadding: _angular_core.InputSignal<string>;
|
|
910
637
|
tabs: _angular_core.InputSignal<InlineTabItem[] | undefined>;
|
|
911
638
|
activeTab: _angular_core.InputSignal<string>;
|
|
912
639
|
showRefresh: _angular_core.InputSignal<boolean>;
|
|
@@ -942,7 +669,7 @@ declare class DsMobilePageDetailsComponent extends MobilePageBase implements Aft
|
|
|
942
669
|
*/
|
|
943
670
|
handleRefresh(event: any): Promise<void>;
|
|
944
671
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobilePageDetailsComponent, never>;
|
|
945
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePageDetailsComponent, "ds-mobile-page-details", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "backRoute": { "alias": "backRoute"; "required": false; "isSignal": true; }; "
|
|
672
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePageDetailsComponent, "ds-mobile-page-details", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "backRoute": { "alias": "backRoute"; "required": false; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "headerFadeDistance": { "alias": "headerFadeDistance"; "required": false; "isSignal": true; }; }, { "back": "back"; "tabChange": "tabChange"; "refresh": "refresh"; "scroll": "scroll"; }, never, ["*"], true, never>;
|
|
946
673
|
}
|
|
947
674
|
|
|
948
675
|
/**
|
|
@@ -951,21 +678,18 @@ declare class DsMobilePageDetailsComponent extends MobilePageBase implements Aft
|
|
|
951
678
|
* Main content container for mobile pages with flexible layout options.
|
|
952
679
|
* Provides consistent spacing and layout patterns.
|
|
953
680
|
*
|
|
954
|
-
* **Note:** For production use, prefer `ds-mobile-section` for individual sections.
|
|
955
|
-
* This component is maintained for grid layouts and prototyping.
|
|
956
|
-
*
|
|
957
681
|
* @example
|
|
958
682
|
* ```html
|
|
959
683
|
* <!-- Default: stacked layout -->
|
|
960
684
|
* <ds-mobile-content>
|
|
961
|
-
* <ds-mobile-section>...</ds-mobile-section>
|
|
962
|
-
* <ds-mobile-section>...</ds-mobile-section>
|
|
685
|
+
* <ds-mobile-content-section>...</ds-mobile-content-section>
|
|
686
|
+
* <ds-mobile-content-section>...</ds-mobile-content-section>
|
|
963
687
|
* </ds-mobile-content>
|
|
964
688
|
*
|
|
965
689
|
* <!-- Grid layout -->
|
|
966
690
|
* <ds-mobile-content layout="grid-2">
|
|
967
|
-
* <
|
|
968
|
-
* <
|
|
691
|
+
* <ds-mobile-content-section>...</ds-mobile-content-section>
|
|
692
|
+
* <ds-mobile-content-section>...</ds-mobile-content-section>
|
|
969
693
|
* </ds-mobile-content>
|
|
970
694
|
* ```
|
|
971
695
|
*/
|
|
@@ -980,6 +704,25 @@ declare class DsMobileContentComponent {
|
|
|
980
704
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileContentComponent, never>;
|
|
981
705
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileContentComponent, "ds-mobile-content", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
982
706
|
}
|
|
707
|
+
/**
|
|
708
|
+
* DsMobileContentSectionComponent
|
|
709
|
+
*
|
|
710
|
+
* Section within mobile content with optional header.
|
|
711
|
+
*
|
|
712
|
+
* @example
|
|
713
|
+
* ```html
|
|
714
|
+
* <ds-mobile-content-section>
|
|
715
|
+
* <section-header width="half"></section-header>
|
|
716
|
+
* <content-row>
|
|
717
|
+
* <div class="grey-box"></div>
|
|
718
|
+
* </content-row>
|
|
719
|
+
* </ds-mobile-content-section>
|
|
720
|
+
* ```
|
|
721
|
+
*/
|
|
722
|
+
declare class DsMobileContentSectionComponent {
|
|
723
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileContentSectionComponent, never>;
|
|
724
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileContentSectionComponent, "ds-mobile-content-section", never, {}, {}, never, ["section-header", "*"], true, never>;
|
|
725
|
+
}
|
|
983
726
|
/**
|
|
984
727
|
* SectionHeaderComponent
|
|
985
728
|
*
|
|
@@ -1003,223 +746,360 @@ declare class ContentRowComponent {
|
|
|
1003
746
|
}
|
|
1004
747
|
|
|
1005
748
|
/**
|
|
1006
|
-
*
|
|
749
|
+
* DsMobileHeaderContentComponent
|
|
1007
750
|
*
|
|
1008
|
-
*
|
|
1009
|
-
*
|
|
751
|
+
* Container for header content tiles - displays tiles in a responsive grid.
|
|
752
|
+
* Used within the expandable header section of mobile pages to show
|
|
753
|
+
* summary information like property details, statistics, etc.
|
|
1010
754
|
*
|
|
1011
|
-
*
|
|
1012
|
-
*
|
|
1013
|
-
* -
|
|
1014
|
-
*
|
|
1015
|
-
*
|
|
1016
|
-
*
|
|
755
|
+
* @example
|
|
756
|
+
* ```html
|
|
757
|
+
* <ds-mobile-header-content header-content>
|
|
758
|
+
* <ds-mobile-header-content-tile>
|
|
759
|
+
* <tile-icon>
|
|
760
|
+
* <ds-icon name="remixHome4Line" />
|
|
761
|
+
* </tile-icon>
|
|
762
|
+
* <tile-content>
|
|
763
|
+
* <tile-label>Area</tile-label>
|
|
764
|
+
* <tile-value>120 m²</tile-value>
|
|
765
|
+
* </tile-content>
|
|
766
|
+
* </ds-mobile-header-content-tile>
|
|
767
|
+
* </ds-mobile-header-content>
|
|
768
|
+
* ```
|
|
769
|
+
*/
|
|
770
|
+
declare class DsMobileHeaderContentComponent {
|
|
771
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileHeaderContentComponent, never>;
|
|
772
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileHeaderContentComponent, "ds-mobile-header-content", never, {}, {}, never, ["ds-mobile-header-content-tile"], true, never>;
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* DsMobileHeaderContentTileComponent
|
|
776
|
+
*
|
|
777
|
+
* Individual tile for displaying summary information in the header.
|
|
778
|
+
* Styled with purple background to match the mobile header theme.
|
|
1017
779
|
*
|
|
1018
|
-
*
|
|
780
|
+
* Must contain:
|
|
781
|
+
* - `<tile-icon>` - Icon container (optional)
|
|
782
|
+
* - `<tile-content>` - Label and value container
|
|
1019
783
|
*
|
|
1020
784
|
* @example
|
|
1021
785
|
* ```html
|
|
1022
|
-
*
|
|
1023
|
-
*
|
|
1024
|
-
*
|
|
1025
|
-
*
|
|
1026
|
-
*
|
|
1027
|
-
*
|
|
1028
|
-
* </
|
|
1029
|
-
*
|
|
1030
|
-
*
|
|
1031
|
-
* <ds-mobile-section
|
|
1032
|
-
* headline="Messages"
|
|
1033
|
-
* icon="remixChat3Line"
|
|
1034
|
-
* linkText="View all"
|
|
1035
|
-
* (linkClick)="viewMessages()">
|
|
1036
|
-
* <div class="messages">...</div>
|
|
1037
|
-
* </ds-mobile-section>
|
|
1038
|
-
*
|
|
1039
|
-
* <!-- Empty state section (no headline) -->
|
|
1040
|
-
* <ds-mobile-section>
|
|
1041
|
-
* <div class="empty-state">
|
|
1042
|
-
* <ds-avatar type="icon" iconName="remixInboxLine" />
|
|
1043
|
-
* <h3>No messages yet</h3>
|
|
1044
|
-
* </div>
|
|
1045
|
-
* </ds-mobile-section>
|
|
1046
|
-
*
|
|
1047
|
-
* <!-- Last section without border -->
|
|
1048
|
-
* <ds-mobile-section
|
|
1049
|
-
* headline="Contact"
|
|
1050
|
-
* [showBorder]="false">
|
|
1051
|
-
* <div class="contact-form">...</div>
|
|
1052
|
-
* </ds-mobile-section>
|
|
1053
|
-
*
|
|
1054
|
-
* <!-- Section with custom padding -->
|
|
1055
|
-
* <ds-mobile-section
|
|
1056
|
-
* headline="Photos"
|
|
1057
|
-
* padding="20px 0">
|
|
1058
|
-
* <div class="photo-grid">...</div>
|
|
1059
|
-
* </ds-mobile-section>
|
|
1060
|
-
*
|
|
1061
|
-
* <!-- Full-width section in page (default behavior) -->
|
|
1062
|
-
* <ds-mobile-page-main title="Home">
|
|
1063
|
-
* <ds-mobile-section headline="Posts">
|
|
1064
|
-
* <div class="posts">...</div>
|
|
1065
|
-
* </ds-mobile-section>
|
|
1066
|
-
* </ds-mobile-page-main>
|
|
786
|
+
* <ds-mobile-header-content-tile>
|
|
787
|
+
* <tile-icon>
|
|
788
|
+
* <ds-icon name="remixHome4Line" size="20px" color="#DFE4FF" />
|
|
789
|
+
* </tile-icon>
|
|
790
|
+
* <tile-content>
|
|
791
|
+
* <tile-label>Rooms</tile-label>
|
|
792
|
+
* <tile-value>3 rooms</tile-value>
|
|
793
|
+
* </tile-content>
|
|
794
|
+
* </ds-mobile-header-content-tile>
|
|
1067
795
|
* ```
|
|
1068
796
|
*/
|
|
1069
|
-
declare class
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
797
|
+
declare class DsMobileHeaderContentTileComponent {
|
|
798
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileHeaderContentTileComponent, never>;
|
|
799
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileHeaderContentTileComponent, "ds-mobile-header-content-tile", never, {}, {}, never, ["tile-icon", "tile-content"], true, never>;
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* TileIconComponent
|
|
803
|
+
*
|
|
804
|
+
* Semantic slot for tile icon with dark purple background.
|
|
805
|
+
* Use within `ds-mobile-header-content-tile`.
|
|
806
|
+
*/
|
|
807
|
+
declare class TileIconComponent {
|
|
808
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileIconComponent, never>;
|
|
809
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileIconComponent, "tile-icon", never, {}, {}, never, ["*"], true, never>;
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* TileContentComponent
|
|
813
|
+
*
|
|
814
|
+
* Semantic slot for tile content containing label and value.
|
|
815
|
+
* Use within `ds-mobile-header-content-tile`.
|
|
816
|
+
*
|
|
817
|
+
* Contains:
|
|
818
|
+
* - `<tile-label>` - Small label text
|
|
819
|
+
* - `<tile-value>` - Large value text
|
|
820
|
+
*/
|
|
821
|
+
declare class TileContentComponent {
|
|
822
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileContentComponent, never>;
|
|
823
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileContentComponent, "tile-content", never, {}, {}, never, ["tile-label", "tile-value"], true, never>;
|
|
824
|
+
}
|
|
825
|
+
/**
|
|
826
|
+
* TileLabelComponent
|
|
827
|
+
*
|
|
828
|
+
* Label text for tile content.
|
|
829
|
+
* Use within `tile-content` inside `ds-mobile-header-content-tile`.
|
|
830
|
+
*/
|
|
831
|
+
declare class TileLabelComponent {
|
|
832
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileLabelComponent, never>;
|
|
833
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileLabelComponent, "tile-label", never, {}, {}, never, ["*"], true, never>;
|
|
834
|
+
}
|
|
835
|
+
/**
|
|
836
|
+
* TileValueComponent
|
|
837
|
+
*
|
|
838
|
+
* Value text for tile content.
|
|
839
|
+
* Use within `tile-content` inside `ds-mobile-header-content-tile`.
|
|
840
|
+
*/
|
|
841
|
+
declare class TileValueComponent {
|
|
842
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileValueComponent, never>;
|
|
843
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileValueComponent, "tile-value", never, {}, {}, never, ["*"], true, never>;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
interface WhitelabelConfig {
|
|
847
|
+
logoUrl: string;
|
|
848
|
+
logoMarkUrl: string;
|
|
849
|
+
logoAlt: string;
|
|
850
|
+
logoWidth?: number;
|
|
851
|
+
logoHeight?: number;
|
|
852
|
+
logoMarkWidth?: number;
|
|
853
|
+
logoMarkHeight?: number;
|
|
854
|
+
primarySurface: string;
|
|
855
|
+
primaryContent: string;
|
|
856
|
+
secondarySurface: string;
|
|
857
|
+
secondaryContent: string;
|
|
858
|
+
organizationName: string;
|
|
859
|
+
organizationId: string;
|
|
860
|
+
}
|
|
861
|
+
/**
|
|
862
|
+
* WhitelabelService
|
|
863
|
+
*
|
|
864
|
+
* Manages whitelabel configuration including logos and brand colors.
|
|
865
|
+
* Automatically updates CSS custom properties when colors change.
|
|
866
|
+
*
|
|
867
|
+
* @example
|
|
868
|
+
* Initialize with custom config:
|
|
869
|
+
* ```typescript
|
|
870
|
+
* whitelabelService.initialize({
|
|
871
|
+
* logoUrl: '/Assets/logos/acme-logo.svg',
|
|
872
|
+
* logoMarkUrl: '/Assets/logos/acme-mark.svg',
|
|
873
|
+
* primaryColor: '#2563eb',
|
|
874
|
+
* secondaryColor: '#3b82f6',
|
|
875
|
+
* organizationName: 'Acme Corp'
|
|
876
|
+
* });
|
|
877
|
+
* ```
|
|
878
|
+
*
|
|
879
|
+
* Load from API:
|
|
880
|
+
* ```typescript
|
|
881
|
+
* await whitelabelService.loadFromApi('acme-corp');
|
|
882
|
+
* ```
|
|
883
|
+
*/
|
|
884
|
+
declare class WhitelabelService {
|
|
885
|
+
private _config;
|
|
886
|
+
readonly logoUrl: _angular_core.Signal<string>;
|
|
887
|
+
readonly logoMarkUrl: _angular_core.Signal<string>;
|
|
888
|
+
readonly logoAlt: _angular_core.Signal<string>;
|
|
889
|
+
readonly logoHeight: _angular_core.Signal<number>;
|
|
890
|
+
readonly primarySurface: _angular_core.Signal<string>;
|
|
891
|
+
readonly primaryContent: _angular_core.Signal<string>;
|
|
892
|
+
readonly secondarySurface: _angular_core.Signal<string>;
|
|
893
|
+
readonly secondaryContent: _angular_core.Signal<string>;
|
|
894
|
+
readonly organizationName: _angular_core.Signal<string>;
|
|
895
|
+
readonly organizationId: _angular_core.Signal<string>;
|
|
896
|
+
readonly config: _angular_core.Signal<WhitelabelConfig>;
|
|
897
|
+
constructor();
|
|
1075
898
|
/**
|
|
1076
|
-
*
|
|
1077
|
-
*
|
|
899
|
+
* Initialize whitelabel configuration
|
|
900
|
+
* Call this early in app initialization (app.config.ts or app.component.ts)
|
|
1078
901
|
*/
|
|
1079
|
-
|
|
902
|
+
initialize(config: Partial<WhitelabelConfig>): void;
|
|
1080
903
|
/**
|
|
1081
|
-
*
|
|
1082
|
-
*
|
|
1083
|
-
*
|
|
904
|
+
* Load whitelabel config from API
|
|
905
|
+
* Typically called on app startup based on subdomain, user tenant, etc.
|
|
906
|
+
*
|
|
907
|
+
* @param organizationId - The organization identifier (subdomain, tenant ID, etc.)
|
|
1084
908
|
*/
|
|
1085
|
-
|
|
909
|
+
loadFromApi(organizationId?: string): Promise<void>;
|
|
1086
910
|
/**
|
|
1087
|
-
*
|
|
1088
|
-
* Accepts any valid CSS padding value
|
|
1089
|
-
* When not set, defaults to 20px on mobile and 32px on desktop
|
|
1090
|
-
* @default ''
|
|
911
|
+
* Update config dynamically (e.g., when user switches organizations)
|
|
1091
912
|
*/
|
|
1092
|
-
|
|
913
|
+
updateConfig(updates: Partial<WhitelabelConfig>): void;
|
|
1093
914
|
/**
|
|
1094
|
-
*
|
|
1095
|
-
* Accepts any valid CSS gap value
|
|
1096
|
-
* @default '12px'
|
|
915
|
+
* Update only the brand colors
|
|
1097
916
|
*/
|
|
1098
|
-
|
|
917
|
+
updateColors(colors: {
|
|
918
|
+
primarySurface?: string;
|
|
919
|
+
primaryContent?: string;
|
|
920
|
+
secondarySurface?: string;
|
|
921
|
+
secondaryContent?: string;
|
|
922
|
+
}): void;
|
|
1099
923
|
/**
|
|
1100
|
-
*
|
|
1101
|
-
* Accepts any valid CSS gap value
|
|
1102
|
-
* @default '12px'
|
|
924
|
+
* Reset to default configuration
|
|
1103
925
|
*/
|
|
1104
|
-
|
|
926
|
+
resetToDefault(): void;
|
|
1105
927
|
/**
|
|
1106
|
-
*
|
|
1107
|
-
* @default true
|
|
928
|
+
* Convert hex color to RGB values
|
|
1108
929
|
*/
|
|
1109
|
-
|
|
930
|
+
private hexToRgb;
|
|
1110
931
|
/**
|
|
1111
|
-
*
|
|
1112
|
-
*
|
|
932
|
+
* Generate a hover state color by applying a black overlay
|
|
933
|
+
* This simulates the effect of overlaying #000000 with 10% opacity
|
|
934
|
+
*
|
|
935
|
+
* @param baseColor - Hex color to overlay on (e.g., '#6B5FF5')
|
|
936
|
+
* @param overlayColor - Overlay color (default: '#000000' for darkening)
|
|
937
|
+
* @param overlayAlpha - Opacity of overlay (0-1, default: 0.1 = 10%)
|
|
938
|
+
* @returns Hex color with overlay applied
|
|
939
|
+
*
|
|
940
|
+
* @example
|
|
941
|
+
* generateHoverColor('#6B5FF5') // Returns darker purple for hover state
|
|
942
|
+
* generateHoverColor('#FF0000', '#FFFFFF', 0.2) // Lighten red by 20%
|
|
1113
943
|
*/
|
|
1114
|
-
|
|
944
|
+
private generateHoverColor;
|
|
1115
945
|
/**
|
|
1116
|
-
*
|
|
946
|
+
* Generate an active/pressed state color (darker than hover)
|
|
947
|
+
* Uses 20% black overlay for a more pronounced pressed effect
|
|
948
|
+
*
|
|
949
|
+
* @param baseColor - Hex color to overlay on
|
|
950
|
+
* @returns Hex color for active/pressed state
|
|
1117
951
|
*/
|
|
1118
|
-
|
|
952
|
+
private generateActiveColor;
|
|
1119
953
|
/**
|
|
1120
|
-
*
|
|
954
|
+
* Apply colors to CSS custom properties and native StatusBar
|
|
955
|
+
* This updates the actual CSS variables used throughout the app
|
|
956
|
+
* and the native status bar color on mobile devices
|
|
1121
957
|
*/
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
* Used within the expandable header section of mobile pages to show
|
|
1132
|
-
* summary information like property details, statistics, etc.
|
|
1133
|
-
*
|
|
1134
|
-
* @example
|
|
1135
|
-
* ```html
|
|
1136
|
-
* <ds-mobile-header-content header-content>
|
|
1137
|
-
* <ds-mobile-header-content-tile>
|
|
1138
|
-
* <tile-icon>
|
|
1139
|
-
* <ds-icon name="remixHome4Line" />
|
|
1140
|
-
* </tile-icon>
|
|
1141
|
-
* <tile-content>
|
|
1142
|
-
* <tile-label>Area</tile-label>
|
|
1143
|
-
* <tile-value>120 m²</tile-value>
|
|
1144
|
-
* </tile-content>
|
|
1145
|
-
* </ds-mobile-header-content-tile>
|
|
1146
|
-
* </ds-mobile-header-content>
|
|
1147
|
-
* ```
|
|
1148
|
-
*/
|
|
1149
|
-
declare class DsMobileHeaderContentComponent {
|
|
1150
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileHeaderContentComponent, never>;
|
|
1151
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileHeaderContentComponent, "ds-mobile-header-content", never, {}, {}, never, ["ds-mobile-header-content-tile"], true, never>;
|
|
958
|
+
private applyColors;
|
|
959
|
+
/**
|
|
960
|
+
* Update the native status bar color
|
|
961
|
+
* Note: This only works on Android. On iOS, the status bar is transparent
|
|
962
|
+
* and shows the web content behind it (controlled by CSS variables)
|
|
963
|
+
*/
|
|
964
|
+
private updateNativeStatusBar;
|
|
965
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelService, never>;
|
|
966
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WhitelabelService>;
|
|
1152
967
|
}
|
|
968
|
+
|
|
969
|
+
type LogoVariant = 'full' | 'mark';
|
|
970
|
+
type LogoSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
1153
971
|
/**
|
|
1154
|
-
*
|
|
1155
|
-
*
|
|
1156
|
-
* Individual tile for displaying summary information in the header.
|
|
1157
|
-
* Styled with purple background to match the mobile header theme.
|
|
972
|
+
* DsLogoComponent
|
|
1158
973
|
*
|
|
1159
|
-
*
|
|
1160
|
-
*
|
|
1161
|
-
* - `<tile-content>` - Label and value container
|
|
974
|
+
* Displays the whitelabeled logo or logomark based on current configuration.
|
|
975
|
+
* Automatically pulls logo assets from WhitelabelService.
|
|
1162
976
|
*
|
|
1163
977
|
* @example
|
|
978
|
+
* Full logo in header:
|
|
1164
979
|
* ```html
|
|
1165
|
-
* <ds-
|
|
1166
|
-
* <tile-icon>
|
|
1167
|
-
* <ds-icon name="remixHome4Line" size="20px" color="#DFE4FF" />
|
|
1168
|
-
* </tile-icon>
|
|
1169
|
-
* <tile-content>
|
|
1170
|
-
* <tile-label>Rooms</tile-label>
|
|
1171
|
-
* <tile-value>3 rooms</tile-value>
|
|
1172
|
-
* </tile-content>
|
|
1173
|
-
* </ds-mobile-header-content-tile>
|
|
980
|
+
* <ds-logo variant="full" size="md" />
|
|
1174
981
|
* ```
|
|
1175
|
-
*/
|
|
1176
|
-
declare class DsMobileHeaderContentTileComponent {
|
|
1177
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileHeaderContentTileComponent, never>;
|
|
1178
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileHeaderContentTileComponent, "ds-mobile-header-content-tile", never, {}, {}, never, ["tile-icon", "tile-content"], true, never>;
|
|
1179
|
-
}
|
|
1180
|
-
/**
|
|
1181
|
-
* TileIconComponent
|
|
1182
982
|
*
|
|
1183
|
-
*
|
|
1184
|
-
*
|
|
983
|
+
* Logomark for compact spaces:
|
|
984
|
+
* ```html
|
|
985
|
+
* <ds-logo variant="mark" size="sm" />
|
|
986
|
+
* ```
|
|
1185
987
|
*/
|
|
1186
|
-
declare class
|
|
1187
|
-
|
|
1188
|
-
|
|
988
|
+
declare class DsLogoComponent {
|
|
989
|
+
whitelabelService: WhitelabelService;
|
|
990
|
+
variant: LogoVariant;
|
|
991
|
+
size: LogoSize;
|
|
992
|
+
customHeight?: number;
|
|
993
|
+
customWidth?: number;
|
|
994
|
+
get logoSrc(): string;
|
|
995
|
+
get logoAlt(): string;
|
|
996
|
+
/**
|
|
997
|
+
* Priority: customHeight input > whitelabel config logoHeight > default 32px
|
|
998
|
+
*/
|
|
999
|
+
get effectiveHeight(): number;
|
|
1000
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsLogoComponent, never>;
|
|
1001
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsLogoComponent, "ds-logo", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "customHeight": { "alias": "customHeight"; "required": false; }; "customWidth": { "alias": "customWidth"; "required": false; }; }, {}, never, never, true, never>;
|
|
1189
1002
|
}
|
|
1003
|
+
|
|
1190
1004
|
/**
|
|
1191
|
-
*
|
|
1005
|
+
* DsMobileSystemMessageBannerComponent
|
|
1192
1006
|
*
|
|
1193
|
-
*
|
|
1194
|
-
*
|
|
1007
|
+
* Full-width centered banner component for displaying system messages in chat conversations.
|
|
1008
|
+
* Uses the same text styling as message bubbles for consistency.
|
|
1195
1009
|
*
|
|
1196
|
-
*
|
|
1197
|
-
* -
|
|
1198
|
-
* -
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileContentComponent, never>;
|
|
1202
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileContentComponent, "tile-content", never, {}, {}, never, ["tile-label", "tile-value"], true, never>;
|
|
1203
|
-
}
|
|
1204
|
-
/**
|
|
1205
|
-
* TileLabelComponent
|
|
1010
|
+
* Features:
|
|
1011
|
+
* - Full-width centered layout
|
|
1012
|
+
* - Subtle background with theming support
|
|
1013
|
+
* - Same typography as message bubbles
|
|
1014
|
+
* - Optional icon support
|
|
1206
1015
|
*
|
|
1207
|
-
*
|
|
1208
|
-
*
|
|
1016
|
+
* Common use cases:
|
|
1017
|
+
* - Inquiry status updates ("Your inquiry has been assigned to...")
|
|
1018
|
+
* - System notifications ("This inquiry is marked as resolved")
|
|
1019
|
+
* - Auto-replies ("We aim to respond within 24 hours...")
|
|
1020
|
+
* - Time/date separators
|
|
1021
|
+
*
|
|
1022
|
+
* @example
|
|
1023
|
+
* ```html
|
|
1024
|
+
* <!-- Simple system message -->
|
|
1025
|
+
* <ds-mobile-system-message-banner
|
|
1026
|
+
* [message]="'Ricki Meihlen har overtaget din henvendelse og vil kontakte dig snart.'">
|
|
1027
|
+
* </ds-mobile-system-message-banner>
|
|
1028
|
+
*
|
|
1029
|
+
* <!-- With icon -->
|
|
1030
|
+
* <ds-mobile-system-message-banner
|
|
1031
|
+
* [message]="'Vi bestræber os på at svare inden for 24 timer på hverdage.'"
|
|
1032
|
+
* [iconName]="'remixInformationLine'">
|
|
1033
|
+
* </ds-mobile-system-message-banner>
|
|
1034
|
+
* ```
|
|
1209
1035
|
*/
|
|
1210
|
-
declare class
|
|
1211
|
-
|
|
1212
|
-
|
|
1036
|
+
declare class DsMobileSystemMessageBannerComponent {
|
|
1037
|
+
/**
|
|
1038
|
+
* System message text to display
|
|
1039
|
+
*/
|
|
1040
|
+
message: _angular_core.InputSignal<string>;
|
|
1041
|
+
/**
|
|
1042
|
+
* Optional icon name (currently using inline SVG for info icon)
|
|
1043
|
+
* Can be extended to support full icon library integration
|
|
1044
|
+
*/
|
|
1045
|
+
iconName: _angular_core.InputSignal<string>;
|
|
1046
|
+
/**
|
|
1047
|
+
* Whether this system message appears directly after a timestamp
|
|
1048
|
+
* When true, removes top padding to reduce spacing
|
|
1049
|
+
*/
|
|
1050
|
+
afterTimestamp: _angular_core.InputSignal<boolean>;
|
|
1051
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileSystemMessageBannerComponent, never>;
|
|
1052
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileSystemMessageBannerComponent, "ds-mobile-system-message-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "afterTimestamp": { "alias": "afterTimestamp"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1213
1053
|
}
|
|
1054
|
+
|
|
1214
1055
|
/**
|
|
1215
|
-
*
|
|
1056
|
+
* DsMobileFileAttachmentComponent
|
|
1216
1057
|
*
|
|
1217
|
-
*
|
|
1218
|
-
*
|
|
1058
|
+
* File attachment display for various document types.
|
|
1059
|
+
* Shows file info card with icon, filename, and file size.
|
|
1060
|
+
* Supports PDF and generic document formats.
|
|
1061
|
+
* Emits click event to open file in viewer.
|
|
1062
|
+
*
|
|
1063
|
+
* @example
|
|
1064
|
+
* ```html
|
|
1065
|
+
* <ds-mobile-file-attachment
|
|
1066
|
+
* [fileName]="'Document.pdf'"
|
|
1067
|
+
* [fileSize]="'1.2 MB'"
|
|
1068
|
+
* [variant]="'pdf'"
|
|
1069
|
+
* (fileClick)="openFile()">
|
|
1070
|
+
* </ds-mobile-file-attachment>
|
|
1071
|
+
* ```
|
|
1219
1072
|
*/
|
|
1220
|
-
declare class
|
|
1221
|
-
|
|
1222
|
-
|
|
1073
|
+
declare class DsMobileFileAttachmentComponent {
|
|
1074
|
+
/**
|
|
1075
|
+
* File name
|
|
1076
|
+
*/
|
|
1077
|
+
fileName: _angular_core.InputSignal<string>;
|
|
1078
|
+
/**
|
|
1079
|
+
* File size display (e.g., "1.2 MB")
|
|
1080
|
+
*/
|
|
1081
|
+
fileSize: _angular_core.InputSignal<string>;
|
|
1082
|
+
/**
|
|
1083
|
+
* File type variant
|
|
1084
|
+
* - 'pdf' - PDF document (red icon)
|
|
1085
|
+
* - 'doc' - Generic document (blue icon)
|
|
1086
|
+
*/
|
|
1087
|
+
variant: _angular_core.InputSignal<"pdf" | "doc">;
|
|
1088
|
+
/**
|
|
1089
|
+
* Emits when the file attachment is clicked
|
|
1090
|
+
*/
|
|
1091
|
+
fileClick: _angular_core.OutputEmitterRef<void>;
|
|
1092
|
+
/**
|
|
1093
|
+
* Get the appropriate icon name based on variant
|
|
1094
|
+
*/
|
|
1095
|
+
getIconName(): string;
|
|
1096
|
+
/**
|
|
1097
|
+
* Get the file type label based on variant
|
|
1098
|
+
*/
|
|
1099
|
+
getFileTypeLabel(): string;
|
|
1100
|
+
handleClick(event: Event): void;
|
|
1101
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFileAttachmentComponent, never>;
|
|
1102
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFileAttachmentComponent, "ds-mobile-file-attachment", never, { "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "fileSize": { "alias": "fileSize"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "fileClick": "fileClick"; }, never, never, true, never>;
|
|
1223
1103
|
}
|
|
1224
1104
|
|
|
1225
1105
|
/**
|
|
@@ -2404,6 +2284,48 @@ declare class DsMobileListItemStaticComponent {
|
|
|
2404
2284
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileListItemStaticComponent, "ds-mobile-list-item-static", never, { "leadingSize": { "alias": "leadingSize"; "required": false; "isSignal": true; }; }, {}, never, ["[content-leading]", "[content-main]", "*", "[content-trailing]"], true, never>;
|
|
2405
2285
|
}
|
|
2406
2286
|
|
|
2287
|
+
/**
|
|
2288
|
+
* DsMobileActionListItemComponent
|
|
2289
|
+
*
|
|
2290
|
+
* Specialized list item for action sheets and menus.
|
|
2291
|
+
* Wraps ds-mobile-list-item with action-specific styling:
|
|
2292
|
+
* - Vertically centered content
|
|
2293
|
+
* - Interactive by default
|
|
2294
|
+
* - No dividers (controlled per-item)
|
|
2295
|
+
*
|
|
2296
|
+
* @example
|
|
2297
|
+
* ```html
|
|
2298
|
+
* <ds-mobile-action-list-item
|
|
2299
|
+
* title="Edit"
|
|
2300
|
+
* [showDivider]="true"
|
|
2301
|
+
* (itemClick)="handleEdit()">
|
|
2302
|
+
* <ds-icon content-leading name="remixEditLine" size="20px" />
|
|
2303
|
+
* </ds-mobile-action-list-item>
|
|
2304
|
+
* ```
|
|
2305
|
+
*/
|
|
2306
|
+
declare class DsMobileActionListItemComponent {
|
|
2307
|
+
/**
|
|
2308
|
+
* Action title text
|
|
2309
|
+
*/
|
|
2310
|
+
title: _angular_core.InputSignal<string>;
|
|
2311
|
+
/**
|
|
2312
|
+
* Whether to show divider below item
|
|
2313
|
+
* @default false
|
|
2314
|
+
*/
|
|
2315
|
+
showDivider: _angular_core.InputSignal<boolean>;
|
|
2316
|
+
/**
|
|
2317
|
+
* Whether the action is disabled
|
|
2318
|
+
* @default false
|
|
2319
|
+
*/
|
|
2320
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
2321
|
+
/**
|
|
2322
|
+
* Emits when the action item is clicked
|
|
2323
|
+
*/
|
|
2324
|
+
itemClick: _angular_core.OutputEmitterRef<void>;
|
|
2325
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileActionListItemComponent, never>;
|
|
2326
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileActionListItemComponent, "ds-mobile-action-list-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "showDivider": { "alias": "showDivider"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, ["[action-icon]", "[content-trailing]"], true, never>;
|
|
2327
|
+
}
|
|
2328
|
+
|
|
2407
2329
|
/**
|
|
2408
2330
|
* DsMobileInteractiveListItemPostComponent
|
|
2409
2331
|
*
|
|
@@ -2420,7 +2342,6 @@ declare class DsMobileListItemStaticComponent {
|
|
|
2420
2342
|
* [timestamp]="'2h ago'"
|
|
2421
2343
|
* [avatarInitials]="'JD'"
|
|
2422
2344
|
* [clickable]="true"
|
|
2423
|
-
* [enableLongPress]="true"
|
|
2424
2345
|
* (postClick)="openPost()">
|
|
2425
2346
|
*
|
|
2426
2347
|
* <post-content>
|
|
@@ -2477,13 +2398,6 @@ declare class DsMobileInteractiveListItemPostComponent {
|
|
|
2477
2398
|
* Whether the post card is clickable
|
|
2478
2399
|
*/
|
|
2479
2400
|
clickable: _angular_core.InputSignal<boolean>;
|
|
2480
|
-
/**
|
|
2481
|
-
* Enable long-press interaction when clickable is true
|
|
2482
|
-
* Set to false to disable long-press but keep click
|
|
2483
|
-
* Also controls visibility of desktop "more" button
|
|
2484
|
-
* @default true
|
|
2485
|
-
*/
|
|
2486
|
-
enableLongPress: _angular_core.InputSignal<boolean>;
|
|
2487
2401
|
/**
|
|
2488
2402
|
* Emits when the post card is clicked (if clickable)
|
|
2489
2403
|
*/
|
|
@@ -2501,7 +2415,7 @@ declare class DsMobileInteractiveListItemPostComponent {
|
|
|
2501
2415
|
handleLongPress(): void;
|
|
2502
2416
|
handleMoreButtonClick(event: Event): void;
|
|
2503
2417
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemPostComponent, never>;
|
|
2504
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemPostComponent, "ds-mobile-interactive-list-item-post", never, { "authorName": { "alias": "authorName"; "required": true; "isSignal": true; }; "authorRole": { "alias": "authorRole"; "required": true; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": true; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarType": { "alias": "avatarType"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; "isSignal": true; }; "showBadge": { "alias": "showBadge"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; };
|
|
2418
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemPostComponent, "ds-mobile-interactive-list-item-post", never, { "authorName": { "alias": "authorName"; "required": true; "isSignal": true; }; "authorRole": { "alias": "authorRole"; "required": true; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": true; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarType": { "alias": "avatarType"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; "isSignal": true; }; "showBadge": { "alias": "showBadge"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "postClick": "postClick"; "commentClick": "commentClick"; "longPress": "longPress"; }, never, ["post-menu", "post-content", "post-actions"], true, never>;
|
|
2505
2419
|
}
|
|
2506
2420
|
/**
|
|
2507
2421
|
* PostContentComponent
|
|
@@ -2649,7 +2563,6 @@ declare class PostPdfAttachmentComponent {
|
|
|
2649
2563
|
* [timestamp]="'12 days ago'"
|
|
2650
2564
|
* [iconName]="'remixCalendarLine'"
|
|
2651
2565
|
* [clickable]="true"
|
|
2652
|
-
* [enableLongPress]="true"
|
|
2653
2566
|
* (inquiryClick)="openInquiry()">
|
|
2654
2567
|
* </ds-mobile-interactive-list-item-inquiry>
|
|
2655
2568
|
* ```
|
|
@@ -2697,13 +2610,6 @@ declare class DsMobileInteractiveListItemInquiryComponent {
|
|
|
2697
2610
|
* Whether to show chevron icon
|
|
2698
2611
|
*/
|
|
2699
2612
|
showChevron: _angular_core.InputSignal<boolean>;
|
|
2700
|
-
/**
|
|
2701
|
-
* Enable long-press interaction when clickable is true
|
|
2702
|
-
* Set to false to disable long-press but keep click
|
|
2703
|
-
* Also controls visibility of desktop "more" button
|
|
2704
|
-
* @default true
|
|
2705
|
-
*/
|
|
2706
|
-
enableLongPress: _angular_core.InputSignal<boolean>;
|
|
2707
2613
|
/**
|
|
2708
2614
|
* Emits when the inquiry item is clicked (if clickable)
|
|
2709
2615
|
*/
|
|
@@ -2720,7 +2626,7 @@ declare class DsMobileInteractiveListItemInquiryComponent {
|
|
|
2720
2626
|
handleLongPress(): void;
|
|
2721
2627
|
handleMoreButtonClick(event: Event): void;
|
|
2722
2628
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemInquiryComponent, never>;
|
|
2723
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemInquiryComponent, "ds-mobile-interactive-list-item-inquiry", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": true; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; };
|
|
2629
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemInquiryComponent, "ds-mobile-interactive-list-item-inquiry", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": true; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; }, { "inquiryClick": "inquiryClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
2724
2630
|
}
|
|
2725
2631
|
|
|
2726
2632
|
/**
|
|
@@ -2909,7 +2815,7 @@ interface TabConfig {
|
|
|
2909
2815
|
* ```css
|
|
2910
2816
|
* ion-tabs {
|
|
2911
2817
|
* height: 100%;
|
|
2912
|
-
* background: var(--color-
|
|
2818
|
+
* background: var(--color-brand-secondary);
|
|
2913
2819
|
* }
|
|
2914
2820
|
* ```
|
|
2915
2821
|
*/
|
|
@@ -3014,6 +2920,45 @@ declare class DsMobileTabsComponent implements OnInit {
|
|
|
3014
2920
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabsComponent, "ds-mobile-tabs", 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; }; }, { "avatarClick": "avatarClick"; }, never, never, true, never>;
|
|
3015
2921
|
}
|
|
3016
2922
|
|
|
2923
|
+
/**
|
|
2924
|
+
* DsMobileSwiperComponent
|
|
2925
|
+
*
|
|
2926
|
+
* A reusable swiper/carousel component with configurable child width and spacing.
|
|
2927
|
+
*
|
|
2928
|
+
* Features:
|
|
2929
|
+
* - First slide is left-aligned
|
|
2930
|
+
* - Middle slides are centered when active
|
|
2931
|
+
* - Last slide is right-aligned
|
|
2932
|
+
* - Configurable slide width and gap
|
|
2933
|
+
* - Content projection via ng-content
|
|
2934
|
+
*
|
|
2935
|
+
* Usage:
|
|
2936
|
+
* ```html
|
|
2937
|
+
* <ds-mobile-swiper [slideWidth]="'75vw'" [gap]="16">
|
|
2938
|
+
* <div class="swiper-slide">Slide 1</div>
|
|
2939
|
+
* <div class="swiper-slide">Slide 2</div>
|
|
2940
|
+
* <div class="swiper-slide">Slide 3</div>
|
|
2941
|
+
* </ds-mobile-swiper>
|
|
2942
|
+
* ```
|
|
2943
|
+
*/
|
|
2944
|
+
declare class DsMobileSwiperComponent implements AfterViewInit, OnDestroy {
|
|
2945
|
+
/**
|
|
2946
|
+
* Width of each slide (e.g., '75vw', '300px', '80%')
|
|
2947
|
+
*/
|
|
2948
|
+
slideWidth: _angular_core.InputSignal<string>;
|
|
2949
|
+
/**
|
|
2950
|
+
* Gap between slides in pixels
|
|
2951
|
+
*/
|
|
2952
|
+
gap: _angular_core.InputSignal<number>;
|
|
2953
|
+
swiperContainer: ElementRef;
|
|
2954
|
+
private swiperInstance;
|
|
2955
|
+
ngAfterViewInit(): void;
|
|
2956
|
+
private initializeSwiper;
|
|
2957
|
+
ngOnDestroy(): void;
|
|
2958
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileSwiperComponent, never>;
|
|
2959
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileSwiperComponent, "ds-mobile-swiper", never, { "slideWidth": { "alias": "slideWidth"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2960
|
+
}
|
|
2961
|
+
|
|
3017
2962
|
/**
|
|
3018
2963
|
* Media file types supported by the lightbox
|
|
3019
2964
|
*/
|
|
@@ -3492,21 +3437,12 @@ declare class DsMobileLightboxFooterComponent {
|
|
|
3492
3437
|
* />
|
|
3493
3438
|
* ```
|
|
3494
3439
|
*/
|
|
3495
|
-
declare class DsMobileInlinePhotoComponent
|
|
3440
|
+
declare class DsMobileInlinePhotoComponent {
|
|
3496
3441
|
private lightboxService;
|
|
3497
3442
|
/**
|
|
3498
3443
|
* Array of image URLs to display
|
|
3499
3444
|
*/
|
|
3500
3445
|
images: string[];
|
|
3501
|
-
/**
|
|
3502
|
-
* Optional array of loading states for each image (by index)
|
|
3503
|
-
* If provided, shows loader overlay for images that are still loading
|
|
3504
|
-
*/
|
|
3505
|
-
loadingStates?: boolean[];
|
|
3506
|
-
/**
|
|
3507
|
-
* Internal signal to track image loading states
|
|
3508
|
-
*/
|
|
3509
|
-
private internalLoadingStates;
|
|
3510
3446
|
/**
|
|
3511
3447
|
* Author information (passed to lightbox)
|
|
3512
3448
|
*/
|
|
@@ -3523,11 +3459,6 @@ declare class DsMobileInlinePhotoComponent implements OnInit {
|
|
|
3523
3459
|
* Remaining images shown in lightbox only
|
|
3524
3460
|
*/
|
|
3525
3461
|
maxVisible: number;
|
|
3526
|
-
/**
|
|
3527
|
-
* Whether to use grid layout (true) or flex-wrap layout (false)
|
|
3528
|
-
* @default true
|
|
3529
|
-
*/
|
|
3530
|
-
useGrid: boolean;
|
|
3531
3462
|
/**
|
|
3532
3463
|
* Event emitted when lightbox is opened
|
|
3533
3464
|
*/
|
|
@@ -3536,92 +3467,20 @@ declare class DsMobileInlinePhotoComponent implements OnInit {
|
|
|
3536
3467
|
totalImages: number;
|
|
3537
3468
|
}>;
|
|
3538
3469
|
constructor(lightboxService: DsMobileLightboxService);
|
|
3539
|
-
/**
|
|
3540
|
-
* Initialize loading states for all visible images
|
|
3541
|
-
*/
|
|
3542
|
-
ngOnInit(): void;
|
|
3543
|
-
/**
|
|
3544
|
-
* Handle image load event
|
|
3545
|
-
*/
|
|
3546
|
-
onImageLoad(index: number): void;
|
|
3547
|
-
/**
|
|
3548
|
-
* Handle image error event
|
|
3549
|
-
*/
|
|
3550
|
-
onImageError(index: number): void;
|
|
3551
3470
|
/**
|
|
3552
3471
|
* Get the first N images to display inline
|
|
3553
3472
|
*/
|
|
3554
|
-
get visibleImages(): string[];
|
|
3555
|
-
/**
|
|
3556
|
-
* Check if a specific image is loading
|
|
3557
|
-
*/
|
|
3558
|
-
isImageLoading(index: number): boolean;
|
|
3559
|
-
/**
|
|
3560
|
-
* Calculate how many images are hidden
|
|
3561
|
-
*/
|
|
3562
|
-
get hiddenCount(): number;
|
|
3563
|
-
/**
|
|
3564
|
-
* Open lightbox with all images, starting at the clicked index
|
|
3565
|
-
*/
|
|
3566
|
-
openLightbox(index: number, event?: Event): void;
|
|
3567
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInlinePhotoComponent, never>;
|
|
3568
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInlinePhotoComponent, "ds-mobile-inline-photo", never, { "images": { "alias": "images"; "required": false; }; "loadingStates": { "alias": "loadingStates"; "required": false; }; "author": { "alias": "author"; "required": false; }; "maxVisible": { "alias": "maxVisible"; "required": false; }; "useGrid": { "alias": "useGrid"; "required": false; }; }, { "photoClick": "photoClick"; }, never, never, true, never>;
|
|
3569
|
-
}
|
|
3570
|
-
|
|
3571
|
-
/**
|
|
3572
|
-
* DsMobileLoaderOverlayComponent
|
|
3573
|
-
*
|
|
3574
|
-
* Reusable loader overlay component that displays a spinner centered over its container.
|
|
3575
|
-
* Designed to overlay images or other content during loading states.
|
|
3576
|
-
*
|
|
3577
|
-
* Features:
|
|
3578
|
-
* - Semi-transparent white background overlay
|
|
3579
|
-
* - Centered animated spinner
|
|
3580
|
-
* - Customizable spinner size
|
|
3581
|
-
* - Absolute positioning to cover parent
|
|
3582
|
-
* - Accessible with proper z-index stacking
|
|
3583
|
-
*
|
|
3584
|
-
* @example
|
|
3585
|
-
* ```html
|
|
3586
|
-
* <!-- Basic usage -->
|
|
3587
|
-
* <div style="position: relative;">
|
|
3588
|
-
* <img src="image.jpg" alt="Content" />
|
|
3589
|
-
* @if (isLoading) {
|
|
3590
|
-
* <ds-mobile-loader-overlay />
|
|
3591
|
-
* }
|
|
3592
|
-
* </div>
|
|
3593
|
-
*
|
|
3594
|
-
* <!-- With custom spinner size -->
|
|
3595
|
-
* <div style="position: relative;">
|
|
3596
|
-
* <div class="content">Loading content...</div>
|
|
3597
|
-
* <ds-mobile-loader-overlay [spinnerSize]="32" />
|
|
3598
|
-
* </div>
|
|
3599
|
-
*
|
|
3600
|
-
* <!-- Over an image with rounded corners -->
|
|
3601
|
-
* <div style="position: relative; border-radius: 12px; overflow: hidden;">
|
|
3602
|
-
* <img src="photo.jpg" />
|
|
3603
|
-
* <ds-mobile-loader-overlay [borderRadius]="12" />
|
|
3604
|
-
* </div>
|
|
3605
|
-
* ```
|
|
3606
|
-
*
|
|
3607
|
-
* @notes
|
|
3608
|
-
* - Parent container must have position: relative for the overlay to work correctly
|
|
3609
|
-
* - The overlay covers the entire parent element using inset: 0
|
|
3610
|
-
* - Spinner animation runs continuously at 0.6s per rotation
|
|
3611
|
-
*/
|
|
3612
|
-
declare class DsMobileLoaderOverlayComponent {
|
|
3473
|
+
get visibleImages(): string[];
|
|
3613
3474
|
/**
|
|
3614
|
-
*
|
|
3615
|
-
* @default 24
|
|
3475
|
+
* Calculate how many images are hidden
|
|
3616
3476
|
*/
|
|
3617
|
-
|
|
3477
|
+
get hiddenCount(): number;
|
|
3618
3478
|
/**
|
|
3619
|
-
*
|
|
3620
|
-
* @default 0
|
|
3479
|
+
* Open lightbox with all images, starting at the clicked index
|
|
3621
3480
|
*/
|
|
3622
|
-
|
|
3623
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
3624
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
3481
|
+
openLightbox(index: number, event?: Event): void;
|
|
3482
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInlinePhotoComponent, never>;
|
|
3483
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInlinePhotoComponent, "ds-mobile-inline-photo", never, { "images": { "alias": "images"; "required": false; }; "author": { "alias": "author"; "required": false; }; "maxVisible": { "alias": "maxVisible"; "required": false; }; }, { "photoClick": "photoClick"; }, never, never, true, never>;
|
|
3625
3484
|
}
|
|
3626
3485
|
|
|
3627
3486
|
/**
|
|
@@ -3883,29 +3742,6 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
|
|
|
3883
3742
|
* @default false
|
|
3884
3743
|
*/
|
|
3885
3744
|
hasFixedBottom: _angular_core.InputSignal<boolean>;
|
|
3886
|
-
/**
|
|
3887
|
-
* Content padding for modal content
|
|
3888
|
-
* Controls padding inside .modal-main-content
|
|
3889
|
-
* - '0' (default) - No padding, use ds-mobile-section for content organization
|
|
3890
|
-
* - '20px' - Legacy padding for content without sections
|
|
3891
|
-
* - Any custom CSS padding value
|
|
3892
|
-
*
|
|
3893
|
-
* @default '0'
|
|
3894
|
-
*
|
|
3895
|
-
* @example
|
|
3896
|
-
* ```html
|
|
3897
|
-
* <!-- Default: sections handle padding -->
|
|
3898
|
-
* <ds-mobile-modal-base headerTitle="Details">
|
|
3899
|
-
* <ds-mobile-section headline="Info">...</ds-mobile-section>
|
|
3900
|
-
* </ds-mobile-modal-base>
|
|
3901
|
-
*
|
|
3902
|
-
* <!-- Legacy: content without sections -->
|
|
3903
|
-
* <ds-mobile-modal-base headerTitle="Details" contentPadding="20px">
|
|
3904
|
-
* <div>Padded content</div>
|
|
3905
|
-
* </ds-mobile-modal-base>
|
|
3906
|
-
* ```
|
|
3907
|
-
*/
|
|
3908
|
-
contentPadding: _angular_core.InputSignal<string>;
|
|
3909
3745
|
/**
|
|
3910
3746
|
* Emitted when modal is closed
|
|
3911
3747
|
*/
|
|
@@ -3947,7 +3783,7 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
|
|
|
3947
3783
|
*/
|
|
3948
3784
|
protected cleanupKeyboardListeners(): void;
|
|
3949
3785
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileModalBase, never>;
|
|
3950
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MobileModalBase, never, never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerMeta": { "alias": "headerMeta"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "enableKeyboardHandling": { "alias": "enableKeyboardHandling"; "required": false; "isSignal": true; }; "hasFixedBottom": { "alias": "hasFixedBottom"; "required": false; "isSignal": true; };
|
|
3786
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MobileModalBase, never, never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerMeta": { "alias": "headerMeta"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "enableKeyboardHandling": { "alias": "enableKeyboardHandling"; "required": false; "isSignal": true; }; "hasFixedBottom": { "alias": "hasFixedBottom"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "keyboardWillShow": "keyboardWillShow"; "keyboardWillHide": "keyboardWillHide"; }, never, never, true, never>;
|
|
3951
3787
|
}
|
|
3952
3788
|
|
|
3953
3789
|
/**
|
|
@@ -4742,7 +4578,7 @@ interface ChatParticipant {
|
|
|
4742
4578
|
*
|
|
4743
4579
|
* Represents the data needed to display a chat conversation.
|
|
4744
4580
|
*
|
|
4745
|
-
|
|
4581
|
+
* @example
|
|
4746
4582
|
* ```typescript
|
|
4747
4583
|
* const chatData: ChatModalData = {
|
|
4748
4584
|
* participant: {
|
|
@@ -4938,7 +4774,7 @@ declare class DsMobileChatModalComponent implements OnInit, AfterViewInit {
|
|
|
4938
4774
|
/**
|
|
4939
4775
|
* Get file variant for card-inline-file component
|
|
4940
4776
|
*/
|
|
4941
|
-
getFileVariant(type: string):
|
|
4777
|
+
getFileVariant(type: string): "pdf" | "doc";
|
|
4942
4778
|
/**
|
|
4943
4779
|
* Handle file attachment click
|
|
4944
4780
|
*/
|
|
@@ -5367,7 +5203,6 @@ interface ContactItem {
|
|
|
5367
5203
|
* This component is typically not used directly - use DsMobileHandbookDetailModalService instead.
|
|
5368
5204
|
*/
|
|
5369
5205
|
declare class DsMobileHandbookDetailModalComponent implements OnInit {
|
|
5370
|
-
private modalController;
|
|
5371
5206
|
handbookData: HandbookDetailData;
|
|
5372
5207
|
/**
|
|
5373
5208
|
* Loading state - when true, shows loading indicator
|
|
@@ -5378,7 +5213,6 @@ declare class DsMobileHandbookDetailModalComponent implements OnInit {
|
|
|
5378
5213
|
*/
|
|
5379
5214
|
error?: string;
|
|
5380
5215
|
handbook: _angular_core.WritableSignal<HandbookDetailData>;
|
|
5381
|
-
constructor(modalController: ModalController);
|
|
5382
5216
|
ngOnInit(): void;
|
|
5383
5217
|
/**
|
|
5384
5218
|
* Split handbook items to enforce content structure rules:
|
|
@@ -5394,17 +5228,9 @@ declare class DsMobileHandbookDetailModalComponent implements OnInit {
|
|
|
5394
5228
|
*/
|
|
5395
5229
|
getDisplayItems(): HandbookItem[];
|
|
5396
5230
|
/**
|
|
5397
|
-
* Handle contact click
|
|
5398
|
-
*/
|
|
5399
|
-
handleContactClick(contact: ContactItem): Promise<void>;
|
|
5400
|
-
/**
|
|
5401
|
-
* Handle the selected contact action
|
|
5402
|
-
*/
|
|
5403
|
-
private handleContactAction;
|
|
5404
|
-
/**
|
|
5405
|
-
* Fallback method for copying text to clipboard (for older browsers/webviews)
|
|
5231
|
+
* Handle contact click
|
|
5406
5232
|
*/
|
|
5407
|
-
|
|
5233
|
+
handleContactClick(contact: ContactItem): void;
|
|
5408
5234
|
/**
|
|
5409
5235
|
* Handle attachment click
|
|
5410
5236
|
*/
|
|
@@ -5763,45 +5589,6 @@ declare class DsMobileFabComponent implements AfterViewInit, OnDestroy {
|
|
|
5763
5589
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFabComponent, "ds-mobile-fab", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "fabClick": "fabClick"; }, never, never, true, never>;
|
|
5764
5590
|
}
|
|
5765
5591
|
|
|
5766
|
-
type AppIconSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
5767
|
-
/**
|
|
5768
|
-
* DsAppIconComponent
|
|
5769
|
-
*
|
|
5770
|
-
* Displays the organization's logomark styled as an app icon with rounded corners
|
|
5771
|
-
* and shadow. The logomark fill color adapts to the background.
|
|
5772
|
-
* Perfect for sign-in pages, splash screens, etc.
|
|
5773
|
-
*
|
|
5774
|
-
* Uses percentage-based padding and border-radius for perfect proportional scaling.
|
|
5775
|
-
*
|
|
5776
|
-
* @example
|
|
5777
|
-
* Sign-in page (large):
|
|
5778
|
-
* ```html
|
|
5779
|
-
* <ds-app-icon size="xl" />
|
|
5780
|
-
* ```
|
|
5781
|
-
*
|
|
5782
|
-
* Settings preview (small):
|
|
5783
|
-
* ```html
|
|
5784
|
-
* <ds-app-icon size="sm" />
|
|
5785
|
-
* ```
|
|
5786
|
-
*/
|
|
5787
|
-
declare class DsAppIconComponent {
|
|
5788
|
-
whitelabelService: WhitelabelService;
|
|
5789
|
-
/**
|
|
5790
|
-
* Size of the app icon
|
|
5791
|
-
* - sm: 16x16px (padding: 2.4px, radius: 3.2px)
|
|
5792
|
-
* - md: 32x32px (padding: 4.8px, radius: 6.4px)
|
|
5793
|
-
* - lg: 48x48px (padding: 7.2px, radius: 9.6px)
|
|
5794
|
-
* - xl: 64x64px (padding: 9.6px, radius: 12.8px)
|
|
5795
|
-
*/
|
|
5796
|
-
size: AppIconSize;
|
|
5797
|
-
/**
|
|
5798
|
-
* Computed CSS class for size variant
|
|
5799
|
-
*/
|
|
5800
|
-
sizeClass: _angular_core.Signal<string>;
|
|
5801
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsAppIconComponent, never>;
|
|
5802
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsAppIconComponent, "ds-app-icon", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
|
|
5803
|
-
}
|
|
5804
|
-
|
|
5805
5592
|
type AvatarType = 'initials' | 'photo' | 'icon';
|
|
5806
5593
|
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
5807
5594
|
type BadgePosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
@@ -5831,50 +5618,10 @@ declare class DsAvatarWithBadgeComponent {
|
|
|
5831
5618
|
showBadge: boolean;
|
|
5832
5619
|
badgePosition: BadgePosition;
|
|
5833
5620
|
badgeClasses: _angular_core.Signal<string>;
|
|
5834
|
-
/**
|
|
5835
|
-
* Computed badge icon size that scales with avatar size
|
|
5836
|
-
* Maps avatar sizes to appropriate app icon sizes
|
|
5837
|
-
*/
|
|
5838
|
-
badgeIconSize: _angular_core.Signal<AppIconSize>;
|
|
5839
5621
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsAvatarWithBadgeComponent, never>;
|
|
5840
5622
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsAvatarWithBadgeComponent, "ds-avatar-with-badge", never, { "type": { "alias": "type"; "required": false; }; "size": { "alias": "size"; "required": false; }; "initials": { "alias": "initials"; "required": false; }; "src": { "alias": "src"; "required": false; }; "iconName": { "alias": "iconName"; "required": false; }; "showBadge": { "alias": "showBadge"; "required": false; }; "badgePosition": { "alias": "badgePosition"; "required": false; }; }, {}, never, never, true, never>;
|
|
5841
5623
|
}
|
|
5842
5624
|
|
|
5843
|
-
type LogoVariant = 'full' | 'mark';
|
|
5844
|
-
type LogoSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
5845
|
-
/**
|
|
5846
|
-
* DsLogoComponent
|
|
5847
|
-
*
|
|
5848
|
-
* Displays the whitelabeled logo or logomark based on current configuration.
|
|
5849
|
-
* Automatically pulls logo assets from WhitelabelService.
|
|
5850
|
-
*
|
|
5851
|
-
* @example
|
|
5852
|
-
* Full logo in header:
|
|
5853
|
-
* ```html
|
|
5854
|
-
* <ds-logo variant="full" size="md" />
|
|
5855
|
-
* ```
|
|
5856
|
-
*
|
|
5857
|
-
* Logomark for compact spaces:
|
|
5858
|
-
* ```html
|
|
5859
|
-
* <ds-logo variant="mark" size="sm" />
|
|
5860
|
-
* ```
|
|
5861
|
-
*/
|
|
5862
|
-
declare class DsLogoComponent {
|
|
5863
|
-
whitelabelService: WhitelabelService;
|
|
5864
|
-
variant: LogoVariant;
|
|
5865
|
-
size: LogoSize;
|
|
5866
|
-
customHeight?: number;
|
|
5867
|
-
customWidth?: number;
|
|
5868
|
-
get logoSrc(): string;
|
|
5869
|
-
get logoAlt(): string;
|
|
5870
|
-
/**
|
|
5871
|
-
* Priority: customHeight input > whitelabel config logoHeight > default 32px
|
|
5872
|
-
*/
|
|
5873
|
-
get effectiveHeight(): number;
|
|
5874
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsLogoComponent, never>;
|
|
5875
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsLogoComponent, "ds-logo", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "customHeight": { "alias": "customHeight"; "required": false; }; "customWidth": { "alias": "customWidth"; "required": false; }; }, {}, never, never, true, never>;
|
|
5876
|
-
}
|
|
5877
|
-
|
|
5878
5625
|
/**
|
|
5879
5626
|
* DsMobileEmptyStateComponent
|
|
5880
5627
|
*
|
|
@@ -5891,7 +5638,7 @@ declare class DsLogoComponent {
|
|
|
5891
5638
|
* ```html
|
|
5892
5639
|
* <!-- With image -->
|
|
5893
5640
|
* <ds-mobile-empty-state
|
|
5894
|
-
* [imageSrc]="'/Assets/
|
|
5641
|
+
* [imageSrc]="'/Assets/Empty state-chat.png'"
|
|
5895
5642
|
* [imageAlt]="'No messages'"
|
|
5896
5643
|
* [title]="'Ingen beskeder endnu'"
|
|
5897
5644
|
* [description]="'Start samtalen ved at sende en besked'">
|
|
@@ -5925,201 +5672,6 @@ declare class DsMobileEmptyStateComponent {
|
|
|
5925
5672
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileEmptyStateComponent, "ds-mobile-empty-state", never, { "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5926
5673
|
}
|
|
5927
5674
|
|
|
5928
|
-
/**
|
|
5929
|
-
* DsMobileOfflineBannerComponent
|
|
5930
|
-
*
|
|
5931
|
-
* A compact banner component to indicate offline status.
|
|
5932
|
-
* Designed to be used in the [offline-indicator] slot of page components.
|
|
5933
|
-
*
|
|
5934
|
-
* Features:
|
|
5935
|
-
* - Amber/yellow warning styling
|
|
5936
|
-
* - WiFi off icon
|
|
5937
|
-
* - Customizable message
|
|
5938
|
-
* - Compact, non-intrusive design
|
|
5939
|
-
* - Smooth slide-in animation
|
|
5940
|
-
*
|
|
5941
|
-
* @example
|
|
5942
|
-
* ```html
|
|
5943
|
-
* <ds-mobile-page-main title="Community">
|
|
5944
|
-
* <ds-mobile-offline-banner
|
|
5945
|
-
* offline-indicator
|
|
5946
|
-
* *ngIf="pageComponent.isOffline()">
|
|
5947
|
-
* </ds-mobile-offline-banner>
|
|
5948
|
-
*
|
|
5949
|
-
* <!-- Page content -->
|
|
5950
|
-
* </ds-mobile-page-main>
|
|
5951
|
-
* ```
|
|
5952
|
-
*/
|
|
5953
|
-
declare class DsMobileOfflineBannerComponent {
|
|
5954
|
-
/**
|
|
5955
|
-
* Icon to display (default: WiFi off icon)
|
|
5956
|
-
*/
|
|
5957
|
-
icon: _angular_core.InputSignal<string>;
|
|
5958
|
-
/**
|
|
5959
|
-
* Title text for the banner
|
|
5960
|
-
*/
|
|
5961
|
-
title: _angular_core.InputSignal<string>;
|
|
5962
|
-
/**
|
|
5963
|
-
* Optional secondary message
|
|
5964
|
-
*/
|
|
5965
|
-
message: _angular_core.InputSignal<string>;
|
|
5966
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileOfflineBannerComponent, never>;
|
|
5967
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileOfflineBannerComponent, "ds-mobile-offline-banner", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5968
|
-
}
|
|
5969
|
-
|
|
5970
|
-
/**
|
|
5971
|
-
* DsMobileIllustrationComponent
|
|
5972
|
-
*
|
|
5973
|
-
* A component that displays illustrations with dynamic whitelabel color adaptation.
|
|
5974
|
-
* Inlines SVG and uses CSS variables to adapt colors to your theme.
|
|
5975
|
-
*
|
|
5976
|
-
* **Features:**
|
|
5977
|
-
* - Predefined variants (post, inquiry) for common empty states
|
|
5978
|
-
* - Automatic color adaptation using CSS variables
|
|
5979
|
-
* - Preserves all SVG details (textures, filters, gradients, shadows)
|
|
5980
|
-
* - White radial gradient overlay for depth effect
|
|
5981
|
-
* - Configurable size
|
|
5982
|
-
*
|
|
5983
|
-
* **Color Adaptation:**
|
|
5984
|
-
* The SVGs use the `--color-accent` CSS variable for the main page colors.
|
|
5985
|
-
* All texture details, shadows, and effects are preserved.
|
|
5986
|
-
*
|
|
5987
|
-
* @example
|
|
5988
|
-
* ```html
|
|
5989
|
-
* <!-- Using predefined variant -->
|
|
5990
|
-
* <ds-mobile-illustration variant="post" />
|
|
5991
|
-
*
|
|
5992
|
-
* <!-- Using predefined variant with custom size -->
|
|
5993
|
-
* <ds-mobile-illustration variant="inquiry" size="150px" />
|
|
5994
|
-
* ```
|
|
5995
|
-
*/
|
|
5996
|
-
declare class DsMobileIllustrationComponent {
|
|
5997
|
-
private sanitizer;
|
|
5998
|
-
/**
|
|
5999
|
-
* Predefined illustration variant
|
|
6000
|
-
* Available variants: 'post', 'inquiry'
|
|
6001
|
-
*/
|
|
6002
|
-
variant: _angular_core.InputSignal<"post" | "inquiry">;
|
|
6003
|
-
/**
|
|
6004
|
-
* Illustration size (width and height)
|
|
6005
|
-
* @default '120px'
|
|
6006
|
-
*/
|
|
6007
|
-
size: _angular_core.InputSignal<string>;
|
|
6008
|
-
constructor(sanitizer: DomSanitizer);
|
|
6009
|
-
/**
|
|
6010
|
-
* Inline SVG content for each variant
|
|
6011
|
-
*/
|
|
6012
|
-
private svgMap;
|
|
6013
|
-
/**
|
|
6014
|
-
* Computed SVG content - sanitized for security
|
|
6015
|
-
*/
|
|
6016
|
-
svgContent: _angular_core.Signal<SafeHtml>;
|
|
6017
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileIllustrationComponent, never>;
|
|
6018
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileIllustrationComponent, "ds-mobile-illustration", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6019
|
-
}
|
|
6020
|
-
|
|
6021
|
-
/**
|
|
6022
|
-
* DsMobilePropertyBannerComponent
|
|
6023
|
-
*
|
|
6024
|
-
* Compact banner displaying property photo and address.
|
|
6025
|
-
* Designed for use in page headers to show current property context.
|
|
6026
|
-
*
|
|
6027
|
-
* @example
|
|
6028
|
-
* ```html
|
|
6029
|
-
* <ds-mobile-property-banner
|
|
6030
|
-
* address="Toftegårds Allé 5A, 2. tv."
|
|
6031
|
-
* photoUrl="/Assets/building.jpg">
|
|
6032
|
-
* </ds-mobile-property-banner>
|
|
6033
|
-
* ```
|
|
6034
|
-
*/
|
|
6035
|
-
declare class DsMobilePropertyBannerComponent {
|
|
6036
|
-
/**
|
|
6037
|
-
* Property address text
|
|
6038
|
-
*/
|
|
6039
|
-
address: _angular_core.InputSignal<string>;
|
|
6040
|
-
/**
|
|
6041
|
-
* URL to property photo
|
|
6042
|
-
*/
|
|
6043
|
-
photoUrl: _angular_core.InputSignal<string>;
|
|
6044
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobilePropertyBannerComponent, never>;
|
|
6045
|
-
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; }; }, {}, never, never, true, never>;
|
|
6046
|
-
}
|
|
6047
|
-
|
|
6048
|
-
/**
|
|
6049
|
-
* DsMobileSwiperComponent
|
|
6050
|
-
*
|
|
6051
|
-
* A reusable swiper/carousel component with configurable child width and spacing.
|
|
6052
|
-
*
|
|
6053
|
-
* Features:
|
|
6054
|
-
* - First slide is left-aligned
|
|
6055
|
-
* - Middle slides are centered when active
|
|
6056
|
-
* - Last slide is right-aligned
|
|
6057
|
-
* - Configurable slide width and gap
|
|
6058
|
-
* - Content projection via ng-content
|
|
6059
|
-
*
|
|
6060
|
-
* Usage:
|
|
6061
|
-
* ```html
|
|
6062
|
-
* <ds-mobile-swiper [slideWidth]="'75vw'" [gap]="16">
|
|
6063
|
-
* <div class="swiper-slide">Slide 1</div>
|
|
6064
|
-
* <div class="swiper-slide">Slide 2</div>
|
|
6065
|
-
* <div class="swiper-slide">Slide 3</div>
|
|
6066
|
-
* </ds-mobile-swiper>
|
|
6067
|
-
* ```
|
|
6068
|
-
*/
|
|
6069
|
-
declare class DsMobileSwiperComponent implements AfterViewInit, OnDestroy {
|
|
6070
|
-
private elementRef;
|
|
6071
|
-
/**
|
|
6072
|
-
* Width of each slide (e.g., '75vw', '300px', '80%')
|
|
6073
|
-
*/
|
|
6074
|
-
slideWidth: _angular_core.InputSignal<string>;
|
|
6075
|
-
/**
|
|
6076
|
-
* Gap between slides in pixels
|
|
6077
|
-
*/
|
|
6078
|
-
gap: _angular_core.InputSignal<number>;
|
|
6079
|
-
/**
|
|
6080
|
-
* Enable pagination dots
|
|
6081
|
-
*/
|
|
6082
|
-
pagination: _angular_core.InputSignal<boolean>;
|
|
6083
|
-
/**
|
|
6084
|
-
* Enable auto height - container adapts to active slide's height
|
|
6085
|
-
*/
|
|
6086
|
-
autoHeight: _angular_core.InputSignal<boolean>;
|
|
6087
|
-
/**
|
|
6088
|
-
* Enable progressive opacity based on slide position
|
|
6089
|
-
* Slides fade in/out smoothly as they move toward/away from center
|
|
6090
|
-
*/
|
|
6091
|
-
progressiveOpacity: _angular_core.InputSignal<boolean>;
|
|
6092
|
-
/**
|
|
6093
|
-
* Enable progressive scale based on slide position
|
|
6094
|
-
* Slides scale down smoothly as they move away from center
|
|
6095
|
-
*/
|
|
6096
|
-
progressiveScale: _angular_core.InputSignal<boolean>;
|
|
6097
|
-
swiperContainer: ElementRef;
|
|
6098
|
-
private swiperInstance;
|
|
6099
|
-
constructor(elementRef: ElementRef);
|
|
6100
|
-
ngAfterViewInit(): void;
|
|
6101
|
-
private initializeSwiper;
|
|
6102
|
-
/**
|
|
6103
|
-
* Navigate to previous slide
|
|
6104
|
-
*/
|
|
6105
|
-
slidePrev(): void;
|
|
6106
|
-
/**
|
|
6107
|
-
* Navigate to next slide
|
|
6108
|
-
*/
|
|
6109
|
-
slideNext(): void;
|
|
6110
|
-
/**
|
|
6111
|
-
* Check if at the beginning
|
|
6112
|
-
*/
|
|
6113
|
-
isBeginning(): boolean;
|
|
6114
|
-
/**
|
|
6115
|
-
* Check if at the end
|
|
6116
|
-
*/
|
|
6117
|
-
isEnd(): boolean;
|
|
6118
|
-
ngOnDestroy(): void;
|
|
6119
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileSwiperComponent, never>;
|
|
6120
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileSwiperComponent, "ds-mobile-swiper", never, { "slideWidth": { "alias": "slideWidth"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "autoHeight": { "alias": "autoHeight"; "required": false; "isSignal": true; }; "progressiveOpacity": { "alias": "progressiveOpacity"; "required": false; "isSignal": true; }; "progressiveScale": { "alias": "progressiveScale"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
6121
|
-
}
|
|
6122
|
-
|
|
6123
5675
|
/**
|
|
6124
5676
|
* User service for managing current user data globally
|
|
6125
5677
|
*/
|
|
@@ -6132,8 +5684,6 @@ declare class UserService {
|
|
|
6132
5684
|
readonly avatarType: _angular_core.Signal<"initials" | "photo" | "icon">;
|
|
6133
5685
|
readonly avatarSrc: _angular_core.Signal<string>;
|
|
6134
5686
|
readonly profileMenuItems: _angular_core.Signal<ActionGroup[] | undefined>;
|
|
6135
|
-
private profileActionSelectedSubject;
|
|
6136
|
-
readonly profileActionSelected$: rxjs.Observable<ActionResult>;
|
|
6137
5687
|
/**
|
|
6138
5688
|
* Update avatar configuration
|
|
6139
5689
|
*/
|
|
@@ -6146,10 +5696,6 @@ declare class UserService {
|
|
|
6146
5696
|
* if they don't receive profileMenuItems as an input.
|
|
6147
5697
|
*/
|
|
6148
5698
|
setProfileMenuItems(items: ActionGroup[]): void;
|
|
6149
|
-
/**
|
|
6150
|
-
* Notify subscribers that a profile action was selected
|
|
6151
|
-
*/
|
|
6152
|
-
notifyProfileAction(result: ActionResult): void;
|
|
6153
5699
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserService, never>;
|
|
6154
5700
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<UserService>;
|
|
6155
5701
|
}
|
|
@@ -6262,10 +5808,7 @@ declare class MobileCommunityPageComponent {
|
|
|
6262
5808
|
private postModal;
|
|
6263
5809
|
userService: UserService;
|
|
6264
5810
|
private postsService;
|
|
6265
|
-
pageComponent: DsMobilePageMainComponent;
|
|
6266
|
-
pinnedSwiper?: DsMobileSwiperComponent;
|
|
6267
5811
|
allPosts: _angular_core.Signal<Post[]>;
|
|
6268
|
-
pinnedPosts: _angular_core.Signal<Post[]>;
|
|
6269
5812
|
hasAnyPosts: _angular_core.Signal<boolean>;
|
|
6270
5813
|
hasMorePosts: _angular_core.Signal<boolean>;
|
|
6271
5814
|
constructor(router: Router, route: ActivatedRoute, bottomSheet: DsMobileBottomSheetService, lightbox: DsMobileLightboxService, postModal: DsMobilePostDetailModalService, userService: UserService, postsService: PostsService);
|
|
@@ -6291,29 +5834,12 @@ declare class MobileCommunityPageComponent {
|
|
|
6291
5834
|
* Handle long press on a post to show action sheet
|
|
6292
5835
|
*/
|
|
6293
5836
|
handlePostLongPress(postId: string, isOwnPost: boolean): Promise<void>;
|
|
6294
|
-
/**
|
|
6295
|
-
* Navigate to previous slide in pinned posts
|
|
6296
|
-
*/
|
|
6297
|
-
slidePrev(): void;
|
|
6298
|
-
/**
|
|
6299
|
-
* Navigate to next slide in pinned posts
|
|
6300
|
-
*/
|
|
6301
|
-
slideNext(): void;
|
|
6302
|
-
/**
|
|
6303
|
-
* Check if currently on first slide
|
|
6304
|
-
*/
|
|
6305
|
-
isFirstSlide(): boolean;
|
|
6306
|
-
/**
|
|
6307
|
-
* Check if currently on last slide
|
|
6308
|
-
*/
|
|
6309
|
-
isLastSlide(): boolean;
|
|
6310
5837
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileCommunityPageComponent, never>;
|
|
6311
5838
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileCommunityPageComponent, "app-mobile-community-page", never, {}, {}, never, never, true, never>;
|
|
6312
5839
|
}
|
|
6313
5840
|
|
|
6314
5841
|
declare class MobileHandbookPageComponent {
|
|
6315
5842
|
userService: UserService;
|
|
6316
|
-
pageComponent: DsMobilePageMainComponent;
|
|
6317
5843
|
utilitiesItems: HandbookItem[];
|
|
6318
5844
|
sikkerhedsudstyrItems: HandbookItem[];
|
|
6319
5845
|
serviceContractsItems: HandbookItem[];
|
|
@@ -6325,26 +5851,13 @@ declare class MobileHandbookPageComponent {
|
|
|
6325
5851
|
}
|
|
6326
5852
|
|
|
6327
5853
|
declare class MobileHomePageComponent {
|
|
6328
|
-
private
|
|
5854
|
+
private navCtrl;
|
|
6329
5855
|
userService: UserService;
|
|
6330
|
-
|
|
6331
|
-
private postModal;
|
|
6332
|
-
pageComponent: DsMobilePageMainComponent;
|
|
6333
|
-
recentPosts: _angular_core.Signal<_propbinder_mobile_design.Post[]>;
|
|
6334
|
-
private allInquiries;
|
|
6335
|
-
openInquiries: _angular_core.Signal<{
|
|
6336
|
-
id: string;
|
|
6337
|
-
title: string;
|
|
6338
|
-
description: string;
|
|
6339
|
-
status: "open";
|
|
6340
|
-
timestamp: string;
|
|
6341
|
-
}[]>;
|
|
6342
|
-
constructor(router: Router, userService: UserService, postsService: PostsService, postModal: DsMobilePostDetailModalService);
|
|
5856
|
+
constructor(navCtrl: NavController, userService: UserService);
|
|
6343
5857
|
handleRefresh(event: any): void;
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
navigateToInquiries(): void;
|
|
5858
|
+
handlePostClick(): void;
|
|
5859
|
+
handleContactClick(contactType: string): void;
|
|
5860
|
+
handleFileClick(fileType: string): void;
|
|
6348
5861
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileHomePageComponent, never>;
|
|
6349
5862
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileHomePageComponent, "app-home-page", never, {}, {}, never, never, true, never>;
|
|
6350
5863
|
}
|
|
@@ -6361,7 +5874,6 @@ declare class MobileInquiriesPageComponent {
|
|
|
6361
5874
|
userService: UserService;
|
|
6362
5875
|
private navCtrl;
|
|
6363
5876
|
private newInquiryModal;
|
|
6364
|
-
pageComponent: DsMobilePageMainComponent;
|
|
6365
5877
|
constructor(userService: UserService, navCtrl: NavController, newInquiryModal: DsMobileNewInquiryModalService);
|
|
6366
5878
|
filterStatus: _angular_core.WritableSignal<"open" | "closed" | "all">;
|
|
6367
5879
|
tabItems: InlineTabItem[];
|
|
@@ -6399,7 +5911,6 @@ declare class MobileInquiryDetailPageComponent {
|
|
|
6399
5911
|
messageThreads: MessageThread[];
|
|
6400
5912
|
unreadMessagesCount: _angular_core.Signal<number>;
|
|
6401
5913
|
photos: LightboxImage[];
|
|
6402
|
-
get photoUrls(): string[];
|
|
6403
5914
|
constructor(userService: UserService, lightbox: DsMobileLightboxService, chatModal: DsMobileChatModalService);
|
|
6404
5915
|
setActiveTab(tabId: string): void;
|
|
6405
5916
|
goBack(): void;
|
|
@@ -6445,9 +5956,6 @@ declare class MobileTabsExampleComponent implements OnInit {
|
|
|
6445
5956
|
* Handle profile menu action selection.
|
|
6446
5957
|
* The tab bar component handles the UI (opening/closing menu),
|
|
6447
5958
|
* this method handles the business logic.
|
|
6448
|
-
*
|
|
6449
|
-
* NOTE: Desktop only - called directly from tab bar.
|
|
6450
|
-
* Mobile actions are handled globally in AppComponent via UserService.
|
|
6451
5959
|
*/
|
|
6452
5960
|
handleProfileAction(result: ActionResult): void;
|
|
6453
5961
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileTabsExampleComponent, never>;
|
|
@@ -6507,127 +6015,40 @@ declare class MobilePostDetailPageComponent {
|
|
|
6507
6015
|
*
|
|
6508
6016
|
* Sign-in page with email authentication.
|
|
6509
6017
|
* Features logomark, decorative city background, and form validation.
|
|
6510
|
-
* Auto-focuses email input on iOS to trigger keyboard.
|
|
6511
6018
|
*/
|
|
6512
|
-
declare class SignInPageComponent
|
|
6513
|
-
emailInputRef?: ElementRef;
|
|
6514
|
-
whitelabelService: WhitelabelService;
|
|
6019
|
+
declare class SignInPageComponent {
|
|
6515
6020
|
email: string;
|
|
6516
6021
|
emailError: _angular_core.WritableSignal<boolean>;
|
|
6517
6022
|
isSubmitting: _angular_core.WritableSignal<boolean>;
|
|
6518
6023
|
emailSent: _angular_core.WritableSignal<boolean>;
|
|
6519
|
-
ngAfterViewInit(): void;
|
|
6520
|
-
/**
|
|
6521
|
-
* Show the keyboard on mobile platforms
|
|
6522
|
-
*/
|
|
6523
|
-
private showKeyboard;
|
|
6524
6024
|
handleSubmit(): void;
|
|
6525
6025
|
handleBackToLogin(): void;
|
|
6526
|
-
/**
|
|
6527
|
-
* Update status bar for sign-in page background
|
|
6528
|
-
* Uses the sign-in background color to determine appropriate status bar style
|
|
6529
|
-
*/
|
|
6530
|
-
private updateSignInStatusBar;
|
|
6531
|
-
/**
|
|
6532
|
-
* Restore status bar to header color when leaving sign-in page
|
|
6533
|
-
*/
|
|
6534
|
-
ngOnDestroy(): void;
|
|
6535
|
-
/**
|
|
6536
|
-
* Restore status bar to use header surface color
|
|
6537
|
-
*/
|
|
6538
|
-
private restoreHeaderStatusBar;
|
|
6539
6026
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SignInPageComponent, never>;
|
|
6540
6027
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SignInPageComponent, "app-sign-in", never, {}, {}, never, never, true, never>;
|
|
6541
6028
|
}
|
|
6542
6029
|
|
|
6543
6030
|
/**
|
|
6544
|
-
* Whitelabel Demo
|
|
6031
|
+
* Whitelabel Demo Page
|
|
6545
6032
|
*
|
|
6546
6033
|
* Demonstrates the whitelabeling system with theme selection, brand colors, and logo previews.
|
|
6547
|
-
* Opens as a full-screen modal similar to post details.
|
|
6548
6034
|
*/
|
|
6549
|
-
declare class
|
|
6035
|
+
declare class WhitelabelDemoPage implements OnInit {
|
|
6550
6036
|
whitelabelService: WhitelabelService;
|
|
6551
|
-
private modalController;
|
|
6552
6037
|
currentTheme: string;
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
customHeaderSurface: string;
|
|
6558
|
-
customHeaderContent: string;
|
|
6559
|
-
customHeaderAccent: string;
|
|
6560
|
-
customOnHeaderAccent: string;
|
|
6561
|
-
customSignInBgSolid: string;
|
|
6562
|
-
customSignInBgGradientStart: string;
|
|
6563
|
-
customSignInBgGradientEnd: string;
|
|
6564
|
-
customSignInContentColor: string;
|
|
6038
|
+
customPrimarySurface: string;
|
|
6039
|
+
customPrimaryContent: string;
|
|
6040
|
+
customSecondarySurface: string;
|
|
6041
|
+
customSecondaryContent: string;
|
|
6565
6042
|
ngOnInit(): void;
|
|
6566
|
-
/**
|
|
6567
|
-
* Detect the current active theme based on colors
|
|
6568
|
-
*/
|
|
6569
|
-
private detectCurrentTheme;
|
|
6570
|
-
/**
|
|
6571
|
-
* Close the modal
|
|
6572
|
-
*/
|
|
6573
|
-
close(): void;
|
|
6574
6043
|
applyDefaultTheme(): void;
|
|
6575
6044
|
applyCejTheme(): void;
|
|
6576
6045
|
applyPkaTheme(): void;
|
|
6577
6046
|
applyClaveTheme(): void;
|
|
6578
6047
|
applyFreedomTheme(): void;
|
|
6579
6048
|
applyCustomColors(): void;
|
|
6580
|
-
toggleCityIllustration(): void;
|
|
6581
|
-
updateSignInBgType(type: 'solid' | 'gradient'): void;
|
|
6582
|
-
updateLogoSize(size: 'sm' | 'md' | 'lg' | 'xl'): void;
|
|
6583
|
-
applySignInBackground(): void;
|
|
6584
|
-
applySignInContentColor(): void;
|
|
6585
|
-
private updateSignInBgInputs;
|
|
6586
|
-
private updateSignInContentColorInput;
|
|
6587
6049
|
private updateCustomColorInputs;
|
|
6588
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
6589
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
6590
|
-
}
|
|
6591
|
-
|
|
6592
|
-
/**
|
|
6593
|
-
* WhitelabelDemoModalService
|
|
6594
|
-
*
|
|
6595
|
-
* Service for displaying the whitelabel demo in a full-screen modal.
|
|
6596
|
-
* Built on Ionic's modal system with native gestures and animations.
|
|
6597
|
-
*
|
|
6598
|
-
* @example
|
|
6599
|
-
* ```typescript
|
|
6600
|
-
* constructor(private whitelabelModal: WhitelabelDemoModalService) {}
|
|
6601
|
-
*
|
|
6602
|
-
* async openDemo() {
|
|
6603
|
-
* await this.whitelabelModal.open();
|
|
6604
|
-
* }
|
|
6605
|
-
* ```
|
|
6606
|
-
*/
|
|
6607
|
-
declare class WhitelabelDemoModalService {
|
|
6608
|
-
private modalController;
|
|
6609
|
-
constructor(modalController: ModalController);
|
|
6610
|
-
/**
|
|
6611
|
-
* Open the whitelabel demo modal
|
|
6612
|
-
*
|
|
6613
|
-
* @returns Promise that resolves when the modal is presented
|
|
6614
|
-
*/
|
|
6615
|
-
open(): Promise<void>;
|
|
6616
|
-
/**
|
|
6617
|
-
* Close the currently open whitelabel demo modal
|
|
6618
|
-
*
|
|
6619
|
-
* @param data Optional data to pass back when dismissing
|
|
6620
|
-
* @returns Promise that resolves when the modal is dismissed
|
|
6621
|
-
*/
|
|
6622
|
-
close(data?: any): Promise<boolean>;
|
|
6623
|
-
/**
|
|
6624
|
-
* Get the top-most modal if one exists
|
|
6625
|
-
*
|
|
6626
|
-
* @returns Promise that resolves to the modal element or undefined
|
|
6627
|
-
*/
|
|
6628
|
-
getTop(): Promise<HTMLIonModalElement | undefined>;
|
|
6629
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelDemoModalService, never>;
|
|
6630
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WhitelabelDemoModalService>;
|
|
6050
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelDemoPage, never>;
|
|
6051
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WhitelabelDemoPage, "app-whitelabel-demo", never, {}, {}, never, never, true, never>;
|
|
6631
6052
|
}
|
|
6632
6053
|
|
|
6633
6054
|
/**
|
|
@@ -6652,5 +6073,5 @@ declare const customPageTransition: (_: HTMLElement, opts: any) => Animation;
|
|
|
6652
6073
|
*/
|
|
6653
6074
|
declare const customBackTransition: (_: HTMLElement, opts: any) => Animation;
|
|
6654
6075
|
|
|
6655
|
-
export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent,
|
|
6656
|
-
export type { ActionGroup, ActionItem, ActionResult,
|
|
6076
|
+
export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAttachmentPreviewComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileContentSectionComponent, DsMobileDropdownComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFileAttachmentComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileLongPressDirective, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobileProfileActionsSheetComponent, DsMobileSwiperComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsTextInputComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, SectionHeaderComponent, SignInPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, UserService, WhitelabelDemoPage, WhitelabelService, customBackTransition, customPageTransition };
|
|
6077
|
+
export type { ActionGroup, ActionItem, ActionResult, AttachmentData, AttachmentFileType, AttachmentItem, AvatarSize, AvatarType, BadgePosition, BottomSheetOptions, ChatAttachment, ChatMessage, ChatModalData, ChatParticipant, Comment, ActionResult as CommentActionResult, CommentData, ContactItem, ContentWidth, DropdownAlign, DropdownPosition, DsMobileDropdownItem, HandbookDetailData, HandbookItem, InlineTabItem, InquiryPhoto, Language, LightboxAuthor, LightboxImage, LightboxImageOptions, LightboxMediaFile, LightboxMediaType, LightboxOptions, LightboxPdf, LightboxPdfOptions, LogoSize, LogoVariant, ModalOptions, NewInquiryData, NewInquiryModalOptions, Post, ActionResult as PostActionResult, PostDetailData, TabConfig, WhitelabelConfig };
|