@propbinder/mobile-design 0.3.41 → 0.3.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.
@@ -686,11 +686,21 @@ class DsMobileSkeletonLoaderComponent {
686
686
  * @default 'list'
687
687
  */
688
688
  variant = input('list', ...(ngDevMode ? [{ debugName: "variant" }] : []));
689
+ /**
690
+ * Optional max width (e.g. '640px') to constrain the skeleton loader on desktop
691
+ */
692
+ maxWidth = input(undefined, ...(ngDevMode ? [{ debugName: "maxWidth" }] : []));
693
+ /**
694
+ * If true, centers the skeleton loader horizontally (useful with maxWidth)
695
+ */
696
+ centered = input(false, ...(ngDevMode ? [{ debugName: "centered" }] : []));
689
697
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileSkeletonLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
690
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileSkeletonLoaderComponent, isStandalone: true, selector: "ds-mobile-skeleton-loader", inputs: { borderRadius: { classPropertyName: "borderRadius", publicName: "borderRadius", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
698
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileSkeletonLoaderComponent, isStandalone: true, selector: "ds-mobile-skeleton-loader", inputs: { borderRadius: { classPropertyName: "borderRadius", publicName: "borderRadius", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, centered: { classPropertyName: "centered", publicName: "centered", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
691
699
  <div
692
700
  class="skeleton-loader-overlay"
693
701
  [style.border-radius.px]="borderRadius()"
702
+ [style.max-width]="maxWidth()"
703
+ [style.margin]="centered() ? '0 auto' : undefined"
694
704
  role="status"
695
705
  aria-live="polite"
696
706
  aria-label="Loading">
@@ -743,7 +753,7 @@ class DsMobileSkeletonLoaderComponent {
743
753
  </div>
744
754
  }
745
755
  </div>
746
- `, isInline: true, styles: [":host{display:contents}.skeleton-loader-overlay{position:absolute;inset:0;display:flex;flex-direction:column;z-index:9999;border-radius:inherit;padding:16px;overflow:hidden;pointer-events:none}.skeleton-list{display:flex;flex-direction:column;gap:24px;width:100%}.skeleton-item{display:flex;flex-direction:row;align-items:center;gap:16px;width:100%}.skeleton-avatar{width:48px;height:48px;border-radius:50%;flex-shrink:0}.skeleton-text-container{display:flex;flex-direction:column;gap:10px;flex-grow:1}.skeleton-text-line{height:12px;border-radius:6px;width:100%}.skeleton-text-line.short{width:60%}.skeleton-text-line.full{width:100%}.skeleton-card-list{display:flex;flex-direction:column;gap:16px;width:100%}.skeleton-card{width:100%;height:120px;border-radius:12px}.skeleton-details{display:flex;flex-direction:column;gap:12px;width:100%}.skeleton-title{width:70%;height:24px;border-radius:8px;margin-bottom:16px}.skeleton-box{width:100%;height:200px;border-radius:12px;margin-top:16px}.skeleton-handbook-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.skeleton-folder-card{display:flex;flex-direction:column;align-items:center;gap:10px}.skeleton-folder-icon{width:100%;aspect-ratio:1;border-radius:16px}.shimmer{background:#f2f4f5;background-image:linear-gradient(90deg,#fff0 0,#fff9 40px,#fff0 80px);background-size:600px 100%;animation:shimmer 1.5s infinite linear}@keyframes shimmer{0%{background-position:-300px 0}to{background-position:300px 0}}body.dark .shimmer,.dark-theme .shimmer{background:#2a2a2a;background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 40px,#fff0 80px)}.pulse{background:#f2f4f5;animation:pulse 2s infinite ease-in-out}@keyframes pulse{0%{background-color:#f2f4f5}50%{background-color:#e6e8ec}to{background-color:#f2f4f5}}body.dark .pulse,.dark-theme .pulse{background:#2a2a2a;animation:pulse-dark 2s infinite ease-in-out}@keyframes pulse-dark{0%{background-color:#2a2a2a}50%{background-color:#383838}to{background-color:#2a2a2a}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
756
+ `, isInline: true, styles: [":host{display:contents}.skeleton-loader-overlay{position:absolute;inset:0;display:flex;flex-direction:column;z-index:9999;border-radius:inherit;padding:20px;overflow:hidden;pointer-events:none;background-color:var(--color-background-neutral-primary)}.skeleton-list{display:flex;flex-direction:column;gap:24px;width:100%}.skeleton-item{display:flex;flex-direction:row;align-items:center;gap:16px;width:100%}.skeleton-avatar{width:48px;height:48px;border-radius:50%;flex-shrink:0}.skeleton-text-container{display:flex;flex-direction:column;gap:10px;flex-grow:1}.skeleton-text-line{height:12px;border-radius:6px;width:100%}.skeleton-text-line.short{width:60%}.skeleton-text-line.full{width:100%}.skeleton-card-list{display:flex;flex-direction:column;gap:16px;width:100%}.skeleton-card{width:100%;height:120px;border-radius:12px}.skeleton-details{display:flex;flex-direction:column;gap:12px;width:100%}.skeleton-title{width:70%;height:24px;border-radius:8px;margin-bottom:16px}.skeleton-box{width:100%;height:200px;border-radius:12px;margin-top:16px}.skeleton-handbook-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.skeleton-folder-card{display:flex;flex-direction:column;align-items:center;gap:10px}.skeleton-folder-icon{width:100%;aspect-ratio:1;border-radius:16px}.shimmer{background:#f2f4f5;background-image:linear-gradient(90deg,#fff0 0,#fff9 40px,#fff0 80px);background-size:600px 100%;animation:shimmer 1.5s infinite linear}@keyframes shimmer{0%{background-position:-300px 0}to{background-position:300px 0}}body.dark .shimmer,.dark-theme .shimmer{background:#2a2a2a;background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 40px,#fff0 80px)}.pulse{background:#f2f4f5;animation:pulse 2s infinite ease-in-out}@keyframes pulse{0%{background-color:#f2f4f5}50%{background-color:#e6e8ec}to{background-color:#f2f4f5}}body.dark .pulse,.dark-theme .pulse{background:#2a2a2a;animation:pulse-dark 2s infinite ease-in-out}@keyframes pulse-dark{0%{background-color:#2a2a2a}50%{background-color:#383838}to{background-color:#2a2a2a}}@media (min-width: 768px){.skeleton-loader-overlay{padding:32px 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
747
757
  }
748
758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileSkeletonLoaderComponent, decorators: [{
749
759
  type: Component,
@@ -751,6 +761,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
751
761
  <div
752
762
  class="skeleton-loader-overlay"
753
763
  [style.border-radius.px]="borderRadius()"
764
+ [style.max-width]="maxWidth()"
765
+ [style.margin]="centered() ? '0 auto' : undefined"
754
766
  role="status"
755
767
  aria-live="polite"
756
768
  aria-label="Loading">
@@ -803,8 +815,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
803
815
  </div>
804
816
  }
805
817
  </div>
806
- `, styles: [":host{display:contents}.skeleton-loader-overlay{position:absolute;inset:0;display:flex;flex-direction:column;z-index:9999;border-radius:inherit;padding:16px;overflow:hidden;pointer-events:none}.skeleton-list{display:flex;flex-direction:column;gap:24px;width:100%}.skeleton-item{display:flex;flex-direction:row;align-items:center;gap:16px;width:100%}.skeleton-avatar{width:48px;height:48px;border-radius:50%;flex-shrink:0}.skeleton-text-container{display:flex;flex-direction:column;gap:10px;flex-grow:1}.skeleton-text-line{height:12px;border-radius:6px;width:100%}.skeleton-text-line.short{width:60%}.skeleton-text-line.full{width:100%}.skeleton-card-list{display:flex;flex-direction:column;gap:16px;width:100%}.skeleton-card{width:100%;height:120px;border-radius:12px}.skeleton-details{display:flex;flex-direction:column;gap:12px;width:100%}.skeleton-title{width:70%;height:24px;border-radius:8px;margin-bottom:16px}.skeleton-box{width:100%;height:200px;border-radius:12px;margin-top:16px}.skeleton-handbook-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.skeleton-folder-card{display:flex;flex-direction:column;align-items:center;gap:10px}.skeleton-folder-icon{width:100%;aspect-ratio:1;border-radius:16px}.shimmer{background:#f2f4f5;background-image:linear-gradient(90deg,#fff0 0,#fff9 40px,#fff0 80px);background-size:600px 100%;animation:shimmer 1.5s infinite linear}@keyframes shimmer{0%{background-position:-300px 0}to{background-position:300px 0}}body.dark .shimmer,.dark-theme .shimmer{background:#2a2a2a;background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 40px,#fff0 80px)}.pulse{background:#f2f4f5;animation:pulse 2s infinite ease-in-out}@keyframes pulse{0%{background-color:#f2f4f5}50%{background-color:#e6e8ec}to{background-color:#f2f4f5}}body.dark .pulse,.dark-theme .pulse{background:#2a2a2a;animation:pulse-dark 2s infinite ease-in-out}@keyframes pulse-dark{0%{background-color:#2a2a2a}50%{background-color:#383838}to{background-color:#2a2a2a}}\n"] }]
807
- }], propDecorators: { borderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderRadius", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
818
+ `, styles: [":host{display:contents}.skeleton-loader-overlay{position:absolute;inset:0;display:flex;flex-direction:column;z-index:9999;border-radius:inherit;padding:20px;overflow:hidden;pointer-events:none;background-color:var(--color-background-neutral-primary)}.skeleton-list{display:flex;flex-direction:column;gap:24px;width:100%}.skeleton-item{display:flex;flex-direction:row;align-items:center;gap:16px;width:100%}.skeleton-avatar{width:48px;height:48px;border-radius:50%;flex-shrink:0}.skeleton-text-container{display:flex;flex-direction:column;gap:10px;flex-grow:1}.skeleton-text-line{height:12px;border-radius:6px;width:100%}.skeleton-text-line.short{width:60%}.skeleton-text-line.full{width:100%}.skeleton-card-list{display:flex;flex-direction:column;gap:16px;width:100%}.skeleton-card{width:100%;height:120px;border-radius:12px}.skeleton-details{display:flex;flex-direction:column;gap:12px;width:100%}.skeleton-title{width:70%;height:24px;border-radius:8px;margin-bottom:16px}.skeleton-box{width:100%;height:200px;border-radius:12px;margin-top:16px}.skeleton-handbook-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.skeleton-folder-card{display:flex;flex-direction:column;align-items:center;gap:10px}.skeleton-folder-icon{width:100%;aspect-ratio:1;border-radius:16px}.shimmer{background:#f2f4f5;background-image:linear-gradient(90deg,#fff0 0,#fff9 40px,#fff0 80px);background-size:600px 100%;animation:shimmer 1.5s infinite linear}@keyframes shimmer{0%{background-position:-300px 0}to{background-position:300px 0}}body.dark .shimmer,.dark-theme .shimmer{background:#2a2a2a;background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 40px,#fff0 80px)}.pulse{background:#f2f4f5;animation:pulse 2s infinite ease-in-out}@keyframes pulse{0%{background-color:#f2f4f5}50%{background-color:#e6e8ec}to{background-color:#f2f4f5}}body.dark .pulse,.dark-theme .pulse{background:#2a2a2a;animation:pulse-dark 2s infinite ease-in-out}@keyframes pulse-dark{0%{background-color:#2a2a2a}50%{background-color:#383838}to{background-color:#2a2a2a}}@media (min-width: 768px){.skeleton-loader-overlay{padding:32px 0}}\n"] }]
819
+ }], propDecorators: { borderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderRadius", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], centered: [{ type: i0.Input, args: [{ isSignal: true, alias: "centered", required: false }] }] } });
808
820
 
809
821
  class DsMobileCountBadgeComponent {
810
822
  count = input.required(...(ngDevMode ? [{ debugName: "count" }] : []));
@@ -6305,7 +6317,7 @@ class DsMobilePageMainComponent extends MobilePageBase {
6305
6317
  <!-- Content wrapper -->
6306
6318
  <div class="content-wrapper">
6307
6319
  @if (contentLoading()) {
6308
- <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" />
6320
+ <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" maxWidth="640px" [centered]="true" />
6309
6321
  }
6310
6322
 
6311
6323
  <!-- Offline indicator slot (appears at top of content) -->
@@ -6317,7 +6329,7 @@ class DsMobilePageMainComponent extends MobilePageBase {
6317
6329
  </div>
6318
6330
  </div>
6319
6331
  </ion-content>
6320
- `, isInline: true, styles: [":host{display:flex;flex-direction:column;align-items:center;height:100%;background:var(--color-header-surface);width:100%}:host ion-header{background:var(--color-header-surface);box-shadow:none;height:72px;min-height:72px;margin-top:var(--app-header-top-offset)}:host ion-header ion-toolbar{--background: var(--color-header-surface);--border-width: 0;--box-shadow: none;--padding-top: 0;--padding-bottom: 0;--padding-start: 0;--padding-end: 0;--min-height: 72px;height:72px;min-height:72px;padding:0}@media (min-width: 768px){:host ion-header{height:88px;min-height:88px}:host ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}}@media (min-width: 768px){:host ion-header{display:none;height:auto}}:host .header-main,:host .header-details,.header-details{display:flex;align-items:center;justify-content:space-between;background:var(--color-header-surface);position:relative}:host .header-main__title,:host .header-details .header-title,.header-details .header-title{position:absolute;left:50%;transform:translate(-50%);font-size:var(--font-size-base);font-weight:600;color:var(--color-header-content);margin:0;padding:0;--color: var(--color-header-content)}.header-details .header-title{transform:translate(-50%) translateY(-100%);opacity:0!important;pointer-events:none;transition:transform .2s ease,opacity .2s ease!important}.header-scrolled .header-details .header-title{opacity:1!important;pointer-events:auto;transform:translate(-50%) translateY(0)}:host .header-details .back-button,.header-details .back-button{background:none;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:opacity var(--transition-duration-fast, .2s) var(--ease-smooth, ease);z-index:10;position:relative}:host .header-details .back-button:hover,.header-details .back-button:hover{opacity:.8}:host .header-details .back-button:active,.header-details .back-button:active{opacity:.6}:host ion-content{--background: var(--color-header-surface);--padding-top: 0;--padding-start: 0;--padding-end: 0;--padding-bottom: 0;border-radius:24px 24px 0 0;overflow:hidden}:host ion-content::part(scroll){display:flex;flex-direction:column;min-height:100%;-webkit-overflow-scrolling:touch}.plt-ios :host ion-content{--background: var(--color-background-neutral-primary)}@media (min-width: 768px){:host ion-content{border-radius:24px 24px 0 0}}:host ion-header[collapse=condense]{display:none}@media (min-width: 768px){:host ion-header[collapse=condense]{display:none}}:host ion-refresher{z-index:0}:host ion-refresher-content{--color: var(--color-header-content)}:host .content-wrapper{width:100%;position:relative;z-index:20;flex:1;display:flex;flex-direction:column;background:var(--color-background-neutral-primary);border-radius:24px 24px 0 0;overflow:visible;transform:translateZ(0);will-change:transform;isolation:isolate;box-shadow:0 300px 0 0 var(--color-background-neutral-primary);padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px);padding-bottom:calc(var(--mobile-content-spacing) + var(--mobile-tab-bar-height) + var(--app-safe-bottom, 0px))}:host .content-inner{max-width:640px;margin:0 auto;width:100%}@media (min-width: 768px){:host .content-wrapper{padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px)}}:host .header-expandable{background:var(--color-header-surface);padding:32px 20px 24px;color:var(--header-content-color, white);position:sticky;top:0;z-index:5;transition:opacity .1s ease-out,transform .1s ease-out;flex:0 0 auto;min-height:-moz-min-content;min-height:min-content}:host .header-expandable-inner{display:flex;flex-direction:column;gap:20px;max-width:640px;margin:0 auto}:host .header-expandable__text{margin-bottom:0;gap:4px;display:flex;flex-direction:column}:host .header-expandable__title{font-size:var(--font-size-2xl);font-weight:600;color:var(--header-content-color, white);margin:0}:host .header-expandable__subtitle{font-size:var(--font-size-sm);font-weight:400;color:var(--header-content-color, white);opacity:.85;margin:0}@media (min-width: 768px){:host .header-expandable{padding:48px 20px 32px}:host .header-expandable__title{font-size:var(--font-size-3xl)}:host .header-expandable__subtitle{font-size:var(--font-size-base)}}@media (min-width: 992px){:host .header-expandable{padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg)}}@media (min-width: 1440px){:host .header-expandable{padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){:host .header-expandable{padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){:host .header-expandable{padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}\n", ".header-main{padding:0 20px;height:72px}.header-main__title{transform:translate(-50%) translateY(-100%);opacity:0;transition:transform .6s ease,opacity .6s ease;padding:0;--color: var(--color-header-content)}.header-scrolled .header-main__title{opacity:1;transform:translate(-50%) translateY(0)}.header-main__actions{display:flex;align-items:center;gap:8px}.header-main__actions ds-avatar{cursor:pointer;-webkit-tap-highlight-color:transparent}@keyframes logoSlideIn{0%{transform:translateY(-200%);scale:.75;opacity:0}to{transform:translateY(0);scale:1;opacity:1}}.logo--first-entry{animation:logoSlideIn .75s var(--spring-curve-bouncy) .7s both}@media (min-width: 768px){.header-main{padding:16px 24px;height:88px}.header-main__title{display:none}}ion-refresher{--color: var(--color-header-content)}ion-refresher-content{--color: var(--color-header-content)}ion-refresher-content::part(spinner){color:var(--color-header-content)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: DsLogoComponent, selector: "ds-logo", inputs: ["variant", "size", "customHeight", "customWidth"] }, { kind: "component", type: DsMobileSkeletonLoaderComponent, selector: "ds-mobile-skeleton-loader", inputs: ["borderRadius", "variant"] }, { kind: "component", type: DsMobileNotificationButtonComponent, selector: "ds-mobile-notification-button", inputs: ["count"], outputs: ["clicked"] }] });
6332
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;align-items:center;height:100%;background:var(--color-header-surface);width:100%}:host ion-header{background:var(--color-header-surface);box-shadow:none;height:72px;min-height:72px;margin-top:var(--app-header-top-offset)}:host ion-header ion-toolbar{--background: var(--color-header-surface);--border-width: 0;--box-shadow: none;--padding-top: 0;--padding-bottom: 0;--padding-start: 0;--padding-end: 0;--min-height: 72px;height:72px;min-height:72px;padding:0}@media (min-width: 768px){:host ion-header{height:88px;min-height:88px}:host ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}}@media (min-width: 768px){:host ion-header{display:none;height:auto}}:host .header-main,:host .header-details,.header-details{display:flex;align-items:center;justify-content:space-between;background:var(--color-header-surface);position:relative}:host .header-main__title,:host .header-details .header-title,.header-details .header-title{position:absolute;left:50%;transform:translate(-50%);font-size:var(--font-size-base);font-weight:600;color:var(--color-header-content);margin:0;padding:0;--color: var(--color-header-content)}.header-details .header-title{transform:translate(-50%) translateY(-100%);opacity:0!important;pointer-events:none;transition:transform .2s ease,opacity .2s ease!important}.header-scrolled .header-details .header-title{opacity:1!important;pointer-events:auto;transform:translate(-50%) translateY(0)}:host .header-details .back-button,.header-details .back-button{background:none;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:opacity var(--transition-duration-fast, .2s) var(--ease-smooth, ease);z-index:10;position:relative}:host .header-details .back-button:hover,.header-details .back-button:hover{opacity:.8}:host .header-details .back-button:active,.header-details .back-button:active{opacity:.6}:host ion-content{--background: var(--color-header-surface);--padding-top: 0;--padding-start: 0;--padding-end: 0;--padding-bottom: 0;border-radius:24px 24px 0 0;overflow:hidden}:host ion-content::part(scroll){display:flex;flex-direction:column;min-height:100%;-webkit-overflow-scrolling:touch}.plt-ios :host ion-content{--background: var(--color-background-neutral-primary)}@media (min-width: 768px){:host ion-content{border-radius:24px 24px 0 0}}:host ion-header[collapse=condense]{display:none}@media (min-width: 768px){:host ion-header[collapse=condense]{display:none}}:host ion-refresher{z-index:0}:host ion-refresher-content{--color: var(--color-header-content)}:host .content-wrapper{width:100%;position:relative;z-index:20;flex:1;display:flex;flex-direction:column;background:var(--color-background-neutral-primary);border-radius:24px 24px 0 0;overflow:visible;transform:translateZ(0);will-change:transform;isolation:isolate;box-shadow:0 300px 0 0 var(--color-background-neutral-primary);padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px);padding-bottom:calc(var(--mobile-content-spacing) + var(--mobile-tab-bar-height) + var(--app-safe-bottom, 0px))}:host .content-inner{max-width:640px;margin:0 auto;width:100%}@media (min-width: 768px){:host .content-wrapper{padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px)}}:host .header-expandable{background:var(--color-header-surface);padding:32px 20px 24px;color:var(--header-content-color, white);position:sticky;top:0;z-index:5;transition:opacity .1s ease-out,transform .1s ease-out;flex:0 0 auto;min-height:-moz-min-content;min-height:min-content}:host .header-expandable-inner{display:flex;flex-direction:column;gap:20px;max-width:640px;margin:0 auto}:host .header-expandable__text{margin-bottom:0;gap:4px;display:flex;flex-direction:column}:host .header-expandable__title{font-size:var(--font-size-2xl);font-weight:600;color:var(--header-content-color, white);margin:0}:host .header-expandable__subtitle{font-size:var(--font-size-sm);font-weight:400;color:var(--header-content-color, white);opacity:.85;margin:0}@media (min-width: 768px){:host .header-expandable{padding:48px 20px 32px}:host .header-expandable__title{font-size:var(--font-size-3xl)}:host .header-expandable__subtitle{font-size:var(--font-size-base)}}@media (min-width: 992px){:host .header-expandable{padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg)}}@media (min-width: 1440px){:host .header-expandable{padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){:host .header-expandable{padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){:host .header-expandable{padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}\n", ".header-main{padding:0 20px;height:72px}.header-main__title{transform:translate(-50%) translateY(-100%);opacity:0;transition:transform .6s ease,opacity .6s ease;padding:0;--color: var(--color-header-content)}.header-scrolled .header-main__title{opacity:1;transform:translate(-50%) translateY(0)}.header-main__actions{display:flex;align-items:center;gap:8px}.header-main__actions ds-avatar{cursor:pointer;-webkit-tap-highlight-color:transparent}@keyframes logoSlideIn{0%{transform:translateY(-200%);scale:.75;opacity:0}to{transform:translateY(0);scale:1;opacity:1}}.logo--first-entry{animation:logoSlideIn .75s var(--spring-curve-bouncy) .7s both}@media (min-width: 768px){.header-main{padding:16px 24px;height:88px}.header-main__title{display:none}}ion-refresher{--color: var(--color-header-content)}ion-refresher-content{--color: var(--color-header-content)}ion-refresher-content::part(spinner){color:var(--color-header-content)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: DsLogoComponent, selector: "ds-logo", inputs: ["variant", "size", "customHeight", "customWidth"] }, { kind: "component", type: DsMobileSkeletonLoaderComponent, selector: "ds-mobile-skeleton-loader", inputs: ["borderRadius", "variant", "maxWidth", "centered"] }, { kind: "component", type: DsMobileNotificationButtonComponent, selector: "ds-mobile-notification-button", inputs: ["count"], outputs: ["clicked"] }] });
6321
6333
  }
6322
6334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePageMainComponent, decorators: [{
6323
6335
  type: Component,
@@ -6394,7 +6406,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6394
6406
  <!-- Content wrapper -->
6395
6407
  <div class="content-wrapper">
6396
6408
  @if (contentLoading()) {
6397
- <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" />
6409
+ <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" maxWidth="640px" [centered]="true" />
6398
6410
  }
6399
6411
 
6400
6412
  <!-- Offline indicator slot (appears at top of content) -->
@@ -6861,7 +6873,7 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
6861
6873
  <!-- Content wrapper -->
6862
6874
  <div class="content-wrapper">
6863
6875
  @if (contentLoading()) {
6864
- <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" />
6876
+ <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" maxWidth="640px" [centered]="true" />
6865
6877
  }
6866
6878
 
6867
6879
  <!-- Offline indicator slot (appears at top of content) -->
@@ -6872,7 +6884,7 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
6872
6884
  </div>
6873
6885
  </div>
6874
6886
  </ion-content>
6875
- `, isInline: true, styles: [":host{display:flex;flex-direction:column;align-items:center;height:100%;background:var(--color-header-surface);width:100%}:host ion-header{background:var(--color-header-surface);box-shadow:none;height:72px;min-height:72px;margin-top:var(--app-header-top-offset)}:host ion-header ion-toolbar{--background: var(--color-header-surface);--border-width: 0;--box-shadow: none;--padding-top: 0;--padding-bottom: 0;--padding-start: 0;--padding-end: 0;--min-height: 72px;height:72px;min-height:72px;padding:0}@media (min-width: 768px){:host ion-header{height:88px;min-height:88px}:host ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}}@media (min-width: 768px){:host ion-header{display:none;height:auto}}:host .header-main,:host .header-details,.header-details{display:flex;align-items:center;justify-content:space-between;background:var(--color-header-surface);position:relative}:host .header-main__title,:host .header-details .header-title,.header-details .header-title{position:absolute;left:50%;transform:translate(-50%);font-size:var(--font-size-base);font-weight:600;color:var(--color-header-content);margin:0;padding:0;--color: var(--color-header-content)}.header-details .header-title{transform:translate(-50%) translateY(-100%);opacity:0!important;pointer-events:none;transition:transform .2s ease,opacity .2s ease!important}.header-scrolled .header-details .header-title{opacity:1!important;pointer-events:auto;transform:translate(-50%) translateY(0)}:host .header-details .back-button,.header-details .back-button{background:none;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:opacity var(--transition-duration-fast, .2s) var(--ease-smooth, ease);z-index:10;position:relative}:host .header-details .back-button:hover,.header-details .back-button:hover{opacity:.8}:host .header-details .back-button:active,.header-details .back-button:active{opacity:.6}:host ion-content{--background: var(--color-header-surface);--padding-top: 0;--padding-start: 0;--padding-end: 0;--padding-bottom: 0;border-radius:24px 24px 0 0;overflow:hidden}:host ion-content::part(scroll){display:flex;flex-direction:column;min-height:100%;-webkit-overflow-scrolling:touch}.plt-ios :host ion-content{--background: var(--color-background-neutral-primary)}@media (min-width: 768px){:host ion-content{border-radius:24px 24px 0 0}}:host ion-header[collapse=condense]{display:none}@media (min-width: 768px){:host ion-header[collapse=condense]{display:none}}:host ion-refresher{z-index:0}:host ion-refresher-content{--color: var(--color-header-content)}:host .content-wrapper{width:100%;position:relative;z-index:20;flex:1;display:flex;flex-direction:column;background:var(--color-background-neutral-primary);border-radius:24px 24px 0 0;overflow:visible;transform:translateZ(0);will-change:transform;isolation:isolate;box-shadow:0 300px 0 0 var(--color-background-neutral-primary);padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px);padding-bottom:calc(var(--mobile-content-spacing) + var(--mobile-tab-bar-height) + var(--app-safe-bottom, 0px))}:host .content-inner{max-width:640px;margin:0 auto;width:100%}@media (min-width: 768px){:host .content-wrapper{padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px)}}:host .header-expandable{background:var(--color-header-surface);padding:32px 20px 24px;color:var(--header-content-color, white);position:sticky;top:0;z-index:5;transition:opacity .1s ease-out,transform .1s ease-out;flex:0 0 auto;min-height:-moz-min-content;min-height:min-content}:host .header-expandable-inner{display:flex;flex-direction:column;gap:20px;max-width:640px;margin:0 auto}:host .header-expandable__text{margin-bottom:0;gap:4px;display:flex;flex-direction:column}:host .header-expandable__title{font-size:var(--font-size-2xl);font-weight:600;color:var(--header-content-color, white);margin:0}:host .header-expandable__subtitle{font-size:var(--font-size-sm);font-weight:400;color:var(--header-content-color, white);opacity:.85;margin:0}@media (min-width: 768px){:host .header-expandable{padding:48px 20px 32px}:host .header-expandable__title{font-size:var(--font-size-3xl)}:host .header-expandable__subtitle{font-size:var(--font-size-base)}}@media (min-width: 992px){:host .header-expandable{padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg)}}@media (min-width: 1440px){:host .header-expandable{padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){:host .header-expandable{padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){:host .header-expandable{padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}\n", "ion-refresher{--color: var(--color-header-content)}ion-refresher-content{--color: var(--color-header-content)}ion-refresher-content::part(spinner){color:var(--color-header-content)}.header-details{gap:12px;padding:0 20px;height:72px;min-height:72px}:host .header-details .back-button{width:36px;height:36px;border-radius:50%;background:color-mix(in srgb,var(--color-header-content) 10%,transparent)!important;flex-shrink:0;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:background var(--transition-duration-fast) var(--ease-smooth);z-index:10}:host .header-details .back-button:hover{background:color-mix(in srgb,var(--color-header-content) 16%,transparent)!important}:host .header-details .back-button:active{background:color-mix(in srgb,var(--color-header-content) 22%,transparent)!important}.header-details .header-title{left:64px}@media (min-width: 768px){ion-header{display:block!important;height:88px;min-height:88px}ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}.header-details{padding:16px 24px;height:88px;min-height:88px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsMobileSkeletonLoaderComponent, selector: "ds-mobile-skeleton-loader", inputs: ["borderRadius", "variant"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }] });
6887
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;align-items:center;height:100%;background:var(--color-header-surface);width:100%}:host ion-header{background:var(--color-header-surface);box-shadow:none;height:72px;min-height:72px;margin-top:var(--app-header-top-offset)}:host ion-header ion-toolbar{--background: var(--color-header-surface);--border-width: 0;--box-shadow: none;--padding-top: 0;--padding-bottom: 0;--padding-start: 0;--padding-end: 0;--min-height: 72px;height:72px;min-height:72px;padding:0}@media (min-width: 768px){:host ion-header{height:88px;min-height:88px}:host ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}}@media (min-width: 768px){:host ion-header{display:none;height:auto}}:host .header-main,:host .header-details,.header-details{display:flex;align-items:center;justify-content:space-between;background:var(--color-header-surface);position:relative}:host .header-main__title,:host .header-details .header-title,.header-details .header-title{position:absolute;left:50%;transform:translate(-50%);font-size:var(--font-size-base);font-weight:600;color:var(--color-header-content);margin:0;padding:0;--color: var(--color-header-content)}.header-details .header-title{transform:translate(-50%) translateY(-100%);opacity:0!important;pointer-events:none;transition:transform .2s ease,opacity .2s ease!important}.header-scrolled .header-details .header-title{opacity:1!important;pointer-events:auto;transform:translate(-50%) translateY(0)}:host .header-details .back-button,.header-details .back-button{background:none;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:opacity var(--transition-duration-fast, .2s) var(--ease-smooth, ease);z-index:10;position:relative}:host .header-details .back-button:hover,.header-details .back-button:hover{opacity:.8}:host .header-details .back-button:active,.header-details .back-button:active{opacity:.6}:host ion-content{--background: var(--color-header-surface);--padding-top: 0;--padding-start: 0;--padding-end: 0;--padding-bottom: 0;border-radius:24px 24px 0 0;overflow:hidden}:host ion-content::part(scroll){display:flex;flex-direction:column;min-height:100%;-webkit-overflow-scrolling:touch}.plt-ios :host ion-content{--background: var(--color-background-neutral-primary)}@media (min-width: 768px){:host ion-content{border-radius:24px 24px 0 0}}:host ion-header[collapse=condense]{display:none}@media (min-width: 768px){:host ion-header[collapse=condense]{display:none}}:host ion-refresher{z-index:0}:host ion-refresher-content{--color: var(--color-header-content)}:host .content-wrapper{width:100%;position:relative;z-index:20;flex:1;display:flex;flex-direction:column;background:var(--color-background-neutral-primary);border-radius:24px 24px 0 0;overflow:visible;transform:translateZ(0);will-change:transform;isolation:isolate;box-shadow:0 300px 0 0 var(--color-background-neutral-primary);padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px);padding-bottom:calc(var(--mobile-content-spacing) + var(--mobile-tab-bar-height) + var(--app-safe-bottom, 0px))}:host .content-inner{max-width:640px;margin:0 auto;width:100%}@media (min-width: 768px){:host .content-wrapper{padding-top:0;padding-left:var(--content-wrapper-padding, 20px);padding-right:var(--content-wrapper-padding, 20px)}}:host .header-expandable{background:var(--color-header-surface);padding:32px 20px 24px;color:var(--header-content-color, white);position:sticky;top:0;z-index:5;transition:opacity .1s ease-out,transform .1s ease-out;flex:0 0 auto;min-height:-moz-min-content;min-height:min-content}:host .header-expandable-inner{display:flex;flex-direction:column;gap:20px;max-width:640px;margin:0 auto}:host .header-expandable__text{margin-bottom:0;gap:4px;display:flex;flex-direction:column}:host .header-expandable__title{font-size:var(--font-size-2xl);font-weight:600;color:var(--header-content-color, white);margin:0}:host .header-expandable__subtitle{font-size:var(--font-size-sm);font-weight:400;color:var(--header-content-color, white);opacity:.85;margin:0}@media (min-width: 768px){:host .header-expandable{padding:48px 20px 32px}:host .header-expandable__title{font-size:var(--font-size-3xl)}:host .header-expandable__subtitle{font-size:var(--font-size-base)}}@media (min-width: 992px){:host .header-expandable{padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg)}}@media (min-width: 1440px){:host .header-expandable{padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){:host .header-expandable{padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){:host .header-expandable{padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}\n", "ion-refresher{--color: var(--color-header-content)}ion-refresher-content{--color: var(--color-header-content)}ion-refresher-content::part(spinner){color:var(--color-header-content)}.header-details{gap:12px;padding:0 20px;height:72px;min-height:72px}:host .header-details .back-button{width:36px;height:36px;border-radius:50%;background:color-mix(in srgb,var(--color-header-content) 10%,transparent)!important;flex-shrink:0;border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-header-content);transition:background var(--transition-duration-fast) var(--ease-smooth);z-index:10}:host .header-details .back-button:hover{background:color-mix(in srgb,var(--color-header-content) 16%,transparent)!important}:host .header-details .back-button:active{background:color-mix(in srgb,var(--color-header-content) 22%,transparent)!important}.header-details .header-title{left:64px}@media (min-width: 768px){ion-header{display:block!important;height:88px;min-height:88px}ion-header ion-toolbar{--min-height: 88px;height:88px;min-height:88px}.header-details{padding:16px 24px;height:88px;min-height:88px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsMobileSkeletonLoaderComponent, selector: "ds-mobile-skeleton-loader", inputs: ["borderRadius", "variant", "maxWidth", "centered"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }] });
6876
6888
  }
6877
6889
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePageDetailsComponent, decorators: [{
6878
6890
  type: Component,
@@ -6954,7 +6966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6954
6966
  <!-- Content wrapper -->
6955
6967
  <div class="content-wrapper">
6956
6968
  @if (contentLoading()) {
6957
- <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" />
6969
+ <ds-mobile-skeleton-loader [borderRadius]="24" [variant]="contentLoadingVariant()" maxWidth="640px" [centered]="true" />
6958
6970
  }
6959
6971
 
6960
6972
  <!-- Offline indicator slot (appears at top of content) -->
@@ -7207,7 +7219,7 @@ class DsMobileSectionComponent {
7207
7219
  <ng-content />
7208
7220
  </div>
7209
7221
  </section>
7210
- `, isInline: true, styles: [":host{display:block;width:100%;border-bottom:1px solid transparent;transition:border-color .2s ease}:host(.has-border){border-bottom-color:var(--border-color-default)}:host(.has-border):last-child{border-bottom-color:transparent}.section{width:100%;display:flex;flex-direction:column;padding:var(--section-padding, 20px);gap:var(--section-gap, 12px);overflow:var(--section-overflow)}@media (min-width: 768px){.section{padding:var(--section-padding-desktop, var(--section-padding, 32px))}ds-mobile-page-main :host .section,ds-mobile-page-details :host .section{padding-left:0;padding-right:0}}.section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:24px}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);margin:0;padding:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px;line-height:1.4}.section-link{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--color-accent, #5d5fef);text-decoration:none;cursor:pointer;white-space:nowrap;transition:opacity .2s ease;-webkit-tap-highlight-color:transparent;display:flex;align-items:center;gap:2px;line-height:1;-webkit-user-select:none;user-select:none}.section-link:hover{opacity:.8}.section-link:active{opacity:.6}.section-content{display:flex;flex-direction:column;gap:var(--section-content-gap)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
7222
+ `, isInline: true, styles: [":host{display:block;width:100%;border-bottom:1px solid transparent;transition:border-color .2s ease}:host(.has-border){border-bottom-color:var(--border-color-default)}:host(.has-border):last-child{border-bottom-color:transparent}.section{width:100%;display:flex;flex-direction:column;padding:var(--section-padding, 20px);gap:var(--section-gap, 12px);overflow:var(--section-overflow)}@media (min-width: 768px){.section{padding:var(--section-padding-desktop, var(--section-padding, 32px))}:host-context(ds-mobile-page-main) .section,:host-context(ds-mobile-page-details) .section{padding-left:0;padding-right:0}}.section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:24px}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);margin:0;padding:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px;line-height:1.4}.section-link{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--color-accent, #5d5fef);text-decoration:none;cursor:pointer;white-space:nowrap;transition:opacity .2s ease;-webkit-tap-highlight-color:transparent;display:flex;align-items:center;gap:2px;line-height:1;-webkit-user-select:none;user-select:none}.section-link:hover{opacity:.8}.section-link:active{opacity:.6}.section-content{display:flex;flex-direction:column;gap:var(--section-content-gap)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
7211
7223
  }
7212
7224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileSectionComponent, decorators: [{
7213
7225
  type: Component,
@@ -7239,7 +7251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7239
7251
  <ng-content />
7240
7252
  </div>
7241
7253
  </section>
7242
- `, styles: [":host{display:block;width:100%;border-bottom:1px solid transparent;transition:border-color .2s ease}:host(.has-border){border-bottom-color:var(--border-color-default)}:host(.has-border):last-child{border-bottom-color:transparent}.section{width:100%;display:flex;flex-direction:column;padding:var(--section-padding, 20px);gap:var(--section-gap, 12px);overflow:var(--section-overflow)}@media (min-width: 768px){.section{padding:var(--section-padding-desktop, var(--section-padding, 32px))}ds-mobile-page-main :host .section,ds-mobile-page-details :host .section{padding-left:0;padding-right:0}}.section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:24px}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);margin:0;padding:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px;line-height:1.4}.section-link{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--color-accent, #5d5fef);text-decoration:none;cursor:pointer;white-space:nowrap;transition:opacity .2s ease;-webkit-tap-highlight-color:transparent;display:flex;align-items:center;gap:2px;line-height:1;-webkit-user-select:none;user-select:none}.section-link:hover{opacity:.8}.section-link:active{opacity:.6}.section-content{display:flex;flex-direction:column;gap:var(--section-content-gap)}\n"] }]
7254
+ `, styles: [":host{display:block;width:100%;border-bottom:1px solid transparent;transition:border-color .2s ease}:host(.has-border){border-bottom-color:var(--border-color-default)}:host(.has-border):last-child{border-bottom-color:transparent}.section{width:100%;display:flex;flex-direction:column;padding:var(--section-padding, 20px);gap:var(--section-gap, 12px);overflow:var(--section-overflow)}@media (min-width: 768px){.section{padding:var(--section-padding-desktop, var(--section-padding, 32px))}:host-context(ds-mobile-page-main) .section,:host-context(ds-mobile-page-details) .section{padding-left:0;padding-right:0}}.section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:24px}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);margin:0;padding:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px;line-height:1.4}.section-link{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--color-accent, #5d5fef);text-decoration:none;cursor:pointer;white-space:nowrap;transition:opacity .2s ease;-webkit-tap-highlight-color:transparent;display:flex;align-items:center;gap:2px;line-height:1;-webkit-user-select:none;user-select:none}.section-link:hover{opacity:.8}.section-link:active{opacity:.6}.section-content{display:flex;flex-direction:column;gap:var(--section-content-gap)}\n"] }]
7243
7255
  }], propDecorators: { headline: [{ type: i0.Input, args: [{ isSignal: true, alias: "headline", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], linkText: [{ type: i0.Input, args: [{ isSignal: true, alias: "linkText", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], paddingDesktop: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingDesktop", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], contentGap: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentGap", required: false }] }], showBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBorder", required: false }] }], overflow: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflow", required: false }] }], linkClick: [{ type: i0.Output, args: ["linkClick"] }] } });
7244
7256
 
7245
7257
  /**
@@ -18318,12 +18330,18 @@ class DsMobileTenantPickerModalComponent {
18318
18330
  pickMode = false;
18319
18331
  /** Optional set of tenant IDs to exclude from the list (e.g. already-selected admins). */
18320
18332
  excludeIds;
18333
+ /** Optional list of external tenants to use instead of the internal dummy data */
18334
+ set tenants(val) {
18335
+ this._externalTenants.set(val);
18336
+ }
18337
+ _externalTenants = signal(undefined, ...(ngDevMode ? [{ debugName: "_externalTenants" }] : []));
18321
18338
  searchQuery = signal('', ...(ngDevMode ? [{ debugName: "searchQuery" }] : []));
18322
18339
  selectionMode = signal(false, ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
18323
18340
  selectedIds = signal(new Set(), ...(ngDevMode ? [{ debugName: "selectedIds" }] : []));
18324
18341
  filteredTenants = computed(() => {
18325
18342
  const q = this.searchQuery().toLowerCase().trim();
18326
- let tenants = this.peerMessaging.tenants();
18343
+ const external = this._externalTenants();
18344
+ let tenants = external ?? this.peerMessaging.tenants();
18327
18345
  if (this.excludeIds?.size) {
18328
18346
  tenants = tenants.filter(t => !this.excludeIds.has(t.id));
18329
18347
  }
@@ -18390,7 +18408,7 @@ class DsMobileTenantPickerModalComponent {
18390
18408
  const ids = [...this.selectedIds()];
18391
18409
  if (ids.length < 2)
18392
18410
  return;
18393
- const allTenants = this.peerMessaging.tenants();
18411
+ const allTenants = this._externalTenants() ?? this.peerMessaging.tenants();
18394
18412
  const selectedTenants = allTenants.filter(t => ids.includes(t.id));
18395
18413
  const groupName = selectedTenants
18396
18414
  .map(t => t.name.split(/\s+/)[0])
@@ -18401,7 +18419,7 @@ class DsMobileTenantPickerModalComponent {
18401
18419
  await this.peerChat.createGroup(ids, groupName);
18402
18420
  }
18403
18421
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileTenantPickerModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18404
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileTenantPickerModalComponent, isStandalone: true, selector: "ds-mobile-tenant-picker-modal", inputs: { pickMode: "pickMode", excludeIds: "excludeIds" }, ngImport: i0, template: `
18422
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileTenantPickerModalComponent, isStandalone: true, selector: "ds-mobile-tenant-picker-modal", inputs: { pickMode: "pickMode", excludeIds: "excludeIds", tenants: "tenants" }, ngImport: i0, template: `
18405
18423
  <ds-mobile-modal-base
18406
18424
  headerTitle="Beboere"
18407
18425
  closeButtonLabel="Luk"
@@ -18530,6 +18548,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
18530
18548
  type: Input
18531
18549
  }], excludeIds: [{
18532
18550
  type: Input
18551
+ }], tenants: [{
18552
+ type: Input
18533
18553
  }] } });
18534
18554
 
18535
18555
  var index = /*#__PURE__*/Object.freeze({
@@ -31213,7 +31233,7 @@ class MobileCommunityPageComponent {
31213
31233
  pinnedPosts = computed(() => {
31214
31234
  // Get all posts that are explicitly marked as pinned
31215
31235
  const allPosts = this.postsService.posts();
31216
- return allPosts.filter(post => post.isPinned === true);
31236
+ return allPosts.filter((post) => post.isPinned === true);
31217
31237
  }, ...(ngDevMode ? [{ debugName: "pinnedPosts" }] : []));
31218
31238
  // Computed to check if there are any posts to display
31219
31239
  hasAnyPosts = computed(() => {
@@ -31231,7 +31251,13 @@ class MobileCommunityPageComponent {
31231
31251
  this.postModal = postModal;
31232
31252
  this.userService = userService;
31233
31253
  this.postsService = postsService;
31254
+ // Vis skeleton loader med en random delay mellem 0 og 2000 ms
31255
+ const randomTimeout = Math.floor(Math.random() * 2000);
31256
+ setTimeout(() => {
31257
+ this.isLoading.set(false);
31258
+ }, randomTimeout);
31234
31259
  }
31260
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
31235
31261
  /**
31236
31262
  * Handle infinite scroll event
31237
31263
  * Loads more posts when user scrolls to bottom
@@ -31282,11 +31308,11 @@ class MobileCommunityPageComponent {
31282
31308
  ...post,
31283
31309
  postId: post.id,
31284
31310
  avatarType: post.avatarType === 'icon' ? undefined : post.avatarType,
31285
- focusComment
31311
+ focusComment,
31286
31312
  };
31287
31313
  await this.postModal.open(postData, {
31288
31314
  currentUserName: 'Lars Mikkelsen', // Current user name
31289
- currentUserInitials: this.userService.avatarInitials()
31315
+ currentUserInitials: this.userService.avatarInitials(),
31290
31316
  });
31291
31317
  }
31292
31318
  }
@@ -31297,11 +31323,11 @@ class MobileCommunityPageComponent {
31297
31323
  component: DsMobilePostCreateBottomSheetComponent,
31298
31324
  componentProps: {
31299
31325
  // This helps the component know it should auto-focus
31300
- autoFocus: true
31326
+ autoFocus: true,
31301
31327
  },
31302
31328
  breakpoints: [0, 0.95, 1],
31303
31329
  initialBreakpoint: 0.95,
31304
- handle: true
31330
+ handle: true,
31305
31331
  });
31306
31332
  // Handle the result when the sheet is dismissed
31307
31333
  const result = await sheet.onWillDismiss();
@@ -31322,7 +31348,7 @@ class MobileCommunityPageComponent {
31322
31348
  isLiked: false,
31323
31349
  likeCount: 0,
31324
31350
  commentCount: 0,
31325
- comments: []
31351
+ comments: [],
31326
31352
  };
31327
31353
  // Add to the beginning of the posts array via service
31328
31354
  this.postsService.addPost(newPost);
@@ -31340,7 +31366,7 @@ class MobileCommunityPageComponent {
31340
31366
  name: 'Sophie Andersen',
31341
31367
  role: 'Lejer',
31342
31368
  avatarInitials: 'SA',
31343
- timestamp: '4t siden'
31369
+ timestamp: '4t siden',
31344
31370
  };
31345
31371
  // Open the lightbox with the image
31346
31372
  await this.lightbox.open({
@@ -31353,14 +31379,14 @@ class MobileCommunityPageComponent {
31353
31379
  description: description,
31354
31380
  isLiked: true,
31355
31381
  likeCount: 156,
31356
- commentCount: 34
31357
- }
31382
+ commentCount: 34,
31383
+ },
31358
31384
  ],
31359
31385
  author: authorMeta,
31360
31386
  enableZoom: true,
31361
31387
  showControls: false, // Single image, no need for controls
31362
31388
  showActions: true, // Show like & comment actions
31363
- showInfo: true
31389
+ showInfo: true,
31364
31390
  });
31365
31391
  }
31366
31392
  async openHouseRulesPdf() {
@@ -31370,7 +31396,7 @@ class MobileCommunityPageComponent {
31370
31396
  name: 'Karen Nielsen',
31371
31397
  role: 'Ejendomsadministrator',
31372
31398
  avatarInitials: 'KN',
31373
- timestamp: '2d siden'
31399
+ timestamp: '2d siden',
31374
31400
  };
31375
31401
  // Open the PDF lightbox
31376
31402
  // Use absolute path for production deployment (Vercel, etc.)
@@ -31381,9 +31407,9 @@ class MobileCommunityPageComponent {
31381
31407
  title: 'House Rules',
31382
31408
  description: 'Building regulations and community guidelines',
31383
31409
  fileSize: 250880, // 245 KB in bytes
31384
- pageCount: 8
31410
+ pageCount: 8,
31385
31411
  },
31386
- author: authorMeta
31412
+ author: authorMeta,
31387
31413
  });
31388
31414
  }
31389
31415
  /**
@@ -31394,13 +31420,13 @@ class MobileCommunityPageComponent {
31394
31420
  const sheet = await this.bottomSheet.create({
31395
31421
  component: DsMobileActionsBottomSheetComponent,
31396
31422
  componentProps: {
31397
- isOwnContent: isOwnPost
31423
+ isOwnContent: isOwnPost,
31398
31424
  },
31399
31425
  breakpoints: [0, 1],
31400
31426
  initialBreakpoint: 1,
31401
31427
  handle: true,
31402
31428
  backdropDismiss: true,
31403
- cssClass: 'auto-height'
31429
+ cssClass: 'auto-height',
31404
31430
  });
31405
31431
  const result = await sheet.onWillDismiss();
31406
31432
  if (result.role === 'select' && result.data) {
@@ -31421,13 +31447,13 @@ class MobileCommunityPageComponent {
31421
31447
  autoFocus: true,
31422
31448
  isEditMode: true,
31423
31449
  postId: postId,
31424
- initialContent: post.content
31450
+ initialContent: post.content,
31425
31451
  },
31426
31452
  breakpoints: [0, 0.95, 1],
31427
31453
  initialBreakpoint: 0.95,
31428
31454
  handle: true,
31429
31455
  backdropBlur: true,
31430
- backdropOpacity: 0.6
31456
+ backdropOpacity: 0.6,
31431
31457
  });
31432
31458
  // Handle the result when the sheet is dismissed
31433
31459
  const editResult = await editSheet.onWillDismiss();
@@ -31436,7 +31462,7 @@ class MobileCommunityPageComponent {
31436
31462
  // Update the post via service
31437
31463
  this.postsService.updatePost(postId, {
31438
31464
  content: editResult.data.content,
31439
- timestamp: 'Lige nu'
31465
+ timestamp: 'Lige nu',
31440
31466
  });
31441
31467
  }
31442
31468
  break;
@@ -31453,7 +31479,7 @@ class MobileCommunityPageComponent {
31453
31479
  if (likePost) {
31454
31480
  this.postsService.updatePost(postId, {
31455
31481
  isLiked: !likePost.isLiked,
31456
- likeCount: likePost.isLiked ? likePost.likeCount - 1 : likePost.likeCount + 1
31482
+ likeCount: likePost.isLiked ? likePost.likeCount - 1 : likePost.likeCount + 1,
31457
31483
  });
31458
31484
  }
31459
31485
  break;
@@ -31497,18 +31523,16 @@ class MobileCommunityPageComponent {
31497
31523
  [notificationCount]="notificationService.unreadCount()"
31498
31524
  [avatarInitials]="userService.avatarInitials()"
31499
31525
  [avatarType]="userService.avatarType()"
31526
+ [contentLoading]="isLoading()"
31527
+ [contentLoadingVariant]="'card'"
31500
31528
  (notificationClick)="handleNotificationClick()"
31501
- (refresh)="handleRefresh($event)">
31502
-
31529
+ (refresh)="handleRefresh($event)"
31530
+ >
31503
31531
  <!-- Offline indicator -->
31504
31532
  @if (pageComponent.isOffline()) {
31505
- <ds-mobile-offline-banner
31506
- offline-indicator
31507
- title="Ingen internetforbindelse"
31508
- message="Nogle funktioner kan være utilgængelige">
31509
- </ds-mobile-offline-banner>
31533
+ <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
31510
31534
  }
31511
-
31535
+
31512
31536
  <!-- Post Composer in header-expandable -->
31513
31537
  <ds-mobile-post-composer
31514
31538
  header-content
@@ -31517,21 +31541,20 @@ class MobileCommunityPageComponent {
31517
31541
  [avatarSrc]="userService.avatarSrc()"
31518
31542
  (composerClick)="openPostCreator()"
31519
31543
  />
31520
-
31544
+
31521
31545
  <!-- Pinned Posts Section -->
31522
- <ds-mobile-section
31523
- headline="Fastgjorte opslag"
31524
- icon="remixPushpinFill">
31546
+ <ds-mobile-section headline="Fastgjorte opslag" icon="remixPushpinFill">
31525
31547
  <div class="pinned-posts-swiper-wrapper">
31526
- <ds-mobile-swiper
31548
+ <ds-mobile-swiper
31527
31549
  #pinnedSwiper
31528
31550
  class="pinned-posts-swiper"
31529
- [slideWidth]="'100%'"
31551
+ [slideWidth]="'100%'"
31530
31552
  [gap]="32"
31531
31553
  [pagination]="true"
31532
31554
  [autoHeight]="true"
31533
31555
  [progressiveOpacity]="true"
31534
- [progressiveScale]="true">
31556
+ [progressiveScale]="true"
31557
+ >
31535
31558
  @for (post of pinnedPosts(); track post.id) {
31536
31559
  <div class="swiper-slide">
31537
31560
  <ds-mobile-interactive-list-item-post
@@ -31547,24 +31570,19 @@ class MobileCommunityPageComponent {
31547
31570
  [moreActions]="true"
31548
31571
  (postClick)="openPost(post.id)"
31549
31572
  (commentClick)="openPost(post.id, true)"
31550
- (longPress)="handlePostLongPress(post.id, false)">
31551
-
31573
+ (longPress)="handlePostLongPress(post.id, false)"
31574
+ >
31552
31575
  <post-content>
31553
31576
  <post-text>{{ post.content }}</post-text>
31554
-
31577
+
31555
31578
  @if (post.id === 'post-4') {
31556
31579
  <post-attachments>
31557
- <ds-mobile-card-inline-file
31558
- [fileName]="'Husregler.pdf'"
31559
- [fileSize]="'245 KB'"
31560
- [variant]="'pdf'"
31561
- [layout]="'compact'"
31562
- (fileClick)="openHouseRulesPdf()">
31580
+ <ds-mobile-card-inline-file [fileName]="'Husregler.pdf'" [fileSize]="'245 KB'" [variant]="'pdf'" [layout]="'compact'" (fileClick)="openHouseRulesPdf()">
31563
31581
  </ds-mobile-card-inline-file>
31564
31582
  </post-attachments>
31565
31583
  }
31566
31584
  </post-content>
31567
-
31585
+
31568
31586
  <post-actions>
31569
31587
  <action-like [count]="post.likeCount" [active]="post.isLiked" />
31570
31588
  <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
@@ -31573,7 +31591,7 @@ class MobileCommunityPageComponent {
31573
31591
  </div>
31574
31592
  }
31575
31593
  </ds-mobile-swiper>
31576
-
31594
+
31577
31595
  <!-- Navigation Buttons -->
31578
31596
  <div class="swiper-nav-buttons">
31579
31597
  <ds-icon-button
@@ -31597,159 +31615,144 @@ class MobileCommunityPageComponent {
31597
31615
  </div>
31598
31616
  </div>
31599
31617
  </ds-mobile-section>
31600
-
31618
+
31601
31619
  <!-- All Posts Section -->
31602
- <ds-mobile-section
31603
- headline="Alle opslag">
31620
+ <ds-mobile-section headline="Alle opslag">
31604
31621
  @if (hasAnyPosts()) {
31605
31622
  <div class="post-list-wrapper">
31606
31623
  <!-- All Posts Loop -->
31607
31624
  @for (post of allPosts(); track post.id) {
31608
- @if (post.hasInlinePhotos && post.id === 'post-2') {
31609
- <!-- Post 2: With multiple images (grid layout) -->
31610
- <ds-mobile-interactive-list-item-post
31611
- [authorName]="post.authorName"
31612
- [authorRole]="post.authorRole"
31613
- [timestamp]="post.timestamp"
31614
- [avatarInitials]="post.avatarInitials || ''"
31615
- [avatarType]="post.avatarType"
31616
- [clickable]="true"
31617
- [moreActions]="true"
31618
- (postClick)="openPost(post.id)"
31619
- (commentClick)="openPost(post.id, true)"
31620
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31621
-
31622
- <post-content>
31623
- <post-text>{{ post.content }}</post-text>
31624
- <ds-mobile-inline-photo
31625
- [images]="[
31626
- '/assets/Dummy-photos/balcony-view.jpg',
31627
- '/assets/Dummy-photos/staircase.jpg',
31628
- '/assets/Dummy-photos/park.jpg',
31629
- '/assets/Dummy-photos/yard.jpg'
31630
- ]"
31631
- [author]="{
31632
- name: 'Sophie Andersen',
31633
- role: 'Lejer',
31634
- avatarInitials: 'SA',
31635
- avatarType: 'initials',
31636
- timestamp: '4t siden'
31637
- }"
31638
- />
31639
- </post-content>
31640
-
31641
- <post-actions>
31642
- <action-like [active]="post.isLiked" [count]="post.likeCount" />
31643
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31644
- </post-actions>
31645
- </ds-mobile-interactive-list-item-post>
31646
- } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31647
- <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31648
- <ds-mobile-interactive-list-item-post
31649
- [authorName]="post.authorName"
31650
- [authorRole]="post.authorRole"
31651
- [timestamp]="post.timestamp"
31652
- [avatarInitials]="post.avatarInitials || ''"
31653
- [avatarType]="post.avatarType"
31654
- [showBadge]="post.showBadge || false"
31655
- [clickable]="true"
31656
- [moreActions]="true"
31657
- (postClick)="openPost(post.id)"
31658
- (commentClick)="openPost(post.id, true)"
31659
- (longPress)="handlePostLongPress(post.id, false)">
31660
-
31661
- <post-content>
31625
+ @if (post.hasInlinePhotos && post.id === 'post-2') {
31626
+ <!-- Post 2: With multiple images (grid layout) -->
31627
+ <ds-mobile-interactive-list-item-post
31628
+ [authorName]="post.authorName"
31629
+ [authorRole]="post.authorRole"
31630
+ [timestamp]="post.timestamp"
31631
+ [avatarInitials]="post.avatarInitials || ''"
31632
+ [avatarType]="post.avatarType"
31633
+ [clickable]="true"
31634
+ [moreActions]="true"
31635
+ (postClick)="openPost(post.id)"
31636
+ (commentClick)="openPost(post.id, true)"
31637
+ (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')"
31638
+ >
31639
+ <post-content>
31640
+ <post-text>{{ post.content }}</post-text>
31641
+ <ds-mobile-inline-photo
31642
+ [images]="['/assets/Dummy-photos/balcony-view.jpg', '/assets/Dummy-photos/staircase.jpg', '/assets/Dummy-photos/park.jpg', '/assets/Dummy-photos/yard.jpg']"
31643
+ [author]="{
31644
+ name: 'Sophie Andersen',
31645
+ role: 'Lejer',
31646
+ avatarInitials: 'SA',
31647
+ avatarType: 'initials',
31648
+ timestamp: '4t siden',
31649
+ }"
31650
+ />
31651
+ </post-content>
31652
+
31653
+ <post-actions>
31654
+ <action-like [active]="post.isLiked" [count]="post.likeCount" />
31655
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31656
+ </post-actions>
31657
+ </ds-mobile-interactive-list-item-post>
31658
+ } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31659
+ <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31660
+ <ds-mobile-interactive-list-item-post
31661
+ [authorName]="post.authorName"
31662
+ [authorRole]="post.authorRole"
31663
+ [timestamp]="post.timestamp"
31664
+ [avatarInitials]="post.avatarInitials || ''"
31665
+ [avatarType]="post.avatarType"
31666
+ [showBadge]="post.showBadge || false"
31667
+ [clickable]="true"
31668
+ [moreActions]="true"
31669
+ (postClick)="openPost(post.id)"
31670
+ (commentClick)="openPost(post.id, true)"
31671
+ (longPress)="handlePostLongPress(post.id, false)"
31672
+ >
31673
+ <post-content>
31674
+ <post-text>{{ post.content }}</post-text>
31675
+ <ds-mobile-inline-photo
31676
+ [images]="[
31677
+ '/assets/Dummy-photos/mailboxes.jpg',
31678
+ '/assets/Dummy-photos/staircase.jpg',
31679
+ '/assets/Dummy-photos/yard.jpg',
31680
+ '/assets/Dummy-photos/park.jpg',
31681
+ '/assets/Dummy-photos/balcony-view.jpg',
31682
+ '/assets/Dummy-photos/handyman.jpg',
31683
+ ]"
31684
+ [author]="{
31685
+ name: 'Karen Nielsen',
31686
+ role: 'Ejendomsadministrator',
31687
+ avatarInitials: 'KN',
31688
+ avatarType: 'initials',
31689
+ timestamp: '2d siden',
31690
+ }"
31691
+ [maxVisible]="5"
31692
+ />
31693
+ </post-content>
31694
+
31695
+ <post-actions>
31696
+ <action-like [count]="post.likeCount" />
31697
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31698
+ </post-actions>
31699
+ </ds-mobile-interactive-list-item-post>
31700
+ } @else {
31701
+ <!-- Regular Post -->
31702
+ <ds-mobile-interactive-list-item-post
31703
+ [authorName]="post.authorName"
31704
+ [authorRole]="post.authorRole"
31705
+ [timestamp]="post.timestamp"
31706
+ [avatarType]="post.avatarType"
31707
+ [avatarSrc]="post.avatarSrc || ''"
31708
+ [avatarInitials]="post.avatarInitials || ''"
31709
+ [clickable]="true"
31710
+ [moreActions]="true"
31711
+ (postClick)="openPost(post.id)"
31712
+ (commentClick)="openPost(post.id, true)"
31713
+ (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')"
31714
+ >
31715
+ <post-content>
31716
+ @if (post.content) {
31662
31717
  <post-text>{{ post.content }}</post-text>
31663
- <ds-mobile-inline-photo
31664
- [images]="[
31665
- '/assets/Dummy-photos/mailboxes.jpg',
31666
- '/assets/Dummy-photos/staircase.jpg',
31667
- '/assets/Dummy-photos/yard.jpg',
31668
- '/assets/Dummy-photos/park.jpg',
31669
- '/assets/Dummy-photos/balcony-view.jpg',
31670
- '/assets/Dummy-photos/handyman.jpg'
31671
- ]"
31672
- [author]="{
31673
- name: 'Karen Nielsen',
31674
- role: 'Ejendomsadministrator',
31675
- avatarInitials: 'KN',
31676
- avatarType: 'initials',
31677
- timestamp: '2d siden'
31678
- }"
31679
- [maxVisible]="5"
31680
- />
31681
- </post-content>
31682
-
31683
- <post-actions>
31684
- <action-like [count]="post.likeCount" />
31685
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31686
- </post-actions>
31687
- </ds-mobile-interactive-list-item-post>
31688
- } @else {
31689
- <!-- Regular Post -->
31690
- <ds-mobile-interactive-list-item-post
31691
- [authorName]="post.authorName"
31692
- [authorRole]="post.authorRole"
31693
- [timestamp]="post.timestamp"
31694
- [avatarType]="post.avatarType"
31695
- [avatarSrc]="post.avatarSrc || ''"
31696
- [avatarInitials]="post.avatarInitials || ''"
31697
- [clickable]="true"
31698
- [moreActions]="true"
31699
- (postClick)="openPost(post.id)"
31700
- (commentClick)="openPost(post.id, true)"
31701
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31702
-
31703
- <post-content>
31704
- @if (post.content) {
31705
- <post-text>{{ post.content }}</post-text>
31706
- }
31707
- @if (post.imageSrc) {
31708
- <post-media>
31709
- <img
31710
- [src]="post.imageSrc"
31711
- [alt]="post.imageAlt || 'Posted image'"
31712
- class="clickable-image"
31713
- (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
31714
- />
31715
- </post-media>
31716
- }
31717
- </post-content>
31718
-
31719
- <post-actions>
31720
- <action-like [count]="post.likeCount" [active]="post.isLiked" />
31721
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31722
- </post-actions>
31723
- </ds-mobile-interactive-list-item-post>
31724
- }
31718
+ }
31719
+ @if (post.imageSrc) {
31720
+ <post-media>
31721
+ <img
31722
+ [src]="post.imageSrc"
31723
+ [alt]="post.imageAlt || 'Posted image'"
31724
+ class="clickable-image"
31725
+ (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
31726
+ />
31727
+ </post-media>
31728
+ }
31729
+ </post-content>
31730
+
31731
+ <post-actions>
31732
+ <action-like [count]="post.likeCount" [active]="post.isLiked" />
31733
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31734
+ </post-actions>
31735
+ </ds-mobile-interactive-list-item-post>
31725
31736
  }
31726
- </div>
31727
- } @else {
31728
- <!-- Empty State -->
31729
- <div class="community-empty-state">
31730
- <img
31731
- src="/assets/Empty%20state-chat.png"
31732
- alt="Ingen opslag endnu"
31733
- class="empty-state-image"
31734
- />
31735
- <h3 class="empty-state-title">Ingen opslag endnu</h3>
31736
- <p class="empty-state-description">Vær den første til at dele noget med dit fællesskab</p>
31737
- </div>
31738
- }
31739
-
31740
- <!-- Infinite Scroll -->
31741
- @if (hasAnyPosts()) {
31742
- <ion-infinite-scroll
31743
- threshold="100px"
31744
- [disabled]="!hasMorePosts() || pageComponent.isOffline()"
31745
- (ionInfinite)="onInfiniteScroll($event)">
31746
- <ion-infinite-scroll-content
31747
- loadingSpinner="crescent">
31748
- </ion-infinite-scroll-content>
31749
- </ion-infinite-scroll>
31750
- }
31751
- </ds-mobile-section>
31752
- </ds-mobile-page-main>
31737
+ }
31738
+ </div>
31739
+ } @else {
31740
+ <!-- Empty State -->
31741
+ <div class="community-empty-state">
31742
+ <img src="/assets/Empty%20state-chat.png" alt="Ingen opslag endnu" class="empty-state-image" />
31743
+ <h3 class="empty-state-title">Ingen opslag endnu</h3>
31744
+ <p class="empty-state-description">Vær den første til at dele noget med dit fællesskab</p>
31745
+ </div>
31746
+ }
31747
+
31748
+ <!-- Infinite Scroll -->
31749
+ @if (hasAnyPosts()) {
31750
+ <ion-infinite-scroll threshold="100px" [disabled]="!hasMorePosts() || pageComponent.isOffline()" (ionInfinite)="onInfiniteScroll($event)">
31751
+ <ion-infinite-scroll-content loadingSpinner="crescent"> </ion-infinite-scroll-content>
31752
+ </ion-infinite-scroll>
31753
+ }
31754
+ </ds-mobile-section>
31755
+ </ds-mobile-page-main>
31753
31756
  `, isInline: true, styles: [".pinned-posts-swiper-wrapper{padding:0;position:relative}.swiper-nav-buttons{display:contents}.swiper-nav-button{position:absolute;top:50%;transform:translateY(-50%);z-index:10}.swiper-nav-button:first-child{left:-48px}.swiper-nav-button:last-child{right:-48px}::ng-deep .swiper-nav-button button{border-radius:50%!important;width:48px!important;height:48px!important;padding:0!important}@media (max-width: 767px){.swiper-nav-buttons{display:none}}::ng-deep .pinned-posts-swiper .swiper-slide{width:100%;max-width:600px;height:auto}@media (min-width: 768px){::ng-deep .pinned-posts-swiper .swiper-slide{max-width:100%}}.swiper-post-item{width:100%;height:auto}::ng-deep .pinned-posts-swiper .swiper-slide ds-mobile-interactive-list-item-post{height:auto}::ng-deep .pinned-posts-swiper .swiper-wrapper{height:auto;align-items:flex-start}.post-list-wrapper{display:flex;flex-direction:column}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.community-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);margin:16px 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}ion-infinite-scroll{--color: var(--color-primary-surface)}ion-infinite-scroll-content{--color: var(--color-primary-surface)}ion-infinite-scroll-content::part(spinner){color:var(--color-primary-surface)}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "firstEntry", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showNotification", "notificationCount", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["notificationClick", "avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "paddingDesktop", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileInteractiveListItemPostComponent, selector: "ds-mobile-interactive-list-item-post", inputs: ["authorName", "authorRole", "timestamp", "avatarInitials", "avatarType", "avatarSrc", "avatarIconName", "showBadge", "variant", "align", "clickable", "enableLongPress", "moreActions"], outputs: ["postClick", "commentClick", "longPress"] }, { kind: "component", type: DsMobilePostComposerComponent, selector: "ds-mobile-post-composer", inputs: ["avatarInitials", "avatarType", "avatarSrc", "avatarIconName", "placeholder", "buttonText"], outputs: ["composerClick"] }, { kind: "component", type: DsMobileSwiperComponent, selector: "ds-mobile-swiper", inputs: ["slideWidth", "gap", "pagination", "autoHeight", "progressiveOpacity", "progressiveScale"] }, { kind: "component", type: PostContentComponent, selector: "post-content" }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { kind: "component", type: PostAttachmentsComponent, selector: "post-attachments" }, { kind: "component", type: PostActionsComponent, selector: "post-actions" }, { kind: "component", type: ActionLikeComponent, selector: "action-like", inputs: ["active", "count"], outputs: ["activeChange", "countChange", "likeClick"] }, { kind: "component", type: ActionCommentComponent, selector: "action-comment", inputs: ["count"], outputs: ["commentClick"] }, { kind: "component", type: DsMobileCardInlineFileComponent, selector: "ds-mobile-card-inline-file", inputs: ["fileName", "fileSize", "variant", "layout", "fileUrl"], outputs: ["fileClick"] }, { 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: DsMobileInlinePhotoComponent, selector: "ds-mobile-inline-photo", inputs: ["images", "loadingStates", "author", "maxVisible", "useGrid"], outputs: ["photoClick"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }] });
31754
31757
  }
31755
31758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileCommunityPageComponent, decorators: [{
@@ -31772,7 +31775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31772
31775
  DsMobileInlinePhotoComponent,
31773
31776
  DsMobileOfflineBannerComponent,
31774
31777
  IonInfiniteScroll,
31775
- IonInfiniteScrollContent
31778
+ IonInfiniteScrollContent,
31776
31779
  ], template: `
31777
31780
  <ds-mobile-page-main
31778
31781
  #pageComponent
@@ -31780,18 +31783,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31780
31783
  [notificationCount]="notificationService.unreadCount()"
31781
31784
  [avatarInitials]="userService.avatarInitials()"
31782
31785
  [avatarType]="userService.avatarType()"
31786
+ [contentLoading]="isLoading()"
31787
+ [contentLoadingVariant]="'card'"
31783
31788
  (notificationClick)="handleNotificationClick()"
31784
- (refresh)="handleRefresh($event)">
31785
-
31789
+ (refresh)="handleRefresh($event)"
31790
+ >
31786
31791
  <!-- Offline indicator -->
31787
31792
  @if (pageComponent.isOffline()) {
31788
- <ds-mobile-offline-banner
31789
- offline-indicator
31790
- title="Ingen internetforbindelse"
31791
- message="Nogle funktioner kan være utilgængelige">
31792
- </ds-mobile-offline-banner>
31793
+ <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
31793
31794
  }
31794
-
31795
+
31795
31796
  <!-- Post Composer in header-expandable -->
31796
31797
  <ds-mobile-post-composer
31797
31798
  header-content
@@ -31800,21 +31801,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31800
31801
  [avatarSrc]="userService.avatarSrc()"
31801
31802
  (composerClick)="openPostCreator()"
31802
31803
  />
31803
-
31804
+
31804
31805
  <!-- Pinned Posts Section -->
31805
- <ds-mobile-section
31806
- headline="Fastgjorte opslag"
31807
- icon="remixPushpinFill">
31806
+ <ds-mobile-section headline="Fastgjorte opslag" icon="remixPushpinFill">
31808
31807
  <div class="pinned-posts-swiper-wrapper">
31809
- <ds-mobile-swiper
31808
+ <ds-mobile-swiper
31810
31809
  #pinnedSwiper
31811
31810
  class="pinned-posts-swiper"
31812
- [slideWidth]="'100%'"
31811
+ [slideWidth]="'100%'"
31813
31812
  [gap]="32"
31814
31813
  [pagination]="true"
31815
31814
  [autoHeight]="true"
31816
31815
  [progressiveOpacity]="true"
31817
- [progressiveScale]="true">
31816
+ [progressiveScale]="true"
31817
+ >
31818
31818
  @for (post of pinnedPosts(); track post.id) {
31819
31819
  <div class="swiper-slide">
31820
31820
  <ds-mobile-interactive-list-item-post
@@ -31830,24 +31830,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31830
31830
  [moreActions]="true"
31831
31831
  (postClick)="openPost(post.id)"
31832
31832
  (commentClick)="openPost(post.id, true)"
31833
- (longPress)="handlePostLongPress(post.id, false)">
31834
-
31833
+ (longPress)="handlePostLongPress(post.id, false)"
31834
+ >
31835
31835
  <post-content>
31836
31836
  <post-text>{{ post.content }}</post-text>
31837
-
31837
+
31838
31838
  @if (post.id === 'post-4') {
31839
31839
  <post-attachments>
31840
- <ds-mobile-card-inline-file
31841
- [fileName]="'Husregler.pdf'"
31842
- [fileSize]="'245 KB'"
31843
- [variant]="'pdf'"
31844
- [layout]="'compact'"
31845
- (fileClick)="openHouseRulesPdf()">
31840
+ <ds-mobile-card-inline-file [fileName]="'Husregler.pdf'" [fileSize]="'245 KB'" [variant]="'pdf'" [layout]="'compact'" (fileClick)="openHouseRulesPdf()">
31846
31841
  </ds-mobile-card-inline-file>
31847
31842
  </post-attachments>
31848
31843
  }
31849
31844
  </post-content>
31850
-
31845
+
31851
31846
  <post-actions>
31852
31847
  <action-like [count]="post.likeCount" [active]="post.isLiked" />
31853
31848
  <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
@@ -31856,7 +31851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31856
31851
  </div>
31857
31852
  }
31858
31853
  </ds-mobile-swiper>
31859
-
31854
+
31860
31855
  <!-- Navigation Buttons -->
31861
31856
  <div class="swiper-nav-buttons">
31862
31857
  <ds-icon-button
@@ -31880,159 +31875,144 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31880
31875
  </div>
31881
31876
  </div>
31882
31877
  </ds-mobile-section>
31883
-
31878
+
31884
31879
  <!-- All Posts Section -->
31885
- <ds-mobile-section
31886
- headline="Alle opslag">
31880
+ <ds-mobile-section headline="Alle opslag">
31887
31881
  @if (hasAnyPosts()) {
31888
31882
  <div class="post-list-wrapper">
31889
31883
  <!-- All Posts Loop -->
31890
31884
  @for (post of allPosts(); track post.id) {
31891
- @if (post.hasInlinePhotos && post.id === 'post-2') {
31892
- <!-- Post 2: With multiple images (grid layout) -->
31893
- <ds-mobile-interactive-list-item-post
31894
- [authorName]="post.authorName"
31895
- [authorRole]="post.authorRole"
31896
- [timestamp]="post.timestamp"
31897
- [avatarInitials]="post.avatarInitials || ''"
31898
- [avatarType]="post.avatarType"
31899
- [clickable]="true"
31900
- [moreActions]="true"
31901
- (postClick)="openPost(post.id)"
31902
- (commentClick)="openPost(post.id, true)"
31903
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31904
-
31905
- <post-content>
31906
- <post-text>{{ post.content }}</post-text>
31907
- <ds-mobile-inline-photo
31908
- [images]="[
31909
- '/assets/Dummy-photos/balcony-view.jpg',
31910
- '/assets/Dummy-photos/staircase.jpg',
31911
- '/assets/Dummy-photos/park.jpg',
31912
- '/assets/Dummy-photos/yard.jpg'
31913
- ]"
31914
- [author]="{
31915
- name: 'Sophie Andersen',
31916
- role: 'Lejer',
31917
- avatarInitials: 'SA',
31918
- avatarType: 'initials',
31919
- timestamp: '4t siden'
31920
- }"
31921
- />
31922
- </post-content>
31923
-
31924
- <post-actions>
31925
- <action-like [active]="post.isLiked" [count]="post.likeCount" />
31926
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31927
- </post-actions>
31928
- </ds-mobile-interactive-list-item-post>
31929
- } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31930
- <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31931
- <ds-mobile-interactive-list-item-post
31932
- [authorName]="post.authorName"
31933
- [authorRole]="post.authorRole"
31934
- [timestamp]="post.timestamp"
31935
- [avatarInitials]="post.avatarInitials || ''"
31936
- [avatarType]="post.avatarType"
31937
- [showBadge]="post.showBadge || false"
31938
- [clickable]="true"
31939
- [moreActions]="true"
31940
- (postClick)="openPost(post.id)"
31941
- (commentClick)="openPost(post.id, true)"
31942
- (longPress)="handlePostLongPress(post.id, false)">
31943
-
31944
- <post-content>
31885
+ @if (post.hasInlinePhotos && post.id === 'post-2') {
31886
+ <!-- Post 2: With multiple images (grid layout) -->
31887
+ <ds-mobile-interactive-list-item-post
31888
+ [authorName]="post.authorName"
31889
+ [authorRole]="post.authorRole"
31890
+ [timestamp]="post.timestamp"
31891
+ [avatarInitials]="post.avatarInitials || ''"
31892
+ [avatarType]="post.avatarType"
31893
+ [clickable]="true"
31894
+ [moreActions]="true"
31895
+ (postClick)="openPost(post.id)"
31896
+ (commentClick)="openPost(post.id, true)"
31897
+ (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')"
31898
+ >
31899
+ <post-content>
31900
+ <post-text>{{ post.content }}</post-text>
31901
+ <ds-mobile-inline-photo
31902
+ [images]="['/assets/Dummy-photos/balcony-view.jpg', '/assets/Dummy-photos/staircase.jpg', '/assets/Dummy-photos/park.jpg', '/assets/Dummy-photos/yard.jpg']"
31903
+ [author]="{
31904
+ name: 'Sophie Andersen',
31905
+ role: 'Lejer',
31906
+ avatarInitials: 'SA',
31907
+ avatarType: 'initials',
31908
+ timestamp: '4t siden',
31909
+ }"
31910
+ />
31911
+ </post-content>
31912
+
31913
+ <post-actions>
31914
+ <action-like [active]="post.isLiked" [count]="post.likeCount" />
31915
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31916
+ </post-actions>
31917
+ </ds-mobile-interactive-list-item-post>
31918
+ } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31919
+ <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31920
+ <ds-mobile-interactive-list-item-post
31921
+ [authorName]="post.authorName"
31922
+ [authorRole]="post.authorRole"
31923
+ [timestamp]="post.timestamp"
31924
+ [avatarInitials]="post.avatarInitials || ''"
31925
+ [avatarType]="post.avatarType"
31926
+ [showBadge]="post.showBadge || false"
31927
+ [clickable]="true"
31928
+ [moreActions]="true"
31929
+ (postClick)="openPost(post.id)"
31930
+ (commentClick)="openPost(post.id, true)"
31931
+ (longPress)="handlePostLongPress(post.id, false)"
31932
+ >
31933
+ <post-content>
31934
+ <post-text>{{ post.content }}</post-text>
31935
+ <ds-mobile-inline-photo
31936
+ [images]="[
31937
+ '/assets/Dummy-photos/mailboxes.jpg',
31938
+ '/assets/Dummy-photos/staircase.jpg',
31939
+ '/assets/Dummy-photos/yard.jpg',
31940
+ '/assets/Dummy-photos/park.jpg',
31941
+ '/assets/Dummy-photos/balcony-view.jpg',
31942
+ '/assets/Dummy-photos/handyman.jpg',
31943
+ ]"
31944
+ [author]="{
31945
+ name: 'Karen Nielsen',
31946
+ role: 'Ejendomsadministrator',
31947
+ avatarInitials: 'KN',
31948
+ avatarType: 'initials',
31949
+ timestamp: '2d siden',
31950
+ }"
31951
+ [maxVisible]="5"
31952
+ />
31953
+ </post-content>
31954
+
31955
+ <post-actions>
31956
+ <action-like [count]="post.likeCount" />
31957
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31958
+ </post-actions>
31959
+ </ds-mobile-interactive-list-item-post>
31960
+ } @else {
31961
+ <!-- Regular Post -->
31962
+ <ds-mobile-interactive-list-item-post
31963
+ [authorName]="post.authorName"
31964
+ [authorRole]="post.authorRole"
31965
+ [timestamp]="post.timestamp"
31966
+ [avatarType]="post.avatarType"
31967
+ [avatarSrc]="post.avatarSrc || ''"
31968
+ [avatarInitials]="post.avatarInitials || ''"
31969
+ [clickable]="true"
31970
+ [moreActions]="true"
31971
+ (postClick)="openPost(post.id)"
31972
+ (commentClick)="openPost(post.id, true)"
31973
+ (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')"
31974
+ >
31975
+ <post-content>
31976
+ @if (post.content) {
31945
31977
  <post-text>{{ post.content }}</post-text>
31946
- <ds-mobile-inline-photo
31947
- [images]="[
31948
- '/assets/Dummy-photos/mailboxes.jpg',
31949
- '/assets/Dummy-photos/staircase.jpg',
31950
- '/assets/Dummy-photos/yard.jpg',
31951
- '/assets/Dummy-photos/park.jpg',
31952
- '/assets/Dummy-photos/balcony-view.jpg',
31953
- '/assets/Dummy-photos/handyman.jpg'
31954
- ]"
31955
- [author]="{
31956
- name: 'Karen Nielsen',
31957
- role: 'Ejendomsadministrator',
31958
- avatarInitials: 'KN',
31959
- avatarType: 'initials',
31960
- timestamp: '2d siden'
31961
- }"
31962
- [maxVisible]="5"
31963
- />
31964
- </post-content>
31965
-
31966
- <post-actions>
31967
- <action-like [count]="post.likeCount" />
31968
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31969
- </post-actions>
31970
- </ds-mobile-interactive-list-item-post>
31971
- } @else {
31972
- <!-- Regular Post -->
31973
- <ds-mobile-interactive-list-item-post
31974
- [authorName]="post.authorName"
31975
- [authorRole]="post.authorRole"
31976
- [timestamp]="post.timestamp"
31977
- [avatarType]="post.avatarType"
31978
- [avatarSrc]="post.avatarSrc || ''"
31979
- [avatarInitials]="post.avatarInitials || ''"
31980
- [clickable]="true"
31981
- [moreActions]="true"
31982
- (postClick)="openPost(post.id)"
31983
- (commentClick)="openPost(post.id, true)"
31984
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31985
-
31986
- <post-content>
31987
- @if (post.content) {
31988
- <post-text>{{ post.content }}</post-text>
31989
- }
31990
- @if (post.imageSrc) {
31991
- <post-media>
31992
- <img
31993
- [src]="post.imageSrc"
31994
- [alt]="post.imageAlt || 'Posted image'"
31995
- class="clickable-image"
31996
- (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
31997
- />
31998
- </post-media>
31999
- }
32000
- </post-content>
32001
-
32002
- <post-actions>
32003
- <action-like [count]="post.likeCount" [active]="post.isLiked" />
32004
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
32005
- </post-actions>
32006
- </ds-mobile-interactive-list-item-post>
32007
- }
31978
+ }
31979
+ @if (post.imageSrc) {
31980
+ <post-media>
31981
+ <img
31982
+ [src]="post.imageSrc"
31983
+ [alt]="post.imageAlt || 'Posted image'"
31984
+ class="clickable-image"
31985
+ (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
31986
+ />
31987
+ </post-media>
31988
+ }
31989
+ </post-content>
31990
+
31991
+ <post-actions>
31992
+ <action-like [count]="post.likeCount" [active]="post.isLiked" />
31993
+ <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31994
+ </post-actions>
31995
+ </ds-mobile-interactive-list-item-post>
32008
31996
  }
32009
- </div>
32010
- } @else {
32011
- <!-- Empty State -->
32012
- <div class="community-empty-state">
32013
- <img
32014
- src="/assets/Empty%20state-chat.png"
32015
- alt="Ingen opslag endnu"
32016
- class="empty-state-image"
32017
- />
32018
- <h3 class="empty-state-title">Ingen opslag endnu</h3>
32019
- <p class="empty-state-description">Vær den første til at dele noget med dit fællesskab</p>
32020
- </div>
32021
- }
32022
-
32023
- <!-- Infinite Scroll -->
32024
- @if (hasAnyPosts()) {
32025
- <ion-infinite-scroll
32026
- threshold="100px"
32027
- [disabled]="!hasMorePosts() || pageComponent.isOffline()"
32028
- (ionInfinite)="onInfiniteScroll($event)">
32029
- <ion-infinite-scroll-content
32030
- loadingSpinner="crescent">
32031
- </ion-infinite-scroll-content>
32032
- </ion-infinite-scroll>
32033
- }
32034
- </ds-mobile-section>
32035
- </ds-mobile-page-main>
31997
+ }
31998
+ </div>
31999
+ } @else {
32000
+ <!-- Empty State -->
32001
+ <div class="community-empty-state">
32002
+ <img src="/assets/Empty%20state-chat.png" alt="Ingen opslag endnu" class="empty-state-image" />
32003
+ <h3 class="empty-state-title">Ingen opslag endnu</h3>
32004
+ <p class="empty-state-description">Vær den første til at dele noget med dit fællesskab</p>
32005
+ </div>
32006
+ }
32007
+
32008
+ <!-- Infinite Scroll -->
32009
+ @if (hasAnyPosts()) {
32010
+ <ion-infinite-scroll threshold="100px" [disabled]="!hasMorePosts() || pageComponent.isOffline()" (ionInfinite)="onInfiniteScroll($event)">
32011
+ <ion-infinite-scroll-content loadingSpinner="crescent"> </ion-infinite-scroll-content>
32012
+ </ion-infinite-scroll>
32013
+ }
32014
+ </ds-mobile-section>
32015
+ </ds-mobile-page-main>
32036
32016
  `, styles: [".pinned-posts-swiper-wrapper{padding:0;position:relative}.swiper-nav-buttons{display:contents}.swiper-nav-button{position:absolute;top:50%;transform:translateY(-50%);z-index:10}.swiper-nav-button:first-child{left:-48px}.swiper-nav-button:last-child{right:-48px}::ng-deep .swiper-nav-button button{border-radius:50%!important;width:48px!important;height:48px!important;padding:0!important}@media (max-width: 767px){.swiper-nav-buttons{display:none}}::ng-deep .pinned-posts-swiper .swiper-slide{width:100%;max-width:600px;height:auto}@media (min-width: 768px){::ng-deep .pinned-posts-swiper .swiper-slide{max-width:100%}}.swiper-post-item{width:100%;height:auto}::ng-deep .pinned-posts-swiper .swiper-slide ds-mobile-interactive-list-item-post{height:auto}::ng-deep .pinned-posts-swiper .swiper-wrapper{height:auto;align-items:flex-start}.post-list-wrapper{display:flex;flex-direction:column}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.community-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);margin:16px 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}ion-infinite-scroll{--color: var(--color-primary-surface)}ion-infinite-scroll-content{--color: var(--color-primary-surface)}ion-infinite-scroll-content::part(spinner){color:var(--color-primary-surface)}\n"] }]
32037
32017
  }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }, { type: DsMobileBottomSheetService }, { type: DsMobileLightboxService }, { type: DsMobilePostDetailModalService }, { type: UserService }, { type: PostsService }], propDecorators: { pageComponent: [{
32038
32018
  type: ViewChild,
@@ -32288,7 +32268,12 @@ class MobileHandbookPageComponent {
32288
32268
  ];
32289
32269
  constructor(userService) {
32290
32270
  this.userService = userService;
32271
+ const randomTimeout = Math.floor(Math.random() * 2000);
32272
+ setTimeout(() => {
32273
+ this.isLoading.set(false);
32274
+ }, randomTimeout);
32291
32275
  }
32276
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
32292
32277
  async handleNotificationClick() {
32293
32278
  const tapped = await this.notificationModal.open();
32294
32279
  if (tapped)
@@ -32309,7 +32294,7 @@ class MobileHandbookPageComponent {
32309
32294
  }
32310
32295
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHandbookPageComponent, deps: [{ token: UserService }], target: i0.ɵɵFactoryTarget.Component });
32311
32296
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MobileHandbookPageComponent, isStandalone: true, selector: "app-mobile-handbook-page", viewQueries: [{ propertyName: "pageComponent", first: true, predicate: ["pageComponent"], descendants: true }], ngImport: i0, template: `
32312
- <ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
32297
+ <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)">
32313
32298
  <!-- Offline indicator -->
32314
32299
  @if (pageComponent.isOffline()) {
32315
32300
  <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
@@ -32335,7 +32320,7 @@ class MobileHandbookPageComponent {
32335
32320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHandbookPageComponent, decorators: [{
32336
32321
  type: Component,
32337
32322
  args: [{ selector: 'app-mobile-handbook-page', standalone: true, imports: [DsMobilePageMainComponent, DsMobileSectionComponent, DsMobileHandbookFolderComponent, DsMobileOfflineBannerComponent], template: `
32338
- <ds-mobile-page-main #pageComponent title="Håndbog" [notificationCount]="notificationService.unreadCount()" [avatarInitials]="userService.avatarInitials()" [avatarType]="userService.avatarType()" (notificationClick)="handleNotificationClick()" (refresh)="handleRefresh($event)">
32323
+ <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)">
32339
32324
  <!-- Offline indicator -->
32340
32325
  @if (pageComponent.isOffline()) {
32341
32326
  <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
@@ -33540,19 +33525,25 @@ class MobileInquiriesPageComponent {
33540
33525
  this.userService = userService;
33541
33526
  this.navCtrl = navCtrl;
33542
33527
  this.newInquiryModal = newInquiryModal;
33528
+ // Vis skeleton loader med en random delay mellem 0 og 2000 ms
33529
+ const randomTimeout = Math.floor(Math.random() * 2000);
33530
+ setTimeout(() => {
33531
+ this.isLoading.set(false);
33532
+ }, randomTimeout);
33543
33533
  }
33534
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
33544
33535
  filterStatus = signal('all', ...(ngDevMode ? [{ debugName: "filterStatus" }] : []));
33545
33536
  tabItems = [
33546
33537
  { id: 'all', label: 'Alle' },
33547
33538
  { id: 'open', label: 'Åben' },
33548
- { id: 'closed', label: 'Lukket' }
33539
+ { id: 'closed', label: 'Lukket' },
33549
33540
  ];
33550
33541
  filteredInquiries = computed(() => {
33551
33542
  const all = this.inquiriesService.inquiries();
33552
33543
  const status = this.filterStatus();
33553
33544
  if (status === 'all')
33554
33545
  return all;
33555
- return all.filter(i => i.status === status);
33546
+ return all.filter((i) => i.status === status);
33556
33547
  }, ...(ngDevMode ? [{ debugName: "filteredInquiries" }] : []));
33557
33548
  setFilter(status) {
33558
33549
  this.filterStatus.set(status);
@@ -33564,7 +33555,7 @@ class MobileInquiriesPageComponent {
33564
33555
  console.log('Opening inquiry:', inquiryId);
33565
33556
  // Navigate to inquiry detail page with custom transition (absolute path outside tabs for animations)
33566
33557
  this.navCtrl.navigateForward([`/inquiry-detail/${inquiryId}`], {
33567
- animation: customPageTransition
33558
+ animation: customPageTransition,
33568
33559
  });
33569
33560
  }
33570
33561
  showInquiryActions(inquiryId) {
@@ -33607,7 +33598,7 @@ class MobileInquiriesPageComponent {
33607
33598
  });
33608
33599
  // Close the modal
33609
33600
  await this.newInquiryModal.close();
33610
- }
33601
+ },
33611
33602
  });
33612
33603
  }
33613
33604
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, deps: [{ token: UserService }, { token: i1.NavController }, { token: DsMobileNewInquiryModalService }], target: i0.ɵɵFactoryTarget.Component });
@@ -33618,27 +33609,21 @@ class MobileInquiriesPageComponent {
33618
33609
  [notificationCount]="notificationService.unreadCount()"
33619
33610
  [avatarInitials]="userService.avatarInitials()"
33620
33611
  [avatarType]="userService.avatarType()"
33612
+ [contentLoading]="isLoading()"
33613
+ [contentLoadingVariant]="'list'"
33621
33614
  (notificationClick)="handleNotificationClick()"
33622
- (refresh)="handleRefresh($event)">
33623
-
33615
+ (refresh)="handleRefresh($event)"
33616
+ >
33624
33617
  <!-- Offline indicator -->
33625
33618
  @if (pageComponent.isOffline()) {
33626
- <ds-mobile-offline-banner
33627
- offline-indicator
33628
- title="Ingen internetforbindelse"
33629
- message="Nogle funktioner kan være utilgængelige">
33630
- </ds-mobile-offline-banner>
33619
+ <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
33631
33620
  }
33632
-
33621
+
33633
33622
  <!-- Filter tabs in header -->
33634
33623
  <div header-content>
33635
- <ds-mobile-inline-tabs
33636
- [tabs]="tabItems"
33637
- [activeTab]="filterStatus()"
33638
- (tabChange)="setFilter($any($event))">
33639
- </ds-mobile-inline-tabs>
33624
+ <ds-mobile-inline-tabs [tabs]="tabItems" [activeTab]="filterStatus()" (tabChange)="setFilter($any($event))"> </ds-mobile-inline-tabs>
33640
33625
  </div>
33641
-
33626
+
33642
33627
  <ds-mobile-section>
33643
33628
  @if (filteredInquiries().length > 0) {
33644
33629
  <div class="inquiry-list-wrapper">
@@ -33652,7 +33637,8 @@ class MobileInquiriesPageComponent {
33652
33637
  [clickable]="true"
33653
33638
  [showChevron]="false"
33654
33639
  [enableLongPress]="false"
33655
- (inquiryClick)="openInquiryDetail(inquiry.id)">
33640
+ (inquiryClick)="openInquiryDetail(inquiry.id)"
33641
+ >
33656
33642
  </ds-mobile-interactive-list-item-inquiry>
33657
33643
  }
33658
33644
  </div>
@@ -33676,12 +33662,7 @@ class MobileInquiriesPageComponent {
33676
33662
  </ds-mobile-page-main>
33677
33663
 
33678
33664
  <!-- FAB for creating new inquiry -->
33679
- <ds-mobile-fab
33680
- icon="remixAddLine"
33681
- position="bottom-right"
33682
- ariaLabel="Create new inquiry"
33683
- (clicked)="createNewInquiry()">
33684
- </ds-mobile-fab>
33665
+ <ds-mobile-fab icon="remixAddLine" position="bottom-right" ariaLabel="Create new inquiry" (clicked)="createNewInquiry()"> </ds-mobile-fab>
33685
33666
  `, isInline: true, styles: [".inquiry-list-wrapper{display:flex;flex-direction:column;margin-top:-12px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);margin-top:-16px;z-index:4}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "firstEntry", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showNotification", "notificationCount", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["notificationClick", "avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "paddingDesktop", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileIllustrationComponent, selector: "ds-mobile-illustration", inputs: ["variant", "size", "alt"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "align", "clickable", "showChevron", "enableLongPress", "moreActions"], outputs: ["inquiryClick", "longPress"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: DsMobileFabComponent, selector: "ds-mobile-fab", inputs: ["icon", "position", "size", "ariaLabel", "disabled"], outputs: ["clicked"] }] });
33686
33667
  }
33687
33668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, decorators: [{
@@ -33693,9 +33674,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33693
33674
  DsMobileInteractiveListItemInquiryComponent,
33694
33675
  DsMobileInlineTabsComponent,
33695
33676
  DsMobileOfflineBannerComponent,
33696
- DsMobileFabComponent
33677
+ DsMobileFabComponent,
33697
33678
  ], host: {
33698
- class: 'ion-page'
33679
+ class: 'ion-page',
33699
33680
  }, template: `
33700
33681
  <ds-mobile-page-main
33701
33682
  #pageComponent
@@ -33703,27 +33684,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33703
33684
  [notificationCount]="notificationService.unreadCount()"
33704
33685
  [avatarInitials]="userService.avatarInitials()"
33705
33686
  [avatarType]="userService.avatarType()"
33687
+ [contentLoading]="isLoading()"
33688
+ [contentLoadingVariant]="'list'"
33706
33689
  (notificationClick)="handleNotificationClick()"
33707
- (refresh)="handleRefresh($event)">
33708
-
33690
+ (refresh)="handleRefresh($event)"
33691
+ >
33709
33692
  <!-- Offline indicator -->
33710
33693
  @if (pageComponent.isOffline()) {
33711
- <ds-mobile-offline-banner
33712
- offline-indicator
33713
- title="Ingen internetforbindelse"
33714
- message="Nogle funktioner kan være utilgængelige">
33715
- </ds-mobile-offline-banner>
33694
+ <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
33716
33695
  }
33717
-
33696
+
33718
33697
  <!-- Filter tabs in header -->
33719
33698
  <div header-content>
33720
- <ds-mobile-inline-tabs
33721
- [tabs]="tabItems"
33722
- [activeTab]="filterStatus()"
33723
- (tabChange)="setFilter($any($event))">
33724
- </ds-mobile-inline-tabs>
33699
+ <ds-mobile-inline-tabs [tabs]="tabItems" [activeTab]="filterStatus()" (tabChange)="setFilter($any($event))"> </ds-mobile-inline-tabs>
33725
33700
  </div>
33726
-
33701
+
33727
33702
  <ds-mobile-section>
33728
33703
  @if (filteredInquiries().length > 0) {
33729
33704
  <div class="inquiry-list-wrapper">
@@ -33737,7 +33712,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33737
33712
  [clickable]="true"
33738
33713
  [showChevron]="false"
33739
33714
  [enableLongPress]="false"
33740
- (inquiryClick)="openInquiryDetail(inquiry.id)">
33715
+ (inquiryClick)="openInquiryDetail(inquiry.id)"
33716
+ >
33741
33717
  </ds-mobile-interactive-list-item-inquiry>
33742
33718
  }
33743
33719
  </div>
@@ -33761,12 +33737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33761
33737
  </ds-mobile-page-main>
33762
33738
 
33763
33739
  <!-- FAB for creating new inquiry -->
33764
- <ds-mobile-fab
33765
- icon="remixAddLine"
33766
- position="bottom-right"
33767
- ariaLabel="Create new inquiry"
33768
- (clicked)="createNewInquiry()">
33769
- </ds-mobile-fab>
33740
+ <ds-mobile-fab icon="remixAddLine" position="bottom-right" ariaLabel="Create new inquiry" (clicked)="createNewInquiry()"> </ds-mobile-fab>
33770
33741
  `, styles: [".inquiry-list-wrapper{display:flex;flex-direction:column;margin-top:-12px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);margin-top:-16px;z-index:4}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}\n"] }]
33771
33742
  }], ctorParameters: () => [{ type: UserService }, { type: i1.NavController }, { type: DsMobileNewInquiryModalService }], propDecorators: { pageComponent: [{
33772
33743
  type: ViewChild,
@@ -39033,5 +39004,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
39033
39004
  * Generated bundle index. Do not edit.
39034
39005
  */
39035
39006
 
39036
- export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingCancelConfirmationComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingDetailSheetComponent, DsMobileBookingDetailSheetService, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCountBadgeComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileNotificationButtonComponent, DsMobileNotificationModalComponent, DsMobileNotificationModalService, DsMobileNotificationPromptComponent, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileToggleComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, NOTIFICATION_ICON_MAP, NotificationPromptService, NotificationService, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket };
39007
+ export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingCancelConfirmationComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingDetailSheetComponent, DsMobileBookingDetailSheetService, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCountBadgeComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileNotificationButtonComponent, DsMobileNotificationModalComponent, DsMobileNotificationModalService, DsMobileNotificationPromptComponent, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileToggleComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, NOTIFICATION_ICON_MAP, NotificationPromptService, NotificationService, PageLoadingService, PeerChatLauncherService, PeerMessagingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, RelativeTimePipe, SAMPLE_NOTIFICATIONS, SectionHeaderComponent, ServicesPageComponent, SettingsModalService, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, VENDOR_MODAL_SERVICE, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition, dateBucket, isPeerDirectConversation, isPeerGroupConversation, peerTenantToParticipant };
39037
39008
  //# sourceMappingURL=propbinder-mobile-design.mjs.map