@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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnDestroy, AfterViewInit, OnInit, ElementRef, OnChanges, Injector, SimpleChanges, TemplateRef, EventEmitter, ApplicationRef, EnvironmentInjector, Type, AfterContentInit, ChangeDetectorRef } from '@angular/core';
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 and provides consistent layout structure.
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
- * Always true to maintain consistent layout
2637
+ * Dynamically updated after view initialization
2468
2638
  */
2469
- hasLeadingContent: _angular_core.Signal<boolean>;
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
- * Handbook detail data interface
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 HandbookDetailData {
5537
- /** Category/folder title */
5538
- title: string;
5539
- /** Color variant: 'success', 'warning', 'destructive', 'blue', 'light-purple', 'pink', 'salmon-orange', 'orange', 'lime-green', 'grey' */
5540
- variant: string;
5541
- /** Icon name from design system (e.g., 'remixKey2Line', 'remixLightbulbLine') */
5542
- iconName: string;
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
- * Handbook section/item interface
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
- * Represents a single section within a handbook category.
5552
- * Each section can have a title, description, images, contacts, and attachments.
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 item: HandbookItem = {
5557
- * title: 'Key Box Entrance',
5558
- * description: 'Key box located at main entrance...',
5559
- * images: ['https://api.example.com/images/keybox.jpg'],
5560
- * contacts: [{ name: 'Security Co', initials: 'S', phoneNumber: '+45 12345678' }],
5561
- * attachments: [{ name: 'Manual.pdf', type: 'pdf', url: 'https://...' }]
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
- interface HandbookItem {
5566
- /** Section title */
5567
- title: string;
5568
- /** Optional section description */
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 };