@propbinder/mobile-design 0.3.42 → 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
  /**
@@ -31221,7 +31233,7 @@ class MobileCommunityPageComponent {
31221
31233
  pinnedPosts = computed(() => {
31222
31234
  // Get all posts that are explicitly marked as pinned
31223
31235
  const allPosts = this.postsService.posts();
31224
- return allPosts.filter(post => post.isPinned === true);
31236
+ return allPosts.filter((post) => post.isPinned === true);
31225
31237
  }, ...(ngDevMode ? [{ debugName: "pinnedPosts" }] : []));
31226
31238
  // Computed to check if there are any posts to display
31227
31239
  hasAnyPosts = computed(() => {
@@ -31239,7 +31251,13 @@ class MobileCommunityPageComponent {
31239
31251
  this.postModal = postModal;
31240
31252
  this.userService = userService;
31241
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);
31242
31259
  }
31260
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
31243
31261
  /**
31244
31262
  * Handle infinite scroll event
31245
31263
  * Loads more posts when user scrolls to bottom
@@ -31290,11 +31308,11 @@ class MobileCommunityPageComponent {
31290
31308
  ...post,
31291
31309
  postId: post.id,
31292
31310
  avatarType: post.avatarType === 'icon' ? undefined : post.avatarType,
31293
- focusComment
31311
+ focusComment,
31294
31312
  };
31295
31313
  await this.postModal.open(postData, {
31296
31314
  currentUserName: 'Lars Mikkelsen', // Current user name
31297
- currentUserInitials: this.userService.avatarInitials()
31315
+ currentUserInitials: this.userService.avatarInitials(),
31298
31316
  });
31299
31317
  }
31300
31318
  }
@@ -31305,11 +31323,11 @@ class MobileCommunityPageComponent {
31305
31323
  component: DsMobilePostCreateBottomSheetComponent,
31306
31324
  componentProps: {
31307
31325
  // This helps the component know it should auto-focus
31308
- autoFocus: true
31326
+ autoFocus: true,
31309
31327
  },
31310
31328
  breakpoints: [0, 0.95, 1],
31311
31329
  initialBreakpoint: 0.95,
31312
- handle: true
31330
+ handle: true,
31313
31331
  });
31314
31332
  // Handle the result when the sheet is dismissed
31315
31333
  const result = await sheet.onWillDismiss();
@@ -31330,7 +31348,7 @@ class MobileCommunityPageComponent {
31330
31348
  isLiked: false,
31331
31349
  likeCount: 0,
31332
31350
  commentCount: 0,
31333
- comments: []
31351
+ comments: [],
31334
31352
  };
31335
31353
  // Add to the beginning of the posts array via service
31336
31354
  this.postsService.addPost(newPost);
@@ -31348,7 +31366,7 @@ class MobileCommunityPageComponent {
31348
31366
  name: 'Sophie Andersen',
31349
31367
  role: 'Lejer',
31350
31368
  avatarInitials: 'SA',
31351
- timestamp: '4t siden'
31369
+ timestamp: '4t siden',
31352
31370
  };
31353
31371
  // Open the lightbox with the image
31354
31372
  await this.lightbox.open({
@@ -31361,14 +31379,14 @@ class MobileCommunityPageComponent {
31361
31379
  description: description,
31362
31380
  isLiked: true,
31363
31381
  likeCount: 156,
31364
- commentCount: 34
31365
- }
31382
+ commentCount: 34,
31383
+ },
31366
31384
  ],
31367
31385
  author: authorMeta,
31368
31386
  enableZoom: true,
31369
31387
  showControls: false, // Single image, no need for controls
31370
31388
  showActions: true, // Show like & comment actions
31371
- showInfo: true
31389
+ showInfo: true,
31372
31390
  });
31373
31391
  }
31374
31392
  async openHouseRulesPdf() {
@@ -31378,7 +31396,7 @@ class MobileCommunityPageComponent {
31378
31396
  name: 'Karen Nielsen',
31379
31397
  role: 'Ejendomsadministrator',
31380
31398
  avatarInitials: 'KN',
31381
- timestamp: '2d siden'
31399
+ timestamp: '2d siden',
31382
31400
  };
31383
31401
  // Open the PDF lightbox
31384
31402
  // Use absolute path for production deployment (Vercel, etc.)
@@ -31389,9 +31407,9 @@ class MobileCommunityPageComponent {
31389
31407
  title: 'House Rules',
31390
31408
  description: 'Building regulations and community guidelines',
31391
31409
  fileSize: 250880, // 245 KB in bytes
31392
- pageCount: 8
31410
+ pageCount: 8,
31393
31411
  },
31394
- author: authorMeta
31412
+ author: authorMeta,
31395
31413
  });
31396
31414
  }
31397
31415
  /**
@@ -31402,13 +31420,13 @@ class MobileCommunityPageComponent {
31402
31420
  const sheet = await this.bottomSheet.create({
31403
31421
  component: DsMobileActionsBottomSheetComponent,
31404
31422
  componentProps: {
31405
- isOwnContent: isOwnPost
31423
+ isOwnContent: isOwnPost,
31406
31424
  },
31407
31425
  breakpoints: [0, 1],
31408
31426
  initialBreakpoint: 1,
31409
31427
  handle: true,
31410
31428
  backdropDismiss: true,
31411
- cssClass: 'auto-height'
31429
+ cssClass: 'auto-height',
31412
31430
  });
31413
31431
  const result = await sheet.onWillDismiss();
31414
31432
  if (result.role === 'select' && result.data) {
@@ -31429,13 +31447,13 @@ class MobileCommunityPageComponent {
31429
31447
  autoFocus: true,
31430
31448
  isEditMode: true,
31431
31449
  postId: postId,
31432
- initialContent: post.content
31450
+ initialContent: post.content,
31433
31451
  },
31434
31452
  breakpoints: [0, 0.95, 1],
31435
31453
  initialBreakpoint: 0.95,
31436
31454
  handle: true,
31437
31455
  backdropBlur: true,
31438
- backdropOpacity: 0.6
31456
+ backdropOpacity: 0.6,
31439
31457
  });
31440
31458
  // Handle the result when the sheet is dismissed
31441
31459
  const editResult = await editSheet.onWillDismiss();
@@ -31444,7 +31462,7 @@ class MobileCommunityPageComponent {
31444
31462
  // Update the post via service
31445
31463
  this.postsService.updatePost(postId, {
31446
31464
  content: editResult.data.content,
31447
- timestamp: 'Lige nu'
31465
+ timestamp: 'Lige nu',
31448
31466
  });
31449
31467
  }
31450
31468
  break;
@@ -31461,7 +31479,7 @@ class MobileCommunityPageComponent {
31461
31479
  if (likePost) {
31462
31480
  this.postsService.updatePost(postId, {
31463
31481
  isLiked: !likePost.isLiked,
31464
- likeCount: likePost.isLiked ? likePost.likeCount - 1 : likePost.likeCount + 1
31482
+ likeCount: likePost.isLiked ? likePost.likeCount - 1 : likePost.likeCount + 1,
31465
31483
  });
31466
31484
  }
31467
31485
  break;
@@ -31505,18 +31523,16 @@ class MobileCommunityPageComponent {
31505
31523
  [notificationCount]="notificationService.unreadCount()"
31506
31524
  [avatarInitials]="userService.avatarInitials()"
31507
31525
  [avatarType]="userService.avatarType()"
31526
+ [contentLoading]="isLoading()"
31527
+ [contentLoadingVariant]="'card'"
31508
31528
  (notificationClick)="handleNotificationClick()"
31509
- (refresh)="handleRefresh($event)">
31510
-
31529
+ (refresh)="handleRefresh($event)"
31530
+ >
31511
31531
  <!-- Offline indicator -->
31512
31532
  @if (pageComponent.isOffline()) {
31513
- <ds-mobile-offline-banner
31514
- offline-indicator
31515
- title="Ingen internetforbindelse"
31516
- message="Nogle funktioner kan være utilgængelige">
31517
- </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>
31518
31534
  }
31519
-
31535
+
31520
31536
  <!-- Post Composer in header-expandable -->
31521
31537
  <ds-mobile-post-composer
31522
31538
  header-content
@@ -31525,21 +31541,20 @@ class MobileCommunityPageComponent {
31525
31541
  [avatarSrc]="userService.avatarSrc()"
31526
31542
  (composerClick)="openPostCreator()"
31527
31543
  />
31528
-
31544
+
31529
31545
  <!-- Pinned Posts Section -->
31530
- <ds-mobile-section
31531
- headline="Fastgjorte opslag"
31532
- icon="remixPushpinFill">
31546
+ <ds-mobile-section headline="Fastgjorte opslag" icon="remixPushpinFill">
31533
31547
  <div class="pinned-posts-swiper-wrapper">
31534
- <ds-mobile-swiper
31548
+ <ds-mobile-swiper
31535
31549
  #pinnedSwiper
31536
31550
  class="pinned-posts-swiper"
31537
- [slideWidth]="'100%'"
31551
+ [slideWidth]="'100%'"
31538
31552
  [gap]="32"
31539
31553
  [pagination]="true"
31540
31554
  [autoHeight]="true"
31541
31555
  [progressiveOpacity]="true"
31542
- [progressiveScale]="true">
31556
+ [progressiveScale]="true"
31557
+ >
31543
31558
  @for (post of pinnedPosts(); track post.id) {
31544
31559
  <div class="swiper-slide">
31545
31560
  <ds-mobile-interactive-list-item-post
@@ -31555,24 +31570,19 @@ class MobileCommunityPageComponent {
31555
31570
  [moreActions]="true"
31556
31571
  (postClick)="openPost(post.id)"
31557
31572
  (commentClick)="openPost(post.id, true)"
31558
- (longPress)="handlePostLongPress(post.id, false)">
31559
-
31573
+ (longPress)="handlePostLongPress(post.id, false)"
31574
+ >
31560
31575
  <post-content>
31561
31576
  <post-text>{{ post.content }}</post-text>
31562
-
31577
+
31563
31578
  @if (post.id === 'post-4') {
31564
31579
  <post-attachments>
31565
- <ds-mobile-card-inline-file
31566
- [fileName]="'Husregler.pdf'"
31567
- [fileSize]="'245 KB'"
31568
- [variant]="'pdf'"
31569
- [layout]="'compact'"
31570
- (fileClick)="openHouseRulesPdf()">
31580
+ <ds-mobile-card-inline-file [fileName]="'Husregler.pdf'" [fileSize]="'245 KB'" [variant]="'pdf'" [layout]="'compact'" (fileClick)="openHouseRulesPdf()">
31571
31581
  </ds-mobile-card-inline-file>
31572
31582
  </post-attachments>
31573
31583
  }
31574
31584
  </post-content>
31575
-
31585
+
31576
31586
  <post-actions>
31577
31587
  <action-like [count]="post.likeCount" [active]="post.isLiked" />
31578
31588
  <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
@@ -31581,7 +31591,7 @@ class MobileCommunityPageComponent {
31581
31591
  </div>
31582
31592
  }
31583
31593
  </ds-mobile-swiper>
31584
-
31594
+
31585
31595
  <!-- Navigation Buttons -->
31586
31596
  <div class="swiper-nav-buttons">
31587
31597
  <ds-icon-button
@@ -31605,159 +31615,144 @@ class MobileCommunityPageComponent {
31605
31615
  </div>
31606
31616
  </div>
31607
31617
  </ds-mobile-section>
31608
-
31618
+
31609
31619
  <!-- All Posts Section -->
31610
- <ds-mobile-section
31611
- headline="Alle opslag">
31620
+ <ds-mobile-section headline="Alle opslag">
31612
31621
  @if (hasAnyPosts()) {
31613
31622
  <div class="post-list-wrapper">
31614
31623
  <!-- All Posts Loop -->
31615
31624
  @for (post of allPosts(); track post.id) {
31616
- @if (post.hasInlinePhotos && post.id === 'post-2') {
31617
- <!-- Post 2: With multiple images (grid layout) -->
31618
- <ds-mobile-interactive-list-item-post
31619
- [authorName]="post.authorName"
31620
- [authorRole]="post.authorRole"
31621
- [timestamp]="post.timestamp"
31622
- [avatarInitials]="post.avatarInitials || ''"
31623
- [avatarType]="post.avatarType"
31624
- [clickable]="true"
31625
- [moreActions]="true"
31626
- (postClick)="openPost(post.id)"
31627
- (commentClick)="openPost(post.id, true)"
31628
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31629
-
31630
- <post-content>
31631
- <post-text>{{ post.content }}</post-text>
31632
- <ds-mobile-inline-photo
31633
- [images]="[
31634
- '/assets/Dummy-photos/balcony-view.jpg',
31635
- '/assets/Dummy-photos/staircase.jpg',
31636
- '/assets/Dummy-photos/park.jpg',
31637
- '/assets/Dummy-photos/yard.jpg'
31638
- ]"
31639
- [author]="{
31640
- name: 'Sophie Andersen',
31641
- role: 'Lejer',
31642
- avatarInitials: 'SA',
31643
- avatarType: 'initials',
31644
- timestamp: '4t siden'
31645
- }"
31646
- />
31647
- </post-content>
31648
-
31649
- <post-actions>
31650
- <action-like [active]="post.isLiked" [count]="post.likeCount" />
31651
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31652
- </post-actions>
31653
- </ds-mobile-interactive-list-item-post>
31654
- } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31655
- <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31656
- <ds-mobile-interactive-list-item-post
31657
- [authorName]="post.authorName"
31658
- [authorRole]="post.authorRole"
31659
- [timestamp]="post.timestamp"
31660
- [avatarInitials]="post.avatarInitials || ''"
31661
- [avatarType]="post.avatarType"
31662
- [showBadge]="post.showBadge || false"
31663
- [clickable]="true"
31664
- [moreActions]="true"
31665
- (postClick)="openPost(post.id)"
31666
- (commentClick)="openPost(post.id, true)"
31667
- (longPress)="handlePostLongPress(post.id, false)">
31668
-
31669
- <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) {
31670
31717
  <post-text>{{ post.content }}</post-text>
31671
- <ds-mobile-inline-photo
31672
- [images]="[
31673
- '/assets/Dummy-photos/mailboxes.jpg',
31674
- '/assets/Dummy-photos/staircase.jpg',
31675
- '/assets/Dummy-photos/yard.jpg',
31676
- '/assets/Dummy-photos/park.jpg',
31677
- '/assets/Dummy-photos/balcony-view.jpg',
31678
- '/assets/Dummy-photos/handyman.jpg'
31679
- ]"
31680
- [author]="{
31681
- name: 'Karen Nielsen',
31682
- role: 'Ejendomsadministrator',
31683
- avatarInitials: 'KN',
31684
- avatarType: 'initials',
31685
- timestamp: '2d siden'
31686
- }"
31687
- [maxVisible]="5"
31688
- />
31689
- </post-content>
31690
-
31691
- <post-actions>
31692
- <action-like [count]="post.likeCount" />
31693
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31694
- </post-actions>
31695
- </ds-mobile-interactive-list-item-post>
31696
- } @else {
31697
- <!-- Regular Post -->
31698
- <ds-mobile-interactive-list-item-post
31699
- [authorName]="post.authorName"
31700
- [authorRole]="post.authorRole"
31701
- [timestamp]="post.timestamp"
31702
- [avatarType]="post.avatarType"
31703
- [avatarSrc]="post.avatarSrc || ''"
31704
- [avatarInitials]="post.avatarInitials || ''"
31705
- [clickable]="true"
31706
- [moreActions]="true"
31707
- (postClick)="openPost(post.id)"
31708
- (commentClick)="openPost(post.id, true)"
31709
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31710
-
31711
- <post-content>
31712
- @if (post.content) {
31713
- <post-text>{{ post.content }}</post-text>
31714
- }
31715
- @if (post.imageSrc) {
31716
- <post-media>
31717
- <img
31718
- [src]="post.imageSrc"
31719
- [alt]="post.imageAlt || 'Posted image'"
31720
- class="clickable-image"
31721
- (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
31722
- />
31723
- </post-media>
31724
- }
31725
- </post-content>
31726
-
31727
- <post-actions>
31728
- <action-like [count]="post.likeCount" [active]="post.isLiked" />
31729
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31730
- </post-actions>
31731
- </ds-mobile-interactive-list-item-post>
31732
- }
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>
31733
31736
  }
31734
- </div>
31735
- } @else {
31736
- <!-- Empty State -->
31737
- <div class="community-empty-state">
31738
- <img
31739
- src="/assets/Empty%20state-chat.png"
31740
- alt="Ingen opslag endnu"
31741
- class="empty-state-image"
31742
- />
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
31751
- threshold="100px"
31752
- [disabled]="!hasMorePosts() || pageComponent.isOffline()"
31753
- (ionInfinite)="onInfiniteScroll($event)">
31754
- <ion-infinite-scroll-content
31755
- loadingSpinner="crescent">
31756
- </ion-infinite-scroll-content>
31757
- </ion-infinite-scroll>
31758
- }
31759
- </ds-mobile-section>
31760
- </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>
31761
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"] }] });
31762
31757
  }
31763
31758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileCommunityPageComponent, decorators: [{
@@ -31780,7 +31775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31780
31775
  DsMobileInlinePhotoComponent,
31781
31776
  DsMobileOfflineBannerComponent,
31782
31777
  IonInfiniteScroll,
31783
- IonInfiniteScrollContent
31778
+ IonInfiniteScrollContent,
31784
31779
  ], template: `
31785
31780
  <ds-mobile-page-main
31786
31781
  #pageComponent
@@ -31788,18 +31783,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31788
31783
  [notificationCount]="notificationService.unreadCount()"
31789
31784
  [avatarInitials]="userService.avatarInitials()"
31790
31785
  [avatarType]="userService.avatarType()"
31786
+ [contentLoading]="isLoading()"
31787
+ [contentLoadingVariant]="'card'"
31791
31788
  (notificationClick)="handleNotificationClick()"
31792
- (refresh)="handleRefresh($event)">
31793
-
31789
+ (refresh)="handleRefresh($event)"
31790
+ >
31794
31791
  <!-- Offline indicator -->
31795
31792
  @if (pageComponent.isOffline()) {
31796
- <ds-mobile-offline-banner
31797
- offline-indicator
31798
- title="Ingen internetforbindelse"
31799
- message="Nogle funktioner kan være utilgængelige">
31800
- </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>
31801
31794
  }
31802
-
31795
+
31803
31796
  <!-- Post Composer in header-expandable -->
31804
31797
  <ds-mobile-post-composer
31805
31798
  header-content
@@ -31808,21 +31801,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31808
31801
  [avatarSrc]="userService.avatarSrc()"
31809
31802
  (composerClick)="openPostCreator()"
31810
31803
  />
31811
-
31804
+
31812
31805
  <!-- Pinned Posts Section -->
31813
- <ds-mobile-section
31814
- headline="Fastgjorte opslag"
31815
- icon="remixPushpinFill">
31806
+ <ds-mobile-section headline="Fastgjorte opslag" icon="remixPushpinFill">
31816
31807
  <div class="pinned-posts-swiper-wrapper">
31817
- <ds-mobile-swiper
31808
+ <ds-mobile-swiper
31818
31809
  #pinnedSwiper
31819
31810
  class="pinned-posts-swiper"
31820
- [slideWidth]="'100%'"
31811
+ [slideWidth]="'100%'"
31821
31812
  [gap]="32"
31822
31813
  [pagination]="true"
31823
31814
  [autoHeight]="true"
31824
31815
  [progressiveOpacity]="true"
31825
- [progressiveScale]="true">
31816
+ [progressiveScale]="true"
31817
+ >
31826
31818
  @for (post of pinnedPosts(); track post.id) {
31827
31819
  <div class="swiper-slide">
31828
31820
  <ds-mobile-interactive-list-item-post
@@ -31838,24 +31830,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31838
31830
  [moreActions]="true"
31839
31831
  (postClick)="openPost(post.id)"
31840
31832
  (commentClick)="openPost(post.id, true)"
31841
- (longPress)="handlePostLongPress(post.id, false)">
31842
-
31833
+ (longPress)="handlePostLongPress(post.id, false)"
31834
+ >
31843
31835
  <post-content>
31844
31836
  <post-text>{{ post.content }}</post-text>
31845
-
31837
+
31846
31838
  @if (post.id === 'post-4') {
31847
31839
  <post-attachments>
31848
- <ds-mobile-card-inline-file
31849
- [fileName]="'Husregler.pdf'"
31850
- [fileSize]="'245 KB'"
31851
- [variant]="'pdf'"
31852
- [layout]="'compact'"
31853
- (fileClick)="openHouseRulesPdf()">
31840
+ <ds-mobile-card-inline-file [fileName]="'Husregler.pdf'" [fileSize]="'245 KB'" [variant]="'pdf'" [layout]="'compact'" (fileClick)="openHouseRulesPdf()">
31854
31841
  </ds-mobile-card-inline-file>
31855
31842
  </post-attachments>
31856
31843
  }
31857
31844
  </post-content>
31858
-
31845
+
31859
31846
  <post-actions>
31860
31847
  <action-like [count]="post.likeCount" [active]="post.isLiked" />
31861
31848
  <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
@@ -31864,7 +31851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31864
31851
  </div>
31865
31852
  }
31866
31853
  </ds-mobile-swiper>
31867
-
31854
+
31868
31855
  <!-- Navigation Buttons -->
31869
31856
  <div class="swiper-nav-buttons">
31870
31857
  <ds-icon-button
@@ -31888,159 +31875,144 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
31888
31875
  </div>
31889
31876
  </div>
31890
31877
  </ds-mobile-section>
31891
-
31878
+
31892
31879
  <!-- All Posts Section -->
31893
- <ds-mobile-section
31894
- headline="Alle opslag">
31880
+ <ds-mobile-section headline="Alle opslag">
31895
31881
  @if (hasAnyPosts()) {
31896
31882
  <div class="post-list-wrapper">
31897
31883
  <!-- All Posts Loop -->
31898
31884
  @for (post of allPosts(); track post.id) {
31899
- @if (post.hasInlinePhotos && post.id === 'post-2') {
31900
- <!-- Post 2: With multiple images (grid layout) -->
31901
- <ds-mobile-interactive-list-item-post
31902
- [authorName]="post.authorName"
31903
- [authorRole]="post.authorRole"
31904
- [timestamp]="post.timestamp"
31905
- [avatarInitials]="post.avatarInitials || ''"
31906
- [avatarType]="post.avatarType"
31907
- [clickable]="true"
31908
- [moreActions]="true"
31909
- (postClick)="openPost(post.id)"
31910
- (commentClick)="openPost(post.id, true)"
31911
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31912
-
31913
- <post-content>
31914
- <post-text>{{ post.content }}</post-text>
31915
- <ds-mobile-inline-photo
31916
- [images]="[
31917
- '/assets/Dummy-photos/balcony-view.jpg',
31918
- '/assets/Dummy-photos/staircase.jpg',
31919
- '/assets/Dummy-photos/park.jpg',
31920
- '/assets/Dummy-photos/yard.jpg'
31921
- ]"
31922
- [author]="{
31923
- name: 'Sophie Andersen',
31924
- role: 'Lejer',
31925
- avatarInitials: 'SA',
31926
- avatarType: 'initials',
31927
- timestamp: '4t siden'
31928
- }"
31929
- />
31930
- </post-content>
31931
-
31932
- <post-actions>
31933
- <action-like [active]="post.isLiked" [count]="post.likeCount" />
31934
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31935
- </post-actions>
31936
- </ds-mobile-interactive-list-item-post>
31937
- } @else if (post.hasInlinePhotos && post.id === 'post-3.5') {
31938
- <!-- Post 3.5: Property Manager showcase with 6+ photos -->
31939
- <ds-mobile-interactive-list-item-post
31940
- [authorName]="post.authorName"
31941
- [authorRole]="post.authorRole"
31942
- [timestamp]="post.timestamp"
31943
- [avatarInitials]="post.avatarInitials || ''"
31944
- [avatarType]="post.avatarType"
31945
- [showBadge]="post.showBadge || false"
31946
- [clickable]="true"
31947
- [moreActions]="true"
31948
- (postClick)="openPost(post.id)"
31949
- (commentClick)="openPost(post.id, true)"
31950
- (longPress)="handlePostLongPress(post.id, false)">
31951
-
31952
- <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) {
31953
31977
  <post-text>{{ post.content }}</post-text>
31954
- <ds-mobile-inline-photo
31955
- [images]="[
31956
- '/assets/Dummy-photos/mailboxes.jpg',
31957
- '/assets/Dummy-photos/staircase.jpg',
31958
- '/assets/Dummy-photos/yard.jpg',
31959
- '/assets/Dummy-photos/park.jpg',
31960
- '/assets/Dummy-photos/balcony-view.jpg',
31961
- '/assets/Dummy-photos/handyman.jpg'
31962
- ]"
31963
- [author]="{
31964
- name: 'Karen Nielsen',
31965
- role: 'Ejendomsadministrator',
31966
- avatarInitials: 'KN',
31967
- avatarType: 'initials',
31968
- timestamp: '2d siden'
31969
- }"
31970
- [maxVisible]="5"
31971
- />
31972
- </post-content>
31973
-
31974
- <post-actions>
31975
- <action-like [count]="post.likeCount" />
31976
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
31977
- </post-actions>
31978
- </ds-mobile-interactive-list-item-post>
31979
- } @else {
31980
- <!-- Regular Post -->
31981
- <ds-mobile-interactive-list-item-post
31982
- [authorName]="post.authorName"
31983
- [authorRole]="post.authorRole"
31984
- [timestamp]="post.timestamp"
31985
- [avatarType]="post.avatarType"
31986
- [avatarSrc]="post.avatarSrc || ''"
31987
- [avatarInitials]="post.avatarInitials || ''"
31988
- [clickable]="true"
31989
- [moreActions]="true"
31990
- (postClick)="openPost(post.id)"
31991
- (commentClick)="openPost(post.id, true)"
31992
- (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
31993
-
31994
- <post-content>
31995
- @if (post.content) {
31996
- <post-text>{{ post.content }}</post-text>
31997
- }
31998
- @if (post.imageSrc) {
31999
- <post-media>
32000
- <img
32001
- [src]="post.imageSrc"
32002
- [alt]="post.imageAlt || 'Posted image'"
32003
- class="clickable-image"
32004
- (click)="openImageLightbox(post.imageSrc, post.imageAlt || 'Posted image', post.content, $event)"
32005
- />
32006
- </post-media>
32007
- }
32008
- </post-content>
32009
-
32010
- <post-actions>
32011
- <action-like [count]="post.likeCount" [active]="post.isLiked" />
32012
- <action-comment [count]="post.commentCount" (commentClick)="openPost(post.id, true)" />
32013
- </post-actions>
32014
- </ds-mobile-interactive-list-item-post>
32015
- }
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>
32016
31996
  }
32017
- </div>
32018
- } @else {
32019
- <!-- Empty State -->
32020
- <div class="community-empty-state">
32021
- <img
32022
- src="/assets/Empty%20state-chat.png"
32023
- alt="Ingen opslag endnu"
32024
- class="empty-state-image"
32025
- />
32026
- <h3 class="empty-state-title">Ingen opslag endnu</h3>
32027
- <p class="empty-state-description">Vær den første til at dele noget med dit fællesskab</p>
32028
- </div>
32029
- }
32030
-
32031
- <!-- Infinite Scroll -->
32032
- @if (hasAnyPosts()) {
32033
- <ion-infinite-scroll
32034
- threshold="100px"
32035
- [disabled]="!hasMorePosts() || pageComponent.isOffline()"
32036
- (ionInfinite)="onInfiniteScroll($event)">
32037
- <ion-infinite-scroll-content
32038
- loadingSpinner="crescent">
32039
- </ion-infinite-scroll-content>
32040
- </ion-infinite-scroll>
32041
- }
32042
- </ds-mobile-section>
32043
- </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>
32044
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"] }]
32045
32017
  }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }, { type: DsMobileBottomSheetService }, { type: DsMobileLightboxService }, { type: DsMobilePostDetailModalService }, { type: UserService }, { type: PostsService }], propDecorators: { pageComponent: [{
32046
32018
  type: ViewChild,
@@ -32296,7 +32268,12 @@ class MobileHandbookPageComponent {
32296
32268
  ];
32297
32269
  constructor(userService) {
32298
32270
  this.userService = userService;
32271
+ const randomTimeout = Math.floor(Math.random() * 2000);
32272
+ setTimeout(() => {
32273
+ this.isLoading.set(false);
32274
+ }, randomTimeout);
32299
32275
  }
32276
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
32300
32277
  async handleNotificationClick() {
32301
32278
  const tapped = await this.notificationModal.open();
32302
32279
  if (tapped)
@@ -32317,7 +32294,7 @@ class MobileHandbookPageComponent {
32317
32294
  }
32318
32295
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHandbookPageComponent, deps: [{ token: UserService }], target: i0.ɵɵFactoryTarget.Component });
32319
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: `
32320
- <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)">
32321
32298
  <!-- Offline indicator -->
32322
32299
  @if (pageComponent.isOffline()) {
32323
32300
  <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
@@ -32343,7 +32320,7 @@ class MobileHandbookPageComponent {
32343
32320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHandbookPageComponent, decorators: [{
32344
32321
  type: Component,
32345
32322
  args: [{ selector: 'app-mobile-handbook-page', standalone: true, imports: [DsMobilePageMainComponent, DsMobileSectionComponent, DsMobileHandbookFolderComponent, DsMobileOfflineBannerComponent], template: `
32346
- <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)">
32347
32324
  <!-- Offline indicator -->
32348
32325
  @if (pageComponent.isOffline()) {
32349
32326
  <ds-mobile-offline-banner offline-indicator title="Ingen internetforbindelse" message="Nogle funktioner kan være utilgængelige"> </ds-mobile-offline-banner>
@@ -33548,19 +33525,25 @@ class MobileInquiriesPageComponent {
33548
33525
  this.userService = userService;
33549
33526
  this.navCtrl = navCtrl;
33550
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);
33551
33533
  }
33534
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
33552
33535
  filterStatus = signal('all', ...(ngDevMode ? [{ debugName: "filterStatus" }] : []));
33553
33536
  tabItems = [
33554
33537
  { id: 'all', label: 'Alle' },
33555
33538
  { id: 'open', label: 'Åben' },
33556
- { id: 'closed', label: 'Lukket' }
33539
+ { id: 'closed', label: 'Lukket' },
33557
33540
  ];
33558
33541
  filteredInquiries = computed(() => {
33559
33542
  const all = this.inquiriesService.inquiries();
33560
33543
  const status = this.filterStatus();
33561
33544
  if (status === 'all')
33562
33545
  return all;
33563
- return all.filter(i => i.status === status);
33546
+ return all.filter((i) => i.status === status);
33564
33547
  }, ...(ngDevMode ? [{ debugName: "filteredInquiries" }] : []));
33565
33548
  setFilter(status) {
33566
33549
  this.filterStatus.set(status);
@@ -33572,7 +33555,7 @@ class MobileInquiriesPageComponent {
33572
33555
  console.log('Opening inquiry:', inquiryId);
33573
33556
  // Navigate to inquiry detail page with custom transition (absolute path outside tabs for animations)
33574
33557
  this.navCtrl.navigateForward([`/inquiry-detail/${inquiryId}`], {
33575
- animation: customPageTransition
33558
+ animation: customPageTransition,
33576
33559
  });
33577
33560
  }
33578
33561
  showInquiryActions(inquiryId) {
@@ -33615,7 +33598,7 @@ class MobileInquiriesPageComponent {
33615
33598
  });
33616
33599
  // Close the modal
33617
33600
  await this.newInquiryModal.close();
33618
- }
33601
+ },
33619
33602
  });
33620
33603
  }
33621
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 });
@@ -33626,27 +33609,21 @@ class MobileInquiriesPageComponent {
33626
33609
  [notificationCount]="notificationService.unreadCount()"
33627
33610
  [avatarInitials]="userService.avatarInitials()"
33628
33611
  [avatarType]="userService.avatarType()"
33612
+ [contentLoading]="isLoading()"
33613
+ [contentLoadingVariant]="'list'"
33629
33614
  (notificationClick)="handleNotificationClick()"
33630
- (refresh)="handleRefresh($event)">
33631
-
33615
+ (refresh)="handleRefresh($event)"
33616
+ >
33632
33617
  <!-- Offline indicator -->
33633
33618
  @if (pageComponent.isOffline()) {
33634
- <ds-mobile-offline-banner
33635
- offline-indicator
33636
- title="Ingen internetforbindelse"
33637
- message="Nogle funktioner kan være utilgængelige">
33638
- </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>
33639
33620
  }
33640
-
33621
+
33641
33622
  <!-- Filter tabs in header -->
33642
33623
  <div header-content>
33643
- <ds-mobile-inline-tabs
33644
- [tabs]="tabItems"
33645
- [activeTab]="filterStatus()"
33646
- (tabChange)="setFilter($any($event))">
33647
- </ds-mobile-inline-tabs>
33624
+ <ds-mobile-inline-tabs [tabs]="tabItems" [activeTab]="filterStatus()" (tabChange)="setFilter($any($event))"> </ds-mobile-inline-tabs>
33648
33625
  </div>
33649
-
33626
+
33650
33627
  <ds-mobile-section>
33651
33628
  @if (filteredInquiries().length > 0) {
33652
33629
  <div class="inquiry-list-wrapper">
@@ -33660,7 +33637,8 @@ class MobileInquiriesPageComponent {
33660
33637
  [clickable]="true"
33661
33638
  [showChevron]="false"
33662
33639
  [enableLongPress]="false"
33663
- (inquiryClick)="openInquiryDetail(inquiry.id)">
33640
+ (inquiryClick)="openInquiryDetail(inquiry.id)"
33641
+ >
33664
33642
  </ds-mobile-interactive-list-item-inquiry>
33665
33643
  }
33666
33644
  </div>
@@ -33684,12 +33662,7 @@ class MobileInquiriesPageComponent {
33684
33662
  </ds-mobile-page-main>
33685
33663
 
33686
33664
  <!-- FAB for creating new inquiry -->
33687
- <ds-mobile-fab
33688
- icon="remixAddLine"
33689
- position="bottom-right"
33690
- ariaLabel="Create new inquiry"
33691
- (clicked)="createNewInquiry()">
33692
- </ds-mobile-fab>
33665
+ <ds-mobile-fab icon="remixAddLine" position="bottom-right" ariaLabel="Create new inquiry" (clicked)="createNewInquiry()"> </ds-mobile-fab>
33693
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"] }] });
33694
33667
  }
33695
33668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, decorators: [{
@@ -33701,9 +33674,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33701
33674
  DsMobileInteractiveListItemInquiryComponent,
33702
33675
  DsMobileInlineTabsComponent,
33703
33676
  DsMobileOfflineBannerComponent,
33704
- DsMobileFabComponent
33677
+ DsMobileFabComponent,
33705
33678
  ], host: {
33706
- class: 'ion-page'
33679
+ class: 'ion-page',
33707
33680
  }, template: `
33708
33681
  <ds-mobile-page-main
33709
33682
  #pageComponent
@@ -33711,27 +33684,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33711
33684
  [notificationCount]="notificationService.unreadCount()"
33712
33685
  [avatarInitials]="userService.avatarInitials()"
33713
33686
  [avatarType]="userService.avatarType()"
33687
+ [contentLoading]="isLoading()"
33688
+ [contentLoadingVariant]="'list'"
33714
33689
  (notificationClick)="handleNotificationClick()"
33715
- (refresh)="handleRefresh($event)">
33716
-
33690
+ (refresh)="handleRefresh($event)"
33691
+ >
33717
33692
  <!-- Offline indicator -->
33718
33693
  @if (pageComponent.isOffline()) {
33719
- <ds-mobile-offline-banner
33720
- offline-indicator
33721
- title="Ingen internetforbindelse"
33722
- message="Nogle funktioner kan være utilgængelige">
33723
- </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>
33724
33695
  }
33725
-
33696
+
33726
33697
  <!-- Filter tabs in header -->
33727
33698
  <div header-content>
33728
- <ds-mobile-inline-tabs
33729
- [tabs]="tabItems"
33730
- [activeTab]="filterStatus()"
33731
- (tabChange)="setFilter($any($event))">
33732
- </ds-mobile-inline-tabs>
33699
+ <ds-mobile-inline-tabs [tabs]="tabItems" [activeTab]="filterStatus()" (tabChange)="setFilter($any($event))"> </ds-mobile-inline-tabs>
33733
33700
  </div>
33734
-
33701
+
33735
33702
  <ds-mobile-section>
33736
33703
  @if (filteredInquiries().length > 0) {
33737
33704
  <div class="inquiry-list-wrapper">
@@ -33745,7 +33712,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33745
33712
  [clickable]="true"
33746
33713
  [showChevron]="false"
33747
33714
  [enableLongPress]="false"
33748
- (inquiryClick)="openInquiryDetail(inquiry.id)">
33715
+ (inquiryClick)="openInquiryDetail(inquiry.id)"
33716
+ >
33749
33717
  </ds-mobile-interactive-list-item-inquiry>
33750
33718
  }
33751
33719
  </div>
@@ -33769,12 +33737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33769
33737
  </ds-mobile-page-main>
33770
33738
 
33771
33739
  <!-- FAB for creating new inquiry -->
33772
- <ds-mobile-fab
33773
- icon="remixAddLine"
33774
- position="bottom-right"
33775
- ariaLabel="Create new inquiry"
33776
- (clicked)="createNewInquiry()">
33777
- </ds-mobile-fab>
33740
+ <ds-mobile-fab icon="remixAddLine" position="bottom-right" ariaLabel="Create new inquiry" (clicked)="createNewInquiry()"> </ds-mobile-fab>
33778
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"] }]
33779
33742
  }], ctorParameters: () => [{ type: UserService }, { type: i1.NavController }, { type: DsMobileNewInquiryModalService }], propDecorators: { pageComponent: [{
33780
33743
  type: ViewChild,
@@ -39041,5 +39004,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
39041
39004
  * Generated bundle index. Do not edit.
39042
39005
  */
39043
39006
 
39044
- 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 };
39045
39008
  //# sourceMappingURL=propbinder-mobile-design.mjs.map