@propbinder/mobile-design 0.3.38 → 0.3.39
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 +493 -472
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
- package/index.d.ts +59 -35
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, effect, Injectable, inject, Input, Component, input, output, Directive, EventEmitter, HostListener, Output, PLATFORM_ID, ElementRef, CUSTOM_ELEMENTS_SCHEMA, TemplateRef, ContentChild, forwardRef, ViewChild, afterNextRender, ViewEncapsulation, model, createComponent, ChangeDetectionStrategy, NgZone,
|
|
2
|
+
import { signal, computed, effect, Injectable, inject, Input, Component, input, output, Directive, EventEmitter, HostListener, Output, PLATFORM_ID, ElementRef, CUSTOM_ELEMENTS_SCHEMA, TemplateRef, ContentChild, forwardRef, ViewChild, afterNextRender, ViewEncapsulation, model, createComponent, ChangeDetectionStrategy, NgZone, HostBinding, Pipe, InjectionToken } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common';
|
|
4
4
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
5
5
|
import * as i1$3 from '@angular/router';
|
|
@@ -6186,7 +6186,7 @@ class DsMobilePageMainComponent extends MobilePageBase {
|
|
|
6186
6186
|
|
|
6187
6187
|
<!-- Pull to refresh (only on native iOS/Android) -->
|
|
6188
6188
|
@if (showRefresh() && isNativePlatform()) {
|
|
6189
|
-
<ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)" [pullFactor]="0.
|
|
6189
|
+
<ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)" [pullFactor]="0.5" [pullMin]="80" [pullMax]="240" [snapbackDuration]="'280ms'" closeDuration="280ms">
|
|
6190
6190
|
<ion-refresher-content pullingIcon="remixArrowDownS" refreshingSpinner="crescent"> </ion-refresher-content>
|
|
6191
6191
|
</ion-refresher>
|
|
6192
6192
|
}
|
|
@@ -6275,7 +6275,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
6275
6275
|
|
|
6276
6276
|
<!-- Pull to refresh (only on native iOS/Android) -->
|
|
6277
6277
|
@if (showRefresh() && isNativePlatform()) {
|
|
6278
|
-
<ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)" [pullFactor]="0.
|
|
6278
|
+
<ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)" [pullFactor]="0.5" [pullMin]="80" [pullMax]="240" [snapbackDuration]="'280ms'" closeDuration="280ms">
|
|
6279
6279
|
<ion-refresher-content pullingIcon="remixArrowDownS" refreshingSpinner="crescent"> </ion-refresher-content>
|
|
6280
6280
|
</ion-refresher>
|
|
6281
6281
|
}
|
|
@@ -6727,10 +6727,11 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
|
|
|
6727
6727
|
<ion-refresher
|
|
6728
6728
|
slot="fixed"
|
|
6729
6729
|
(ionRefresh)="handleRefresh($event)"
|
|
6730
|
-
[pullFactor]="0.
|
|
6730
|
+
[pullFactor]="0.5"
|
|
6731
6731
|
[pullMin]="80"
|
|
6732
6732
|
[pullMax]="240"
|
|
6733
|
-
|
|
6733
|
+
[snapbackDuration]="'280ms'"
|
|
6734
|
+
closeDuration="280ms">
|
|
6734
6735
|
<ion-refresher-content
|
|
6735
6736
|
pullingIcon="remixArrowDownS"
|
|
6736
6737
|
refreshingSpinner="crescent">
|
|
@@ -6819,10 +6820,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
6819
6820
|
<ion-refresher
|
|
6820
6821
|
slot="fixed"
|
|
6821
6822
|
(ionRefresh)="handleRefresh($event)"
|
|
6822
|
-
[pullFactor]="0.
|
|
6823
|
+
[pullFactor]="0.5"
|
|
6823
6824
|
[pullMin]="80"
|
|
6824
6825
|
[pullMax]="240"
|
|
6825
|
-
|
|
6826
|
+
[snapbackDuration]="'280ms'"
|
|
6827
|
+
closeDuration="280ms">
|
|
6826
6828
|
<ion-refresher-content
|
|
6827
6829
|
pullingIcon="remixArrowDownS"
|
|
6828
6830
|
refreshingSpinner="crescent">
|
|
@@ -22211,6 +22213,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
22211
22213
|
*/
|
|
22212
22214
|
cancelEdit() {
|
|
22213
22215
|
this.editingComment.set(null);
|
|
22216
|
+
this.replyingTo.set(null);
|
|
22214
22217
|
this.commentText.set('');
|
|
22215
22218
|
}
|
|
22216
22219
|
/**
|
|
@@ -22219,6 +22222,17 @@ class DsMobilePostDetailModalComponent {
|
|
|
22219
22222
|
handleEditComment(comment) {
|
|
22220
22223
|
// Clear reply state if active
|
|
22221
22224
|
this.replyingTo.set(null);
|
|
22225
|
+
let contentToEdit = comment.content;
|
|
22226
|
+
const possibleNames = [this.post().authorName, ...(this.post().comments?.map((c) => c.authorName) || [])];
|
|
22227
|
+
const uniqueNames = Array.from(new Set(possibleNames)).sort((a, b) => b.length - a.length);
|
|
22228
|
+
for (const author of uniqueNames) {
|
|
22229
|
+
const tagPrefix = `@${author} `;
|
|
22230
|
+
if (contentToEdit.startsWith(tagPrefix)) {
|
|
22231
|
+
this.replyingTo.set({ authorName: author, content: '' });
|
|
22232
|
+
contentToEdit = contentToEdit.substring(tagPrefix.length);
|
|
22233
|
+
break;
|
|
22234
|
+
}
|
|
22235
|
+
}
|
|
22222
22236
|
// Set edit state
|
|
22223
22237
|
this.editingComment.set({
|
|
22224
22238
|
id: comment.id,
|
|
@@ -22227,7 +22241,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
22227
22241
|
timestamp: comment.timestamp,
|
|
22228
22242
|
});
|
|
22229
22243
|
// Populate the input with existing content
|
|
22230
|
-
this.commentText.set(
|
|
22244
|
+
this.commentText.set(contentToEdit);
|
|
22231
22245
|
// Focus the input, show keyboard, and auto-resize
|
|
22232
22246
|
setTimeout(() => {
|
|
22233
22247
|
if (this.commentInput?.nativeElement) {
|
|
@@ -22297,10 +22311,12 @@ class DsMobilePostDetailModalComponent {
|
|
|
22297
22311
|
// console.log('[PostDetailModal] Updating comment:', text);
|
|
22298
22312
|
const editing = this.editingComment();
|
|
22299
22313
|
const updatedComments = currentPost.comments?.map((comment) => {
|
|
22300
|
-
|
|
22314
|
+
const matchesId = comment.id && editing.id && comment.id === editing.id;
|
|
22315
|
+
const matchesContent = !comment.id && !editing.id && comment.authorName === editing.authorName && comment.content === editing.originalContent;
|
|
22316
|
+
if (matchesId || matchesContent) {
|
|
22301
22317
|
return {
|
|
22302
22318
|
...comment,
|
|
22303
|
-
content:
|
|
22319
|
+
content: finalText,
|
|
22304
22320
|
timestamp: `${this.textJustNow} (${this.textEdited})`,
|
|
22305
22321
|
};
|
|
22306
22322
|
}
|
|
@@ -22318,6 +22334,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
22318
22334
|
});
|
|
22319
22335
|
}
|
|
22320
22336
|
this.editingComment.set(null);
|
|
22337
|
+
this.replyingTo.set(null);
|
|
22321
22338
|
}
|
|
22322
22339
|
else {
|
|
22323
22340
|
// console.log('[PostDetailModal] Submitting comment:', finalText);
|
|
@@ -22552,8 +22569,10 @@ class DsMobilePostDetailModalComponent {
|
|
|
22552
22569
|
<ds-icon name="remixCloseLine" size="16px" />
|
|
22553
22570
|
</button>
|
|
22554
22571
|
</div>
|
|
22555
|
-
}
|
|
22572
|
+
}
|
|
22573
|
+
|
|
22556
22574
|
<!-- Reply indicator -->
|
|
22575
|
+
@if (replyingTo()) {
|
|
22557
22576
|
<div class="reply-indicator">
|
|
22558
22577
|
<div class="reply-indicator-content">
|
|
22559
22578
|
<ds-icon name="remixReplyLine" size="16px" />
|
|
@@ -22698,8 +22717,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
22698
22717
|
<ds-icon name="remixCloseLine" size="16px" />
|
|
22699
22718
|
</button>
|
|
22700
22719
|
</div>
|
|
22701
|
-
}
|
|
22720
|
+
}
|
|
22721
|
+
|
|
22702
22722
|
<!-- Reply indicator -->
|
|
22723
|
+
@if (replyingTo()) {
|
|
22703
22724
|
<div class="reply-indicator">
|
|
22704
22725
|
<div class="reply-indicator-content">
|
|
22705
22726
|
<ds-icon name="remixReplyLine" size="16px" />
|
|
@@ -24674,6 +24695,465 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
24674
24695
|
args: [{ providedIn: 'root' }]
|
|
24675
24696
|
}], ctorParameters: () => [{ type: i1.ModalController }] });
|
|
24676
24697
|
|
|
24698
|
+
class DsMobileBookingDetailSheetComponent {
|
|
24699
|
+
modalController;
|
|
24700
|
+
/** `sheet` = bottom sheet. `modal` = `ds-modal-base` shell (active + history bookings). */
|
|
24701
|
+
presentation = 'sheet';
|
|
24702
|
+
data;
|
|
24703
|
+
/** When true the modal sizes to its content instead of filling the screen. */
|
|
24704
|
+
autoHeight = false;
|
|
24705
|
+
get isModalPresentation() {
|
|
24706
|
+
return this.presentation === 'modal';
|
|
24707
|
+
}
|
|
24708
|
+
constructor(modalController) {
|
|
24709
|
+
this.modalController = modalController;
|
|
24710
|
+
}
|
|
24711
|
+
close() {
|
|
24712
|
+
this.modalController.dismiss(null, 'backdrop');
|
|
24713
|
+
}
|
|
24714
|
+
cancelBooking() {
|
|
24715
|
+
this.modalController.dismiss(null, 'cancel');
|
|
24716
|
+
}
|
|
24717
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
|
|
24718
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileBookingDetailSheetComponent, isStandalone: true, selector: "ds-mobile-booking-detail-sheet", inputs: { presentation: "presentation", data: "data", autoHeight: "autoHeight" }, host: { properties: { "class.presentation-modal": "this.isModalPresentation" } }, ngImport: i0, template: `
|
|
24719
|
+
@if (presentation === 'modal') {
|
|
24720
|
+
<ds-mobile-modal-base
|
|
24721
|
+
[headerTitle]="data.facilityTitle"
|
|
24722
|
+
[closeButtonLabel]="'Luk'"
|
|
24723
|
+
[isAutoHeight]="autoHeight"
|
|
24724
|
+
[keyboardContentBehavior]="'follow'">
|
|
24725
|
+
|
|
24726
|
+
<ds-mobile-section
|
|
24727
|
+
[showBorder]="false"
|
|
24728
|
+
padding="20px 20px 0 20px">
|
|
24729
|
+
<div class="hero-image-container">
|
|
24730
|
+
@if (data.heroImage) {
|
|
24731
|
+
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
24732
|
+
} @else {
|
|
24733
|
+
<div class="hero-image-placeholder">
|
|
24734
|
+
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
24735
|
+
</div>
|
|
24736
|
+
}
|
|
24737
|
+
</div>
|
|
24738
|
+
</ds-mobile-section>
|
|
24739
|
+
|
|
24740
|
+
<ds-mobile-section padding="20px 20px 20px 20px">
|
|
24741
|
+
<div class="booking-summary-card">
|
|
24742
|
+
<div class="details-section">
|
|
24743
|
+
<h3 class="details-heading">Booking detaljer</h3>
|
|
24744
|
+
<div class="info-rows">
|
|
24745
|
+
@if (data.bookingDate) {
|
|
24746
|
+
<div class="info-row">
|
|
24747
|
+
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
24748
|
+
<span>{{ data.bookingDate }}</span>
|
|
24749
|
+
</div>
|
|
24750
|
+
}
|
|
24751
|
+
@if (data.bookingTime) {
|
|
24752
|
+
<div class="info-row">
|
|
24753
|
+
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
24754
|
+
<span>{{ data.bookingTime }}</span>
|
|
24755
|
+
</div>
|
|
24756
|
+
}
|
|
24757
|
+
@if (data.price) {
|
|
24758
|
+
<div class="info-row">
|
|
24759
|
+
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
24760
|
+
<span>{{ data.price }}</span>
|
|
24761
|
+
</div>
|
|
24762
|
+
}
|
|
24763
|
+
@if (data.bookingType) {
|
|
24764
|
+
<div class="info-row">
|
|
24765
|
+
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
24766
|
+
<span>{{ data.bookingType }}</span>
|
|
24767
|
+
</div>
|
|
24768
|
+
}
|
|
24769
|
+
@for (req of data.requirements || []; track req) {
|
|
24770
|
+
<div class="info-row">
|
|
24771
|
+
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
24772
|
+
<span>{{ req }}</span>
|
|
24773
|
+
</div>
|
|
24774
|
+
}
|
|
24775
|
+
</div>
|
|
24776
|
+
</div>
|
|
24777
|
+
</div>
|
|
24778
|
+
</ds-mobile-section>
|
|
24779
|
+
|
|
24780
|
+
@if (data.canCancel) {
|
|
24781
|
+
<div class="booking-action">
|
|
24782
|
+
<div class="booking-actions-row">
|
|
24783
|
+
<ds-button
|
|
24784
|
+
class="cancel-primary"
|
|
24785
|
+
size="md"
|
|
24786
|
+
variant="secondary"
|
|
24787
|
+
(clicked)="cancelBooking()">
|
|
24788
|
+
Annuller booking
|
|
24789
|
+
</ds-button>
|
|
24790
|
+
</div>
|
|
24791
|
+
</div>
|
|
24792
|
+
}
|
|
24793
|
+
</ds-mobile-modal-base>
|
|
24794
|
+
} @else {
|
|
24795
|
+
<ds-mobile-bottom-sheet-wrapper [showDragHandle]="true">
|
|
24796
|
+
<div class="detail-header">
|
|
24797
|
+
<h2 class="detail-title">{{ data.facilityTitle }}</h2>
|
|
24798
|
+
<ds-icon-button
|
|
24799
|
+
icon="remixCloseLine"
|
|
24800
|
+
variant="ghost"
|
|
24801
|
+
size="sm"
|
|
24802
|
+
(clicked)="close()"
|
|
24803
|
+
aria-label="Luk"
|
|
24804
|
+
/>
|
|
24805
|
+
</div>
|
|
24806
|
+
|
|
24807
|
+
<div class="detail-content">
|
|
24808
|
+
<div class="hero-image-container">
|
|
24809
|
+
@if (data.heroImage) {
|
|
24810
|
+
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
24811
|
+
} @else {
|
|
24812
|
+
<div class="hero-image-placeholder">
|
|
24813
|
+
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
24814
|
+
</div>
|
|
24815
|
+
}
|
|
24816
|
+
</div>
|
|
24817
|
+
|
|
24818
|
+
<div class="booking-summary-card">
|
|
24819
|
+
<div class="details-section">
|
|
24820
|
+
<h3 class="details-heading">Booking detaljer</h3>
|
|
24821
|
+
<div class="info-rows">
|
|
24822
|
+
@if (data.bookingDate) {
|
|
24823
|
+
<div class="info-row">
|
|
24824
|
+
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
24825
|
+
<span>{{ data.bookingDate }}</span>
|
|
24826
|
+
</div>
|
|
24827
|
+
}
|
|
24828
|
+
@if (data.bookingTime) {
|
|
24829
|
+
<div class="info-row">
|
|
24830
|
+
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
24831
|
+
<span>{{ data.bookingTime }}</span>
|
|
24832
|
+
</div>
|
|
24833
|
+
}
|
|
24834
|
+
@if (data.price) {
|
|
24835
|
+
<div class="info-row">
|
|
24836
|
+
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
24837
|
+
<span>{{ data.price }}</span>
|
|
24838
|
+
</div>
|
|
24839
|
+
}
|
|
24840
|
+
@if (data.bookingType) {
|
|
24841
|
+
<div class="info-row">
|
|
24842
|
+
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
24843
|
+
<span>{{ data.bookingType }}</span>
|
|
24844
|
+
</div>
|
|
24845
|
+
}
|
|
24846
|
+
@for (req of data.requirements || []; track req) {
|
|
24847
|
+
<div class="info-row">
|
|
24848
|
+
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
24849
|
+
<span>{{ req }}</span>
|
|
24850
|
+
</div>
|
|
24851
|
+
}
|
|
24852
|
+
</div>
|
|
24853
|
+
</div>
|
|
24854
|
+
</div>
|
|
24855
|
+
|
|
24856
|
+
@if (data.canCancel) {
|
|
24857
|
+
<div class="footer-button-container">
|
|
24858
|
+
<div class="booking-actions-column">
|
|
24859
|
+
<ds-button
|
|
24860
|
+
size="md"
|
|
24861
|
+
variant="secondary"
|
|
24862
|
+
(clicked)="cancelBooking()">
|
|
24863
|
+
Annuller booking
|
|
24864
|
+
</ds-button>
|
|
24865
|
+
</div>
|
|
24866
|
+
</div>
|
|
24867
|
+
}
|
|
24868
|
+
</div>
|
|
24869
|
+
</ds-mobile-bottom-sheet-wrapper>
|
|
24870
|
+
}
|
|
24871
|
+
`, isInline: true, styles: [":host{display:block;height:auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 8px}.detail-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 18px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:12px}.detail-content{padding:8px 20px 24px;display:flex;flex-direction:column;gap:20px}.hero-image-container{width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5)}.hero-image{width:100%;height:100%;object-fit:cover;display:block}.hero-image-placeholder{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-accent, #6B5FF5) 30%,transparent),color-mix(in srgb,var(--color-accent, #6B5FF5) 60%,transparent))}.booking-summary-card{background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:16px;padding:16px}.details-section{display:flex;flex-direction:column;gap:12px}.details-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0}.info-rows{display:flex;flex-direction:column;gap:8px}.info-row{display:flex;align-items:center;gap:10px;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-secondary, #545B66);line-height:1.4}.info-row ds-icon{flex-shrink:0}.footer-button-container{width:100%;padding:16px 20px 0}.footer-button-container ::ng-deep ds-button{display:block;width:100%}.footer-button-container ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px}.booking-action{padding:16px 20px;padding-bottom:calc(16px + max(8px,env(safe-area-inset-bottom,0px) - 24px));background:var(--color-surface-primary, #ffffff)}.booking-actions-row{display:flex;flex-direction:row;align-items:center;gap:12px;width:100%}.booking-action .cancel-primary{flex:1;min-width:0;display:block}.booking-action .cancel-primary ::ng-deep button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}:host.presentation-modal{display:block;height:auto;width:100%;min-height:0;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper", inputs: ["showDragHandle"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["headerTitleInteractive", "textLoading", "textErrorTitle", "showHeader"], outputs: ["titleClick"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "paddingDesktop", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }] });
|
|
24872
|
+
}
|
|
24873
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetComponent, decorators: [{
|
|
24874
|
+
type: Component,
|
|
24875
|
+
args: [{ selector: 'ds-mobile-booking-detail-sheet', standalone: true, imports: [
|
|
24876
|
+
CommonModule,
|
|
24877
|
+
DsMobileBottomSheetWrapperComponent,
|
|
24878
|
+
DsMobileModalBaseComponent,
|
|
24879
|
+
DsMobileSectionComponent,
|
|
24880
|
+
DsButtonComponent,
|
|
24881
|
+
DsIconComponent,
|
|
24882
|
+
DsIconButtonComponent,
|
|
24883
|
+
], template: `
|
|
24884
|
+
@if (presentation === 'modal') {
|
|
24885
|
+
<ds-mobile-modal-base
|
|
24886
|
+
[headerTitle]="data.facilityTitle"
|
|
24887
|
+
[closeButtonLabel]="'Luk'"
|
|
24888
|
+
[isAutoHeight]="autoHeight"
|
|
24889
|
+
[keyboardContentBehavior]="'follow'">
|
|
24890
|
+
|
|
24891
|
+
<ds-mobile-section
|
|
24892
|
+
[showBorder]="false"
|
|
24893
|
+
padding="20px 20px 0 20px">
|
|
24894
|
+
<div class="hero-image-container">
|
|
24895
|
+
@if (data.heroImage) {
|
|
24896
|
+
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
24897
|
+
} @else {
|
|
24898
|
+
<div class="hero-image-placeholder">
|
|
24899
|
+
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
24900
|
+
</div>
|
|
24901
|
+
}
|
|
24902
|
+
</div>
|
|
24903
|
+
</ds-mobile-section>
|
|
24904
|
+
|
|
24905
|
+
<ds-mobile-section padding="20px 20px 20px 20px">
|
|
24906
|
+
<div class="booking-summary-card">
|
|
24907
|
+
<div class="details-section">
|
|
24908
|
+
<h3 class="details-heading">Booking detaljer</h3>
|
|
24909
|
+
<div class="info-rows">
|
|
24910
|
+
@if (data.bookingDate) {
|
|
24911
|
+
<div class="info-row">
|
|
24912
|
+
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
24913
|
+
<span>{{ data.bookingDate }}</span>
|
|
24914
|
+
</div>
|
|
24915
|
+
}
|
|
24916
|
+
@if (data.bookingTime) {
|
|
24917
|
+
<div class="info-row">
|
|
24918
|
+
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
24919
|
+
<span>{{ data.bookingTime }}</span>
|
|
24920
|
+
</div>
|
|
24921
|
+
}
|
|
24922
|
+
@if (data.price) {
|
|
24923
|
+
<div class="info-row">
|
|
24924
|
+
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
24925
|
+
<span>{{ data.price }}</span>
|
|
24926
|
+
</div>
|
|
24927
|
+
}
|
|
24928
|
+
@if (data.bookingType) {
|
|
24929
|
+
<div class="info-row">
|
|
24930
|
+
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
24931
|
+
<span>{{ data.bookingType }}</span>
|
|
24932
|
+
</div>
|
|
24933
|
+
}
|
|
24934
|
+
@for (req of data.requirements || []; track req) {
|
|
24935
|
+
<div class="info-row">
|
|
24936
|
+
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
24937
|
+
<span>{{ req }}</span>
|
|
24938
|
+
</div>
|
|
24939
|
+
}
|
|
24940
|
+
</div>
|
|
24941
|
+
</div>
|
|
24942
|
+
</div>
|
|
24943
|
+
</ds-mobile-section>
|
|
24944
|
+
|
|
24945
|
+
@if (data.canCancel) {
|
|
24946
|
+
<div class="booking-action">
|
|
24947
|
+
<div class="booking-actions-row">
|
|
24948
|
+
<ds-button
|
|
24949
|
+
class="cancel-primary"
|
|
24950
|
+
size="md"
|
|
24951
|
+
variant="secondary"
|
|
24952
|
+
(clicked)="cancelBooking()">
|
|
24953
|
+
Annuller booking
|
|
24954
|
+
</ds-button>
|
|
24955
|
+
</div>
|
|
24956
|
+
</div>
|
|
24957
|
+
}
|
|
24958
|
+
</ds-mobile-modal-base>
|
|
24959
|
+
} @else {
|
|
24960
|
+
<ds-mobile-bottom-sheet-wrapper [showDragHandle]="true">
|
|
24961
|
+
<div class="detail-header">
|
|
24962
|
+
<h2 class="detail-title">{{ data.facilityTitle }}</h2>
|
|
24963
|
+
<ds-icon-button
|
|
24964
|
+
icon="remixCloseLine"
|
|
24965
|
+
variant="ghost"
|
|
24966
|
+
size="sm"
|
|
24967
|
+
(clicked)="close()"
|
|
24968
|
+
aria-label="Luk"
|
|
24969
|
+
/>
|
|
24970
|
+
</div>
|
|
24971
|
+
|
|
24972
|
+
<div class="detail-content">
|
|
24973
|
+
<div class="hero-image-container">
|
|
24974
|
+
@if (data.heroImage) {
|
|
24975
|
+
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
24976
|
+
} @else {
|
|
24977
|
+
<div class="hero-image-placeholder">
|
|
24978
|
+
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
24979
|
+
</div>
|
|
24980
|
+
}
|
|
24981
|
+
</div>
|
|
24982
|
+
|
|
24983
|
+
<div class="booking-summary-card">
|
|
24984
|
+
<div class="details-section">
|
|
24985
|
+
<h3 class="details-heading">Booking detaljer</h3>
|
|
24986
|
+
<div class="info-rows">
|
|
24987
|
+
@if (data.bookingDate) {
|
|
24988
|
+
<div class="info-row">
|
|
24989
|
+
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
24990
|
+
<span>{{ data.bookingDate }}</span>
|
|
24991
|
+
</div>
|
|
24992
|
+
}
|
|
24993
|
+
@if (data.bookingTime) {
|
|
24994
|
+
<div class="info-row">
|
|
24995
|
+
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
24996
|
+
<span>{{ data.bookingTime }}</span>
|
|
24997
|
+
</div>
|
|
24998
|
+
}
|
|
24999
|
+
@if (data.price) {
|
|
25000
|
+
<div class="info-row">
|
|
25001
|
+
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
25002
|
+
<span>{{ data.price }}</span>
|
|
25003
|
+
</div>
|
|
25004
|
+
}
|
|
25005
|
+
@if (data.bookingType) {
|
|
25006
|
+
<div class="info-row">
|
|
25007
|
+
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
25008
|
+
<span>{{ data.bookingType }}</span>
|
|
25009
|
+
</div>
|
|
25010
|
+
}
|
|
25011
|
+
@for (req of data.requirements || []; track req) {
|
|
25012
|
+
<div class="info-row">
|
|
25013
|
+
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
25014
|
+
<span>{{ req }}</span>
|
|
25015
|
+
</div>
|
|
25016
|
+
}
|
|
25017
|
+
</div>
|
|
25018
|
+
</div>
|
|
25019
|
+
</div>
|
|
25020
|
+
|
|
25021
|
+
@if (data.canCancel) {
|
|
25022
|
+
<div class="footer-button-container">
|
|
25023
|
+
<div class="booking-actions-column">
|
|
25024
|
+
<ds-button
|
|
25025
|
+
size="md"
|
|
25026
|
+
variant="secondary"
|
|
25027
|
+
(clicked)="cancelBooking()">
|
|
25028
|
+
Annuller booking
|
|
25029
|
+
</ds-button>
|
|
25030
|
+
</div>
|
|
25031
|
+
</div>
|
|
25032
|
+
}
|
|
25033
|
+
</div>
|
|
25034
|
+
</ds-mobile-bottom-sheet-wrapper>
|
|
25035
|
+
}
|
|
25036
|
+
`, styles: [":host{display:block;height:auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 8px}.detail-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 18px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:12px}.detail-content{padding:8px 20px 24px;display:flex;flex-direction:column;gap:20px}.hero-image-container{width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5)}.hero-image{width:100%;height:100%;object-fit:cover;display:block}.hero-image-placeholder{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-accent, #6B5FF5) 30%,transparent),color-mix(in srgb,var(--color-accent, #6B5FF5) 60%,transparent))}.booking-summary-card{background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:16px;padding:16px}.details-section{display:flex;flex-direction:column;gap:12px}.details-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0}.info-rows{display:flex;flex-direction:column;gap:8px}.info-row{display:flex;align-items:center;gap:10px;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-secondary, #545B66);line-height:1.4}.info-row ds-icon{flex-shrink:0}.footer-button-container{width:100%;padding:16px 20px 0}.footer-button-container ::ng-deep ds-button{display:block;width:100%}.footer-button-container ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px}.booking-action{padding:16px 20px;padding-bottom:calc(16px + max(8px,env(safe-area-inset-bottom,0px) - 24px));background:var(--color-surface-primary, #ffffff)}.booking-actions-row{display:flex;flex-direction:row;align-items:center;gap:12px;width:100%}.booking-action .cancel-primary{flex:1;min-width:0;display:block}.booking-action .cancel-primary ::ng-deep button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}:host.presentation-modal{display:block;height:auto;width:100%;min-height:0;overflow:hidden}\n"] }]
|
|
25037
|
+
}], ctorParameters: () => [{ type: i1.ModalController }], propDecorators: { presentation: [{
|
|
25038
|
+
type: Input
|
|
25039
|
+
}], data: [{
|
|
25040
|
+
type: Input
|
|
25041
|
+
}], autoHeight: [{
|
|
25042
|
+
type: Input
|
|
25043
|
+
}], isModalPresentation: [{
|
|
25044
|
+
type: HostBinding,
|
|
25045
|
+
args: ['class.presentation-modal']
|
|
25046
|
+
}] } });
|
|
25047
|
+
|
|
25048
|
+
class DsMobileBookingDetailSheetService extends BaseModalService {
|
|
25049
|
+
bottomSheet;
|
|
25050
|
+
constructor(modalController, bottomSheet) {
|
|
25051
|
+
super(modalController);
|
|
25052
|
+
this.bottomSheet = bottomSheet;
|
|
25053
|
+
}
|
|
25054
|
+
/**
|
|
25055
|
+
* Bottom-sheet presentation (draggable breakpoints). Prefer `openAsModal` for booking lists.
|
|
25056
|
+
*/
|
|
25057
|
+
async open(data) {
|
|
25058
|
+
const modal = await this.bottomSheet.create({
|
|
25059
|
+
component: DsMobileBookingDetailSheetComponent,
|
|
25060
|
+
componentProps: { data },
|
|
25061
|
+
autoHeight: true,
|
|
25062
|
+
backdropDismiss: true,
|
|
25063
|
+
backdropBlur: true,
|
|
25064
|
+
});
|
|
25065
|
+
const result = await modal.onWillDismiss();
|
|
25066
|
+
return { role: result.role, data: result.data ?? undefined };
|
|
25067
|
+
}
|
|
25068
|
+
/** `ds-modal-base` shell — used for active and past bookings. Auto-heights to content. */
|
|
25069
|
+
async openAsModal(data) {
|
|
25070
|
+
const modal = await this.createModal(DsMobileBookingDetailSheetComponent, { data, presentation: 'modal', autoHeight: true }, { keyboardClose: true, autoHeight: true });
|
|
25071
|
+
await modal.present();
|
|
25072
|
+
const result = await modal.onWillDismiss();
|
|
25073
|
+
return { role: result.role, data: result.data ?? undefined };
|
|
25074
|
+
}
|
|
25075
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, deps: [{ token: i1.ModalController }, { token: DsMobileBottomSheetService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
25076
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, providedIn: 'root' });
|
|
25077
|
+
}
|
|
25078
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, decorators: [{
|
|
25079
|
+
type: Injectable,
|
|
25080
|
+
args: [{
|
|
25081
|
+
providedIn: 'root',
|
|
25082
|
+
}]
|
|
25083
|
+
}], ctorParameters: () => [{ type: i1.ModalController }, { type: DsMobileBottomSheetService }] });
|
|
25084
|
+
|
|
25085
|
+
class DsMobileBookingCancelConfirmationComponent {
|
|
25086
|
+
facilityTitle;
|
|
25087
|
+
facilityThumbnail;
|
|
25088
|
+
bookingDate;
|
|
25089
|
+
bookingTime;
|
|
25090
|
+
get confirmationMessage() {
|
|
25091
|
+
const datePart = this.bookingDate ? ` den ${this.bookingDate}` : '';
|
|
25092
|
+
return `Er du sikker på, at du vil annullere din booking af ${this.facilityTitle}${datePart}?`;
|
|
25093
|
+
}
|
|
25094
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingCancelConfirmationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25095
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DsMobileBookingCancelConfirmationComponent, isStandalone: true, selector: "ds-mobile-booking-cancel-confirmation", inputs: { facilityTitle: "facilityTitle", facilityThumbnail: "facilityThumbnail", bookingDate: "bookingDate", bookingTime: "bookingTime" }, ngImport: i0, template: `
|
|
25096
|
+
<ds-mobile-confirmation-sheet
|
|
25097
|
+
[title]="'Annuller booking?'"
|
|
25098
|
+
[message]="confirmationMessage"
|
|
25099
|
+
[buttonText]="'Ja, annuller booking'"
|
|
25100
|
+
[destructive]="true"
|
|
25101
|
+
[secondaryButtonText]="'Luk'"
|
|
25102
|
+
[secondaryButtonVariant]="'secondary'"
|
|
25103
|
+
[illustrationVariant]="'delete-warning'"
|
|
25104
|
+
[illustrationSize]="'140px'">
|
|
25105
|
+
<ng-template #summary>
|
|
25106
|
+
<ds-mobile-booking-summary
|
|
25107
|
+
[facilityTitle]="facilityTitle"
|
|
25108
|
+
[facilityThumbnail]="facilityThumbnail"
|
|
25109
|
+
[date]="bookingDate"
|
|
25110
|
+
[time]="bookingTime"
|
|
25111
|
+
/>
|
|
25112
|
+
</ng-template>
|
|
25113
|
+
</ds-mobile-confirmation-sheet>
|
|
25114
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileConfirmationSheetComponent, selector: "ds-mobile-confirmation-sheet", inputs: ["title", "message", "buttonText", "destructive", "showCancelButton", "cancelButtonText", "showIllustration", "illustrationVariant", "illustrationSize", "secondaryButtonText", "secondaryButtonVariant"] }, { kind: "component", type: DsMobileBookingSummaryComponent, selector: "ds-mobile-booking-summary", inputs: ["facilityTitle", "facilityThumbnail", "date", "time", "bookingCount"] }] });
|
|
25115
|
+
}
|
|
25116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingCancelConfirmationComponent, decorators: [{
|
|
25117
|
+
type: Component,
|
|
25118
|
+
args: [{
|
|
25119
|
+
selector: 'ds-mobile-booking-cancel-confirmation',
|
|
25120
|
+
standalone: true,
|
|
25121
|
+
imports: [
|
|
25122
|
+
CommonModule,
|
|
25123
|
+
DsMobileConfirmationSheetComponent,
|
|
25124
|
+
DsMobileBookingSummaryComponent
|
|
25125
|
+
],
|
|
25126
|
+
template: `
|
|
25127
|
+
<ds-mobile-confirmation-sheet
|
|
25128
|
+
[title]="'Annuller booking?'"
|
|
25129
|
+
[message]="confirmationMessage"
|
|
25130
|
+
[buttonText]="'Ja, annuller booking'"
|
|
25131
|
+
[destructive]="true"
|
|
25132
|
+
[secondaryButtonText]="'Luk'"
|
|
25133
|
+
[secondaryButtonVariant]="'secondary'"
|
|
25134
|
+
[illustrationVariant]="'delete-warning'"
|
|
25135
|
+
[illustrationSize]="'140px'">
|
|
25136
|
+
<ng-template #summary>
|
|
25137
|
+
<ds-mobile-booking-summary
|
|
25138
|
+
[facilityTitle]="facilityTitle"
|
|
25139
|
+
[facilityThumbnail]="facilityThumbnail"
|
|
25140
|
+
[date]="bookingDate"
|
|
25141
|
+
[time]="bookingTime"
|
|
25142
|
+
/>
|
|
25143
|
+
</ng-template>
|
|
25144
|
+
</ds-mobile-confirmation-sheet>
|
|
25145
|
+
`
|
|
25146
|
+
}]
|
|
25147
|
+
}], propDecorators: { facilityTitle: [{
|
|
25148
|
+
type: Input
|
|
25149
|
+
}], facilityThumbnail: [{
|
|
25150
|
+
type: Input
|
|
25151
|
+
}], bookingDate: [{
|
|
25152
|
+
type: Input
|
|
25153
|
+
}], bookingTime: [{
|
|
25154
|
+
type: Input
|
|
25155
|
+
}] } });
|
|
25156
|
+
|
|
24677
25157
|
/**
|
|
24678
25158
|
* DsMobileFacilityCreationModalComponent
|
|
24679
25159
|
*
|
|
@@ -30301,393 +30781,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
30301
30781
|
}]
|
|
30302
30782
|
}], ctorParameters: () => [] });
|
|
30303
30783
|
|
|
30304
|
-
class DsMobileBookingDetailSheetComponent {
|
|
30305
|
-
modalController;
|
|
30306
|
-
/** `sheet` = bottom sheet. `modal` = `ds-modal-base` shell (active + history bookings). */
|
|
30307
|
-
presentation = 'sheet';
|
|
30308
|
-
data;
|
|
30309
|
-
/** When true the modal sizes to its content instead of filling the screen. */
|
|
30310
|
-
autoHeight = false;
|
|
30311
|
-
get isModalPresentation() {
|
|
30312
|
-
return this.presentation === 'modal';
|
|
30313
|
-
}
|
|
30314
|
-
constructor(modalController) {
|
|
30315
|
-
this.modalController = modalController;
|
|
30316
|
-
}
|
|
30317
|
-
close() {
|
|
30318
|
-
this.modalController.dismiss(null, 'backdrop');
|
|
30319
|
-
}
|
|
30320
|
-
cancelBooking() {
|
|
30321
|
-
this.modalController.dismiss(null, 'cancel');
|
|
30322
|
-
}
|
|
30323
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
|
|
30324
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileBookingDetailSheetComponent, isStandalone: true, selector: "ds-mobile-booking-detail-sheet", inputs: { presentation: "presentation", data: "data", autoHeight: "autoHeight" }, host: { properties: { "class.presentation-modal": "this.isModalPresentation" } }, ngImport: i0, template: `
|
|
30325
|
-
@if (presentation === 'modal') {
|
|
30326
|
-
<ds-mobile-modal-base
|
|
30327
|
-
[headerTitle]="data.facilityTitle"
|
|
30328
|
-
[closeButtonLabel]="'Luk'"
|
|
30329
|
-
[isAutoHeight]="autoHeight"
|
|
30330
|
-
[keyboardContentBehavior]="'follow'">
|
|
30331
|
-
|
|
30332
|
-
<ds-mobile-section
|
|
30333
|
-
[showBorder]="false"
|
|
30334
|
-
padding="20px 20px 0 20px">
|
|
30335
|
-
<div class="hero-image-container">
|
|
30336
|
-
@if (data.heroImage) {
|
|
30337
|
-
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
30338
|
-
} @else {
|
|
30339
|
-
<div class="hero-image-placeholder">
|
|
30340
|
-
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
30341
|
-
</div>
|
|
30342
|
-
}
|
|
30343
|
-
</div>
|
|
30344
|
-
</ds-mobile-section>
|
|
30345
|
-
|
|
30346
|
-
<ds-mobile-section padding="20px 20px 20px 20px">
|
|
30347
|
-
<div class="booking-summary-card">
|
|
30348
|
-
<div class="details-section">
|
|
30349
|
-
<h3 class="details-heading">Booking detaljer</h3>
|
|
30350
|
-
<div class="info-rows">
|
|
30351
|
-
@if (data.bookingDate) {
|
|
30352
|
-
<div class="info-row">
|
|
30353
|
-
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
30354
|
-
<span>{{ data.bookingDate }}</span>
|
|
30355
|
-
</div>
|
|
30356
|
-
}
|
|
30357
|
-
@if (data.bookingTime) {
|
|
30358
|
-
<div class="info-row">
|
|
30359
|
-
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
30360
|
-
<span>{{ data.bookingTime }}</span>
|
|
30361
|
-
</div>
|
|
30362
|
-
}
|
|
30363
|
-
@if (data.price) {
|
|
30364
|
-
<div class="info-row">
|
|
30365
|
-
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
30366
|
-
<span>{{ data.price }}</span>
|
|
30367
|
-
</div>
|
|
30368
|
-
}
|
|
30369
|
-
@if (data.bookingType) {
|
|
30370
|
-
<div class="info-row">
|
|
30371
|
-
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
30372
|
-
<span>{{ data.bookingType }}</span>
|
|
30373
|
-
</div>
|
|
30374
|
-
}
|
|
30375
|
-
@for (req of data.requirements || []; track req) {
|
|
30376
|
-
<div class="info-row">
|
|
30377
|
-
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
30378
|
-
<span>{{ req }}</span>
|
|
30379
|
-
</div>
|
|
30380
|
-
}
|
|
30381
|
-
</div>
|
|
30382
|
-
</div>
|
|
30383
|
-
</div>
|
|
30384
|
-
</ds-mobile-section>
|
|
30385
|
-
|
|
30386
|
-
@if (data.canCancel) {
|
|
30387
|
-
<div class="booking-action">
|
|
30388
|
-
<div class="booking-actions-row">
|
|
30389
|
-
<ds-button
|
|
30390
|
-
class="cancel-primary"
|
|
30391
|
-
size="md"
|
|
30392
|
-
variant="secondary"
|
|
30393
|
-
(clicked)="cancelBooking()">
|
|
30394
|
-
Annuller booking
|
|
30395
|
-
</ds-button>
|
|
30396
|
-
</div>
|
|
30397
|
-
</div>
|
|
30398
|
-
}
|
|
30399
|
-
</ds-mobile-modal-base>
|
|
30400
|
-
} @else {
|
|
30401
|
-
<ds-mobile-bottom-sheet-wrapper [showDragHandle]="true">
|
|
30402
|
-
<div class="detail-header">
|
|
30403
|
-
<h2 class="detail-title">{{ data.facilityTitle }}</h2>
|
|
30404
|
-
<ds-icon-button
|
|
30405
|
-
icon="remixCloseLine"
|
|
30406
|
-
variant="ghost"
|
|
30407
|
-
size="sm"
|
|
30408
|
-
(clicked)="close()"
|
|
30409
|
-
aria-label="Luk"
|
|
30410
|
-
/>
|
|
30411
|
-
</div>
|
|
30412
|
-
|
|
30413
|
-
<div class="detail-content">
|
|
30414
|
-
<div class="hero-image-container">
|
|
30415
|
-
@if (data.heroImage) {
|
|
30416
|
-
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
30417
|
-
} @else {
|
|
30418
|
-
<div class="hero-image-placeholder">
|
|
30419
|
-
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
30420
|
-
</div>
|
|
30421
|
-
}
|
|
30422
|
-
</div>
|
|
30423
|
-
|
|
30424
|
-
<div class="booking-summary-card">
|
|
30425
|
-
<div class="details-section">
|
|
30426
|
-
<h3 class="details-heading">Booking detaljer</h3>
|
|
30427
|
-
<div class="info-rows">
|
|
30428
|
-
@if (data.bookingDate) {
|
|
30429
|
-
<div class="info-row">
|
|
30430
|
-
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
30431
|
-
<span>{{ data.bookingDate }}</span>
|
|
30432
|
-
</div>
|
|
30433
|
-
}
|
|
30434
|
-
@if (data.bookingTime) {
|
|
30435
|
-
<div class="info-row">
|
|
30436
|
-
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
30437
|
-
<span>{{ data.bookingTime }}</span>
|
|
30438
|
-
</div>
|
|
30439
|
-
}
|
|
30440
|
-
@if (data.price) {
|
|
30441
|
-
<div class="info-row">
|
|
30442
|
-
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
30443
|
-
<span>{{ data.price }}</span>
|
|
30444
|
-
</div>
|
|
30445
|
-
}
|
|
30446
|
-
@if (data.bookingType) {
|
|
30447
|
-
<div class="info-row">
|
|
30448
|
-
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
30449
|
-
<span>{{ data.bookingType }}</span>
|
|
30450
|
-
</div>
|
|
30451
|
-
}
|
|
30452
|
-
@for (req of data.requirements || []; track req) {
|
|
30453
|
-
<div class="info-row">
|
|
30454
|
-
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
30455
|
-
<span>{{ req }}</span>
|
|
30456
|
-
</div>
|
|
30457
|
-
}
|
|
30458
|
-
</div>
|
|
30459
|
-
</div>
|
|
30460
|
-
</div>
|
|
30461
|
-
|
|
30462
|
-
@if (data.canCancel) {
|
|
30463
|
-
<div class="footer-button-container">
|
|
30464
|
-
<div class="booking-actions-column">
|
|
30465
|
-
<ds-button
|
|
30466
|
-
size="md"
|
|
30467
|
-
variant="secondary"
|
|
30468
|
-
(clicked)="cancelBooking()">
|
|
30469
|
-
Annuller booking
|
|
30470
|
-
</ds-button>
|
|
30471
|
-
</div>
|
|
30472
|
-
</div>
|
|
30473
|
-
}
|
|
30474
|
-
</div>
|
|
30475
|
-
</ds-mobile-bottom-sheet-wrapper>
|
|
30476
|
-
}
|
|
30477
|
-
`, isInline: true, styles: [":host{display:block;height:auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 8px}.detail-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 18px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:12px}.detail-content{padding:8px 20px 24px;display:flex;flex-direction:column;gap:20px}.hero-image-container{width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5)}.hero-image{width:100%;height:100%;object-fit:cover;display:block}.hero-image-placeholder{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-accent, #6B5FF5) 30%,transparent),color-mix(in srgb,var(--color-accent, #6B5FF5) 60%,transparent))}.booking-summary-card{background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:16px;padding:16px}.details-section{display:flex;flex-direction:column;gap:12px}.details-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0}.info-rows{display:flex;flex-direction:column;gap:8px}.info-row{display:flex;align-items:center;gap:10px;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-secondary, #545B66);line-height:1.4}.info-row ds-icon{flex-shrink:0}.footer-button-container{width:100%;padding:16px 20px 0}.footer-button-container ::ng-deep ds-button{display:block;width:100%}.footer-button-container ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px}.booking-action{padding:16px 20px;padding-bottom:calc(16px + max(8px,env(safe-area-inset-bottom,0px) - 24px));background:var(--color-surface-primary, #ffffff)}.booking-actions-row{display:flex;flex-direction:row;align-items:center;gap:12px;width:100%}.booking-action .cancel-primary{flex:1;min-width:0;display:block}.booking-action .cancel-primary ::ng-deep button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}:host.presentation-modal{display:block;height:auto;width:100%;min-height:0;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper", inputs: ["showDragHandle"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["headerTitleInteractive", "textLoading", "textErrorTitle", "showHeader"], outputs: ["titleClick"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "paddingDesktop", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }] });
|
|
30478
|
-
}
|
|
30479
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetComponent, decorators: [{
|
|
30480
|
-
type: Component,
|
|
30481
|
-
args: [{ selector: 'ds-mobile-booking-detail-sheet', standalone: true, imports: [
|
|
30482
|
-
CommonModule,
|
|
30483
|
-
DsMobileBottomSheetWrapperComponent,
|
|
30484
|
-
DsMobileModalBaseComponent,
|
|
30485
|
-
DsMobileSectionComponent,
|
|
30486
|
-
DsButtonComponent,
|
|
30487
|
-
DsIconComponent,
|
|
30488
|
-
DsIconButtonComponent,
|
|
30489
|
-
], template: `
|
|
30490
|
-
@if (presentation === 'modal') {
|
|
30491
|
-
<ds-mobile-modal-base
|
|
30492
|
-
[headerTitle]="data.facilityTitle"
|
|
30493
|
-
[closeButtonLabel]="'Luk'"
|
|
30494
|
-
[isAutoHeight]="autoHeight"
|
|
30495
|
-
[keyboardContentBehavior]="'follow'">
|
|
30496
|
-
|
|
30497
|
-
<ds-mobile-section
|
|
30498
|
-
[showBorder]="false"
|
|
30499
|
-
padding="20px 20px 0 20px">
|
|
30500
|
-
<div class="hero-image-container">
|
|
30501
|
-
@if (data.heroImage) {
|
|
30502
|
-
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
30503
|
-
} @else {
|
|
30504
|
-
<div class="hero-image-placeholder">
|
|
30505
|
-
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
30506
|
-
</div>
|
|
30507
|
-
}
|
|
30508
|
-
</div>
|
|
30509
|
-
</ds-mobile-section>
|
|
30510
|
-
|
|
30511
|
-
<ds-mobile-section padding="20px 20px 20px 20px">
|
|
30512
|
-
<div class="booking-summary-card">
|
|
30513
|
-
<div class="details-section">
|
|
30514
|
-
<h3 class="details-heading">Booking detaljer</h3>
|
|
30515
|
-
<div class="info-rows">
|
|
30516
|
-
@if (data.bookingDate) {
|
|
30517
|
-
<div class="info-row">
|
|
30518
|
-
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
30519
|
-
<span>{{ data.bookingDate }}</span>
|
|
30520
|
-
</div>
|
|
30521
|
-
}
|
|
30522
|
-
@if (data.bookingTime) {
|
|
30523
|
-
<div class="info-row">
|
|
30524
|
-
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
30525
|
-
<span>{{ data.bookingTime }}</span>
|
|
30526
|
-
</div>
|
|
30527
|
-
}
|
|
30528
|
-
@if (data.price) {
|
|
30529
|
-
<div class="info-row">
|
|
30530
|
-
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
30531
|
-
<span>{{ data.price }}</span>
|
|
30532
|
-
</div>
|
|
30533
|
-
}
|
|
30534
|
-
@if (data.bookingType) {
|
|
30535
|
-
<div class="info-row">
|
|
30536
|
-
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
30537
|
-
<span>{{ data.bookingType }}</span>
|
|
30538
|
-
</div>
|
|
30539
|
-
}
|
|
30540
|
-
@for (req of data.requirements || []; track req) {
|
|
30541
|
-
<div class="info-row">
|
|
30542
|
-
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
30543
|
-
<span>{{ req }}</span>
|
|
30544
|
-
</div>
|
|
30545
|
-
}
|
|
30546
|
-
</div>
|
|
30547
|
-
</div>
|
|
30548
|
-
</div>
|
|
30549
|
-
</ds-mobile-section>
|
|
30550
|
-
|
|
30551
|
-
@if (data.canCancel) {
|
|
30552
|
-
<div class="booking-action">
|
|
30553
|
-
<div class="booking-actions-row">
|
|
30554
|
-
<ds-button
|
|
30555
|
-
class="cancel-primary"
|
|
30556
|
-
size="md"
|
|
30557
|
-
variant="secondary"
|
|
30558
|
-
(clicked)="cancelBooking()">
|
|
30559
|
-
Annuller booking
|
|
30560
|
-
</ds-button>
|
|
30561
|
-
</div>
|
|
30562
|
-
</div>
|
|
30563
|
-
}
|
|
30564
|
-
</ds-mobile-modal-base>
|
|
30565
|
-
} @else {
|
|
30566
|
-
<ds-mobile-bottom-sheet-wrapper [showDragHandle]="true">
|
|
30567
|
-
<div class="detail-header">
|
|
30568
|
-
<h2 class="detail-title">{{ data.facilityTitle }}</h2>
|
|
30569
|
-
<ds-icon-button
|
|
30570
|
-
icon="remixCloseLine"
|
|
30571
|
-
variant="ghost"
|
|
30572
|
-
size="sm"
|
|
30573
|
-
(clicked)="close()"
|
|
30574
|
-
aria-label="Luk"
|
|
30575
|
-
/>
|
|
30576
|
-
</div>
|
|
30577
|
-
|
|
30578
|
-
<div class="detail-content">
|
|
30579
|
-
<div class="hero-image-container">
|
|
30580
|
-
@if (data.heroImage) {
|
|
30581
|
-
<img [src]="data.heroImage" [alt]="data.facilityTitle" class="hero-image" />
|
|
30582
|
-
} @else {
|
|
30583
|
-
<div class="hero-image-placeholder">
|
|
30584
|
-
<ds-icon name="remixImageLine" size="48px" color="rgba(255,255,255,0.5)" />
|
|
30585
|
-
</div>
|
|
30586
|
-
}
|
|
30587
|
-
</div>
|
|
30588
|
-
|
|
30589
|
-
<div class="booking-summary-card">
|
|
30590
|
-
<div class="details-section">
|
|
30591
|
-
<h3 class="details-heading">Booking detaljer</h3>
|
|
30592
|
-
<div class="info-rows">
|
|
30593
|
-
@if (data.bookingDate) {
|
|
30594
|
-
<div class="info-row">
|
|
30595
|
-
<ds-icon name="remixCalendarLine" size="16px" color="tertiary" />
|
|
30596
|
-
<span>{{ data.bookingDate }}</span>
|
|
30597
|
-
</div>
|
|
30598
|
-
}
|
|
30599
|
-
@if (data.bookingTime) {
|
|
30600
|
-
<div class="info-row">
|
|
30601
|
-
<ds-icon name="remixTimeLine" size="16px" color="tertiary" />
|
|
30602
|
-
<span>{{ data.bookingTime }}</span>
|
|
30603
|
-
</div>
|
|
30604
|
-
}
|
|
30605
|
-
@if (data.price) {
|
|
30606
|
-
<div class="info-row">
|
|
30607
|
-
<ds-icon name="remixPriceTag3Line" size="16px" color="tertiary" />
|
|
30608
|
-
<span>{{ data.price }}</span>
|
|
30609
|
-
</div>
|
|
30610
|
-
}
|
|
30611
|
-
@if (data.bookingType) {
|
|
30612
|
-
<div class="info-row">
|
|
30613
|
-
<ds-icon name="remixCheckboxCircleLine" size="16px" color="tertiary" />
|
|
30614
|
-
<span>{{ data.bookingType }}</span>
|
|
30615
|
-
</div>
|
|
30616
|
-
}
|
|
30617
|
-
@for (req of data.requirements || []; track req) {
|
|
30618
|
-
<div class="info-row">
|
|
30619
|
-
<ds-icon name="remixLockLine" size="16px" color="tertiary" />
|
|
30620
|
-
<span>{{ req }}</span>
|
|
30621
|
-
</div>
|
|
30622
|
-
}
|
|
30623
|
-
</div>
|
|
30624
|
-
</div>
|
|
30625
|
-
</div>
|
|
30626
|
-
|
|
30627
|
-
@if (data.canCancel) {
|
|
30628
|
-
<div class="footer-button-container">
|
|
30629
|
-
<div class="booking-actions-column">
|
|
30630
|
-
<ds-button
|
|
30631
|
-
size="md"
|
|
30632
|
-
variant="secondary"
|
|
30633
|
-
(clicked)="cancelBooking()">
|
|
30634
|
-
Annuller booking
|
|
30635
|
-
</ds-button>
|
|
30636
|
-
</div>
|
|
30637
|
-
</div>
|
|
30638
|
-
}
|
|
30639
|
-
</div>
|
|
30640
|
-
</ds-mobile-bottom-sheet-wrapper>
|
|
30641
|
-
}
|
|
30642
|
-
`, styles: [":host{display:block;height:auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 8px}.detail-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 18px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:12px}.detail-content{padding:8px 20px 24px;display:flex;flex-direction:column;gap:20px}.hero-image-container{width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5)}.hero-image{width:100%;height:100%;object-fit:cover;display:block}.hero-image-placeholder{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-accent, #6B5FF5) 30%,transparent),color-mix(in srgb,var(--color-accent, #6B5FF5) 60%,transparent))}.booking-summary-card{background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:16px;padding:16px}.details-section{display:flex;flex-direction:column;gap:12px}.details-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;color:var(--text-color-default-primary, #202227);margin:0}.info-rows{display:flex;flex-direction:column;gap:8px}.info-row{display:flex;align-items:center;gap:10px;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-secondary, #545B66);line-height:1.4}.info-row ds-icon{flex-shrink:0}.footer-button-container{width:100%;padding:16px 20px 0}.footer-button-container ::ng-deep ds-button{display:block;width:100%}.footer-button-container ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px}.booking-action{padding:16px 20px;padding-bottom:calc(16px + max(8px,env(safe-area-inset-bottom,0px) - 24px));background:var(--color-surface-primary, #ffffff)}.booking-actions-row{display:flex;flex-direction:row;align-items:center;gap:12px;width:100%}.booking-action .cancel-primary{flex:1;min-width:0;display:block}.booking-action .cancel-primary ::ng-deep button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}:host.presentation-modal{display:block;height:auto;width:100%;min-height:0;overflow:hidden}\n"] }]
|
|
30643
|
-
}], ctorParameters: () => [{ type: i1.ModalController }], propDecorators: { presentation: [{
|
|
30644
|
-
type: Input
|
|
30645
|
-
}], data: [{
|
|
30646
|
-
type: Input
|
|
30647
|
-
}], autoHeight: [{
|
|
30648
|
-
type: Input
|
|
30649
|
-
}], isModalPresentation: [{
|
|
30650
|
-
type: HostBinding,
|
|
30651
|
-
args: ['class.presentation-modal']
|
|
30652
|
-
}] } });
|
|
30653
|
-
|
|
30654
|
-
class DsMobileBookingDetailSheetService extends BaseModalService {
|
|
30655
|
-
bottomSheet;
|
|
30656
|
-
constructor(modalController, bottomSheet) {
|
|
30657
|
-
super(modalController);
|
|
30658
|
-
this.bottomSheet = bottomSheet;
|
|
30659
|
-
}
|
|
30660
|
-
/**
|
|
30661
|
-
* Bottom-sheet presentation (draggable breakpoints). Prefer `openAsModal` for booking lists.
|
|
30662
|
-
*/
|
|
30663
|
-
async open(data) {
|
|
30664
|
-
const modal = await this.bottomSheet.create({
|
|
30665
|
-
component: DsMobileBookingDetailSheetComponent,
|
|
30666
|
-
componentProps: { data },
|
|
30667
|
-
autoHeight: true,
|
|
30668
|
-
backdropDismiss: true,
|
|
30669
|
-
backdropBlur: true,
|
|
30670
|
-
});
|
|
30671
|
-
const result = await modal.onWillDismiss();
|
|
30672
|
-
return { role: result.role, data: result.data ?? undefined };
|
|
30673
|
-
}
|
|
30674
|
-
/** `ds-modal-base` shell — used for active and past bookings. Auto-heights to content. */
|
|
30675
|
-
async openAsModal(data) {
|
|
30676
|
-
const modal = await this.createModal(DsMobileBookingDetailSheetComponent, { data, presentation: 'modal', autoHeight: true }, { keyboardClose: true, autoHeight: true });
|
|
30677
|
-
await modal.present();
|
|
30678
|
-
const result = await modal.onWillDismiss();
|
|
30679
|
-
return { role: result.role, data: result.data ?? undefined };
|
|
30680
|
-
}
|
|
30681
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, deps: [{ token: i1.ModalController }, { token: DsMobileBottomSheetService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
30682
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, providedIn: 'root' });
|
|
30683
|
-
}
|
|
30684
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingDetailSheetService, decorators: [{
|
|
30685
|
-
type: Injectable,
|
|
30686
|
-
args: [{
|
|
30687
|
-
providedIn: 'root',
|
|
30688
|
-
}]
|
|
30689
|
-
}], ctorParameters: () => [{ type: i1.ModalController }, { type: DsMobileBottomSheetService }] });
|
|
30690
|
-
|
|
30691
30784
|
const VENDOR_MODAL_SERVICE = new InjectionToken('VendorModalService');
|
|
30692
30785
|
const BOOKING_DETAIL_MAP = {
|
|
30693
30786
|
'booking-1': {
|
|
@@ -35691,78 +35784,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
35691
35784
|
`, styles: [":host{display:block;height:100dvh;width:100vw;position:relative}.app-error{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 32px;background:var(--color-header-surface, #2D2356)}.app-error__title{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 18px);font-weight:600;color:var(--color-header-content, #fff);text-align:center;margin:0}.app-error__description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#ffffffa6;text-align:center;margin:0 0 8px}.app-error ds-button::ng-deep .btn{border-radius:9999px}\n"] }]
|
|
35692
35785
|
}], ctorParameters: () => [{ type: UserService }, { type: i1$3.Router }, { type: i1.NavController }] });
|
|
35693
35786
|
|
|
35694
|
-
class DsMobileBookingCancelConfirmationComponent {
|
|
35695
|
-
facilityTitle;
|
|
35696
|
-
facilityThumbnail;
|
|
35697
|
-
bookingDate;
|
|
35698
|
-
bookingTime;
|
|
35699
|
-
get confirmationMessage() {
|
|
35700
|
-
const datePart = this.bookingDate ? ` den ${this.bookingDate}` : '';
|
|
35701
|
-
return `Er du sikker på, at du vil annullere din booking af ${this.facilityTitle}${datePart}?`;
|
|
35702
|
-
}
|
|
35703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingCancelConfirmationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
35704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DsMobileBookingCancelConfirmationComponent, isStandalone: true, selector: "ds-mobile-booking-cancel-confirmation", inputs: { facilityTitle: "facilityTitle", facilityThumbnail: "facilityThumbnail", bookingDate: "bookingDate", bookingTime: "bookingTime" }, ngImport: i0, template: `
|
|
35705
|
-
<ds-mobile-confirmation-sheet
|
|
35706
|
-
[title]="'Annuller booking?'"
|
|
35707
|
-
[message]="confirmationMessage"
|
|
35708
|
-
[buttonText]="'Ja, annuller booking'"
|
|
35709
|
-
[destructive]="true"
|
|
35710
|
-
[secondaryButtonText]="'Luk'"
|
|
35711
|
-
[secondaryButtonVariant]="'secondary'"
|
|
35712
|
-
[illustrationVariant]="'delete-warning'"
|
|
35713
|
-
[illustrationSize]="'140px'">
|
|
35714
|
-
<ng-template #summary>
|
|
35715
|
-
<ds-mobile-booking-summary
|
|
35716
|
-
[facilityTitle]="facilityTitle"
|
|
35717
|
-
[facilityThumbnail]="facilityThumbnail"
|
|
35718
|
-
[date]="bookingDate"
|
|
35719
|
-
[time]="bookingTime"
|
|
35720
|
-
/>
|
|
35721
|
-
</ng-template>
|
|
35722
|
-
</ds-mobile-confirmation-sheet>
|
|
35723
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileConfirmationSheetComponent, selector: "ds-mobile-confirmation-sheet", inputs: ["title", "message", "buttonText", "destructive", "showCancelButton", "cancelButtonText", "showIllustration", "illustrationVariant", "illustrationSize", "secondaryButtonText", "secondaryButtonVariant"] }, { kind: "component", type: DsMobileBookingSummaryComponent, selector: "ds-mobile-booking-summary", inputs: ["facilityTitle", "facilityThumbnail", "date", "time", "bookingCount"] }] });
|
|
35724
|
-
}
|
|
35725
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingCancelConfirmationComponent, decorators: [{
|
|
35726
|
-
type: Component,
|
|
35727
|
-
args: [{
|
|
35728
|
-
selector: 'ds-mobile-booking-cancel-confirmation',
|
|
35729
|
-
standalone: true,
|
|
35730
|
-
imports: [
|
|
35731
|
-
CommonModule,
|
|
35732
|
-
DsMobileConfirmationSheetComponent,
|
|
35733
|
-
DsMobileBookingSummaryComponent
|
|
35734
|
-
],
|
|
35735
|
-
template: `
|
|
35736
|
-
<ds-mobile-confirmation-sheet
|
|
35737
|
-
[title]="'Annuller booking?'"
|
|
35738
|
-
[message]="confirmationMessage"
|
|
35739
|
-
[buttonText]="'Ja, annuller booking'"
|
|
35740
|
-
[destructive]="true"
|
|
35741
|
-
[secondaryButtonText]="'Luk'"
|
|
35742
|
-
[secondaryButtonVariant]="'secondary'"
|
|
35743
|
-
[illustrationVariant]="'delete-warning'"
|
|
35744
|
-
[illustrationSize]="'140px'">
|
|
35745
|
-
<ng-template #summary>
|
|
35746
|
-
<ds-mobile-booking-summary
|
|
35747
|
-
[facilityTitle]="facilityTitle"
|
|
35748
|
-
[facilityThumbnail]="facilityThumbnail"
|
|
35749
|
-
[date]="bookingDate"
|
|
35750
|
-
[time]="bookingTime"
|
|
35751
|
-
/>
|
|
35752
|
-
</ng-template>
|
|
35753
|
-
</ds-mobile-confirmation-sheet>
|
|
35754
|
-
`
|
|
35755
|
-
}]
|
|
35756
|
-
}], propDecorators: { facilityTitle: [{
|
|
35757
|
-
type: Input
|
|
35758
|
-
}], facilityThumbnail: [{
|
|
35759
|
-
type: Input
|
|
35760
|
-
}], bookingDate: [{
|
|
35761
|
-
type: Input
|
|
35762
|
-
}], bookingTime: [{
|
|
35763
|
-
type: Input
|
|
35764
|
-
}] } });
|
|
35765
|
-
|
|
35766
35787
|
const HISTORY_LINK = {
|
|
35767
35788
|
da: 'Historik',
|
|
35768
35789
|
en: 'History',
|
|
@@ -38860,5 +38881,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
38860
38881
|
* Generated bundle index. Do not edit.
|
|
38861
38882
|
*/
|
|
38862
38883
|
|
|
38863
|
-
export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCountBadgeComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileNotificationButtonComponent, DsMobileNotificationModalComponent, DsMobileNotificationModalService, DsMobileNotificationPromptComponent, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileToggleComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, NOTIFICATION_ICON_MAP, NotificationPromptService, NotificationService, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket };
|
|
38884
|
+
export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingCancelConfirmationComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingDetailSheetComponent, DsMobileBookingDetailSheetService, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCountBadgeComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileNotificationButtonComponent, DsMobileNotificationModalComponent, DsMobileNotificationModalService, DsMobileNotificationPromptComponent, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileToggleComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, NOTIFICATION_ICON_MAP, NotificationPromptService, NotificationService, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket };
|
|
38864
38885
|
//# sourceMappingURL=propbinder-mobile-design.mjs.map
|