@propbinder/mobile-design 0.2.28 → 0.2.30
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 +14404 -10713
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
- package/index.d.ts +1168 -53
- package/package.json +1 -1
- package/styles/ionic.css +13 -0
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy,
|
|
2
|
+
import { OnDestroy, OnInit, ElementRef, EventEmitter, TemplateRef, AfterViewInit, OnChanges, Injector, SimpleChanges, AfterContentInit, ChangeDetectorRef, ApplicationRef, EnvironmentInjector, Type } from '@angular/core';
|
|
3
3
|
import { ModalController, IonContent, NavController, GestureController, ModalOptions as ModalOptions$1 } from '@ionic/angular/standalone';
|
|
4
4
|
import { Style } from '@capacitor/status-bar';
|
|
5
5
|
import { ImpactStyle } from '@capacitor/haptics';
|
|
@@ -313,7 +313,15 @@ declare class DsMobileBottomSheetService {
|
|
|
313
313
|
* DsMobileBottomSheetWrapperComponent
|
|
314
314
|
*
|
|
315
315
|
* A wrapper component that provides common layout styling for all bottom sheets.
|
|
316
|
-
* Handles safe area insets
|
|
316
|
+
* Handles safe area insets, provides consistent layout structure, and automatic
|
|
317
|
+
* keyboard handling using the same approach as modal base.
|
|
318
|
+
*
|
|
319
|
+
* Features:
|
|
320
|
+
* - Automatic keyboard push-up behavior (same as MobileModalBase)
|
|
321
|
+
* - Auto-height for bottom sheets
|
|
322
|
+
* - Safe area inset handling
|
|
323
|
+
* - Consistent styling across all bottom sheets
|
|
324
|
+
* - Only responds to keyboard when this bottom sheet is the top-most modal
|
|
317
325
|
*
|
|
318
326
|
* Usage:
|
|
319
327
|
* Wrap your bottom sheet content with this component using ng-content projection.
|
|
@@ -325,11 +333,167 @@ declare class DsMobileBottomSheetService {
|
|
|
325
333
|
* </ds-mobile-bottom-sheet-wrapper>
|
|
326
334
|
* ```
|
|
327
335
|
*/
|
|
328
|
-
declare class DsMobileBottomSheetWrapperComponent {
|
|
336
|
+
declare class DsMobileBottomSheetWrapperComponent implements OnInit, OnDestroy {
|
|
337
|
+
private elementRef;
|
|
338
|
+
private modalController;
|
|
339
|
+
constructor(elementRef: ElementRef);
|
|
340
|
+
ngOnInit(): void;
|
|
341
|
+
ngOnDestroy(): void;
|
|
342
|
+
/**
|
|
343
|
+
* Set up keyboard event listeners to adjust bottom sheet position
|
|
344
|
+
* Uses --keyboard-height-sheet variable (separate from modal's --keyboard-height)
|
|
345
|
+
* Only responds if this bottom sheet is the currently active (top-most) modal
|
|
346
|
+
*/
|
|
347
|
+
private setupKeyboardListeners;
|
|
348
|
+
/**
|
|
349
|
+
* Clean up keyboard event listeners
|
|
350
|
+
*/
|
|
351
|
+
private cleanupKeyboardListeners;
|
|
352
|
+
/**
|
|
353
|
+
* Get the parent ion-modal element
|
|
354
|
+
*/
|
|
355
|
+
private getModalElement;
|
|
329
356
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBottomSheetWrapperComponent, never>;
|
|
330
357
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileBottomSheetWrapperComponent, "ds-mobile-bottom-sheet-wrapper", never, {}, {}, never, ["*"], true, never>;
|
|
331
358
|
}
|
|
332
359
|
|
|
360
|
+
/**
|
|
361
|
+
* DsMobileBottomSheetHeaderComponent
|
|
362
|
+
*
|
|
363
|
+
* Reusable header component for bottom sheets with left button, center title, and right button.
|
|
364
|
+
* Styling matches the language switcher pattern (source of truth).
|
|
365
|
+
*
|
|
366
|
+
* Usage:
|
|
367
|
+
* ```html
|
|
368
|
+
* <ds-mobile-bottom-sheet-header
|
|
369
|
+
* title="Sheet Title"
|
|
370
|
+
* leftButtonLabel="Tilbage"
|
|
371
|
+
* rightButtonLabel="Færdig"
|
|
372
|
+
* [rightButtonDisabled]="!isValid()"
|
|
373
|
+
* (leftButtonClick)="handleCancel()"
|
|
374
|
+
* (rightButtonClick)="handleConfirm()">
|
|
375
|
+
* </ds-mobile-bottom-sheet-header>
|
|
376
|
+
* ```
|
|
377
|
+
*/
|
|
378
|
+
declare class DsMobileBottomSheetHeaderComponent {
|
|
379
|
+
/**
|
|
380
|
+
* Center title text
|
|
381
|
+
*/
|
|
382
|
+
title: string;
|
|
383
|
+
/**
|
|
384
|
+
* Left button label
|
|
385
|
+
* @default 'Tilbage'
|
|
386
|
+
*/
|
|
387
|
+
leftButtonLabel: string;
|
|
388
|
+
/**
|
|
389
|
+
* Right button label
|
|
390
|
+
* @default 'Færdig'
|
|
391
|
+
*/
|
|
392
|
+
rightButtonLabel: string;
|
|
393
|
+
/**
|
|
394
|
+
* Disable right button
|
|
395
|
+
* @default false
|
|
396
|
+
*/
|
|
397
|
+
rightButtonDisabled: boolean;
|
|
398
|
+
/**
|
|
399
|
+
* Emitted when left button is clicked
|
|
400
|
+
*/
|
|
401
|
+
leftButtonClick: EventEmitter<void>;
|
|
402
|
+
/**
|
|
403
|
+
* Emitted when right button is clicked
|
|
404
|
+
*/
|
|
405
|
+
rightButtonClick: EventEmitter<void>;
|
|
406
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBottomSheetHeaderComponent, never>;
|
|
407
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileBottomSheetHeaderComponent, "ds-mobile-bottom-sheet-header", never, { "title": { "alias": "title"; "required": false; }; "leftButtonLabel": { "alias": "leftButtonLabel"; "required": false; }; "rightButtonLabel": { "alias": "rightButtonLabel"; "required": false; }; "rightButtonDisabled": { "alias": "rightButtonDisabled"; "required": false; }; }, { "leftButtonClick": "leftButtonClick"; "rightButtonClick": "rightButtonClick"; }, never, never, true, never>;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* DsMobileConfirmationSheetComponent
|
|
412
|
+
*
|
|
413
|
+
* Generic bottom sheet for displaying confirmation messages with optional summary content.
|
|
414
|
+
* Highly flexible and reusable across different confirmation scenarios.
|
|
415
|
+
*
|
|
416
|
+
* **Features:**
|
|
417
|
+
* - Customizable title and message
|
|
418
|
+
* - Optional illustration with variant selection
|
|
419
|
+
* - Content projection for custom summary section
|
|
420
|
+
* - Customizable button text and action
|
|
421
|
+
*
|
|
422
|
+
* @example
|
|
423
|
+
* ```typescript
|
|
424
|
+
* // Simple confirmation
|
|
425
|
+
* const sheet = await modalController.create({
|
|
426
|
+
* component: DsMobileConfirmationSheetComponent,
|
|
427
|
+
* componentProps: {
|
|
428
|
+
* title: 'Booking accepteret',
|
|
429
|
+
* message: 'Din booking er bekræftet.',
|
|
430
|
+
* buttonText: 'Luk',
|
|
431
|
+
* illustrationVariant: 'confirmation'
|
|
432
|
+
* },
|
|
433
|
+
* breakpoints: [0, 1],
|
|
434
|
+
* initialBreakpoint: 1,
|
|
435
|
+
* handle: true,
|
|
436
|
+
* cssClass: ['ds-bottom-sheet', 'auto-height']
|
|
437
|
+
* });
|
|
438
|
+
* await sheet.present();
|
|
439
|
+
* ```
|
|
440
|
+
*
|
|
441
|
+
* @example
|
|
442
|
+
* ```html
|
|
443
|
+
* <!-- With custom summary content -->
|
|
444
|
+
* <ds-mobile-confirmation-sheet
|
|
445
|
+
* title="Post created"
|
|
446
|
+
* message="Your post has been published successfully."
|
|
447
|
+
* buttonText="Done">
|
|
448
|
+
* <div summary>
|
|
449
|
+
* <!-- Custom summary content here -->
|
|
450
|
+
* </div>
|
|
451
|
+
* </ds-mobile-confirmation-sheet>
|
|
452
|
+
* ```
|
|
453
|
+
*/
|
|
454
|
+
declare class DsMobileConfirmationSheetComponent {
|
|
455
|
+
private modalController;
|
|
456
|
+
/**
|
|
457
|
+
* Confirmation title
|
|
458
|
+
*/
|
|
459
|
+
title: string;
|
|
460
|
+
/**
|
|
461
|
+
* Confirmation message
|
|
462
|
+
*/
|
|
463
|
+
message: string;
|
|
464
|
+
/**
|
|
465
|
+
* Button text
|
|
466
|
+
* @default 'Luk'
|
|
467
|
+
*/
|
|
468
|
+
buttonText: string;
|
|
469
|
+
/**
|
|
470
|
+
* Whether to show the illustration
|
|
471
|
+
* @default true
|
|
472
|
+
*/
|
|
473
|
+
showIllustration: boolean;
|
|
474
|
+
/**
|
|
475
|
+
* Illustration variant
|
|
476
|
+
* @default 'confirmation'
|
|
477
|
+
*/
|
|
478
|
+
illustrationVariant: 'post' | 'inquiry' | 'confirmation';
|
|
479
|
+
/**
|
|
480
|
+
* Illustration size
|
|
481
|
+
* @default '120px'
|
|
482
|
+
*/
|
|
483
|
+
illustrationSize: string;
|
|
484
|
+
/**
|
|
485
|
+
* Optional summary content template
|
|
486
|
+
*/
|
|
487
|
+
summaryTemplate?: TemplateRef<any>;
|
|
488
|
+
constructor(modalController: ModalController);
|
|
489
|
+
/**
|
|
490
|
+
* Handle button click - dismisses the sheet
|
|
491
|
+
*/
|
|
492
|
+
handleButtonClick(): Promise<void>;
|
|
493
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileConfirmationSheetComponent, never>;
|
|
494
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileConfirmationSheetComponent, "ds-mobile-confirmation-sheet", never, { "title": { "alias": "title"; "required": true; }; "message": { "alias": "message"; "required": true; }; "buttonText": { "alias": "buttonText"; "required": false; }; "showIllustration": { "alias": "showIllustration"; "required": false; }; "illustrationVariant": { "alias": "illustrationVariant"; "required": false; }; "illustrationSize": { "alias": "illustrationSize"; "required": false; }; }, {}, ["summaryTemplate"], never, true, never>;
|
|
495
|
+
}
|
|
496
|
+
|
|
333
497
|
/**
|
|
334
498
|
* DsMobilePostCreateBottomSheetComponent
|
|
335
499
|
*
|
|
@@ -2368,14 +2532,20 @@ declare class DsMobileLongPressDirective implements OnDestroy {
|
|
|
2368
2532
|
* </ds-mobile-list-item>
|
|
2369
2533
|
* ```
|
|
2370
2534
|
*/
|
|
2371
|
-
declare class DsMobileListItemComponent {
|
|
2535
|
+
declare class DsMobileListItemComponent implements AfterViewInit {
|
|
2372
2536
|
private platformId;
|
|
2537
|
+
private elementRef;
|
|
2373
2538
|
/**
|
|
2374
2539
|
* Detect if viewport is desktop size
|
|
2375
2540
|
* Use viewport width for breakpoint detection (show button on tablet and above)
|
|
2376
2541
|
*/
|
|
2377
2542
|
isDesktop: _angular_core.WritableSignal<boolean>;
|
|
2378
2543
|
constructor();
|
|
2544
|
+
ngAfterViewInit(): void;
|
|
2545
|
+
/**
|
|
2546
|
+
* Check if leading content slot has actual content projected
|
|
2547
|
+
*/
|
|
2548
|
+
private checkLeadingContent;
|
|
2379
2549
|
/**
|
|
2380
2550
|
* CSS size value for the leading content area (e.g., '32px', '40px', '48px')
|
|
2381
2551
|
* Defaults to '32px' for standard list item avatars/icons
|
|
@@ -2464,9 +2634,9 @@ declare class DsMobileListItemComponent {
|
|
|
2464
2634
|
private longPressTriggered;
|
|
2465
2635
|
/**
|
|
2466
2636
|
* Check if leading content slot has content
|
|
2467
|
-
*
|
|
2637
|
+
* Dynamically updated after view initialization
|
|
2468
2638
|
*/
|
|
2469
|
-
hasLeadingContent: _angular_core.
|
|
2639
|
+
hasLeadingContent: _angular_core.WritableSignal<boolean>;
|
|
2470
2640
|
/**
|
|
2471
2641
|
* Check if trailing content slot has content
|
|
2472
2642
|
* Always true to maintain consistent layout
|
|
@@ -2657,6 +2827,13 @@ declare class DsMobileInteractiveListItemPostComponent {
|
|
|
2657
2827
|
* - 'compact' - Compact display for nested/related posts
|
|
2658
2828
|
*/
|
|
2659
2829
|
variant: _angular_core.InputSignal<"compact" | undefined>;
|
|
2830
|
+
/**
|
|
2831
|
+
* Vertical alignment of content
|
|
2832
|
+
* - 'top' - Align to top (default)
|
|
2833
|
+
* - 'center' - Align to center
|
|
2834
|
+
* - 'bottom' - Align to bottom
|
|
2835
|
+
*/
|
|
2836
|
+
align: _angular_core.InputSignal<"center" | "top" | "bottom">;
|
|
2660
2837
|
/**
|
|
2661
2838
|
* Whether the post card is clickable
|
|
2662
2839
|
*/
|
|
@@ -2685,7 +2862,7 @@ declare class DsMobileInteractiveListItemPostComponent {
|
|
|
2685
2862
|
handleLongPress(): void;
|
|
2686
2863
|
handleMoreButtonClick(event: Event): void;
|
|
2687
2864
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemPostComponent, never>;
|
|
2688
|
-
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; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; }, { "postClick": "postClick"; "commentClick": "commentClick"; "longPress": "longPress"; }, never, ["post-menu", "post-content", "post-actions"], true, never>;
|
|
2865
|
+
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; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; }, { "postClick": "postClick"; "commentClick": "commentClick"; "longPress": "longPress"; }, never, ["post-menu", "post-content", "post-actions"], true, never>;
|
|
2689
2866
|
}
|
|
2690
2867
|
/**
|
|
2691
2868
|
* PostContentComponent
|
|
@@ -2873,6 +3050,13 @@ declare class DsMobileInteractiveListItemInquiryComponent {
|
|
|
2873
3050
|
* - 'compact' - Compact display
|
|
2874
3051
|
*/
|
|
2875
3052
|
variant: _angular_core.InputSignal<"compact" | undefined>;
|
|
3053
|
+
/**
|
|
3054
|
+
* Vertical alignment of content
|
|
3055
|
+
* - 'top' - Align to top (default)
|
|
3056
|
+
* - 'center' - Align to center
|
|
3057
|
+
* - 'bottom' - Align to bottom
|
|
3058
|
+
*/
|
|
3059
|
+
align: _angular_core.InputSignal<"center" | "top" | "bottom">;
|
|
2876
3060
|
/**
|
|
2877
3061
|
* Whether the inquiry item is clickable
|
|
2878
3062
|
*/
|
|
@@ -2904,7 +3088,7 @@ declare class DsMobileInteractiveListItemInquiryComponent {
|
|
|
2904
3088
|
handleLongPress(): void;
|
|
2905
3089
|
handleMoreButtonClick(event: Event): void;
|
|
2906
3090
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemInquiryComponent, never>;
|
|
2907
|
-
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; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; }, { "inquiryClick": "inquiryClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
3091
|
+
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; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; }, { "inquiryClick": "inquiryClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
2908
3092
|
}
|
|
2909
3093
|
|
|
2910
3094
|
/**
|
|
@@ -2965,6 +3149,13 @@ declare class DsMobileInteractiveListItemMessageComponent {
|
|
|
2965
3149
|
* Whether the message item is clickable
|
|
2966
3150
|
*/
|
|
2967
3151
|
clickable: _angular_core.InputSignal<boolean>;
|
|
3152
|
+
/**
|
|
3153
|
+
* Vertical alignment of content
|
|
3154
|
+
* - 'top' - Align to top (default)
|
|
3155
|
+
* - 'center' - Align to center
|
|
3156
|
+
* - 'bottom' - Align to bottom
|
|
3157
|
+
*/
|
|
3158
|
+
align: _angular_core.InputSignal<"center" | "top" | "bottom">;
|
|
2968
3159
|
/**
|
|
2969
3160
|
* Emits when the message item is clicked
|
|
2970
3161
|
*/
|
|
@@ -2976,7 +3167,7 @@ declare class DsMobileInteractiveListItemMessageComponent {
|
|
|
2976
3167
|
handleMessageClick(): void;
|
|
2977
3168
|
handleLongPress(): void;
|
|
2978
3169
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemMessageComponent, never>;
|
|
2979
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemMessageComponent, "ds-mobile-interactive-list-item-message", never, { "senderName": { "alias": "senderName"; "required": true; "isSignal": true; }; "senderRole": { "alias": "senderRole"; "required": true; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "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; }; "unread": { "alias": "unread"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "messageClick": "messageClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
3170
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemMessageComponent, "ds-mobile-interactive-list-item-message", never, { "senderName": { "alias": "senderName"; "required": true; "isSignal": true; }; "senderRole": { "alias": "senderRole"; "required": true; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "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; }; "unread": { "alias": "unread"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; }, { "messageClick": "messageClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
2980
3171
|
}
|
|
2981
3172
|
|
|
2982
3173
|
/**
|
|
@@ -3032,6 +3223,113 @@ declare class DsMobileContactListItemComponent {
|
|
|
3032
3223
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileContactListItemComponent, "ds-mobile-contact-list-item", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "initials": { "alias": "initials"; "required": true; "isSignal": true; }; "contactPerson": { "alias": "contactPerson"; "required": false; "isSignal": true; }; "phoneNumber": { "alias": "phoneNumber"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; }, { "contactClick": "contactClick"; }, never, never, true, never>;
|
|
3033
3224
|
}
|
|
3034
3225
|
|
|
3226
|
+
/**
|
|
3227
|
+
* DsMobileInteractiveListItemBookingComponent
|
|
3228
|
+
*
|
|
3229
|
+
* Specialized interactive list item for displaying facility bookings.
|
|
3230
|
+
* Built on top of ds-mobile-list-item base component.
|
|
3231
|
+
* Displays facility thumbnail, title, description, booking dates/times, and availability status.
|
|
3232
|
+
*
|
|
3233
|
+
* @example
|
|
3234
|
+
* ```html
|
|
3235
|
+
* <!-- Active booking variant -->
|
|
3236
|
+
* <ds-mobile-interactive-list-item-booking
|
|
3237
|
+
* [thumbnail]="'assets/facility.jpg'"
|
|
3238
|
+
* [facilityTitle]="'Gæsteparkering'"
|
|
3239
|
+
* [bookingDate]="'14. februar, 2026'"
|
|
3240
|
+
* [bookingTime]="'9:00 - 17:00'"
|
|
3241
|
+
* [clickable]="false">
|
|
3242
|
+
* </ds-mobile-interactive-list-item-booking>
|
|
3243
|
+
*
|
|
3244
|
+
* <!-- Available facility variant -->
|
|
3245
|
+
* <ds-mobile-interactive-list-item-booking
|
|
3246
|
+
* [thumbnail]="'assets/facility.jpg'"
|
|
3247
|
+
* [facilityTitle]="'Boremaskinen'"
|
|
3248
|
+
* [description]="'Book a guest parking spot to give your visitors...'"
|
|
3249
|
+
* [availabilityStatus]="'available-today'"
|
|
3250
|
+
* [statusLabel]="'Ledig i dag'"
|
|
3251
|
+
* [clickable]="true"
|
|
3252
|
+
* [enableLongPress]="false"
|
|
3253
|
+
* (bookingClick)="openBooking()">
|
|
3254
|
+
* </ds-mobile-interactive-list-item-booking>
|
|
3255
|
+
* ```
|
|
3256
|
+
*/
|
|
3257
|
+
declare class DsMobileInteractiveListItemBookingComponent {
|
|
3258
|
+
/**
|
|
3259
|
+
* Facility thumbnail image URL
|
|
3260
|
+
*/
|
|
3261
|
+
thumbnail: _angular_core.InputSignal<string>;
|
|
3262
|
+
/**
|
|
3263
|
+
* Facility title
|
|
3264
|
+
*/
|
|
3265
|
+
facilityTitle: _angular_core.InputSignal<string>;
|
|
3266
|
+
/**
|
|
3267
|
+
* Facility description/preview text (only for available facilities)
|
|
3268
|
+
*/
|
|
3269
|
+
description: _angular_core.InputSignal<string>;
|
|
3270
|
+
/**
|
|
3271
|
+
* Booking date (only for active bookings, e.g., "14. februar, 2026")
|
|
3272
|
+
*/
|
|
3273
|
+
bookingDate: _angular_core.InputSignal<string>;
|
|
3274
|
+
/**
|
|
3275
|
+
* Booking time range (only for active bookings, e.g., "9:00 - 17:00")
|
|
3276
|
+
*/
|
|
3277
|
+
bookingTime: _angular_core.InputSignal<string>;
|
|
3278
|
+
/**
|
|
3279
|
+
* Availability status (only for available facilities)
|
|
3280
|
+
*/
|
|
3281
|
+
availabilityStatus: _angular_core.InputSignal<"available-today" | "available-from" | "unavailable" | undefined>;
|
|
3282
|
+
/**
|
|
3283
|
+
* Status label text (e.g., "Ledig i dag", "Ledig fra 28. februar, 2026")
|
|
3284
|
+
*/
|
|
3285
|
+
statusLabel: _angular_core.InputSignal<string>;
|
|
3286
|
+
/**
|
|
3287
|
+
* Display variant
|
|
3288
|
+
* - undefined (default) - Standard display
|
|
3289
|
+
* - 'compact' - Compact display
|
|
3290
|
+
*/
|
|
3291
|
+
variant: _angular_core.InputSignal<"compact" | undefined>;
|
|
3292
|
+
/**
|
|
3293
|
+
* Vertical alignment of content
|
|
3294
|
+
* - 'top' - Align to top (default)
|
|
3295
|
+
* - 'center' - Align to center
|
|
3296
|
+
* - 'bottom' - Align to bottom
|
|
3297
|
+
*/
|
|
3298
|
+
align: _angular_core.InputSignal<"center" | "top" | "bottom">;
|
|
3299
|
+
/**
|
|
3300
|
+
* Whether the booking item is clickable
|
|
3301
|
+
*/
|
|
3302
|
+
clickable: _angular_core.InputSignal<boolean>;
|
|
3303
|
+
/**
|
|
3304
|
+
* Whether to show chevron icon
|
|
3305
|
+
*/
|
|
3306
|
+
showChevron: _angular_core.InputSignal<boolean>;
|
|
3307
|
+
/**
|
|
3308
|
+
* Enable long-press interaction when clickable is true
|
|
3309
|
+
* Set to false to disable long-press but keep click
|
|
3310
|
+
* Also controls visibility of desktop "more" button
|
|
3311
|
+
* @default true
|
|
3312
|
+
*/
|
|
3313
|
+
enableLongPress: _angular_core.InputSignal<boolean>;
|
|
3314
|
+
/**
|
|
3315
|
+
* Emits when the booking item is clicked (if clickable)
|
|
3316
|
+
*/
|
|
3317
|
+
bookingClick: _angular_core.OutputEmitterRef<void>;
|
|
3318
|
+
/**
|
|
3319
|
+
* Emits when the booking item is long-pressed
|
|
3320
|
+
*/
|
|
3321
|
+
longPress: _angular_core.OutputEmitterRef<void>;
|
|
3322
|
+
/**
|
|
3323
|
+
* Get status indicator variant based on availability status
|
|
3324
|
+
*/
|
|
3325
|
+
getStatusVariant(): 'brand' | 'warning' | 'grey';
|
|
3326
|
+
handleBookingClick(): void;
|
|
3327
|
+
handleLongPress(): void;
|
|
3328
|
+
handleMoreButtonClick(event: Event): void;
|
|
3329
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInteractiveListItemBookingComponent, never>;
|
|
3330
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInteractiveListItemBookingComponent, "ds-mobile-interactive-list-item-booking", never, { "thumbnail": { "alias": "thumbnail"; "required": false; "isSignal": true; }; "facilityTitle": { "alias": "facilityTitle"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "bookingDate": { "alias": "bookingDate"; "required": false; "isSignal": true; }; "bookingTime": { "alias": "bookingTime"; "required": false; "isSignal": true; }; "availabilityStatus": { "alias": "availabilityStatus"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; }, { "bookingClick": "bookingClick"; "longPress": "longPress"; }, never, never, true, never>;
|
|
3331
|
+
}
|
|
3332
|
+
|
|
3035
3333
|
interface TabConfig {
|
|
3036
3334
|
id: string;
|
|
3037
3335
|
label: string;
|
|
@@ -3268,11 +3566,69 @@ declare class DsMobileSwiperComponent implements AfterViewInit, OnDestroy {
|
|
|
3268
3566
|
* Check if at the end
|
|
3269
3567
|
*/
|
|
3270
3568
|
isEnd(): boolean;
|
|
3569
|
+
/**
|
|
3570
|
+
* Get the total number of slides
|
|
3571
|
+
*/
|
|
3572
|
+
getSlideCount(): number;
|
|
3271
3573
|
ngOnDestroy(): void;
|
|
3272
3574
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileSwiperComponent, never>;
|
|
3273
3575
|
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>;
|
|
3274
3576
|
}
|
|
3275
3577
|
|
|
3578
|
+
/**
|
|
3579
|
+
* DsMobileSwiperWithNavComponent
|
|
3580
|
+
*
|
|
3581
|
+
* Wrapper component that adds navigation buttons to a ds-mobile-swiper.
|
|
3582
|
+
* Automatically handles button states (disabled at start/end) and mobile visibility.
|
|
3583
|
+
*
|
|
3584
|
+
* Features:
|
|
3585
|
+
* - Automatic prev/next navigation buttons
|
|
3586
|
+
* - Auto-hide buttons when there's only one slide
|
|
3587
|
+
* - Auto-disable buttons at start/end of swiper
|
|
3588
|
+
* - Hidden on mobile devices (< 768px)
|
|
3589
|
+
* - No pointer-events blocking using display: contents
|
|
3590
|
+
* - Self-contained navigation logic
|
|
3591
|
+
*
|
|
3592
|
+
* Usage:
|
|
3593
|
+
* ```html
|
|
3594
|
+
* <ds-mobile-swiper-with-nav>
|
|
3595
|
+
* <ds-mobile-swiper [slideWidth]="'100%'" [gap]="32">
|
|
3596
|
+
* <div class="swiper-slide">Slide 1</div>
|
|
3597
|
+
* <div class="swiper-slide">Slide 2</div>
|
|
3598
|
+
* </ds-mobile-swiper>
|
|
3599
|
+
* </ds-mobile-swiper-with-nav>
|
|
3600
|
+
* ```
|
|
3601
|
+
*/
|
|
3602
|
+
declare class DsMobileSwiperWithNavComponent implements AfterContentInit {
|
|
3603
|
+
private cdr;
|
|
3604
|
+
swiper?: DsMobileSwiperComponent;
|
|
3605
|
+
constructor(cdr: ChangeDetectorRef);
|
|
3606
|
+
ngAfterContentInit(): void;
|
|
3607
|
+
/**
|
|
3608
|
+
* Navigate to previous slide
|
|
3609
|
+
*/
|
|
3610
|
+
slidePrev(): void;
|
|
3611
|
+
/**
|
|
3612
|
+
* Navigate to next slide
|
|
3613
|
+
*/
|
|
3614
|
+
slideNext(): void;
|
|
3615
|
+
/**
|
|
3616
|
+
* Check if at first slide
|
|
3617
|
+
*/
|
|
3618
|
+
isFirstSlide(): boolean;
|
|
3619
|
+
/**
|
|
3620
|
+
* Check if at last slide
|
|
3621
|
+
*/
|
|
3622
|
+
isLastSlide(): boolean;
|
|
3623
|
+
/**
|
|
3624
|
+
* Check if navigation buttons should be shown
|
|
3625
|
+
* Hide buttons if there's only one slide
|
|
3626
|
+
*/
|
|
3627
|
+
shouldShowNavButtons(): boolean;
|
|
3628
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileSwiperWithNavComponent, never>;
|
|
3629
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileSwiperWithNavComponent, "ds-mobile-swiper-with-nav", never, {}, {}, ["swiper"], ["*"], true, never>;
|
|
3630
|
+
}
|
|
3631
|
+
|
|
3276
3632
|
/**
|
|
3277
3633
|
* Media file types supported by the lightbox
|
|
3278
3634
|
*/
|
|
@@ -4184,6 +4540,7 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
|
|
|
4184
4540
|
* Set up keyboard event listeners to adjust component position
|
|
4185
4541
|
* Uses --keyboard-height for fixed bottom composer and adds padding to scroll area.
|
|
4186
4542
|
* Adjusts scroll position so content smoothly follows the keyboard up (like Messenger/Telegram).
|
|
4543
|
+
* Only responds if this modal is the currently active (top-most) modal.
|
|
4187
4544
|
* @protected
|
|
4188
4545
|
*/
|
|
4189
4546
|
protected setupKeyboardListeners(): void;
|
|
@@ -4198,6 +4555,11 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
|
|
|
4198
4555
|
* @protected
|
|
4199
4556
|
*/
|
|
4200
4557
|
protected cleanupKeyboardListeners(): void;
|
|
4558
|
+
/**
|
|
4559
|
+
* Check if the given modal element is this modal component's parent modal
|
|
4560
|
+
* @protected
|
|
4561
|
+
*/
|
|
4562
|
+
protected isThisModal(modalElement: HTMLIonModalElement): boolean;
|
|
4201
4563
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileModalBase, never>;
|
|
4202
4564
|
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; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; "isAutoHeight": { "alias": "isAutoHeight"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "keyboardWillShow": "keyboardWillShow"; "keyboardWillHide": "keyboardWillHide"; }, never, never, true, never>;
|
|
4203
4565
|
}
|
|
@@ -5517,55 +5879,755 @@ declare class DsMobileNewInquiryModalService extends BaseModalService {
|
|
|
5517
5879
|
}
|
|
5518
5880
|
|
|
5519
5881
|
/**
|
|
5520
|
-
*
|
|
5521
|
-
*
|
|
5522
|
-
* Represents a handbook category/folder with its sections/items.
|
|
5523
|
-
* Use this interface to map your API response data to the component.
|
|
5524
|
-
*
|
|
5525
|
-
* @example
|
|
5526
|
-
* ```typescript
|
|
5527
|
-
* const handbookData: HandbookDetailData = {
|
|
5528
|
-
* title: 'Access Systems',
|
|
5529
|
-
* variant: 'blue',
|
|
5530
|
-
* iconName: 'remixKey2Line',
|
|
5531
|
-
* itemCount: 5,
|
|
5532
|
-
* items: [...]
|
|
5533
|
-
* };
|
|
5534
|
-
* ```
|
|
5882
|
+
* Date option interface for date selection
|
|
5535
5883
|
*/
|
|
5536
|
-
interface
|
|
5537
|
-
|
|
5538
|
-
|
|
5539
|
-
|
|
5540
|
-
|
|
5541
|
-
|
|
5542
|
-
|
|
5543
|
-
/** Total number of items/sections in this category */
|
|
5544
|
-
itemCount: number;
|
|
5545
|
-
/** Array of handbook sections/items */
|
|
5546
|
-
items?: HandbookItem[];
|
|
5884
|
+
interface DateOption {
|
|
5885
|
+
id: string;
|
|
5886
|
+
dayName: string;
|
|
5887
|
+
date: string;
|
|
5888
|
+
monthName: string;
|
|
5889
|
+
fullDate: Date;
|
|
5890
|
+
state: 'default' | 'selected' | 'disabled';
|
|
5547
5891
|
}
|
|
5548
5892
|
/**
|
|
5549
|
-
*
|
|
5893
|
+
* Time slot interface for time selection
|
|
5894
|
+
*/
|
|
5895
|
+
interface TimeSlot {
|
|
5896
|
+
id: string;
|
|
5897
|
+
startTime: string;
|
|
5898
|
+
endTime: string;
|
|
5899
|
+
state: 'default' | 'selected' | 'disabled';
|
|
5900
|
+
}
|
|
5901
|
+
/**
|
|
5902
|
+
* Booking result returned when user confirms booking
|
|
5903
|
+
*/
|
|
5904
|
+
interface BookingResult {
|
|
5905
|
+
facilityId: string;
|
|
5906
|
+
facilityTitle: string;
|
|
5907
|
+
selectedDate: DateOption;
|
|
5908
|
+
selectedTimeSlot: TimeSlot;
|
|
5909
|
+
timestamp: Date;
|
|
5910
|
+
}
|
|
5911
|
+
/**
|
|
5912
|
+
* DsMobileBookingModalComponent
|
|
5550
5913
|
*
|
|
5551
|
-
*
|
|
5552
|
-
*
|
|
5914
|
+
* Full-screen modal for booking facilities with date and time selection.
|
|
5915
|
+
* Features swipeable date selection and vertical time slot list.
|
|
5553
5916
|
*
|
|
5554
5917
|
* @example
|
|
5555
5918
|
* ```typescript
|
|
5556
|
-
* const
|
|
5557
|
-
*
|
|
5558
|
-
*
|
|
5559
|
-
*
|
|
5560
|
-
*
|
|
5561
|
-
*
|
|
5562
|
-
* };
|
|
5919
|
+
* const modal = await modalController.create({
|
|
5920
|
+
* component: DsMobileBookingModalComponent,
|
|
5921
|
+
* componentProps: {
|
|
5922
|
+
* facilityId: 'facility-1',
|
|
5923
|
+
* facilityTitle: 'Boremaskinen'
|
|
5924
|
+
* }
|
|
5925
|
+
* });
|
|
5926
|
+
* await modal.present();
|
|
5927
|
+
* const result = await modal.onWillDismiss<BookingResult>();
|
|
5563
5928
|
* ```
|
|
5564
5929
|
*/
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
|
|
5568
|
-
|
|
5930
|
+
declare class DsMobileBookingModalComponent implements AfterViewInit {
|
|
5931
|
+
private modalController;
|
|
5932
|
+
facilityId: string;
|
|
5933
|
+
facilityTitle: string;
|
|
5934
|
+
swiperComponent?: DsMobileSwiperComponent;
|
|
5935
|
+
dateOptions: _angular_core.WritableSignal<DateOption[]>;
|
|
5936
|
+
timeSlots: _angular_core.WritableSignal<TimeSlot[]>;
|
|
5937
|
+
selectedDate: _angular_core.WritableSignal<DateOption | null>;
|
|
5938
|
+
selectedTimeSlot: _angular_core.WritableSignal<TimeSlot | null>;
|
|
5939
|
+
isConfirming: _angular_core.WritableSignal<boolean>;
|
|
5940
|
+
canConfirm: _angular_core.Signal<boolean>;
|
|
5941
|
+
constructor(modalController: ModalController);
|
|
5942
|
+
/**
|
|
5943
|
+
* After view init - force swiper update to fix initial positioning
|
|
5944
|
+
*/
|
|
5945
|
+
ngAfterViewInit(): void;
|
|
5946
|
+
/**
|
|
5947
|
+
* Generate mock date and time data
|
|
5948
|
+
*/
|
|
5949
|
+
private generateMockData;
|
|
5950
|
+
/**
|
|
5951
|
+
* Generate time slots based on selected date
|
|
5952
|
+
*/
|
|
5953
|
+
private generateTimeSlots;
|
|
5954
|
+
/**
|
|
5955
|
+
* Handle date selection
|
|
5956
|
+
*/
|
|
5957
|
+
selectDate(selectedDate: DateOption): void;
|
|
5958
|
+
/**
|
|
5959
|
+
* Handle time slot selection
|
|
5960
|
+
*/
|
|
5961
|
+
selectTime(selectedSlot: TimeSlot): void;
|
|
5962
|
+
/**
|
|
5963
|
+
* Handle confirm button click
|
|
5964
|
+
*/
|
|
5965
|
+
handleConfirm(): Promise<void>;
|
|
5966
|
+
/**
|
|
5967
|
+
* Handle close button click
|
|
5968
|
+
*/
|
|
5969
|
+
handleClose(): Promise<void>;
|
|
5970
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBookingModalComponent, never>;
|
|
5971
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileBookingModalComponent, "ds-mobile-booking-modal", never, { "facilityId": { "alias": "facilityId"; "required": false; }; "facilityTitle": { "alias": "facilityTitle"; "required": false; }; }, {}, never, never, true, never>;
|
|
5972
|
+
}
|
|
5973
|
+
|
|
5974
|
+
/**
|
|
5975
|
+
* DsMobileBookingModalService
|
|
5976
|
+
*
|
|
5977
|
+
* Service for managing the booking modal flow:
|
|
5978
|
+
* 1. Opens the booking modal for date/time selection
|
|
5979
|
+
* 2. On confirmation, opens the confirmation bottom sheet
|
|
5980
|
+
*
|
|
5981
|
+
* @example
|
|
5982
|
+
* ```typescript
|
|
5983
|
+
* constructor(private bookingModalService: DsMobileBookingModalService) {}
|
|
5984
|
+
*
|
|
5985
|
+
* async openBooking() {
|
|
5986
|
+
* await this.bookingModalService.open('facility-1', 'Boremaskinen');
|
|
5987
|
+
* }
|
|
5988
|
+
* ```
|
|
5989
|
+
*/
|
|
5990
|
+
declare class DsMobileBookingModalService extends BaseModalService {
|
|
5991
|
+
constructor(modalController: ModalController);
|
|
5992
|
+
/**
|
|
5993
|
+
* Open the booking modal for a facility
|
|
5994
|
+
*
|
|
5995
|
+
* @param facilityId The ID of the facility to book
|
|
5996
|
+
* @param facilityTitle The display name of the facility
|
|
5997
|
+
* @param facilityThumbnail Optional thumbnail image URL
|
|
5998
|
+
* @returns Promise that resolves when the booking flow is complete
|
|
5999
|
+
*/
|
|
6000
|
+
open(facilityId: string, facilityTitle: string, facilityThumbnail?: string): Promise<void>;
|
|
6001
|
+
/**
|
|
6002
|
+
* Dismiss all open modals
|
|
6003
|
+
*/
|
|
6004
|
+
private dismissAllModals;
|
|
6005
|
+
/**
|
|
6006
|
+
* Open the confirmation bottom sheet after successful booking
|
|
6007
|
+
*
|
|
6008
|
+
* @param booking The booking result data
|
|
6009
|
+
* @param facilityThumbnail Optional thumbnail image URL
|
|
6010
|
+
* @returns Promise that resolves when the sheet is dismissed
|
|
6011
|
+
*/
|
|
6012
|
+
private openConfirmationSheet;
|
|
6013
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBookingModalService, never>;
|
|
6014
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsMobileBookingModalService>;
|
|
6015
|
+
}
|
|
6016
|
+
|
|
6017
|
+
/**
|
|
6018
|
+
* DsMobileBookingSummaryComponent
|
|
6019
|
+
*
|
|
6020
|
+
* Displays a booking summary with facility info, thumbnail, date and time.
|
|
6021
|
+
* Designed to be used within the generic confirmation sheet.
|
|
6022
|
+
*
|
|
6023
|
+
* @example
|
|
6024
|
+
* ```html
|
|
6025
|
+
* <ds-mobile-booking-summary
|
|
6026
|
+
* [facilityTitle]="'Festlokale på taget'"
|
|
6027
|
+
* [facilityThumbnail]="'/path/to/image.jpg'"
|
|
6028
|
+
* [date]="'Tue 19 Nov'"
|
|
6029
|
+
* [time]="'14:00 - 16:00'"
|
|
6030
|
+
* />
|
|
6031
|
+
* ```
|
|
6032
|
+
*/
|
|
6033
|
+
declare class DsMobileBookingSummaryComponent {
|
|
6034
|
+
/**
|
|
6035
|
+
* Facility title
|
|
6036
|
+
*/
|
|
6037
|
+
facilityTitle: string;
|
|
6038
|
+
/**
|
|
6039
|
+
* Optional facility thumbnail URL
|
|
6040
|
+
*/
|
|
6041
|
+
facilityThumbnail?: string;
|
|
6042
|
+
/**
|
|
6043
|
+
* Formatted date string (e.g., "Tue 19 Nov")
|
|
6044
|
+
*/
|
|
6045
|
+
date?: string;
|
|
6046
|
+
/**
|
|
6047
|
+
* Formatted time string (e.g., "14:00 - 16:00")
|
|
6048
|
+
*/
|
|
6049
|
+
time?: string;
|
|
6050
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBookingSummaryComponent, never>;
|
|
6051
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileBookingSummaryComponent, "ds-mobile-booking-summary", never, { "facilityTitle": { "alias": "facilityTitle"; "required": true; }; "facilityThumbnail": { "alias": "facilityThumbnail"; "required": false; }; "date": { "alias": "date"; "required": false; }; "time": { "alias": "time"; "required": false; }; }, {}, never, never, true, never>;
|
|
6052
|
+
}
|
|
6053
|
+
|
|
6054
|
+
/**
|
|
6055
|
+
* DsMobileBookingConfirmationWrapperComponent
|
|
6056
|
+
*
|
|
6057
|
+
* Wrapper component that uses the generic confirmation sheet
|
|
6058
|
+
* specifically for booking confirmations.
|
|
6059
|
+
*
|
|
6060
|
+
* This component handles the booking-specific formatting and
|
|
6061
|
+
* uses content projection to pass the booking summary to the generic sheet.
|
|
6062
|
+
*/
|
|
6063
|
+
declare class DsMobileBookingConfirmationWrapperComponent {
|
|
6064
|
+
booking: BookingResult;
|
|
6065
|
+
facilityThumbnail?: string;
|
|
6066
|
+
get confirmationMessage(): string;
|
|
6067
|
+
get formattedDate(): string;
|
|
6068
|
+
get formattedTime(): string;
|
|
6069
|
+
private formatFullDate;
|
|
6070
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileBookingConfirmationWrapperComponent, never>;
|
|
6071
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileBookingConfirmationWrapperComponent, "ds-mobile-booking-confirmation-wrapper", never, { "booking": { "alias": "booking"; "required": false; }; "facilityThumbnail": { "alias": "facilityThumbnail"; "required": false; }; }, {}, never, never, true, never>;
|
|
6072
|
+
}
|
|
6073
|
+
|
|
6074
|
+
/**
|
|
6075
|
+
* New facility form data
|
|
6076
|
+
*/
|
|
6077
|
+
interface NewFacilityData {
|
|
6078
|
+
title: string;
|
|
6079
|
+
description: string;
|
|
6080
|
+
whoCanBook: string;
|
|
6081
|
+
whenCanBook: string;
|
|
6082
|
+
price: string;
|
|
6083
|
+
accessRequirements: string;
|
|
6084
|
+
attachments: AttachmentData[];
|
|
6085
|
+
}
|
|
6086
|
+
/**
|
|
6087
|
+
* DsMobileFacilityCreationModalComponent
|
|
6088
|
+
*
|
|
6089
|
+
* Modal component for creating new facilities.
|
|
6090
|
+
* Uses ds-mobile-modal-base for consistent layout and behavior.
|
|
6091
|
+
*
|
|
6092
|
+
* Features:
|
|
6093
|
+
* - Title and description fields
|
|
6094
|
+
* - Interactive list items for facility options
|
|
6095
|
+
* - Bottom sheet pickers for selections
|
|
6096
|
+
* - Photo upload with preview
|
|
6097
|
+
* - Form validation
|
|
6098
|
+
*
|
|
6099
|
+
* This component is typically not used directly - use DsMobileFacilityCreationModalService instead.
|
|
6100
|
+
*/
|
|
6101
|
+
declare class DsMobileFacilityCreationModalComponent implements OnInit, AfterViewInit {
|
|
6102
|
+
private modalController;
|
|
6103
|
+
private bottomSheetService;
|
|
6104
|
+
titleInputRef?: ElementRef<HTMLElement>;
|
|
6105
|
+
titleInput?: DsTextareaComponent;
|
|
6106
|
+
fileInput?: ElementRef<HTMLInputElement>;
|
|
6107
|
+
/**
|
|
6108
|
+
* Loading state for the modal
|
|
6109
|
+
*/
|
|
6110
|
+
loading: boolean;
|
|
6111
|
+
/**
|
|
6112
|
+
* Error message to display
|
|
6113
|
+
*/
|
|
6114
|
+
error?: string;
|
|
6115
|
+
/**
|
|
6116
|
+
* Callback function when form is submitted
|
|
6117
|
+
*/
|
|
6118
|
+
onSubmit?: (data: NewFacilityData) => void | Promise<void>;
|
|
6119
|
+
/**
|
|
6120
|
+
* Placeholder for the title field
|
|
6121
|
+
*/
|
|
6122
|
+
titlePlaceholder: string;
|
|
6123
|
+
/**
|
|
6124
|
+
* Placeholder for the description field
|
|
6125
|
+
*/
|
|
6126
|
+
descriptionPlaceholder: string;
|
|
6127
|
+
/**
|
|
6128
|
+
* Label for the submit button
|
|
6129
|
+
*/
|
|
6130
|
+
submitButtonLabel: string;
|
|
6131
|
+
/**
|
|
6132
|
+
* Form title field
|
|
6133
|
+
*/
|
|
6134
|
+
title: string;
|
|
6135
|
+
/**
|
|
6136
|
+
* Form description field
|
|
6137
|
+
*/
|
|
6138
|
+
description: string;
|
|
6139
|
+
/**
|
|
6140
|
+
* Attachments array
|
|
6141
|
+
*/
|
|
6142
|
+
attachments: _angular_core.WritableSignal<AttachmentData[]>;
|
|
6143
|
+
/**
|
|
6144
|
+
* Who can book signal
|
|
6145
|
+
*/
|
|
6146
|
+
whoCanBook: _angular_core.WritableSignal<string>;
|
|
6147
|
+
/**
|
|
6148
|
+
* When can it be booked signal
|
|
6149
|
+
*/
|
|
6150
|
+
whenCanBook: _angular_core.WritableSignal<string>;
|
|
6151
|
+
/**
|
|
6152
|
+
* Price signal
|
|
6153
|
+
*/
|
|
6154
|
+
price: _angular_core.WritableSignal<string>;
|
|
6155
|
+
/**
|
|
6156
|
+
* Access requirements signal
|
|
6157
|
+
*/
|
|
6158
|
+
accessRequirements: _angular_core.WritableSignal<string>;
|
|
6159
|
+
/**
|
|
6160
|
+
* Form validation state
|
|
6161
|
+
*/
|
|
6162
|
+
isFormValid: _angular_core.WritableSignal<boolean>;
|
|
6163
|
+
/**
|
|
6164
|
+
* Submitting state
|
|
6165
|
+
*/
|
|
6166
|
+
isSubmitting: _angular_core.WritableSignal<boolean>;
|
|
6167
|
+
ngOnInit(): void;
|
|
6168
|
+
ngAfterViewInit(): void;
|
|
6169
|
+
/**
|
|
6170
|
+
* Auto-resize the title textarea based on content
|
|
6171
|
+
*/
|
|
6172
|
+
private autoResizeTitleTextarea;
|
|
6173
|
+
/**
|
|
6174
|
+
* Handle title change with auto-resize
|
|
6175
|
+
*/
|
|
6176
|
+
handleTitleChange(value: string): void;
|
|
6177
|
+
/**
|
|
6178
|
+
* Validate form fields
|
|
6179
|
+
*/
|
|
6180
|
+
validateForm(): void;
|
|
6181
|
+
/**
|
|
6182
|
+
* Open who can book sheet
|
|
6183
|
+
*/
|
|
6184
|
+
openWhoSheet(): Promise<void>;
|
|
6185
|
+
/**
|
|
6186
|
+
* Open when can it be booked sheet
|
|
6187
|
+
*/
|
|
6188
|
+
openWhenSheet(): Promise<void>;
|
|
6189
|
+
/**
|
|
6190
|
+
* Open price sheet
|
|
6191
|
+
*/
|
|
6192
|
+
openPriceSheet(): Promise<void>;
|
|
6193
|
+
/**
|
|
6194
|
+
* Open access requirements sheet
|
|
6195
|
+
*/
|
|
6196
|
+
openAccessSheet(): Promise<void>;
|
|
6197
|
+
/**
|
|
6198
|
+
* Add a new photo from camera/library
|
|
6199
|
+
*/
|
|
6200
|
+
addPhoto(): Promise<void>;
|
|
6201
|
+
/**
|
|
6202
|
+
* Remove an attachment
|
|
6203
|
+
*/
|
|
6204
|
+
removeAttachment(attachmentId: string): void;
|
|
6205
|
+
/**
|
|
6206
|
+
* Handle attachment button click
|
|
6207
|
+
*/
|
|
6208
|
+
handleAddAttachment(): void;
|
|
6209
|
+
/**
|
|
6210
|
+
* Detect file type from file name or mime type
|
|
6211
|
+
*/
|
|
6212
|
+
private detectFileType;
|
|
6213
|
+
/**
|
|
6214
|
+
* Format file size for display
|
|
6215
|
+
*/
|
|
6216
|
+
private formatFileSize;
|
|
6217
|
+
/**
|
|
6218
|
+
* Handle file selection from file input
|
|
6219
|
+
*/
|
|
6220
|
+
handleFileSelect(event: Event): void;
|
|
6221
|
+
/**
|
|
6222
|
+
* Handle form submission
|
|
6223
|
+
*/
|
|
6224
|
+
handleSubmit(): Promise<void>;
|
|
6225
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFacilityCreationModalComponent, never>;
|
|
6226
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFacilityCreationModalComponent, "ds-mobile-facility-creation-modal", never, { "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; "onSubmit": { "alias": "onSubmit"; "required": false; }; "titlePlaceholder": { "alias": "titlePlaceholder"; "required": false; }; "descriptionPlaceholder": { "alias": "descriptionPlaceholder"; "required": false; }; "submitButtonLabel": { "alias": "submitButtonLabel"; "required": false; }; }, {}, never, never, true, never>;
|
|
6227
|
+
}
|
|
6228
|
+
|
|
6229
|
+
/**
|
|
6230
|
+
* Options for opening the facility creation modal
|
|
6231
|
+
*/
|
|
6232
|
+
interface FacilityCreationModalOptions {
|
|
6233
|
+
/** Callback function when facility is submitted */
|
|
6234
|
+
onSubmit?: (data: NewFacilityData) => void | Promise<void>;
|
|
6235
|
+
/** Initial loading state */
|
|
6236
|
+
loading?: boolean;
|
|
6237
|
+
/** Initial error message */
|
|
6238
|
+
error?: string;
|
|
6239
|
+
/** Custom placeholder for title field */
|
|
6240
|
+
titlePlaceholder?: string;
|
|
6241
|
+
/** Custom placeholder for description field */
|
|
6242
|
+
descriptionPlaceholder?: string;
|
|
6243
|
+
/** Custom label for submit button */
|
|
6244
|
+
submitButtonLabel?: string;
|
|
6245
|
+
}
|
|
6246
|
+
/**
|
|
6247
|
+
* DsMobileFacilityCreationModalService
|
|
6248
|
+
*
|
|
6249
|
+
* Service for displaying the facility creation modal.
|
|
6250
|
+
* Built on Ionic's modal system with native gestures and animations.
|
|
6251
|
+
*
|
|
6252
|
+
* Features:
|
|
6253
|
+
* - Full-screen modal with form
|
|
6254
|
+
* - Title and description inputs
|
|
6255
|
+
* - Interactive list items for facility options
|
|
6256
|
+
* - Bottom sheet pickers
|
|
6257
|
+
* - Form validation
|
|
6258
|
+
* - Submit handling with confirmation sheet
|
|
6259
|
+
* - Loading and error states
|
|
6260
|
+
*
|
|
6261
|
+
* @example
|
|
6262
|
+
* ```typescript
|
|
6263
|
+
* constructor(private facilityCreationModal: DsMobileFacilityCreationModalService) {}
|
|
6264
|
+
*
|
|
6265
|
+
* async createNewFacility(): Promise<void> {
|
|
6266
|
+
* await this.facilityCreationModal.open({
|
|
6267
|
+
* onSubmit: async (data) => {
|
|
6268
|
+
* console.log('Creating facility:', data);
|
|
6269
|
+
* await this.apiService.createFacility(data);
|
|
6270
|
+
* await this.facilityCreationModal.close();
|
|
6271
|
+
* }
|
|
6272
|
+
* });
|
|
6273
|
+
* }
|
|
6274
|
+
* ```
|
|
6275
|
+
*/
|
|
6276
|
+
declare class DsMobileFacilityCreationModalService extends BaseModalService {
|
|
6277
|
+
constructor(modalController: ModalController);
|
|
6278
|
+
/**
|
|
6279
|
+
* Open the facility creation modal
|
|
6280
|
+
*
|
|
6281
|
+
* @param options Modal options including onSubmit callback
|
|
6282
|
+
* @returns Promise that resolves when the modal is presented
|
|
6283
|
+
*/
|
|
6284
|
+
open(options?: FacilityCreationModalOptions): Promise<void>;
|
|
6285
|
+
/**
|
|
6286
|
+
* Open the confirmation bottom sheet after successful facility creation
|
|
6287
|
+
*
|
|
6288
|
+
* @param facilityData The created facility data
|
|
6289
|
+
* @returns Promise that resolves when the sheet is dismissed
|
|
6290
|
+
*/
|
|
6291
|
+
private openConfirmationSheet;
|
|
6292
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFacilityCreationModalService, never>;
|
|
6293
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsMobileFacilityCreationModalService>;
|
|
6294
|
+
}
|
|
6295
|
+
|
|
6296
|
+
/**
|
|
6297
|
+
* DsMobileFacilityCreationConfirmationWrapperComponent
|
|
6298
|
+
*
|
|
6299
|
+
* Wrapper component that uses the generic confirmation sheet
|
|
6300
|
+
* specifically for facility creation confirmations.
|
|
6301
|
+
*
|
|
6302
|
+
* This component displays a summary of the created facility.
|
|
6303
|
+
*/
|
|
6304
|
+
declare class DsMobileFacilityCreationConfirmationWrapperComponent {
|
|
6305
|
+
facilityData: NewFacilityData;
|
|
6306
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFacilityCreationConfirmationWrapperComponent, never>;
|
|
6307
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFacilityCreationConfirmationWrapperComponent, "ds-mobile-facility-creation-confirmation-wrapper", never, { "facilityData": { "alias": "facilityData"; "required": false; }; }, {}, never, never, true, never>;
|
|
6308
|
+
}
|
|
6309
|
+
|
|
6310
|
+
interface WhoCanBookOption {
|
|
6311
|
+
value: string;
|
|
6312
|
+
label: string;
|
|
6313
|
+
isMaster?: boolean;
|
|
6314
|
+
}
|
|
6315
|
+
/**
|
|
6316
|
+
* DsMobileWhoCanBookSheetComponent
|
|
6317
|
+
*
|
|
6318
|
+
* Bottom sheet for selecting who can book a facility (multi-select with checkboxes).
|
|
6319
|
+
*/
|
|
6320
|
+
declare class DsMobileWhoCanBookSheetComponent {
|
|
6321
|
+
private modalController;
|
|
6322
|
+
options: WhoCanBookOption[];
|
|
6323
|
+
selectedOptions: _angular_core.WritableSignal<Set<string>>;
|
|
6324
|
+
hasSelectionChanged: _angular_core.Signal<boolean>;
|
|
6325
|
+
constructor(modalController: ModalController);
|
|
6326
|
+
/**
|
|
6327
|
+
* Toggle an option on/off
|
|
6328
|
+
* Special logic for 'alle': when toggled on, selects all options; when toggled off, deselects all
|
|
6329
|
+
*/
|
|
6330
|
+
toggleOption(value: string): void;
|
|
6331
|
+
/**
|
|
6332
|
+
* Confirm selection and dismiss with selected options
|
|
6333
|
+
*/
|
|
6334
|
+
confirmSelection(): void;
|
|
6335
|
+
/**
|
|
6336
|
+
* Dismiss without saving
|
|
6337
|
+
*/
|
|
6338
|
+
dismiss(): void;
|
|
6339
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileWhoCanBookSheetComponent, never>;
|
|
6340
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileWhoCanBookSheetComponent, "ds-mobile-who-can-book-sheet", never, {}, {}, never, never, true, never>;
|
|
6341
|
+
}
|
|
6342
|
+
|
|
6343
|
+
/**
|
|
6344
|
+
* DsMobileWhenCanBookSheetComponent
|
|
6345
|
+
*
|
|
6346
|
+
* Bottom sheet for selecting when a facility can be booked (days, time range, duration).
|
|
6347
|
+
*/
|
|
6348
|
+
declare class DsMobileWhenCanBookSheetComponent {
|
|
6349
|
+
private modalController;
|
|
6350
|
+
selectedDays: _angular_core.WritableSignal<Set<string>>;
|
|
6351
|
+
startTime: _angular_core.WritableSignal<string>;
|
|
6352
|
+
endTime: _angular_core.WritableSignal<string>;
|
|
6353
|
+
selectedDuration: _angular_core.WritableSignal<string>;
|
|
6354
|
+
days: string[];
|
|
6355
|
+
durations: {
|
|
6356
|
+
value: string;
|
|
6357
|
+
label: string;
|
|
6358
|
+
}[];
|
|
6359
|
+
isValid: _angular_core.Signal<string | false>;
|
|
6360
|
+
constructor(modalController: ModalController);
|
|
6361
|
+
/**
|
|
6362
|
+
* Toggle day selection
|
|
6363
|
+
*/
|
|
6364
|
+
toggleDay(day: string): void;
|
|
6365
|
+
/**
|
|
6366
|
+
* Confirm selection and dismiss with data
|
|
6367
|
+
*/
|
|
6368
|
+
confirmSelection(): void;
|
|
6369
|
+
/**
|
|
6370
|
+
* Dismiss without saving
|
|
6371
|
+
*/
|
|
6372
|
+
dismiss(): void;
|
|
6373
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileWhenCanBookSheetComponent, never>;
|
|
6374
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileWhenCanBookSheetComponent, "ds-mobile-when-can-book-sheet", never, {}, {}, never, never, true, never>;
|
|
6375
|
+
}
|
|
6376
|
+
|
|
6377
|
+
/**
|
|
6378
|
+
* DsMobilePriceSheetComponent
|
|
6379
|
+
*
|
|
6380
|
+
* Bottom sheet for setting facility booking price with toggle for free and custom price input.
|
|
6381
|
+
*/
|
|
6382
|
+
declare class DsMobilePriceSheetComponent {
|
|
6383
|
+
private modalController;
|
|
6384
|
+
isFree: _angular_core.WritableSignal<boolean>;
|
|
6385
|
+
customPrice: _angular_core.WritableSignal<string>;
|
|
6386
|
+
isValid: _angular_core.Signal<boolean>;
|
|
6387
|
+
constructor(modalController: ModalController);
|
|
6388
|
+
/**
|
|
6389
|
+
* Toggle the "Gratis" (free) option
|
|
6390
|
+
*/
|
|
6391
|
+
toggleFree(): void;
|
|
6392
|
+
/**
|
|
6393
|
+
* Confirm selection and dismiss with price value
|
|
6394
|
+
*/
|
|
6395
|
+
confirmSelection(): void;
|
|
6396
|
+
/**
|
|
6397
|
+
* Dismiss without saving
|
|
6398
|
+
*/
|
|
6399
|
+
dismiss(): void;
|
|
6400
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobilePriceSheetComponent, never>;
|
|
6401
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobilePriceSheetComponent, "ds-mobile-price-sheet", never, {}, {}, never, never, true, never>;
|
|
6402
|
+
}
|
|
6403
|
+
|
|
6404
|
+
interface AccessRequirementOption {
|
|
6405
|
+
value: string;
|
|
6406
|
+
label: string;
|
|
6407
|
+
}
|
|
6408
|
+
/**
|
|
6409
|
+
* DsMobileAccessSheetComponent
|
|
6410
|
+
*
|
|
6411
|
+
* Bottom sheet for selecting facility access requirements (multi-select with checkboxes).
|
|
6412
|
+
*/
|
|
6413
|
+
declare class DsMobileAccessSheetComponent {
|
|
6414
|
+
private modalController;
|
|
6415
|
+
options: AccessRequirementOption[];
|
|
6416
|
+
selectedRestrictions: _angular_core.WritableSignal<Set<string>>;
|
|
6417
|
+
constructor(modalController: ModalController);
|
|
6418
|
+
/**
|
|
6419
|
+
* Toggle an option on/off
|
|
6420
|
+
*/
|
|
6421
|
+
toggleOption(value: string): void;
|
|
6422
|
+
/**
|
|
6423
|
+
* Confirm selection and dismiss with selected restrictions
|
|
6424
|
+
*/
|
|
6425
|
+
confirmSelection(): void;
|
|
6426
|
+
/**
|
|
6427
|
+
* Dismiss without saving
|
|
6428
|
+
*/
|
|
6429
|
+
dismiss(): void;
|
|
6430
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileAccessSheetComponent, never>;
|
|
6431
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileAccessSheetComponent, "ds-mobile-access-sheet", never, {}, {}, never, never, true, never>;
|
|
6432
|
+
}
|
|
6433
|
+
|
|
6434
|
+
/**
|
|
6435
|
+
* Facility data interface for the modal
|
|
6436
|
+
*
|
|
6437
|
+
* Represents a facility with its content, images, requirements, and restrictions.
|
|
6438
|
+
* Use this interface to map your API response data to the component.
|
|
6439
|
+
*
|
|
6440
|
+
* @example
|
|
6441
|
+
* ```typescript
|
|
6442
|
+
* const facilityData: FacilityDetailData = {
|
|
6443
|
+
* id: 'facility-1',
|
|
6444
|
+
* facilityTitle: 'Festlokale på taget',
|
|
6445
|
+
* heroImage: '/Assets/Dummy-photos/balcony-view.jpg',
|
|
6446
|
+
* fullDescription: '<p>The rooftop terrace...</p>',
|
|
6447
|
+
* requirements: ['Kræver nøglekort'],
|
|
6448
|
+
* bookingType: 'Instant booking',
|
|
6449
|
+
* expectations: '<p>The terrace is furnished...</p>',
|
|
6450
|
+
* restrictions: ['No smoking...']
|
|
6451
|
+
* };
|
|
6452
|
+
* ```
|
|
6453
|
+
*/
|
|
6454
|
+
interface FacilityDetailData {
|
|
6455
|
+
/** Unique facility identifier */
|
|
6456
|
+
id: string;
|
|
6457
|
+
/** Facility title/name */
|
|
6458
|
+
facilityTitle: string;
|
|
6459
|
+
/** Hero image URL for the top of the modal */
|
|
6460
|
+
heroImage?: string;
|
|
6461
|
+
/** Full description of the facility (HTML rich text) */
|
|
6462
|
+
fullDescription: string;
|
|
6463
|
+
/** List of requirements (e.g., "Kræver nøglekort") */
|
|
6464
|
+
requirements?: string[];
|
|
6465
|
+
/** Booking type (e.g., "Instant booking") */
|
|
6466
|
+
bookingType?: string;
|
|
6467
|
+
/** Expectations section content (HTML rich text) */
|
|
6468
|
+
expectations?: string;
|
|
6469
|
+
/** List of restrictions */
|
|
6470
|
+
restrictions?: string[];
|
|
6471
|
+
/** Availability status for display */
|
|
6472
|
+
availabilityStatus?: string;
|
|
6473
|
+
/** Status label text */
|
|
6474
|
+
statusLabel?: string;
|
|
6475
|
+
/** Booking date (for active bookings) */
|
|
6476
|
+
bookingDate?: string;
|
|
6477
|
+
/** Booking time range (for active bookings) */
|
|
6478
|
+
bookingTime?: string;
|
|
6479
|
+
}
|
|
6480
|
+
/**
|
|
6481
|
+
* DsMobileFacilityDetailModalComponent
|
|
6482
|
+
*
|
|
6483
|
+
* Modal wrapper for displaying facility details with rich content.
|
|
6484
|
+
* Follows the same pattern as the post detail modal for consistent behavior.
|
|
6485
|
+
*
|
|
6486
|
+
* Features:
|
|
6487
|
+
* - Hero image with swiper support
|
|
6488
|
+
* - Requirements and booking type display
|
|
6489
|
+
* - Rich text description
|
|
6490
|
+
* - Expectations section
|
|
6491
|
+
* - Restrictions list
|
|
6492
|
+
* - Fixed bottom booking button
|
|
6493
|
+
* - Native modal controls (close, swipe down)
|
|
6494
|
+
* - Safe area support
|
|
6495
|
+
*
|
|
6496
|
+
* This component is typically not used directly - use DsMobileFacilityDetailModalService instead.
|
|
6497
|
+
*
|
|
6498
|
+
* @example
|
|
6499
|
+
* ```typescript
|
|
6500
|
+
* // Don't instantiate directly - use the service:
|
|
6501
|
+
* constructor(private facilityModal: DsMobileFacilityDetailModalService) {}
|
|
6502
|
+
*
|
|
6503
|
+
* openFacility() {
|
|
6504
|
+
* this.facilityModal.open({
|
|
6505
|
+
* id: 'facility-1',
|
|
6506
|
+
* facilityTitle: 'Festlokale på taget',
|
|
6507
|
+
* fullDescription: '<p>Description...</p>'
|
|
6508
|
+
* });
|
|
6509
|
+
* }
|
|
6510
|
+
* ```
|
|
6511
|
+
*/
|
|
6512
|
+
declare class DsMobileFacilityDetailModalComponent {
|
|
6513
|
+
private modalController;
|
|
6514
|
+
private bookingModalService;
|
|
6515
|
+
/**
|
|
6516
|
+
* Facility data to display in the modal
|
|
6517
|
+
*/
|
|
6518
|
+
facilityData: FacilityDetailData;
|
|
6519
|
+
constructor(modalController: ModalController, bookingModalService: DsMobileBookingModalService);
|
|
6520
|
+
/**
|
|
6521
|
+
* Handle booking button click
|
|
6522
|
+
* Opens the booking modal for date/time selection
|
|
6523
|
+
*/
|
|
6524
|
+
handleBookNow(): Promise<void>;
|
|
6525
|
+
/**
|
|
6526
|
+
* Close the modal
|
|
6527
|
+
*/
|
|
6528
|
+
close(): void;
|
|
6529
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFacilityDetailModalComponent, never>;
|
|
6530
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFacilityDetailModalComponent, "ds-mobile-facility-detail-modal", never, { "facilityData": { "alias": "facilityData"; "required": false; }; }, {}, never, never, true, never>;
|
|
6531
|
+
}
|
|
6532
|
+
|
|
6533
|
+
/**
|
|
6534
|
+
* DsMobileFacilityDetailModalService
|
|
6535
|
+
*
|
|
6536
|
+
* Service for displaying facility details in a full-screen modal.
|
|
6537
|
+
* Built on Ionic's modal system with native gestures and animations.
|
|
6538
|
+
* Follows the same pattern as DsMobilePostDetailModalService for consistent behavior.
|
|
6539
|
+
*
|
|
6540
|
+
* Features:
|
|
6541
|
+
* - Full facility information display
|
|
6542
|
+
* - Hero image with swiper
|
|
6543
|
+
* - Rich text description support
|
|
6544
|
+
* - Requirements and booking type display
|
|
6545
|
+
* - Restrictions list
|
|
6546
|
+
* - Fixed bottom booking button
|
|
6547
|
+
* - Native modal animations
|
|
6548
|
+
* - Safe area support
|
|
6549
|
+
*
|
|
6550
|
+
* @example
|
|
6551
|
+
* ```typescript
|
|
6552
|
+
* constructor(private facilityModal: DsMobileFacilityDetailModalService) {}
|
|
6553
|
+
*
|
|
6554
|
+
* async openFacility() {
|
|
6555
|
+
* await this.facilityModal.open({
|
|
6556
|
+
* id: 'facility-1',
|
|
6557
|
+
* facilityTitle: 'Festlokale på taget',
|
|
6558
|
+
* heroImage: '/Assets/Dummy-photos/balcony-view.jpg',
|
|
6559
|
+
* fullDescription: '<p>The rooftop terrace is designed...</p>',
|
|
6560
|
+
* requirements: ['Kræver nøglekort'],
|
|
6561
|
+
* bookingType: 'Instant booking',
|
|
6562
|
+
* expectations: '<p>The terrace is furnished...</p>',
|
|
6563
|
+
* restrictions: ['No smoking or vaping...']
|
|
6564
|
+
* });
|
|
6565
|
+
* }
|
|
6566
|
+
* ```
|
|
6567
|
+
*/
|
|
6568
|
+
declare class DsMobileFacilityDetailModalService extends BaseModalService {
|
|
6569
|
+
constructor(modalController: ModalController);
|
|
6570
|
+
/**
|
|
6571
|
+
* Open the facility detail modal
|
|
6572
|
+
*
|
|
6573
|
+
* @param facilityData Facility data to display
|
|
6574
|
+
* @returns Promise that resolves when the modal is presented
|
|
6575
|
+
*/
|
|
6576
|
+
open(facilityData: FacilityDetailData): Promise<void>;
|
|
6577
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFacilityDetailModalService, never>;
|
|
6578
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsMobileFacilityDetailModalService>;
|
|
6579
|
+
}
|
|
6580
|
+
|
|
6581
|
+
/**
|
|
6582
|
+
* Handbook detail data interface
|
|
6583
|
+
*
|
|
6584
|
+
* Represents a handbook category/folder with its sections/items.
|
|
6585
|
+
* Use this interface to map your API response data to the component.
|
|
6586
|
+
*
|
|
6587
|
+
* @example
|
|
6588
|
+
* ```typescript
|
|
6589
|
+
* const handbookData: HandbookDetailData = {
|
|
6590
|
+
* title: 'Access Systems',
|
|
6591
|
+
* variant: 'blue',
|
|
6592
|
+
* iconName: 'remixKey2Line',
|
|
6593
|
+
* itemCount: 5,
|
|
6594
|
+
* items: [...]
|
|
6595
|
+
* };
|
|
6596
|
+
* ```
|
|
6597
|
+
*/
|
|
6598
|
+
interface HandbookDetailData {
|
|
6599
|
+
/** Category/folder title */
|
|
6600
|
+
title: string;
|
|
6601
|
+
/** Color variant: 'success', 'warning', 'destructive', 'blue', 'light-purple', 'pink', 'salmon-orange', 'orange', 'lime-green', 'grey' */
|
|
6602
|
+
variant: string;
|
|
6603
|
+
/** Icon name from design system (e.g., 'remixKey2Line', 'remixLightbulbLine') */
|
|
6604
|
+
iconName: string;
|
|
6605
|
+
/** Total number of items/sections in this category */
|
|
6606
|
+
itemCount: number;
|
|
6607
|
+
/** Array of handbook sections/items */
|
|
6608
|
+
items?: HandbookItem[];
|
|
6609
|
+
}
|
|
6610
|
+
/**
|
|
6611
|
+
* Handbook section/item interface
|
|
6612
|
+
*
|
|
6613
|
+
* Represents a single section within a handbook category.
|
|
6614
|
+
* Each section can have a title, description, images, contacts, and attachments.
|
|
6615
|
+
*
|
|
6616
|
+
* @example
|
|
6617
|
+
* ```typescript
|
|
6618
|
+
* const item: HandbookItem = {
|
|
6619
|
+
* title: 'Key Box Entrance',
|
|
6620
|
+
* description: 'Key box located at main entrance...',
|
|
6621
|
+
* images: ['https://api.example.com/images/keybox.jpg'],
|
|
6622
|
+
* contacts: [{ name: 'Security Co', initials: 'S', phoneNumber: '+45 12345678' }],
|
|
6623
|
+
* attachments: [{ name: 'Manual.pdf', type: 'pdf', url: 'https://...' }]
|
|
6624
|
+
* };
|
|
6625
|
+
* ```
|
|
6626
|
+
*/
|
|
6627
|
+
interface HandbookItem {
|
|
6628
|
+
/** Section title */
|
|
6629
|
+
title: string;
|
|
6630
|
+
/** Optional section description */
|
|
5569
6631
|
description?: string;
|
|
5570
6632
|
/** Array of image URLs to display */
|
|
5571
6633
|
images?: string[];
|
|
@@ -6235,9 +7297,9 @@ declare class DsMobileIllustrationComponent {
|
|
|
6235
7297
|
private sanitizer;
|
|
6236
7298
|
/**
|
|
6237
7299
|
* Predefined illustration variant
|
|
6238
|
-
* Available variants: 'post', 'inquiry'
|
|
7300
|
+
* Available variants: 'post', 'inquiry', 'confirmation'
|
|
6239
7301
|
*/
|
|
6240
|
-
variant: _angular_core.InputSignal<"post" | "inquiry">;
|
|
7302
|
+
variant: _angular_core.InputSignal<"post" | "inquiry" | "confirmation">;
|
|
6241
7303
|
/**
|
|
6242
7304
|
* Illustration size (width and height)
|
|
6243
7305
|
* @default '120px'
|
|
@@ -6621,6 +7683,59 @@ declare class MobileTabsExampleComponent implements OnInit {
|
|
|
6621
7683
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileTabsExampleComponent, "app-mobile-tabs-example", never, {}, {}, never, never, true, never>;
|
|
6622
7684
|
}
|
|
6623
7685
|
|
|
7686
|
+
interface FacilityDetail {
|
|
7687
|
+
id: string;
|
|
7688
|
+
thumbnail: string;
|
|
7689
|
+
facilityTitle: string;
|
|
7690
|
+
description: string;
|
|
7691
|
+
availabilityStatus?: 'available-today' | 'available-from' | 'unavailable';
|
|
7692
|
+
statusLabel?: string;
|
|
7693
|
+
heroImage?: string;
|
|
7694
|
+
fullDescription: string;
|
|
7695
|
+
requirements?: string[];
|
|
7696
|
+
bookingType?: string;
|
|
7697
|
+
expectations?: string;
|
|
7698
|
+
restrictions?: string[];
|
|
7699
|
+
bookingDate?: string;
|
|
7700
|
+
bookingTime?: string;
|
|
7701
|
+
}
|
|
7702
|
+
declare class MobileBookingPageComponent {
|
|
7703
|
+
private facilityModal;
|
|
7704
|
+
private facilityCreationModal;
|
|
7705
|
+
pageComponent: DsMobilePageMainComponent;
|
|
7706
|
+
bookingsSwiper?: DsMobileSwiperComponent;
|
|
7707
|
+
constructor(facilityModal: DsMobileFacilityDetailModalService, facilityCreationModal: DsMobileFacilityCreationModalService);
|
|
7708
|
+
activeBookings: _angular_core.WritableSignal<FacilityDetail[]>;
|
|
7709
|
+
availableFacilities: _angular_core.WritableSignal<FacilityDetail[]>;
|
|
7710
|
+
handleRefresh(event: any): void;
|
|
7711
|
+
/**
|
|
7712
|
+
* Navigate to previous slide
|
|
7713
|
+
*/
|
|
7714
|
+
slidePrev(): void;
|
|
7715
|
+
/**
|
|
7716
|
+
* Navigate to next slide
|
|
7717
|
+
*/
|
|
7718
|
+
slideNext(): void;
|
|
7719
|
+
/**
|
|
7720
|
+
* Check if at first slide
|
|
7721
|
+
*/
|
|
7722
|
+
isFirstSlide(): boolean;
|
|
7723
|
+
/**
|
|
7724
|
+
* Check if at last slide
|
|
7725
|
+
*/
|
|
7726
|
+
isLastSlide(): boolean;
|
|
7727
|
+
/**
|
|
7728
|
+
* Open facility detail modal
|
|
7729
|
+
*/
|
|
7730
|
+
openFacilityDetail(facilityId: string): Promise<void>;
|
|
7731
|
+
/**
|
|
7732
|
+
* Open facility creation modal
|
|
7733
|
+
*/
|
|
7734
|
+
openFacilityCreationModal(): Promise<void>;
|
|
7735
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileBookingPageComponent, never>;
|
|
7736
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileBookingPageComponent, "app-mobile-booking-page", never, {}, {}, never, never, true, never>;
|
|
7737
|
+
}
|
|
7738
|
+
|
|
6624
7739
|
/**
|
|
6625
7740
|
* PostCreatePageComponent
|
|
6626
7741
|
*
|
|
@@ -6820,5 +7935,5 @@ declare const customPageTransition: (_: HTMLElement, opts: any) => Animation;
|
|
|
6820
7935
|
*/
|
|
6821
7936
|
declare const customBackTransition: (_: HTMLElement, opts: any) => Animation;
|
|
6822
7937
|
|
|
6823
|
-
export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAttachmentPreviewComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileDropdownComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFileAttachmentComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobileProfileActionsSheetComponent, DsMobilePropertyBannerComponent, DsMobileSectionComponent, 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, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition };
|
|
6824
|
-
export type { ActionGroup, ActionItem, ActionResult, AppIconSize, 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, NetworkStatus, NewInquiryData, NewInquiryModalOptions, Post, ActionResult as PostActionResult, PostDetailData, TabConfig, WhitelabelConfig };
|
|
7938
|
+
export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileDropdownComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePropertyBannerComponent, DsMobileSectionComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, SectionHeaderComponent, SignInPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, UserService, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition };
|
|
7939
|
+
export type { ActionGroup, ActionItem, ActionResult, AppIconSize, AttachmentData, AttachmentFileType, AttachmentItem, AvatarSize, AvatarType, BadgePosition, BookingResult, BottomSheetOptions, ChatAttachment, ChatMessage, ChatModalData, ChatParticipant, Comment, ActionResult as CommentActionResult, CommentData, ContactItem, ContentWidth, DateOption, DropdownAlign, DropdownPosition, DsMobileDropdownItem, FacilityCreationModalOptions, FacilityDetailData, HandbookDetailData, HandbookItem, InlineTabItem, InquiryPhoto, Language, LightboxAuthor, LightboxImage, LightboxImageOptions, LightboxMediaFile, LightboxMediaType, LightboxOptions, LightboxPdf, LightboxPdfOptions, LogoSize, LogoVariant, ModalOptions, NetworkStatus, NewFacilityData, NewInquiryData, NewInquiryModalOptions, Post, ActionResult as PostActionResult, PostDetailData, TabConfig, TimeSlot, WhitelabelConfig };
|