@propbinder/mobile-design 0.4.4 → 0.4.43
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.
|
@@ -83,6 +83,7 @@ class WhitelabelService {
|
|
|
83
83
|
// Readonly computed signals for accessing config values
|
|
84
84
|
logoUrl = computed(() => this._config().logoUrl, ...(ngDevMode ? [{ debugName: "logoUrl" }] : []));
|
|
85
85
|
logoMarkUrl = computed(() => this._config().logoMarkUrl, ...(ngDevMode ? [{ debugName: "logoMarkUrl" }] : []));
|
|
86
|
+
headerLogoUrl = computed(() => this._config().headerLogoUrl ?? '', ...(ngDevMode ? [{ debugName: "headerLogoUrl" }] : []));
|
|
86
87
|
logoAlt = computed(() => this._config().logoAlt, ...(ngDevMode ? [{ debugName: "logoAlt" }] : []));
|
|
87
88
|
logoSize = computed(() => this._config().logoSize, ...(ngDevMode ? [{ debugName: "logoSize" }] : []));
|
|
88
89
|
logoHeight = computed(() => {
|
|
@@ -601,6 +602,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
601
602
|
* ```html
|
|
602
603
|
* <ds-logo variant="mark" size="sm" />
|
|
603
604
|
* ```
|
|
605
|
+
*
|
|
606
|
+
* Header logo (uses optional headerLogoUrl override, else falls back to the full logo):
|
|
607
|
+
* ```html
|
|
608
|
+
* <ds-logo variant="header" size="lg" />
|
|
609
|
+
* ```
|
|
604
610
|
*/
|
|
605
611
|
class DsLogoComponent {
|
|
606
612
|
whitelabelService = inject(WhitelabelService);
|
|
@@ -611,6 +617,11 @@ class DsLogoComponent {
|
|
|
611
617
|
get logoSrc() {
|
|
612
618
|
const logoUrl = this.whitelabelService.logoUrl();
|
|
613
619
|
const logoMarkUrl = this.whitelabelService.logoMarkUrl();
|
|
620
|
+
if (this.variant === 'header') {
|
|
621
|
+
// Header override: prefer headerLogoUrl, fall back to the full logo, then logomark
|
|
622
|
+
const headerLogoUrl = this.whitelabelService.headerLogoUrl();
|
|
623
|
+
return headerLogoUrl || logoUrl || logoMarkUrl;
|
|
624
|
+
}
|
|
614
625
|
if (this.variant === 'full') {
|
|
615
626
|
// Use logo, fall back to logomark if logo doesn't exist
|
|
616
627
|
return logoUrl || logoMarkUrl;
|
|
@@ -622,7 +633,8 @@ class DsLogoComponent {
|
|
|
622
633
|
}
|
|
623
634
|
get logoAlt() {
|
|
624
635
|
const alt = this.whitelabelService.logoAlt();
|
|
625
|
-
|
|
636
|
+
// 'mark' is the compact logomark; 'full' and 'header' show the wordmark
|
|
637
|
+
return this.variant === 'mark' ? `${alt} logo` : alt;
|
|
626
638
|
}
|
|
627
639
|
/**
|
|
628
640
|
* Priority: customHeight input > whitelabel config logoHeight > default 32px
|
|
@@ -632,7 +644,7 @@ class DsLogoComponent {
|
|
|
632
644
|
}
|
|
633
645
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
634
646
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.23", type: DsLogoComponent, isStandalone: true, selector: "ds-logo", inputs: { variant: "variant", size: "size", customHeight: "customHeight", customWidth: "customWidth" }, ngImport: i0, template: `
|
|
635
|
-
<img
|
|
647
|
+
<img
|
|
636
648
|
[src]="logoSrc"
|
|
637
649
|
[alt]="logoAlt"
|
|
638
650
|
class="logo"
|
|
@@ -645,7 +657,7 @@ class DsLogoComponent {
|
|
|
645
657
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsLogoComponent, decorators: [{
|
|
646
658
|
type: Component,
|
|
647
659
|
args: [{ selector: 'ds-logo', standalone: true, imports: [CommonModule], template: `
|
|
648
|
-
<img
|
|
660
|
+
<img
|
|
649
661
|
[src]="logoSrc"
|
|
650
662
|
[alt]="logoAlt"
|
|
651
663
|
class="logo"
|
|
@@ -1923,23 +1935,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
1923
1935
|
*/
|
|
1924
1936
|
class DsMobileActionsBottomSheetComponent {
|
|
1925
1937
|
modalController;
|
|
1926
|
-
/**
|
|
1927
|
-
* Custom action groups to display (overrides isOwnContent)
|
|
1928
|
-
*/
|
|
1938
|
+
/** Custom action groups to display (overrides isOwnContent). Set via Ionic componentProps. */
|
|
1929
1939
|
customActionGroups;
|
|
1930
|
-
/**
|
|
1931
|
-
* Whether this content belongs to the current user (for preset content actions)
|
|
1932
|
-
*/
|
|
1940
|
+
/** Whether this content belongs to the current user (for preset content actions). */
|
|
1933
1941
|
isOwnContent = false;
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
*/
|
|
1937
|
-
actionGroups = computed(() => {
|
|
1938
|
-
// Use custom action groups if provided
|
|
1939
|
-
if (this.customActionGroups) {
|
|
1942
|
+
get actionGroups() {
|
|
1943
|
+
if (this.customActionGroups?.length) {
|
|
1940
1944
|
return this.customActionGroups;
|
|
1941
1945
|
}
|
|
1942
|
-
// Otherwise fall back to preset content actions
|
|
1943
1946
|
if (this.isOwnContent) {
|
|
1944
1947
|
// Own content: Group 1 (Edit, Delete) + Group 2 (Like, Reply)
|
|
1945
1948
|
return [
|
|
@@ -1998,7 +2001,7 @@ class DsMobileActionsBottomSheetComponent {
|
|
|
1998
2001
|
},
|
|
1999
2002
|
];
|
|
2000
2003
|
}
|
|
2001
|
-
}
|
|
2004
|
+
}
|
|
2002
2005
|
constructor(modalController) {
|
|
2003
2006
|
this.modalController = modalController;
|
|
2004
2007
|
}
|
|
@@ -2013,7 +2016,7 @@ class DsMobileActionsBottomSheetComponent {
|
|
|
2013
2016
|
<ds-mobile-bottom-sheet-wrapper>
|
|
2014
2017
|
<!-- Actions List -->
|
|
2015
2018
|
<div class="actions-list">
|
|
2016
|
-
@for (group of actionGroups
|
|
2019
|
+
@for (group of actionGroups; track $index; let isLast = $last) {
|
|
2017
2020
|
<!-- Action Group -->
|
|
2018
2021
|
<div class="action-group">
|
|
2019
2022
|
@for (actionItem of group.actions; track actionItem.action; let isLastInGroup = $last) {
|
|
@@ -2042,7 +2045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
2042
2045
|
<ds-mobile-bottom-sheet-wrapper>
|
|
2043
2046
|
<!-- Actions List -->
|
|
2044
2047
|
<div class="actions-list">
|
|
2045
|
-
@for (group of actionGroups
|
|
2048
|
+
@for (group of actionGroups; track $index; let isLast = $last) {
|
|
2046
2049
|
<!-- Action Group -->
|
|
2047
2050
|
<div class="action-group">
|
|
2048
2051
|
@for (actionItem of group.actions; track actionItem.action; let isLastInGroup = $last) {
|
|
@@ -2110,6 +2113,11 @@ function disableModalShadowPointerEvents(modal) {
|
|
|
2110
2113
|
}, { once: true });
|
|
2111
2114
|
}
|
|
2112
2115
|
|
|
2116
|
+
var modalShadowFix = /*#__PURE__*/Object.freeze({
|
|
2117
|
+
__proto__: null,
|
|
2118
|
+
disableModalShadowPointerEvents: disableModalShadowPointerEvents
|
|
2119
|
+
});
|
|
2120
|
+
|
|
2113
2121
|
/**
|
|
2114
2122
|
* DsMobileBottomSheetService
|
|
2115
2123
|
*
|
|
@@ -4602,6 +4610,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
4602
4610
|
class UserService {
|
|
4603
4611
|
// User identity
|
|
4604
4612
|
_displayName = signal('', ...(ngDevMode ? [{ debugName: "_displayName" }] : []));
|
|
4613
|
+
_email = signal('lars.m@email.dk', ...(ngDevMode ? [{ debugName: "_email" }] : []));
|
|
4614
|
+
_phone = signal('+45 28 91 44 02', ...(ngDevMode ? [{ debugName: "_phone" }] : []));
|
|
4605
4615
|
_address = signal('', ...(ngDevMode ? [{ debugName: "_address" }] : []));
|
|
4606
4616
|
// User avatar configuration
|
|
4607
4617
|
_avatarInitials = signal('LM', ...(ngDevMode ? [{ debugName: "_avatarInitials" }] : []));
|
|
@@ -4611,6 +4621,8 @@ class UserService {
|
|
|
4611
4621
|
_profileMenuItems = signal(undefined, ...(ngDevMode ? [{ debugName: "_profileMenuItems" }] : []));
|
|
4612
4622
|
// Readonly computed values
|
|
4613
4623
|
displayName = this._displayName.asReadonly();
|
|
4624
|
+
email = this._email.asReadonly();
|
|
4625
|
+
phone = this._phone.asReadonly();
|
|
4614
4626
|
address = this._address.asReadonly();
|
|
4615
4627
|
avatarInitials = this._avatarInitials.asReadonly();
|
|
4616
4628
|
avatarType = this._avatarType.asReadonly();
|
|
@@ -4622,6 +4634,12 @@ class UserService {
|
|
|
4622
4634
|
setDisplayName(name) {
|
|
4623
4635
|
this._displayName.set(name);
|
|
4624
4636
|
}
|
|
4637
|
+
setEmail(email) {
|
|
4638
|
+
this._email.set(email);
|
|
4639
|
+
}
|
|
4640
|
+
setPhone(phone) {
|
|
4641
|
+
this._phone.set(phone);
|
|
4642
|
+
}
|
|
4625
4643
|
setAddress(address) {
|
|
4626
4644
|
this._address.set(address);
|
|
4627
4645
|
}
|
|
@@ -6251,8 +6269,8 @@ class DsMobilePageMainComponent extends MobilePageBase {
|
|
|
6251
6269
|
<ion-header>
|
|
6252
6270
|
<ion-toolbar>
|
|
6253
6271
|
<div class="header-main">
|
|
6254
|
-
<!-- Whitelabel logo (
|
|
6255
|
-
<ds-logo variant="
|
|
6272
|
+
<!-- Whitelabel logo (header variant: headerLogoUrl override, else full logo) -->
|
|
6273
|
+
<ds-logo variant="header" size="lg" [class.logo--first-entry]="firstEntry()" />
|
|
6256
6274
|
|
|
6257
6275
|
<!-- Title - fades in on scroll -->
|
|
6258
6276
|
<ion-title class="header-main__title">{{ title() }}</ion-title>
|
|
@@ -6340,8 +6358,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
6340
6358
|
<ion-header>
|
|
6341
6359
|
<ion-toolbar>
|
|
6342
6360
|
<div class="header-main">
|
|
6343
|
-
<!-- Whitelabel logo (
|
|
6344
|
-
<ds-logo variant="
|
|
6361
|
+
<!-- Whitelabel logo (header variant: headerLogoUrl override, else full logo) -->
|
|
6362
|
+
<ds-logo variant="header" size="lg" [class.logo--first-entry]="firstEntry()" />
|
|
6345
6363
|
|
|
6346
6364
|
<!-- Title - fades in on scroll -->
|
|
6347
6365
|
<ion-title class="header-main__title">{{ title() }}</ion-title>
|
|
@@ -11628,6 +11646,11 @@ class MobileModalBase {
|
|
|
11628
11646
|
* @default 'follow'
|
|
11629
11647
|
*/
|
|
11630
11648
|
keyboardContentBehavior = input('follow', ...(ngDevMode ? [{ debugName: "keyboardContentBehavior" }] : []));
|
|
11649
|
+
/**
|
|
11650
|
+
* Show border below the header
|
|
11651
|
+
* @default true
|
|
11652
|
+
*/
|
|
11653
|
+
showHeaderBorder = input(true, ...(ngDevMode ? [{ debugName: "showHeaderBorder" }] : []));
|
|
11631
11654
|
/**
|
|
11632
11655
|
* Optional interceptor called instead of the default dismiss when the close button is tapped.
|
|
11633
11656
|
* Return a function to take over close behavior (e.g. navigate back within the modal).
|
|
@@ -11930,14 +11953,14 @@ class MobileModalBase {
|
|
|
11930
11953
|
return fixedBottomHeight + keyboardHeight;
|
|
11931
11954
|
}
|
|
11932
11955
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: MobileModalBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
11933
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.23", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null }, isAutoHeight: { classPropertyName: "isAutoHeight", publicName: "isAutoHeight", isSignal: true, isRequired: false, transformFunction: null }, keyboardContentBehavior: { classPropertyName: "keyboardContentBehavior", publicName: "keyboardContentBehavior", isSignal: true, isRequired: false, transformFunction: null }, onCloseRequest: { classPropertyName: "onCloseRequest", publicName: "onCloseRequest", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
|
|
11956
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.23", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null }, isAutoHeight: { classPropertyName: "isAutoHeight", publicName: "isAutoHeight", isSignal: true, isRequired: false, transformFunction: null }, keyboardContentBehavior: { classPropertyName: "keyboardContentBehavior", publicName: "keyboardContentBehavior", isSignal: true, isRequired: false, transformFunction: null }, showHeaderBorder: { classPropertyName: "showHeaderBorder", publicName: "showHeaderBorder", isSignal: true, isRequired: false, transformFunction: null }, onCloseRequest: { classPropertyName: "onCloseRequest", publicName: "onCloseRequest", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
|
|
11934
11957
|
}
|
|
11935
11958
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: MobileModalBase, decorators: [{
|
|
11936
11959
|
type: Directive
|
|
11937
11960
|
}], propDecorators: { ionContent: [{
|
|
11938
11961
|
type: ViewChild,
|
|
11939
11962
|
args: [IonContent, { read: IonContent }]
|
|
11940
|
-
}], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], isAutoHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoHeight", required: false }] }], keyboardContentBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboardContentBehavior", required: false }] }], onCloseRequest: [{ type: i0.Input, args: [{ isSignal: true, alias: "onCloseRequest", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
|
|
11963
|
+
}], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], isAutoHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoHeight", required: false }] }], keyboardContentBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboardContentBehavior", required: false }] }], showHeaderBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeaderBorder", required: false }] }], onCloseRequest: [{ type: i0.Input, args: [{ isSignal: true, alias: "onCloseRequest", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
|
|
11941
11964
|
|
|
11942
11965
|
/**
|
|
11943
11966
|
* DsMobileModalBaseComponent
|
|
@@ -12113,7 +12136,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12113
12136
|
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
|
|
12114
12137
|
<!-- Header (conditional) -->
|
|
12115
12138
|
@if (shouldShowHeader()) {
|
|
12116
|
-
<div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()">
|
|
12139
|
+
<div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()" [class.no-border]="!showHeaderBorder()">
|
|
12117
12140
|
<div class="header-content">
|
|
12118
12141
|
<!-- Leading slot (avatar, icon) - always rendered, CSS handles empty state -->
|
|
12119
12142
|
<div class="header-leading">
|
|
@@ -12200,7 +12223,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12200
12223
|
<ng-content select="[fixed-bottom]"></ng-content>
|
|
12201
12224
|
<ng-content select="[footer]"></ng-content>
|
|
12202
12225
|
</div>
|
|
12203
|
-
`, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-trailing{flex-shrink:0;display:flex;align-items:center;gap:4px}.header-trailing:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.modal-title--interactive{display:block;width:100%;font:inherit;font-weight:600;letter-spacing:inherit;line-height:20px;text-align:left;background:none;border:none;padding:0;margin:0;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button.modal-title--interactive:focus-visible{outline:2px solid var(--color-accent, #6b5ff5);outline-offset:2px;border-radius:4px}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.header-below:empty{display:none}.header-below{margin-top:12px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px));transform:none;transition:none}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
|
|
12226
|
+
`, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-border{border-bottom:none}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-trailing{flex-shrink:0;display:flex;align-items:center;gap:4px}.header-trailing:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.modal-title--interactive{display:block;width:100%;font:inherit;font-weight:600;letter-spacing:inherit;line-height:20px;text-align:left;background:none;border:none;padding:0;margin:0;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button.modal-title--interactive:focus-visible{outline:2px solid var(--color-accent, #6b5ff5);outline-offset:2px;border-radius:4px}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.header-below:empty{display:none}.header-below{margin-top:12px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px));transform:none;transition:none}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
|
|
12204
12227
|
}
|
|
12205
12228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileModalBaseComponent, decorators: [{
|
|
12206
12229
|
type: Component,
|
|
@@ -12218,7 +12241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
12218
12241
|
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
|
|
12219
12242
|
<!-- Header (conditional) -->
|
|
12220
12243
|
@if (shouldShowHeader()) {
|
|
12221
|
-
<div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()">
|
|
12244
|
+
<div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()" [class.no-border]="!showHeaderBorder()">
|
|
12222
12245
|
<div class="header-content">
|
|
12223
12246
|
<!-- Leading slot (avatar, icon) - always rendered, CSS handles empty state -->
|
|
12224
12247
|
<div class="header-leading">
|
|
@@ -12305,7 +12328,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
12305
12328
|
<ng-content select="[fixed-bottom]"></ng-content>
|
|
12306
12329
|
<ng-content select="[footer]"></ng-content>
|
|
12307
12330
|
</div>
|
|
12308
|
-
`, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-trailing{flex-shrink:0;display:flex;align-items:center;gap:4px}.header-trailing:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.modal-title--interactive{display:block;width:100%;font:inherit;font-weight:600;letter-spacing:inherit;line-height:20px;text-align:left;background:none;border:none;padding:0;margin:0;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button.modal-title--interactive:focus-visible{outline:2px solid var(--color-accent, #6b5ff5);outline-offset:2px;border-radius:4px}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.header-below:empty{display:none}.header-below{margin-top:12px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px));transform:none;transition:none}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"] }]
|
|
12331
|
+
`, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-border{border-bottom:none}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-trailing{flex-shrink:0;display:flex;align-items:center;gap:4px}.header-trailing:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.modal-title--interactive{display:block;width:100%;font:inherit;font-weight:600;letter-spacing:inherit;line-height:20px;text-align:left;background:none;border:none;padding:0;margin:0;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button.modal-title--interactive:focus-visible{outline:2px solid var(--color-accent, #6b5ff5);outline-offset:2px;border-radius:4px}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.header-below:empty{display:none}.header-below{margin-top:12px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px));transform:none;transition:none}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"] }]
|
|
12309
12332
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { headerTitleInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitleInteractive", required: false }] }], textLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "textLoading", required: false }] }], textErrorTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "textErrorTitle", required: false }] }], titleClick: [{ type: i0.Output, args: ["titleClick"] }], ionContent: [{
|
|
12310
12333
|
type: ViewChild,
|
|
12311
12334
|
args: [IonContent, { read: IonContent }]
|
|
@@ -13541,7 +13564,6 @@ const DEFAULT_PANEL_LABELS = {
|
|
|
13541
13564
|
groupNamePlaceholder: 'Gruppenavn',
|
|
13542
13565
|
takePhoto: 'Tag et billede',
|
|
13543
13566
|
chooseFromLibrary: 'Vælg fra bibliotek',
|
|
13544
|
-
deletePhoto: 'Slet billede',
|
|
13545
13567
|
};
|
|
13546
13568
|
class DsMobileChatGroupPanelsComponent {
|
|
13547
13569
|
modalCtrl = inject(ModalController);
|
|
@@ -13944,7 +13966,7 @@ class DsMobileChatGroupPanelsComponent {
|
|
|
13944
13966
|
</ds-mobile-action-list-item>
|
|
13945
13967
|
@if (editAvatarUrl()) {
|
|
13946
13968
|
<ds-mobile-action-list-item
|
|
13947
|
-
[title]="
|
|
13969
|
+
[title]="'Slet billede'"
|
|
13948
13970
|
[showDivider]="false"
|
|
13949
13971
|
(itemClick)="deleteImage()">
|
|
13950
13972
|
<ds-icon action-icon name="remixDeleteBinLine" size="24px" />
|
|
@@ -14167,7 +14189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
14167
14189
|
</ds-mobile-action-list-item>
|
|
14168
14190
|
@if (editAvatarUrl()) {
|
|
14169
14191
|
<ds-mobile-action-list-item
|
|
14170
|
-
[title]="
|
|
14192
|
+
[title]="'Slet billede'"
|
|
14171
14193
|
[showDivider]="false"
|
|
14172
14194
|
(itemClick)="deleteImage()">
|
|
14173
14195
|
<ds-icon action-icon name="remixDeleteBinLine" size="24px" />
|
|
@@ -17152,6 +17174,7 @@ class DsMobileChatModalComponent {
|
|
|
17152
17174
|
[loading]="loading"
|
|
17153
17175
|
[error]="localError() || error"
|
|
17154
17176
|
[showHeader]="true"
|
|
17177
|
+
[showHeaderBorder]="groupPanelView() === 'chat' || groupPanelView() === 'add-members'"
|
|
17155
17178
|
[headerTitle]="groupHeaderTitle()"
|
|
17156
17179
|
[headerMeta]="groupHeaderMeta()"
|
|
17157
17180
|
[headerTitleInteractive]="groupHeaderTitleInteractive()"
|
|
@@ -17408,7 +17431,7 @@ class DsMobileChatModalComponent {
|
|
|
17408
17431
|
</ds-mobile-message-composer>
|
|
17409
17432
|
</div>
|
|
17410
17433
|
</ds-mobile-modal-base>
|
|
17411
|
-
`, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-content-container{padding-top:0}
|
|
17434
|
+
`, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-content-container{padding-top:0}.chat-messages-container{display:flex;flex-direction:column;width:100%}.chat-system-line{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.35;color:var(--text-color-default-tertiary, #737373);text-align:center;margin:8px 24px}.chat-avatar-section{display:flex;flex-direction:column;align-items:center;gap:12px;padding:48px 0 0;background:var(--color-background-neutral-primary, #ffffff)}.chat-avatar-info{display:flex;flex-direction:column;align-items:center;gap:4px}.chat-avatar-name{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a)}.chat-avatar-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;color:var(--color-text-secondary, #666666)}.chat-avatar-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:4px}.messages-list{display:flex;flex-direction:column;width:100%;padding:16px 0 0;align-items:stretch}.messages-list ds-mobile-message-bubble{width:100%;display:flex}.timestamp-header{display:flex;justify-content:center;margin:16px 0 8px}.timestamp-text{font-family:Brockmann,sans-serif;font-size:12px;font-weight:400;color:var(--color-text-secondary);padding:4px 12px}.message-file-attachments{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding:0 20px 0 60px;max-width:100%}.message-file-attachments.own-message{padding:0 0 0 96px;align-items:flex-end}.message-file-attachments ds-mobile-card-inline-file{max-width:280px;width:100%}.message-image-attachment{width:96px;height:96px;cursor:pointer;border-radius:12px;overflow:hidden;position:relative;transition:transform .2s ease;border:1px solid var(--border-color-default, #e5e5e5)}.message-image-attachment:active{transform:scale(.98)}.message-image-attachment .inline-image{width:100%;height:100%;display:block;-o-object-fit:cover;object-fit:cover}.group-settings-back-btn{flex-shrink:0;border-radius:50%}.group-settings-back-btn::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobileVendorAvatarComponent, selector: "ds-mobile-vendor-avatar", inputs: ["name", "logo", "size"] }, { kind: "component", type: DsMobileMessageComposerComponent, selector: "ds-mobile-message-composer", inputs: ["avatarInitials", "avatarType", "avatarSrc", "placeholder", "sendButtonLabel", "attachmentButtonLabel", "showAttachmentButton", "showAiButton", "editIndicatorText", "replyIndicatorText", "enableMentions", "mentionUsers", "showInternalToggle", "internalToggleLabel", "replyLabel", "internalMessageDescription", "autoFocus"], outputs: ["messageSent", "editCancelled", "replyCancelled", "mentionSelected", "attachmentClicked", "attachmentsChanged", "aiClick"] }, { kind: "component", type: DsMobileMessageBubbleComponent, selector: "ds-mobile-message-bubble", inputs: ["content", "isOwnMessage", "senderName", "isInternal", "internalMessageBadgeText", "timestamp", "showTimestamp", "avatarInitials", "avatarType", "avatarSrc", "showAvatar", "clusterPosition", "attachments", "clickable", "isNewMessage", "isDeleted", "showEditedHint", "editedHintText"], outputs: ["attachmentClick", "longPress", "messageClick"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["headerTitleInteractive", "textLoading", "textErrorTitle", "showHeader"], outputs: ["titleClick"] }, { kind: "component", type: DsMobileCardInlineFileComponent, selector: "ds-mobile-card-inline-file", inputs: ["fileName", "fileSize", "variant", "layout", "fileUrl"], outputs: ["fileClick"] }, { kind: "component", type: DsMobileSystemMessageBannerComponent, selector: "ds-mobile-system-message-banner", inputs: ["message", "iconName", "afterTimestamp"] }, { 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"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "paddingDesktop", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileGroupAvatarStackComponent, selector: "ds-mobile-group-avatar-stack", inputs: ["members", "customAvatarUrl", "size", "layout", "currentUserId"] }, { kind: "component", type: DsMobileListSearchComponent, selector: "ds-mobile-list-search", inputs: ["placeholder", "ariaLabel", "value", "showDivider"], outputs: ["valueChange"] }, { kind: "component", type: DsMobileChatGroupPanelsComponent, selector: "ds-mobile-chat-group-panels", inputs: ["panelView", "group", "membersForStack", "participantName", "currentUserId", "isAdmin", "canEditGroupDetails", "canAddGroupMembers", "canLeaveGroup", "canRemoveMember", "canMessageMember", "allTenantsForPicker", "searchQuery", "labels"], outputs: ["navigateTo", "renameGroup", "setGroupAvatarUrl", "addMembers", "removeMember", "messageMember", "leaveGroup"] }] });
|
|
17412
17435
|
}
|
|
17413
17436
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileChatModalComponent, decorators: [{
|
|
17414
17437
|
type: Component,
|
|
@@ -17435,6 +17458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
17435
17458
|
[loading]="loading"
|
|
17436
17459
|
[error]="localError() || error"
|
|
17437
17460
|
[showHeader]="true"
|
|
17461
|
+
[showHeaderBorder]="groupPanelView() === 'chat' || groupPanelView() === 'add-members'"
|
|
17438
17462
|
[headerTitle]="groupHeaderTitle()"
|
|
17439
17463
|
[headerMeta]="groupHeaderMeta()"
|
|
17440
17464
|
[headerTitleInteractive]="groupHeaderTitleInteractive()"
|
|
@@ -17691,7 +17715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
17691
17715
|
</ds-mobile-message-composer>
|
|
17692
17716
|
</div>
|
|
17693
17717
|
</ds-mobile-modal-base>
|
|
17694
|
-
`, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-content-container{padding-top:0}
|
|
17718
|
+
`, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-content-container{padding-top:0}.chat-messages-container{display:flex;flex-direction:column;width:100%}.chat-system-line{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.35;color:var(--text-color-default-tertiary, #737373);text-align:center;margin:8px 24px}.chat-avatar-section{display:flex;flex-direction:column;align-items:center;gap:12px;padding:48px 0 0;background:var(--color-background-neutral-primary, #ffffff)}.chat-avatar-info{display:flex;flex-direction:column;align-items:center;gap:4px}.chat-avatar-name{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a)}.chat-avatar-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;color:var(--color-text-secondary, #666666)}.chat-avatar-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:4px}.messages-list{display:flex;flex-direction:column;width:100%;padding:16px 0 0;align-items:stretch}.messages-list ds-mobile-message-bubble{width:100%;display:flex}.timestamp-header{display:flex;justify-content:center;margin:16px 0 8px}.timestamp-text{font-family:Brockmann,sans-serif;font-size:12px;font-weight:400;color:var(--color-text-secondary);padding:4px 12px}.message-file-attachments{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding:0 20px 0 60px;max-width:100%}.message-file-attachments.own-message{padding:0 0 0 96px;align-items:flex-end}.message-file-attachments ds-mobile-card-inline-file{max-width:280px;width:100%}.message-image-attachment{width:96px;height:96px;cursor:pointer;border-radius:12px;overflow:hidden;position:relative;transition:transform .2s ease;border:1px solid var(--border-color-default, #e5e5e5)}.message-image-attachment:active{transform:scale(.98)}.message-image-attachment .inline-image{width:100%;height:100%;display:block;-o-object-fit:cover;object-fit:cover}.group-settings-back-btn{flex-shrink:0;border-radius:50%}.group-settings-back-btn::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}\n"] }]
|
|
17695
17719
|
}], ctorParameters: () => [{ type: DsMobileLightboxService }], propDecorators: { chatData: [{
|
|
17696
17720
|
type: Input
|
|
17697
17721
|
}], loading: [{
|
|
@@ -31329,6 +31353,465 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
31329
31353
|
`, styles: [".settings-content{padding:20px}\n"] }]
|
|
31330
31354
|
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], prefs: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefs", required: false }] }] } });
|
|
31331
31355
|
|
|
31356
|
+
class ProfileModalComponent {
|
|
31357
|
+
userService = inject(UserService);
|
|
31358
|
+
modalController = inject(ModalController);
|
|
31359
|
+
closeInterceptor = () => this.close();
|
|
31360
|
+
editingName = signal(false, ...(ngDevMode ? [{ debugName: "editingName" }] : []));
|
|
31361
|
+
editingEmail = signal(false, ...(ngDevMode ? [{ debugName: "editingEmail" }] : []));
|
|
31362
|
+
editingPhone = signal(false, ...(ngDevMode ? [{ debugName: "editingPhone" }] : []));
|
|
31363
|
+
keyboardOffset = signal(false, ...(ngDevMode ? [{ debugName: "keyboardOffset" }] : []));
|
|
31364
|
+
hasChanges = signal(false, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
|
|
31365
|
+
originalName = '';
|
|
31366
|
+
originalEmail = '';
|
|
31367
|
+
originalPhone = '';
|
|
31368
|
+
originalAvatarSrc = '';
|
|
31369
|
+
originalAvatarType = 'initials';
|
|
31370
|
+
originalAvatarInitials = '';
|
|
31371
|
+
nameInputRef;
|
|
31372
|
+
emailInputRef;
|
|
31373
|
+
phoneInputRef;
|
|
31374
|
+
photoFileInputRef;
|
|
31375
|
+
constructor() {
|
|
31376
|
+
this.originalName = this.userService.displayName();
|
|
31377
|
+
this.originalEmail = this.userService.email();
|
|
31378
|
+
this.originalPhone = this.userService.phone();
|
|
31379
|
+
this.originalAvatarSrc = this.userService.avatarSrc();
|
|
31380
|
+
this.originalAvatarType = this.userService.avatarType();
|
|
31381
|
+
this.originalAvatarInitials = this.userService.avatarInitials();
|
|
31382
|
+
}
|
|
31383
|
+
checkForChanges() {
|
|
31384
|
+
this.hasChanges.set(this.userService.displayName() !== this.originalName ||
|
|
31385
|
+
this.userService.email() !== this.originalEmail ||
|
|
31386
|
+
this.userService.phone() !== this.originalPhone ||
|
|
31387
|
+
this.userService.avatarSrc() !== this.originalAvatarSrc ||
|
|
31388
|
+
this.userService.avatarType() !== this.originalAvatarType);
|
|
31389
|
+
}
|
|
31390
|
+
async close() {
|
|
31391
|
+
if (!this.hasChanges()) {
|
|
31392
|
+
await this.modalController.dismiss();
|
|
31393
|
+
return;
|
|
31394
|
+
}
|
|
31395
|
+
const action = await this.showUnsavedChangesSheet();
|
|
31396
|
+
if (!action)
|
|
31397
|
+
return;
|
|
31398
|
+
if (action === 'discard') {
|
|
31399
|
+
this.userService.setDisplayName(this.originalName);
|
|
31400
|
+
this.userService.setEmail(this.originalEmail);
|
|
31401
|
+
this.userService.setPhone(this.originalPhone);
|
|
31402
|
+
this.userService.setAvatarSrc(this.originalAvatarSrc);
|
|
31403
|
+
this.userService.setAvatarType(this.originalAvatarType);
|
|
31404
|
+
this.userService.setAvatarInitials(this.originalAvatarInitials);
|
|
31405
|
+
}
|
|
31406
|
+
await this.modalController.dismiss();
|
|
31407
|
+
}
|
|
31408
|
+
async showUnsavedChangesSheet() {
|
|
31409
|
+
const { DsMobileConfirmationSheetComponent } = await Promise.resolve().then(function () { return dsMobileConfirmationSheet; });
|
|
31410
|
+
const { disableModalShadowPointerEvents } = await Promise.resolve().then(function () { return modalShadowFix; });
|
|
31411
|
+
const sheet = await this.modalController.create({
|
|
31412
|
+
component: DsMobileConfirmationSheetComponent,
|
|
31413
|
+
componentProps: {
|
|
31414
|
+
title: 'Du har ændringer der ikke er gemt',
|
|
31415
|
+
message: 'Vil du gemme eller kassere dine ændringer?',
|
|
31416
|
+
buttonText: 'Gem ændringer',
|
|
31417
|
+
showIllustration: false,
|
|
31418
|
+
secondaryButtonText: 'Kassér ændringer',
|
|
31419
|
+
secondaryButtonVariant: 'secondary',
|
|
31420
|
+
},
|
|
31421
|
+
breakpoints: [0, 1],
|
|
31422
|
+
initialBreakpoint: 1,
|
|
31423
|
+
handle: true,
|
|
31424
|
+
cssClass: ['ds-bottom-sheet', 'auto-height'],
|
|
31425
|
+
backdropDismiss: false,
|
|
31426
|
+
showBackdrop: true,
|
|
31427
|
+
});
|
|
31428
|
+
await sheet.present();
|
|
31429
|
+
disableModalShadowPointerEvents(sheet);
|
|
31430
|
+
const result = await sheet.onDidDismiss();
|
|
31431
|
+
if (result.role === 'confirm')
|
|
31432
|
+
return 'save';
|
|
31433
|
+
if (result.role === 'backdrop')
|
|
31434
|
+
return 'discard';
|
|
31435
|
+
return null;
|
|
31436
|
+
}
|
|
31437
|
+
startEdit(field) {
|
|
31438
|
+
if (field === 'name') {
|
|
31439
|
+
this.editingName.set(true);
|
|
31440
|
+
this.keyboardOffset.set(false);
|
|
31441
|
+
setTimeout(() => this.nameInputRef?.nativeElement.focus());
|
|
31442
|
+
}
|
|
31443
|
+
else if (field === 'email') {
|
|
31444
|
+
this.editingEmail.set(true);
|
|
31445
|
+
this.keyboardOffset.set(false);
|
|
31446
|
+
setTimeout(() => this.emailInputRef?.nativeElement.focus());
|
|
31447
|
+
}
|
|
31448
|
+
else {
|
|
31449
|
+
this.editingPhone.set(true);
|
|
31450
|
+
this.keyboardOffset.set(true);
|
|
31451
|
+
setTimeout(() => this.phoneInputRef?.nativeElement.focus());
|
|
31452
|
+
}
|
|
31453
|
+
}
|
|
31454
|
+
saveName(event) {
|
|
31455
|
+
const val = event.target.value.trim();
|
|
31456
|
+
if (val) {
|
|
31457
|
+
this.userService.setDisplayName(val);
|
|
31458
|
+
const parts = val.split(' ');
|
|
31459
|
+
const initials = parts.length >= 2
|
|
31460
|
+
? (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()
|
|
31461
|
+
: val.substring(0, 2).toUpperCase();
|
|
31462
|
+
this.userService.setAvatarInitials(initials);
|
|
31463
|
+
}
|
|
31464
|
+
this.keyboardOffset.set(false);
|
|
31465
|
+
this.editingName.set(false);
|
|
31466
|
+
this.checkForChanges();
|
|
31467
|
+
}
|
|
31468
|
+
saveEmail(event) {
|
|
31469
|
+
const val = event.target.value.trim();
|
|
31470
|
+
if (val)
|
|
31471
|
+
this.userService.setEmail(val);
|
|
31472
|
+
this.keyboardOffset.set(false);
|
|
31473
|
+
this.editingEmail.set(false);
|
|
31474
|
+
this.checkForChanges();
|
|
31475
|
+
}
|
|
31476
|
+
savePhone(event) {
|
|
31477
|
+
const val = event.target.value.trim();
|
|
31478
|
+
if (val)
|
|
31479
|
+
this.userService.setPhone(val);
|
|
31480
|
+
this.keyboardOffset.set(false);
|
|
31481
|
+
this.editingPhone.set(false);
|
|
31482
|
+
this.checkForChanges();
|
|
31483
|
+
}
|
|
31484
|
+
async openPhotoActions() {
|
|
31485
|
+
const photoActions = [
|
|
31486
|
+
{
|
|
31487
|
+
actions: [
|
|
31488
|
+
{ action: 'take-photo', title: 'Take a picture', icon: 'remixCamera3Line' },
|
|
31489
|
+
{ action: 'choose-library', title: 'Choose from library', icon: 'remixImageLine' },
|
|
31490
|
+
],
|
|
31491
|
+
},
|
|
31492
|
+
];
|
|
31493
|
+
if (this.userService.avatarSrc()) {
|
|
31494
|
+
photoActions[0].actions.push({
|
|
31495
|
+
action: 'delete-photo',
|
|
31496
|
+
title: 'Delete photo',
|
|
31497
|
+
icon: 'remixDeleteBinLine',
|
|
31498
|
+
destructive: true,
|
|
31499
|
+
});
|
|
31500
|
+
}
|
|
31501
|
+
const sheet = await this.modalController.create({
|
|
31502
|
+
component: DsMobileActionsBottomSheetComponent,
|
|
31503
|
+
componentProps: { customActionGroups: photoActions },
|
|
31504
|
+
breakpoints: [0, 1],
|
|
31505
|
+
initialBreakpoint: 1,
|
|
31506
|
+
handle: true,
|
|
31507
|
+
cssClass: ['ds-bottom-sheet', 'auto-height'],
|
|
31508
|
+
backdropDismiss: true,
|
|
31509
|
+
});
|
|
31510
|
+
await sheet.present();
|
|
31511
|
+
disableModalShadowPointerEvents(sheet);
|
|
31512
|
+
const result = await sheet.onWillDismiss();
|
|
31513
|
+
if (!result.data?.action)
|
|
31514
|
+
return;
|
|
31515
|
+
const input = this.photoFileInputRef?.nativeElement;
|
|
31516
|
+
if (!input)
|
|
31517
|
+
return;
|
|
31518
|
+
switch (result.data.action) {
|
|
31519
|
+
case 'take-photo':
|
|
31520
|
+
input.setAttribute('capture', 'environment');
|
|
31521
|
+
input.click();
|
|
31522
|
+
break;
|
|
31523
|
+
case 'choose-library':
|
|
31524
|
+
input.removeAttribute('capture');
|
|
31525
|
+
input.click();
|
|
31526
|
+
break;
|
|
31527
|
+
case 'delete-photo':
|
|
31528
|
+
this.userService.setAvatarSrc('');
|
|
31529
|
+
this.userService.setAvatarType('initials');
|
|
31530
|
+
this.checkForChanges();
|
|
31531
|
+
break;
|
|
31532
|
+
}
|
|
31533
|
+
}
|
|
31534
|
+
onPhotoSelected(event) {
|
|
31535
|
+
const file = event.target.files?.[0];
|
|
31536
|
+
if (!file)
|
|
31537
|
+
return;
|
|
31538
|
+
const url = URL.createObjectURL(file);
|
|
31539
|
+
this.userService.setAvatarSrc(url);
|
|
31540
|
+
this.userService.setAvatarType('photo');
|
|
31541
|
+
event.target.value = '';
|
|
31542
|
+
this.checkForChanges();
|
|
31543
|
+
}
|
|
31544
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: ProfileModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
31545
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.23", type: ProfileModalComponent, isStandalone: true, selector: "app-profile-modal", viewQueries: [{ propertyName: "nameInputRef", first: true, predicate: ["nameInput"], descendants: true }, { propertyName: "emailInputRef", first: true, predicate: ["emailInput"], descendants: true }, { propertyName: "phoneInputRef", first: true, predicate: ["phoneInput"], descendants: true }, { propertyName: "photoFileInputRef", first: true, predicate: ["photoFileInput"], descendants: true }], ngImport: i0, template: `
|
|
31546
|
+
<ds-mobile-modal-base headerTitle="My profile" [showHeader]="true" [showHeaderBorder]="false" [enableKeyboardHandling]="true" [onCloseRequest]="closeInterceptor">
|
|
31547
|
+
<div header-leading>
|
|
31548
|
+
<ds-icon-button
|
|
31549
|
+
class="back-btn"
|
|
31550
|
+
icon="remixArrowLeftSLine"
|
|
31551
|
+
variant="secondary"
|
|
31552
|
+
size="lg"
|
|
31553
|
+
(clicked)="close()"
|
|
31554
|
+
aria-label="Tilbage"
|
|
31555
|
+
/>
|
|
31556
|
+
</div>
|
|
31557
|
+
|
|
31558
|
+
<div class="profile-content" [class.keyboard-offset]="keyboardOffset()">
|
|
31559
|
+
|
|
31560
|
+
<!-- Hero -->
|
|
31561
|
+
<div class="profile-hero">
|
|
31562
|
+
<button
|
|
31563
|
+
type="button"
|
|
31564
|
+
class="profile-hero-avatar"
|
|
31565
|
+
(click)="openPhotoActions()"
|
|
31566
|
+
aria-label="Edit profile photo"
|
|
31567
|
+
>
|
|
31568
|
+
<ds-avatar-with-badge
|
|
31569
|
+
[type]="userService.avatarType()"
|
|
31570
|
+
[initials]="userService.avatarInitials()"
|
|
31571
|
+
[src]="userService.avatarSrc()"
|
|
31572
|
+
size="xl"
|
|
31573
|
+
[showBadge]="false"
|
|
31574
|
+
/>
|
|
31575
|
+
<span class="profile-hero-avatar-edit" aria-hidden="true">
|
|
31576
|
+
<ds-icon name="remixEditLine" size="14px" />
|
|
31577
|
+
</span>
|
|
31578
|
+
</button>
|
|
31579
|
+
<div class="profile-hero-text">
|
|
31580
|
+
<h2 class="profile-hero-name">{{ userService.displayName() }}</h2>
|
|
31581
|
+
<p class="profile-hero-email">{{ userService.email() }}</p>
|
|
31582
|
+
</div>
|
|
31583
|
+
</div>
|
|
31584
|
+
|
|
31585
|
+
<!-- Fields -->
|
|
31586
|
+
<div class="field-group">
|
|
31587
|
+
|
|
31588
|
+
<!-- Full name -->
|
|
31589
|
+
<div class="field">
|
|
31590
|
+
<p class="field-label">Full name</p>
|
|
31591
|
+
<div class="field-pill" [class.editing]="editingName()" (click)="!editingName() && startEdit('name')">
|
|
31592
|
+
@if (!editingName()) {
|
|
31593
|
+
<p class="field-pill-value">{{ userService.displayName() }}</p>
|
|
31594
|
+
} @else {
|
|
31595
|
+
<input
|
|
31596
|
+
#nameInput
|
|
31597
|
+
type="text"
|
|
31598
|
+
class="field-pill-input"
|
|
31599
|
+
[value]="userService.displayName()"
|
|
31600
|
+
(blur)="saveName($event)"
|
|
31601
|
+
(keydown.enter)="nameInputRef?.nativeElement?.blur()"
|
|
31602
|
+
/>
|
|
31603
|
+
}
|
|
31604
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingName()" />
|
|
31605
|
+
</div>
|
|
31606
|
+
</div>
|
|
31607
|
+
|
|
31608
|
+
<!-- Email address -->
|
|
31609
|
+
<div class="field">
|
|
31610
|
+
<p class="field-label">Email address</p>
|
|
31611
|
+
<div class="field-pill" [class.editing]="editingEmail()" (click)="!editingEmail() && startEdit('email')">
|
|
31612
|
+
@if (!editingEmail()) {
|
|
31613
|
+
<p class="field-pill-value">{{ userService.email() }}</p>
|
|
31614
|
+
} @else {
|
|
31615
|
+
<input
|
|
31616
|
+
#emailInput
|
|
31617
|
+
type="email"
|
|
31618
|
+
class="field-pill-input"
|
|
31619
|
+
[value]="userService.email()"
|
|
31620
|
+
(blur)="saveEmail($event)"
|
|
31621
|
+
(keydown.enter)="emailInputRef?.nativeElement?.blur()"
|
|
31622
|
+
/>
|
|
31623
|
+
}
|
|
31624
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingEmail()" />
|
|
31625
|
+
</div>
|
|
31626
|
+
</div>
|
|
31627
|
+
|
|
31628
|
+
<!-- Phone -->
|
|
31629
|
+
<div class="field">
|
|
31630
|
+
<p class="field-label">Phone</p>
|
|
31631
|
+
<div class="field-pill" [class.editing]="editingPhone()" (click)="!editingPhone() && startEdit('phone')">
|
|
31632
|
+
@if (!editingPhone()) {
|
|
31633
|
+
<p class="field-pill-value">{{ userService.phone() }}</p>
|
|
31634
|
+
} @else {
|
|
31635
|
+
<input
|
|
31636
|
+
#phoneInput
|
|
31637
|
+
type="tel"
|
|
31638
|
+
class="field-pill-input"
|
|
31639
|
+
[value]="userService.phone()"
|
|
31640
|
+
(blur)="savePhone($event)"
|
|
31641
|
+
(keydown.enter)="phoneInputRef?.nativeElement?.blur()"
|
|
31642
|
+
/>
|
|
31643
|
+
}
|
|
31644
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingPhone()" />
|
|
31645
|
+
</div>
|
|
31646
|
+
</div>
|
|
31647
|
+
|
|
31648
|
+
<!-- Address (read-only) -->
|
|
31649
|
+
<div class="field">
|
|
31650
|
+
<p class="field-label">Adress</p>
|
|
31651
|
+
<div class="field-pill field-pill--readonly">
|
|
31652
|
+
<p class="field-pill-value">{{ userService.address() }}</p>
|
|
31653
|
+
</div>
|
|
31654
|
+
</div>
|
|
31655
|
+
|
|
31656
|
+
</div>
|
|
31657
|
+
</div>
|
|
31658
|
+
|
|
31659
|
+
<input
|
|
31660
|
+
#photoFileInput
|
|
31661
|
+
type="file"
|
|
31662
|
+
accept="image/*"
|
|
31663
|
+
class="visually-hidden"
|
|
31664
|
+
(change)="onPhotoSelected($event)"
|
|
31665
|
+
/>
|
|
31666
|
+
|
|
31667
|
+
</ds-mobile-modal-base>
|
|
31668
|
+
`, isInline: true, styles: [":host ::ng-deep .modal-header{border-bottom:none}:host ::ng-deep .header-main{text-align:center}.back-btn{flex-shrink:0;border-radius:50%}.back-btn::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.profile-content{padding:0 20px;padding-bottom:calc(24px + env(safe-area-inset-bottom,0px));transition:transform .3s ease}.profile-content.keyboard-offset{transform:translateY(-24px)}.profile-hero{display:flex;flex-direction:column;align-items:center;text-align:center;padding:16px 24px;gap:12px}.profile-hero-avatar{position:relative;display:inline-block;padding:0;border:none;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}.profile-hero-avatar-edit{position:absolute;bottom:-4px;right:-4px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--color-background-neutral-secondary, #f6f7f8);box-shadow:0 0 0 2px var(--color-background-primary, #ffffff);color:var(--color-text-secondary, #6C6F7A);pointer-events:none}.profile-hero-text{display:flex;flex-direction:column;align-items:center;gap:4px}.profile-hero-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 20px);font-weight:600;line-height:24px;letter-spacing:-.8px;color:var(--color-text-primary, #202227);margin:0;max-width:164px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-hero-email{font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:#737373;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field-group{display:flex;flex-direction:column;gap:16px;padding:16px 0}.field{display:flex;flex-direction:column;gap:4px}.field-label{font-family:Brockmann,sans-serif;font-size:14px;font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--base-600, #545b66);margin:0}.field-pill{display:flex;align-items:center;gap:4px;background:#f6f7f8;border-radius:100px;padding:16px;cursor:pointer;-webkit-tap-highlight-color:transparent}.field-pill--readonly{cursor:default}.field-pill-value{flex:1;min-width:0;font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:var(--color-text-primary, #202227);margin:0}.field-pill--readonly .field-pill-value{color:var(--content-default-disabled-grey, #7c8694)}.field-pill-chevron{flex-shrink:0;color:var(--color-text-secondary, #6C6F7A);transition:opacity .2s ease,transform .2s ease}.field-pill-chevron.hidden{opacity:0;transform:scale(.5);pointer-events:none}.field-pill-input{flex:1;min-width:0;background:none;border:none;font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:var(--color-text-primary, #202227);outline:none;padding:0;margin:0}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["headerTitleInteractive", "textLoading", "textErrorTitle", "showHeader"], outputs: ["titleClick"] }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { 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"] }] });
|
|
31669
|
+
}
|
|
31670
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: ProfileModalComponent, decorators: [{
|
|
31671
|
+
type: Component,
|
|
31672
|
+
args: [{ selector: 'app-profile-modal', standalone: true, imports: [
|
|
31673
|
+
DsMobileModalBaseComponent,
|
|
31674
|
+
DsAvatarWithBadgeComponent,
|
|
31675
|
+
DsIconComponent,
|
|
31676
|
+
DsIconButtonComponent,
|
|
31677
|
+
], template: `
|
|
31678
|
+
<ds-mobile-modal-base headerTitle="My profile" [showHeader]="true" [showHeaderBorder]="false" [enableKeyboardHandling]="true" [onCloseRequest]="closeInterceptor">
|
|
31679
|
+
<div header-leading>
|
|
31680
|
+
<ds-icon-button
|
|
31681
|
+
class="back-btn"
|
|
31682
|
+
icon="remixArrowLeftSLine"
|
|
31683
|
+
variant="secondary"
|
|
31684
|
+
size="lg"
|
|
31685
|
+
(clicked)="close()"
|
|
31686
|
+
aria-label="Tilbage"
|
|
31687
|
+
/>
|
|
31688
|
+
</div>
|
|
31689
|
+
|
|
31690
|
+
<div class="profile-content" [class.keyboard-offset]="keyboardOffset()">
|
|
31691
|
+
|
|
31692
|
+
<!-- Hero -->
|
|
31693
|
+
<div class="profile-hero">
|
|
31694
|
+
<button
|
|
31695
|
+
type="button"
|
|
31696
|
+
class="profile-hero-avatar"
|
|
31697
|
+
(click)="openPhotoActions()"
|
|
31698
|
+
aria-label="Edit profile photo"
|
|
31699
|
+
>
|
|
31700
|
+
<ds-avatar-with-badge
|
|
31701
|
+
[type]="userService.avatarType()"
|
|
31702
|
+
[initials]="userService.avatarInitials()"
|
|
31703
|
+
[src]="userService.avatarSrc()"
|
|
31704
|
+
size="xl"
|
|
31705
|
+
[showBadge]="false"
|
|
31706
|
+
/>
|
|
31707
|
+
<span class="profile-hero-avatar-edit" aria-hidden="true">
|
|
31708
|
+
<ds-icon name="remixEditLine" size="14px" />
|
|
31709
|
+
</span>
|
|
31710
|
+
</button>
|
|
31711
|
+
<div class="profile-hero-text">
|
|
31712
|
+
<h2 class="profile-hero-name">{{ userService.displayName() }}</h2>
|
|
31713
|
+
<p class="profile-hero-email">{{ userService.email() }}</p>
|
|
31714
|
+
</div>
|
|
31715
|
+
</div>
|
|
31716
|
+
|
|
31717
|
+
<!-- Fields -->
|
|
31718
|
+
<div class="field-group">
|
|
31719
|
+
|
|
31720
|
+
<!-- Full name -->
|
|
31721
|
+
<div class="field">
|
|
31722
|
+
<p class="field-label">Full name</p>
|
|
31723
|
+
<div class="field-pill" [class.editing]="editingName()" (click)="!editingName() && startEdit('name')">
|
|
31724
|
+
@if (!editingName()) {
|
|
31725
|
+
<p class="field-pill-value">{{ userService.displayName() }}</p>
|
|
31726
|
+
} @else {
|
|
31727
|
+
<input
|
|
31728
|
+
#nameInput
|
|
31729
|
+
type="text"
|
|
31730
|
+
class="field-pill-input"
|
|
31731
|
+
[value]="userService.displayName()"
|
|
31732
|
+
(blur)="saveName($event)"
|
|
31733
|
+
(keydown.enter)="nameInputRef?.nativeElement?.blur()"
|
|
31734
|
+
/>
|
|
31735
|
+
}
|
|
31736
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingName()" />
|
|
31737
|
+
</div>
|
|
31738
|
+
</div>
|
|
31739
|
+
|
|
31740
|
+
<!-- Email address -->
|
|
31741
|
+
<div class="field">
|
|
31742
|
+
<p class="field-label">Email address</p>
|
|
31743
|
+
<div class="field-pill" [class.editing]="editingEmail()" (click)="!editingEmail() && startEdit('email')">
|
|
31744
|
+
@if (!editingEmail()) {
|
|
31745
|
+
<p class="field-pill-value">{{ userService.email() }}</p>
|
|
31746
|
+
} @else {
|
|
31747
|
+
<input
|
|
31748
|
+
#emailInput
|
|
31749
|
+
type="email"
|
|
31750
|
+
class="field-pill-input"
|
|
31751
|
+
[value]="userService.email()"
|
|
31752
|
+
(blur)="saveEmail($event)"
|
|
31753
|
+
(keydown.enter)="emailInputRef?.nativeElement?.blur()"
|
|
31754
|
+
/>
|
|
31755
|
+
}
|
|
31756
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingEmail()" />
|
|
31757
|
+
</div>
|
|
31758
|
+
</div>
|
|
31759
|
+
|
|
31760
|
+
<!-- Phone -->
|
|
31761
|
+
<div class="field">
|
|
31762
|
+
<p class="field-label">Phone</p>
|
|
31763
|
+
<div class="field-pill" [class.editing]="editingPhone()" (click)="!editingPhone() && startEdit('phone')">
|
|
31764
|
+
@if (!editingPhone()) {
|
|
31765
|
+
<p class="field-pill-value">{{ userService.phone() }}</p>
|
|
31766
|
+
} @else {
|
|
31767
|
+
<input
|
|
31768
|
+
#phoneInput
|
|
31769
|
+
type="tel"
|
|
31770
|
+
class="field-pill-input"
|
|
31771
|
+
[value]="userService.phone()"
|
|
31772
|
+
(blur)="savePhone($event)"
|
|
31773
|
+
(keydown.enter)="phoneInputRef?.nativeElement?.blur()"
|
|
31774
|
+
/>
|
|
31775
|
+
}
|
|
31776
|
+
<ds-icon name="remixEditLine" size="16px" class="field-pill-chevron" [class.hidden]="editingPhone()" />
|
|
31777
|
+
</div>
|
|
31778
|
+
</div>
|
|
31779
|
+
|
|
31780
|
+
<!-- Address (read-only) -->
|
|
31781
|
+
<div class="field">
|
|
31782
|
+
<p class="field-label">Adress</p>
|
|
31783
|
+
<div class="field-pill field-pill--readonly">
|
|
31784
|
+
<p class="field-pill-value">{{ userService.address() }}</p>
|
|
31785
|
+
</div>
|
|
31786
|
+
</div>
|
|
31787
|
+
|
|
31788
|
+
</div>
|
|
31789
|
+
</div>
|
|
31790
|
+
|
|
31791
|
+
<input
|
|
31792
|
+
#photoFileInput
|
|
31793
|
+
type="file"
|
|
31794
|
+
accept="image/*"
|
|
31795
|
+
class="visually-hidden"
|
|
31796
|
+
(change)="onPhotoSelected($event)"
|
|
31797
|
+
/>
|
|
31798
|
+
|
|
31799
|
+
</ds-mobile-modal-base>
|
|
31800
|
+
`, styles: [":host ::ng-deep .modal-header{border-bottom:none}:host ::ng-deep .header-main{text-align:center}.back-btn{flex-shrink:0;border-radius:50%}.back-btn::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.profile-content{padding:0 20px;padding-bottom:calc(24px + env(safe-area-inset-bottom,0px));transition:transform .3s ease}.profile-content.keyboard-offset{transform:translateY(-24px)}.profile-hero{display:flex;flex-direction:column;align-items:center;text-align:center;padding:16px 24px;gap:12px}.profile-hero-avatar{position:relative;display:inline-block;padding:0;border:none;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}.profile-hero-avatar-edit{position:absolute;bottom:-4px;right:-4px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--color-background-neutral-secondary, #f6f7f8);box-shadow:0 0 0 2px var(--color-background-primary, #ffffff);color:var(--color-text-secondary, #6C6F7A);pointer-events:none}.profile-hero-text{display:flex;flex-direction:column;align-items:center;gap:4px}.profile-hero-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-lg, 20px);font-weight:600;line-height:24px;letter-spacing:-.8px;color:var(--color-text-primary, #202227);margin:0;max-width:164px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-hero-email{font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:#737373;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field-group{display:flex;flex-direction:column;gap:16px;padding:16px 0}.field{display:flex;flex-direction:column;gap:4px}.field-label{font-family:Brockmann,sans-serif;font-size:14px;font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--base-600, #545b66);margin:0}.field-pill{display:flex;align-items:center;gap:4px;background:#f6f7f8;border-radius:100px;padding:16px;cursor:pointer;-webkit-tap-highlight-color:transparent}.field-pill--readonly{cursor:default}.field-pill-value{flex:1;min-width:0;font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:var(--color-text-primary, #202227);margin:0}.field-pill--readonly .field-pill-value{color:var(--content-default-disabled-grey, #7c8694)}.field-pill-chevron{flex-shrink:0;color:var(--color-text-secondary, #6C6F7A);transition:opacity .2s ease,transform .2s ease}.field-pill-chevron.hidden{opacity:0;transform:scale(.5);pointer-events:none}.field-pill-input{flex:1;min-width:0;background:none;border:none;font-family:Brockmann,sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:-.56px;color:var(--color-text-primary, #202227);outline:none;padding:0;margin:0}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
|
|
31801
|
+
}], ctorParameters: () => [], propDecorators: { nameInputRef: [{
|
|
31802
|
+
type: ViewChild,
|
|
31803
|
+
args: ['nameInput']
|
|
31804
|
+
}], emailInputRef: [{
|
|
31805
|
+
type: ViewChild,
|
|
31806
|
+
args: ['emailInput']
|
|
31807
|
+
}], phoneInputRef: [{
|
|
31808
|
+
type: ViewChild,
|
|
31809
|
+
args: ['phoneInput']
|
|
31810
|
+
}], photoFileInputRef: [{
|
|
31811
|
+
type: ViewChild,
|
|
31812
|
+
args: ['photoFileInput']
|
|
31813
|
+
}] } });
|
|
31814
|
+
|
|
31332
31815
|
// Mobile Page Components
|
|
31333
31816
|
|
|
31334
31817
|
class MobileCommunityPageComponent {
|
|
@@ -31640,6 +32123,7 @@ class MobileCommunityPageComponent {
|
|
|
31640
32123
|
[notificationCount]="notificationService.unreadCount()"
|
|
31641
32124
|
[avatarInitials]="userService.avatarInitials()"
|
|
31642
32125
|
[avatarType]="userService.avatarType()"
|
|
32126
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
31643
32127
|
[contentLoading]="isLoading()"
|
|
31644
32128
|
[contentLoadingVariant]="'card'"
|
|
31645
32129
|
(notificationClick)="handleNotificationClick()"
|
|
@@ -31900,6 +32384,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
31900
32384
|
[notificationCount]="notificationService.unreadCount()"
|
|
31901
32385
|
[avatarInitials]="userService.avatarInitials()"
|
|
31902
32386
|
[avatarType]="userService.avatarType()"
|
|
32387
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
31903
32388
|
[contentLoading]="isLoading()"
|
|
31904
32389
|
[contentLoadingVariant]="'card'"
|
|
31905
32390
|
(notificationClick)="handleNotificationClick()"
|
|
@@ -32411,7 +32896,7 @@ class MobileHandbookPageComponent {
|
|
|
32411
32896
|
}
|
|
32412
32897
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: MobileHandbookPageComponent, deps: [{ token: UserService }], target: i0.ɵɵFactoryTarget.Component });
|
|
32413
32898
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.23", type: MobileHandbookPageComponent, isStandalone: true, selector: "app-mobile-handbook-page", viewQueries: [{ propertyName: "pageComponent", first: true, predicate: ["pageComponent"], descendants: true }], ngImport: i0, template: `
|
|
32414
|
-
<ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" [contentLoading]="isLoading()" [contentLoadingVariant]="'handbook'" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
|
|
32899
|
+
<ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" [avatarSrc]="userService.avatarSrc()" [contentLoading]="isLoading()" [contentLoadingVariant]="'handbook'" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
|
|
32415
32900
|
<!-- Offline indicator -->
|
|
32416
32901
|
@if (pageComponent.isOffline()) {
|
|
32417
32902
|
<ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
|
|
@@ -32437,7 +32922,7 @@ class MobileHandbookPageComponent {
|
|
|
32437
32922
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: MobileHandbookPageComponent, decorators: [{
|
|
32438
32923
|
type: Component,
|
|
32439
32924
|
args: [{ selector: 'app-mobile-handbook-page', standalone: true, imports: [DsMobilePageMainComponent, DsMobileSectionComponent, DsMobileHandbookFolderComponent, DsMobileOfflineBannerComponent], template: `
|
|
32440
|
-
<ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" [contentLoading]="isLoading()" [contentLoadingVariant]="'handbook'" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
|
|
32925
|
+
<ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" [avatarSrc]="userService.avatarSrc()" [contentLoading]="isLoading()" [contentLoadingVariant]="'handbook'" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
|
|
32441
32926
|
<!-- Offline indicator -->
|
|
32442
32927
|
@if (pageComponent.isOffline()) {
|
|
32443
32928
|
<ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
|
|
@@ -33239,6 +33724,7 @@ class MobileHomePageComponent {
|
|
|
33239
33724
|
[notificationCount]="notificationService.unreadCount()"
|
|
33240
33725
|
[avatarInitials]="userService.avatarInitials()"
|
|
33241
33726
|
[avatarType]="userService.avatarType()"
|
|
33727
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
33242
33728
|
(notificationClick)="handleNotificationClick()"
|
|
33243
33729
|
(refresh)="handleRefresh($event)"
|
|
33244
33730
|
>
|
|
@@ -33451,6 +33937,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
33451
33937
|
[notificationCount]="notificationService.unreadCount()"
|
|
33452
33938
|
[avatarInitials]="userService.avatarInitials()"
|
|
33453
33939
|
[avatarType]="userService.avatarType()"
|
|
33940
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
33454
33941
|
(notificationClick)="handleNotificationClick()"
|
|
33455
33942
|
(refresh)="handleRefresh($event)"
|
|
33456
33943
|
>
|
|
@@ -33726,6 +34213,7 @@ class MobileInquiriesPageComponent {
|
|
|
33726
34213
|
[notificationCount]="notificationService.unreadCount()"
|
|
33727
34214
|
[avatarInitials]="userService.avatarInitials()"
|
|
33728
34215
|
[avatarType]="userService.avatarType()"
|
|
34216
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
33729
34217
|
[contentLoading]="isLoading()"
|
|
33730
34218
|
[contentLoadingVariant]="'list'"
|
|
33731
34219
|
(notificationClick)="handleNotificationClick()"
|
|
@@ -33801,6 +34289,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
33801
34289
|
[notificationCount]="notificationService.unreadCount()"
|
|
33802
34290
|
[avatarInitials]="userService.avatarInitials()"
|
|
33803
34291
|
[avatarType]="userService.avatarType()"
|
|
34292
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
33804
34293
|
[contentLoading]="isLoading()"
|
|
33805
34294
|
[contentLoadingVariant]="'list'"
|
|
33806
34295
|
(notificationClick)="handleNotificationClick()"
|
|
@@ -36112,33 +36601,10 @@ class MobileTabsExampleComponent {
|
|
|
36112
36601
|
* NOTE: Desktop only - called directly from tab bar.
|
|
36113
36602
|
* Mobile actions are handled globally in AppComponent via UserService.
|
|
36114
36603
|
*/
|
|
36115
|
-
handleProfileAction(
|
|
36116
|
-
|
|
36117
|
-
|
|
36118
|
-
|
|
36119
|
-
animation: customPageTransition
|
|
36120
|
-
});
|
|
36121
|
-
}
|
|
36122
|
-
if (result.action === 'manage-admins') {
|
|
36123
|
-
this.navCtrl.navigateForward(['/community-admins'], {
|
|
36124
|
-
animation: customPageTransition
|
|
36125
|
-
});
|
|
36126
|
-
}
|
|
36127
|
-
// Handle appearance action here (opens modal)
|
|
36128
|
-
if (result.action === 'appearance') {
|
|
36129
|
-
console.log('Opening whitelabel demo...');
|
|
36130
|
-
// Small delay to ensure bottom sheet is fully dismissed
|
|
36131
|
-
setTimeout(async () => {
|
|
36132
|
-
try {
|
|
36133
|
-
await this.whitelabelDemoModal.open();
|
|
36134
|
-
}
|
|
36135
|
-
catch (error) {
|
|
36136
|
-
console.error('Failed to open whitelabel demo modal:', error);
|
|
36137
|
-
}
|
|
36138
|
-
}, 100);
|
|
36139
|
-
}
|
|
36140
|
-
// Notify globally so AppComponent can handle navigation
|
|
36141
|
-
this.userService.notifyProfileAction(result);
|
|
36604
|
+
handleProfileAction(_result) {
|
|
36605
|
+
// All profile actions are handled globally in AppComponent via UserService.
|
|
36606
|
+
// ds-mobile-page-main already calls notifyProfileAction() internally,
|
|
36607
|
+
// so no forwarding is needed here.
|
|
36142
36608
|
}
|
|
36143
36609
|
handleMoreMenuAction(item) {
|
|
36144
36610
|
if (item.route) {
|
|
@@ -36208,6 +36674,7 @@ class MobileTabsExampleComponent {
|
|
|
36208
36674
|
[notificationCount]="notificationService.unreadCount()"
|
|
36209
36675
|
[avatarInitials]="userService.avatarInitials()"
|
|
36210
36676
|
[avatarType]="userService.avatarType()"
|
|
36677
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
36211
36678
|
[profileMenuItems]="profileMenuItems"
|
|
36212
36679
|
(notificationClick)="handleNotificationClick()"
|
|
36213
36680
|
(profileActionSelected)="handleProfileAction($event)"
|
|
@@ -36252,6 +36719,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
36252
36719
|
[notificationCount]="notificationService.unreadCount()"
|
|
36253
36720
|
[avatarInitials]="userService.avatarInitials()"
|
|
36254
36721
|
[avatarType]="userService.avatarType()"
|
|
36722
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
36255
36723
|
[profileMenuItems]="profileMenuItems"
|
|
36256
36724
|
(notificationClick)="handleNotificationClick()"
|
|
36257
36725
|
(profileActionSelected)="handleProfileAction($event)"
|
|
@@ -36799,6 +37267,7 @@ class MobileBookingPageComponent {
|
|
|
36799
37267
|
[notificationCount]="notificationService.unreadCount()"
|
|
36800
37268
|
[avatarInitials]="userService.avatarInitials()"
|
|
36801
37269
|
[avatarType]="userService.avatarType()"
|
|
37270
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
36802
37271
|
(notificationClick)="handleNotificationClick()"
|
|
36803
37272
|
(refresh)="handleRefresh($event)">
|
|
36804
37273
|
|
|
@@ -36924,6 +37393,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
36924
37393
|
[notificationCount]="notificationService.unreadCount()"
|
|
36925
37394
|
[avatarInitials]="userService.avatarInitials()"
|
|
36926
37395
|
[avatarType]="userService.avatarType()"
|
|
37396
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
36927
37397
|
(notificationClick)="handleNotificationClick()"
|
|
36928
37398
|
(refresh)="handleRefresh($event)">
|
|
36929
37399
|
|
|
@@ -37947,6 +38417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
37947
38417
|
|
|
37948
38418
|
class DsMobileInviteMemberSheetComponent {
|
|
37949
38419
|
modalController;
|
|
38420
|
+
elementRef = inject(ElementRef);
|
|
37950
38421
|
nameInput;
|
|
37951
38422
|
viewContainer;
|
|
37952
38423
|
sheetWrapper;
|
|
@@ -37966,6 +38437,10 @@ class DsMobileInviteMemberSheetComponent {
|
|
|
37966
38437
|
this.modalController = modalController;
|
|
37967
38438
|
}
|
|
37968
38439
|
ngAfterViewInit() {
|
|
38440
|
+
const ionModal = this.elementRef.nativeElement.closest('ion-modal');
|
|
38441
|
+
if (ionModal) {
|
|
38442
|
+
ionModal.canDismiss = (_data, role) => this.handleCanDismiss(role);
|
|
38443
|
+
}
|
|
37969
38444
|
if (this.nameInput) {
|
|
37970
38445
|
this.isReadonly = false;
|
|
37971
38446
|
setTimeout(() => {
|
|
@@ -38072,6 +38547,43 @@ class DsMobileInviteMemberSheetComponent {
|
|
|
38072
38547
|
delay(ms) {
|
|
38073
38548
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
38074
38549
|
}
|
|
38550
|
+
async handleCanDismiss(role) {
|
|
38551
|
+
if (role === 'success' || role === 'cancel') {
|
|
38552
|
+
return true;
|
|
38553
|
+
}
|
|
38554
|
+
if (this.currentView() === 'step2') {
|
|
38555
|
+
const action = await this.showDiscardConfirmationSheet();
|
|
38556
|
+
if (action !== 'discard')
|
|
38557
|
+
return false;
|
|
38558
|
+
}
|
|
38559
|
+
return true;
|
|
38560
|
+
}
|
|
38561
|
+
async showDiscardConfirmationSheet() {
|
|
38562
|
+
const { DsMobileConfirmationSheetComponent } = await Promise.resolve().then(function () { return dsMobileConfirmationSheet; });
|
|
38563
|
+
const sheet = await this.modalController.create({
|
|
38564
|
+
component: DsMobileConfirmationSheetComponent,
|
|
38565
|
+
componentProps: {
|
|
38566
|
+
title: 'Du har ændringer der ikke er gemt',
|
|
38567
|
+
message: 'Er du sikker på, at du vil kassere invitationen?',
|
|
38568
|
+
buttonText: 'Kassér invitation',
|
|
38569
|
+
showIllustration: false,
|
|
38570
|
+
secondaryButtonText: 'Bliv og rediger',
|
|
38571
|
+
secondaryButtonVariant: 'secondary',
|
|
38572
|
+
},
|
|
38573
|
+
breakpoints: [0, 1],
|
|
38574
|
+
initialBreakpoint: 1,
|
|
38575
|
+
handle: true,
|
|
38576
|
+
cssClass: ['ds-bottom-sheet', 'auto-height'],
|
|
38577
|
+
backdropDismiss: false,
|
|
38578
|
+
showBackdrop: true,
|
|
38579
|
+
});
|
|
38580
|
+
await sheet.present();
|
|
38581
|
+
disableModalShadowPointerEvents(sheet);
|
|
38582
|
+
const result = await sheet.onDidDismiss();
|
|
38583
|
+
if (result.role === 'confirm')
|
|
38584
|
+
return 'discard';
|
|
38585
|
+
return null;
|
|
38586
|
+
}
|
|
38075
38587
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileInviteMemberSheetComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
|
|
38076
38588
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.23", type: DsMobileInviteMemberSheetComponent, isStandalone: true, selector: "ds-mobile-invite-member-sheet", viewQueries: [{ propertyName: "nameInput", first: true, predicate: ["nameInput"], descendants: true }, { propertyName: "viewContainer", first: true, predicate: ["viewContainer"], descendants: true, read: ElementRef }, { propertyName: "sheetWrapper", first: true, predicate: ["sheetWrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
38077
38589
|
<div class="sheet-content" #sheetWrapper>
|
|
@@ -38853,6 +39365,7 @@ class TenantChatPageComponent {
|
|
|
38853
39365
|
[notificationCount]="notificationService.unreadCount()"
|
|
38854
39366
|
[avatarInitials]="userService.avatarInitials()"
|
|
38855
39367
|
[avatarType]="userService.avatarType()"
|
|
39368
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
38856
39369
|
(notificationClick)="handleNotificationClick()"
|
|
38857
39370
|
(refresh)="handleRefresh($event)">
|
|
38858
39371
|
|
|
@@ -38929,6 +39442,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
38929
39442
|
[notificationCount]="notificationService.unreadCount()"
|
|
38930
39443
|
[avatarInitials]="userService.avatarInitials()"
|
|
38931
39444
|
[avatarType]="userService.avatarType()"
|
|
39445
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
38932
39446
|
(notificationClick)="handleNotificationClick()"
|
|
38933
39447
|
(refresh)="handleRefresh($event)">
|
|
38934
39448
|
|
|
@@ -39137,6 +39651,7 @@ class ServicesPageComponent {
|
|
|
39137
39651
|
[notificationCount]="notificationService.unreadCount()"
|
|
39138
39652
|
[avatarInitials]="userService.avatarInitials()"
|
|
39139
39653
|
[avatarType]="userService.avatarType()"
|
|
39654
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
39140
39655
|
(notificationClick)="handleNotificationClick()"
|
|
39141
39656
|
(refresh)="handleRefresh($event)"
|
|
39142
39657
|
>
|
|
@@ -39186,6 +39701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
39186
39701
|
[notificationCount]="notificationService.unreadCount()"
|
|
39187
39702
|
[avatarInitials]="userService.avatarInitials()"
|
|
39188
39703
|
[avatarType]="userService.avatarType()"
|
|
39704
|
+
[avatarSrc]="userService.avatarSrc()"
|
|
39189
39705
|
(notificationClick)="handleNotificationClick()"
|
|
39190
39706
|
(refresh)="handleRefresh($event)"
|
|
39191
39707
|
>
|
|
@@ -39260,6 +39776,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
39260
39776
|
}]
|
|
39261
39777
|
}], ctorParameters: () => [{ type: i1.ModalController }] });
|
|
39262
39778
|
|
|
39779
|
+
class ProfileModalService {
|
|
39780
|
+
modalController;
|
|
39781
|
+
constructor(modalController) {
|
|
39782
|
+
this.modalController = modalController;
|
|
39783
|
+
}
|
|
39784
|
+
async open() {
|
|
39785
|
+
const modal = await this.modalController.create({
|
|
39786
|
+
component: ProfileModalComponent,
|
|
39787
|
+
cssClass: 'ds-modal-base',
|
|
39788
|
+
mode: 'ios',
|
|
39789
|
+
presentingElement: document.querySelector('ion-router-outlet') || undefined,
|
|
39790
|
+
backdropDismiss: true,
|
|
39791
|
+
showBackdrop: true,
|
|
39792
|
+
animated: true,
|
|
39793
|
+
});
|
|
39794
|
+
await modal.present();
|
|
39795
|
+
}
|
|
39796
|
+
async close(data) {
|
|
39797
|
+
return this.modalController.dismiss(data);
|
|
39798
|
+
}
|
|
39799
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: ProfileModalService, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39800
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: ProfileModalService, providedIn: 'root' });
|
|
39801
|
+
}
|
|
39802
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: ProfileModalService, decorators: [{
|
|
39803
|
+
type: Injectable,
|
|
39804
|
+
args: [{
|
|
39805
|
+
providedIn: 'root',
|
|
39806
|
+
}]
|
|
39807
|
+
}], ctorParameters: () => [{ type: i1.ModalController }] });
|
|
39808
|
+
|
|
39263
39809
|
/**
|
|
39264
39810
|
* Services Barrel File
|
|
39265
39811
|
*
|
|
@@ -39283,5 +39829,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
|
|
|
39283
39829
|
* Generated bundle index. Do not edit.
|
|
39284
39830
|
*/
|
|
39285
39831
|
|
|
39286
|
-
export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_NOTIFICATION_PREFS, 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, PUSH_BACKEND_ADAPTER, PageLoadingService, PeerChatLauncherService, PeerMessagingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, PushNotificationService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket, extractPushPayload, isPeerDirectConversation, isPeerGroupConversation, notificationItemFromPush, peerTenantToParticipant, pushPayloadToNotificationItem };
|
|
39832
|
+
export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_NOTIFICATION_PREFS, 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, PUSH_BACKEND_ADAPTER, PageLoadingService, PeerChatLauncherService, PeerMessagingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, ProfileModalComponent, ProfileModalService, PushNotificationService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket, extractPushPayload, isPeerDirectConversation, isPeerGroupConversation, notificationItemFromPush, peerTenantToParticipant, pushPayloadToNotificationItem };
|
|
39287
39833
|
//# sourceMappingURL=propbinder-mobile-design.mjs.map
|