@propbinder/mobile-design 0.2.46 → 0.2.48

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.
@@ -663,6 +663,92 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
663
663
  type: Input
664
664
  }] } });
665
665
 
666
+ /**
667
+ * DsMobileLoaderOverlayComponent
668
+ *
669
+ * Reusable loader overlay component that displays a spinner centered over its container.
670
+ * Designed to overlay images or other content during loading states.
671
+ *
672
+ * Features:
673
+ * - Semi-transparent white background overlay
674
+ * - Centered animated spinner
675
+ * - Customizable spinner size
676
+ * - Absolute positioning to cover parent
677
+ * - Accessible with proper z-index stacking
678
+ *
679
+ * @example
680
+ * ```html
681
+ * <!-- Basic usage -->
682
+ * <div style="position: relative;">
683
+ * <img src="image.jpg" alt="Content" />
684
+ * @if (isLoading) {
685
+ * <ds-mobile-loader-overlay />
686
+ * }
687
+ * </div>
688
+ *
689
+ * <!-- With custom spinner size -->
690
+ * <div style="position: relative;">
691
+ * <div class="content">Loading content...</div>
692
+ * <ds-mobile-loader-overlay [spinnerSize]="32" />
693
+ * </div>
694
+ *
695
+ * <!-- Over an image with rounded corners -->
696
+ * <div style="position: relative; border-radius: 12px; overflow: hidden;">
697
+ * <img src="photo.jpg" />
698
+ * <ds-mobile-loader-overlay [borderRadius]="12" />
699
+ * </div>
700
+ * ```
701
+ *
702
+ * @notes
703
+ * - Parent container must have position: relative for the overlay to work correctly
704
+ * - The overlay covers the entire parent element using inset: 0
705
+ * - Spinner animation runs continuously at 0.6s per rotation
706
+ */
707
+ class DsMobileLoaderOverlayComponent {
708
+ /**
709
+ * Size of the spinner in pixels
710
+ * @default 24
711
+ */
712
+ spinnerSize = input(24, ...(ngDevMode ? [{ debugName: "spinnerSize" }] : []));
713
+ /**
714
+ * Border radius of the overlay in pixels (should match parent's border radius)
715
+ * @default 0
716
+ */
717
+ borderRadius = input(0, ...(ngDevMode ? [{ debugName: "borderRadius" }] : []));
718
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLoaderOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
719
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileLoaderOverlayComponent, isStandalone: true, selector: "ds-mobile-loader-overlay", inputs: { spinnerSize: { classPropertyName: "spinnerSize", publicName: "spinnerSize", isSignal: true, isRequired: false, transformFunction: null }, borderRadius: { classPropertyName: "borderRadius", publicName: "borderRadius", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
720
+ <div
721
+ class="loader-overlay"
722
+ [style.border-radius.px]="borderRadius()"
723
+ role="status"
724
+ aria-live="polite"
725
+ aria-label="Loading">
726
+ <div
727
+ class="spinner"
728
+ [style.width.px]="spinnerSize()"
729
+ [style.height.px]="spinnerSize()">
730
+ </div>
731
+ </div>
732
+ `, isInline: true, styles: [":host{display:contents}.loader-overlay{position:absolute;inset:0;background:var(--color-background-neutral-primary, #ffffff);display:flex;align-items:center;justify-content:center;z-index:100}.spinner{border:2px solid var(--color-border-neutral-secondary, #E5E5E5);border-top-color:var(--color-accent, #6B5FF5);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-color-scheme: dark){.spinner{border-color:#fff3;border-top-color:var(--color-accent, #6B5FF5)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
733
+ }
734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLoaderOverlayComponent, decorators: [{
735
+ type: Component,
736
+ args: [{ selector: 'ds-mobile-loader-overlay', standalone: true, imports: [CommonModule], template: `
737
+ <div
738
+ class="loader-overlay"
739
+ [style.border-radius.px]="borderRadius()"
740
+ role="status"
741
+ aria-live="polite"
742
+ aria-label="Loading">
743
+ <div
744
+ class="spinner"
745
+ [style.width.px]="spinnerSize()"
746
+ [style.height.px]="spinnerSize()">
747
+ </div>
748
+ </div>
749
+ `, styles: [":host{display:contents}.loader-overlay{position:absolute;inset:0;background:var(--color-background-neutral-primary, #ffffff);display:flex;align-items:center;justify-content:center;z-index:100}.spinner{border:2px solid var(--color-border-neutral-secondary, #E5E5E5);border-top-color:var(--color-accent, #6B5FF5);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-color-scheme: dark){.spinner{border-color:#fff3;border-top-color:var(--color-accent, #6B5FF5)}}\n"] }]
750
+ }], propDecorators: { spinnerSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinnerSize", required: false }] }], borderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderRadius", required: false }] }] } });
751
+
666
752
  /**
667
753
  * MobilePageBase
668
754
  *
@@ -682,6 +768,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
682
768
  * @internal This is a base class and should not be used directly.
683
769
  */
684
770
  class MobilePageBase {
771
+ /**
772
+ * Shows a loading overlay above page content area.
773
+ *
774
+ * Non-breaking: defaults to false, so existing pages are unchanged
775
+ * until they explicitly opt in.
776
+ */
777
+ contentLoading = input(false, ...(ngDevMode ? [{ debugName: "contentLoading" }] : []));
685
778
  /**
686
779
  * Maximum content width (desktop only)
687
780
  *
@@ -827,11 +920,11 @@ class MobilePageBase {
827
920
  window.removeEventListener('offline', this.handleOffline);
828
921
  }
829
922
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobilePageBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
830
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobilePageBase, isStandalone: true, inputs: { contentWidth: { classPropertyName: "contentWidth", publicName: "contentWidth", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
923
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobilePageBase, isStandalone: true, inputs: { contentLoading: { classPropertyName: "contentLoading", publicName: "contentLoading", isSignal: true, isRequired: false, transformFunction: null }, contentWidth: { classPropertyName: "contentWidth", publicName: "contentWidth", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
831
924
  }
832
925
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobilePageBase, decorators: [{
833
926
  type: Directive
834
- }], propDecorators: { contentWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentWidth", required: false }] }] } });
927
+ }], propDecorators: { contentLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentLoading", required: false }] }], contentWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentWidth", required: false }] }] } });
835
928
 
836
929
  /**
837
930
  * DsMobileLongPressDirective
@@ -1187,11 +1280,27 @@ class DsMobileListItemComponent {
1187
1280
  enableLongPress = input(true, ...(ngDevMode ? [{ debugName: "enableLongPress" }] : []));
1188
1281
  /**
1189
1282
  * Show "more actions" button on desktop for items with long-press enabled
1190
- * Only visible on desktop (hover: hover) and when enableLongPress is true
1191
- * Clicking this button triggers the same handler as long-press on mobile
1283
+ * @deprecated Use `moreActions` instead. Kept for backwards compatibility.
1192
1284
  * @default true
1193
1285
  */
1194
1286
  showDesktopMoreButton = input(true, ...(ngDevMode ? [{ debugName: "showDesktopMoreButton" }] : []));
1287
+ /**
1288
+ * Unified toggle for contextual actions (more button + long press).
1289
+ * - `true` — more button visible on **all** breakpoints, long press enabled
1290
+ * - `false` — more button hidden, long press suppressed
1291
+ * - `undefined` (default) — falls back to legacy `enableLongPress` + `showDesktopMoreButton` + desktop check
1292
+ */
1293
+ moreActions = input(undefined, ...(ngDevMode ? [{ debugName: "moreActions" }] : []));
1294
+ /**
1295
+ * Resolved visibility of the more-actions button.
1296
+ * When `moreActions` is set it takes precedence; otherwise legacy inputs + breakpoint apply.
1297
+ */
1298
+ shouldShowMoreButton = computed(() => {
1299
+ const ma = this.moreActions();
1300
+ if (ma !== undefined)
1301
+ return ma;
1302
+ return this.enableLongPress() && this.showDesktopMoreButton() && this.isDesktop();
1303
+ }, ...(ngDevMode ? [{ debugName: "shouldShowMoreButton" }] : []));
1195
1304
  /**
1196
1305
  * Offset distance for the interactive background pseudo-element
1197
1306
  * Extends the background beyond the content bounds
@@ -1296,8 +1405,9 @@ class DsMobileListItemComponent {
1296
1405
  * Set the flag to prevent the subsequent click event
1297
1406
  */
1298
1407
  handleLongPress() {
1408
+ if (this.moreActions() === false)
1409
+ return;
1299
1410
  this.longPressTriggered = true;
1300
- // Reset the flag after a short delay to allow for the next interaction
1301
1411
  setTimeout(() => {
1302
1412
  this.longPressTriggered = false;
1303
1413
  }, 100);
@@ -1316,7 +1426,7 @@ class DsMobileListItemComponent {
1316
1426
  this.moreButtonClick.emit(event);
1317
1427
  }
1318
1428
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1319
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileListItemComponent, isStandalone: true, selector: "ds-mobile-list-item", inputs: { leadingSize: { classPropertyName: "leadingSize", publicName: "leadingSize", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null }, showDesktopMoreButton: { classPropertyName: "showDesktopMoreButton", publicName: "showDesktopMoreButton", isSignal: true, isRequired: false, transformFunction: null }, interactiveOffset: { classPropertyName: "interactiveOffset", publicName: "interactiveOffset", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, showDivider: { classPropertyName: "showDivider", publicName: "showDivider", isSignal: true, isRequired: false, transformFunction: null }, dividerSpacing: { classPropertyName: "dividerSpacing", publicName: "dividerSpacing", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", moreButtonClick: "moreButtonClick" }, host: { listeners: { "click": "handleClick($event)", "keydown.enter": "handleKeyDown($event)", "keydown.space": "handleKeyDown($event)", "longPress": "handleLongPress()" }, properties: { "class.interactive": "interactive() && !disabled()", "class.disabled": "disabled()", "class.loading": "loading()", "class.no-divider": "!showDivider()", "class.no-leading-content": "!hasLeadingContent()", "class.variant-compact": "variant() === \"compact\"", "class.align-top": "align() === \"top\"", "class.align-center": "align() === \"center\"", "class.align-bottom": "align() === \"bottom\"", "attr.role": "interactive() ? \"button\" : null", "attr.tabindex": "interactive() && !disabled() ? \"0\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "style.--leading-size": "leadingSize()", "style.--interactive-offset": "interactiveOffset()", "style.--divider-spacing": "dividerSpacing()" } }, hostDirectives: [{ directive: DsMobileLongPressDirective, outputs: ["longPress", "longPress"] }], ngImport: i0, template: `
1429
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileListItemComponent, isStandalone: true, selector: "ds-mobile-list-item", inputs: { leadingSize: { classPropertyName: "leadingSize", publicName: "leadingSize", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null }, showDesktopMoreButton: { classPropertyName: "showDesktopMoreButton", publicName: "showDesktopMoreButton", isSignal: true, isRequired: false, transformFunction: null }, moreActions: { classPropertyName: "moreActions", publicName: "moreActions", isSignal: true, isRequired: false, transformFunction: null }, interactiveOffset: { classPropertyName: "interactiveOffset", publicName: "interactiveOffset", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, showDivider: { classPropertyName: "showDivider", publicName: "showDivider", isSignal: true, isRequired: false, transformFunction: null }, dividerSpacing: { classPropertyName: "dividerSpacing", publicName: "dividerSpacing", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", moreButtonClick: "moreButtonClick" }, host: { listeners: { "click": "handleClick($event)", "keydown.enter": "handleKeyDown($event)", "keydown.space": "handleKeyDown($event)", "longPress": "handleLongPress()" }, properties: { "class.interactive": "interactive() && !disabled()", "class.disabled": "disabled()", "class.loading": "loading()", "class.no-divider": "!showDivider()", "class.no-leading-content": "!hasLeadingContent()", "class.variant-compact": "variant() === \"compact\"", "class.align-top": "align() === \"top\"", "class.align-center": "align() === \"center\"", "class.align-bottom": "align() === \"bottom\"", "attr.role": "interactive() ? \"button\" : null", "attr.tabindex": "interactive() && !disabled() ? \"0\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "style.--leading-size": "leadingSize()", "style.--interactive-offset": "interactiveOffset()", "style.--divider-spacing": "dividerSpacing()" } }, hostDirectives: [{ directive: DsMobileLongPressDirective, outputs: ["longPress", "longPress"] }], ngImport: i0, template: `
1320
1430
  <div class="list-item-inner">
1321
1431
  @if (hasLeadingContent()) {
1322
1432
  <div class="content-leading">
@@ -1336,8 +1446,7 @@ class DsMobileListItemComponent {
1336
1446
  </div>
1337
1447
 
1338
1448
  <div class="content-trailing">
1339
- @if (interactive() && enableLongPress() && showDesktopMoreButton() &&
1340
- isDesktop()) {
1449
+ @if (interactive() && shouldShowMoreButton()) {
1341
1450
  <ds-icon-button
1342
1451
  class="desktop-more-button"
1343
1452
  icon="remixMoreFill"
@@ -1400,8 +1509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1400
1509
  </div>
1401
1510
 
1402
1511
  <div class="content-trailing">
1403
- @if (interactive() && enableLongPress() && showDesktopMoreButton() &&
1404
- isDesktop()) {
1512
+ @if (interactive() && shouldShowMoreButton()) {
1405
1513
  <ds-icon-button
1406
1514
  class="desktop-more-button"
1407
1515
  icon="remixMoreFill"
@@ -1416,7 +1524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1416
1524
  </div>
1417
1525
  </div>
1418
1526
  `, styles: [":host{display:block;position:relative;padding:var(--item-padding-top, 12px) 0 var(--item-padding-bottom, 12px) 0;box-sizing:border-box;--leading-size: 32px;--content-gap: 12px;--interactive-offset: 8px}:host:after{content:\"\";position:absolute;bottom:0;left:calc(var(--leading-size) + var(--content-gap));right:0;height:1px;background:var(--border-color-default, #e5e5e5);z-index:1;display:var(--divider-display, block)}:host(.no-divider):after{display:none}:host(.no-leading-content):after{left:0}.list-item-inner{display:flex;flex-direction:row;align-items:flex-start;gap:var(--content-gap);position:relative}:host(.align-center) .list-item-inner{align-items:center}:host(.align-bottom) .list-item-inner{align-items:flex-end}:host(.interactive) .list-item-inner:before{content:\"\";position:absolute;top:calc(-1 * var(--interactive-offset));left:calc(-1 * var(--interactive-offset));right:calc(-1 * var(--interactive-offset));bottom:calc(-1 * var(--interactive-offset));background:var(--color-background-neutral-primary, #ffffff);border-radius:16px;z-index:-1;pointer-events:none}:host(.interactive){cursor:pointer}@media (hover: hover) and (pointer: fine){:host(.interactive):hover .list-item-inner:before{background:var(--color-background-neutral-primary-hover, #f5f5f5)}}:host(.interactive):active .list-item-inner:before{background:var(--color-background-neutral-primary-hover, #f5f5f5)}:host(.interactive):focus-visible{outline:none}:host(.interactive):focus-visible .list-item-inner:before{outline:2px solid var(--color-brand-primary, #5d5fef);outline-offset:2px}:host(.disabled){opacity:.5;pointer-events:none}:host(.loading){pointer-events:none}:host(.variant-compact) .list-item-inner{gap:8px}.content-leading{flex-shrink:0;width:var(--leading-size);height:var(--leading-size);display:flex;align-items:flex-start;justify-content:center;position:relative;z-index:1}:host(.align-center) .content-leading{align-items:center}:host(.align-bottom) .content-leading{align-items:flex-end}.content-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px;position:relative;z-index:1;justify-content:flex-start}:host(.align-center) .content-main{justify-content:center}:host(.align-bottom) .content-main{justify-content:flex-end}.content-trailing{flex-shrink:0;display:flex;align-items:flex-start;position:relative;z-index:1}.structured-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.structured-subtitle{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545b66);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.desktop-more-button::ng-deep button{border-radius:50%!important}\n"] }]
1419
- }], ctorParameters: () => [], propDecorators: { leadingSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingSize", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], showDesktopMoreButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDesktopMoreButton", required: false }] }], interactiveOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactiveOffset", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], showDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDivider", required: false }] }], dividerSpacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividerSpacing", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], moreButtonClick: [{ type: i0.Output, args: ["moreButtonClick"] }] } });
1527
+ }], ctorParameters: () => [], propDecorators: { leadingSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingSize", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], showDesktopMoreButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDesktopMoreButton", required: false }] }], moreActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreActions", required: false }] }], interactiveOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactiveOffset", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], showDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDivider", required: false }] }], dividerSpacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividerSpacing", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], moreButtonClick: [{ type: i0.Output, args: ["moreButtonClick"] }] } });
1420
1528
 
1421
1529
  /**
1422
1530
  * DsMobileActionListItemComponent
@@ -1467,7 +1575,7 @@ class DsMobileActionListItemComponent {
1467
1575
  <ng-content select="[content-trailing]" />
1468
1576
  </div>
1469
1577
  </ds-mobile-list-item>
1470
- `, isInline: true, styles: [":host ::ng-deep ds-mobile-list-item .list-item-inner{align-items:center}:host ::ng-deep ds-mobile-list-item .content-leading{align-items:center;justify-content:center}:host ::ng-deep .action-icon-wrapper{display:flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep ds-mobile-list-item .content-main{gap:0;justify-content:center}:host{outline:none;--background-focused: transparent;--background-activated: transparent;-webkit-tap-highlight-color:transparent}:host ::ng-deep ds-mobile-list-item{outline:none}\n"], dependencies: [{ kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
1578
+ `, isInline: true, styles: [":host ::ng-deep ds-mobile-list-item .list-item-inner{align-items:center}:host ::ng-deep ds-mobile-list-item .content-leading{align-items:center;justify-content:center}:host ::ng-deep .action-icon-wrapper{display:flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep ds-mobile-list-item .content-main{gap:0;justify-content:center}:host{outline:none;--background-focused: transparent;--background-activated: transparent;-webkit-tap-highlight-color:transparent}:host ::ng-deep ds-mobile-list-item{outline:none}\n"], dependencies: [{ kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
1471
1579
  }
1472
1580
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileActionListItemComponent, decorators: [{
1473
1581
  type: Component,
@@ -1802,6 +1910,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1802
1910
  type: Input
1803
1911
  }] } });
1804
1912
 
1913
+ /**
1914
+ * Disable pointer events for Ionic's internal modal shadow layer.
1915
+ *
1916
+ * The .modal-shadow element is rendered inside ion-modal's Shadow DOM and can
1917
+ * intercept backdrop taps even when visually hidden.
1918
+ */
1919
+ function disableModalShadowPointerEvents(modal) {
1920
+ const applyFix = () => {
1921
+ const modalShadow = modal.shadowRoot?.querySelector('.modal-shadow');
1922
+ if (!modalShadow) {
1923
+ return;
1924
+ }
1925
+ modalShadow.style.setProperty('pointer-events', 'none', 'important');
1926
+ modalShadow.style.setProperty('box-shadow', 'none', 'important');
1927
+ };
1928
+ applyFix();
1929
+ if (!modal.shadowRoot) {
1930
+ return;
1931
+ }
1932
+ const observer = new MutationObserver(() => {
1933
+ applyFix();
1934
+ });
1935
+ observer.observe(modal.shadowRoot, {
1936
+ childList: true,
1937
+ subtree: true,
1938
+ attributes: true,
1939
+ attributeFilter: ['class', 'style'],
1940
+ });
1941
+ modal.addEventListener('ionModalDidDismiss', () => {
1942
+ observer.disconnect();
1943
+ }, { once: true });
1944
+ }
1945
+
1805
1946
  /**
1806
1947
  * DsMobileBottomSheetService
1807
1948
  *
@@ -1897,6 +2038,7 @@ class DsMobileBottomSheetService {
1897
2038
  document.removeEventListener('keydown', escKeyHandler);
1898
2039
  });
1899
2040
  await modal.present();
2041
+ disableModalShadowPointerEvents(modal);
1900
2042
  // Don't wait - return immediately so component can try to focus
1901
2043
  // while still in user gesture context
1902
2044
  return modal;
@@ -4777,6 +4919,7 @@ class DsMobilePageMainComponent extends MobilePageBase {
4777
4919
  cssClass: ['ds-bottom-sheet', 'auto-height'],
4778
4920
  });
4779
4921
  await sheet.present();
4922
+ disableModalShadowPointerEvents(sheet);
4780
4923
  const result = await sheet.onWillDismiss();
4781
4924
  if (result.data?.action) {
4782
4925
  // Handle appearance/whitelabel-demo action internally (works on all pages)
@@ -4874,7 +5017,7 @@ class DsMobilePageMainComponent extends MobilePageBase {
4874
5017
  </ion-header>
4875
5018
 
4876
5019
  <!-- Content with expandable header -->
4877
- <ion-content [scrollEvents]="true" (ionScroll)="handleScroll($event)">
5020
+ <ion-content [scrollEvents]="true" [forceOverscroll]="true" (ionScroll)="handleScroll($event)">
4878
5021
  <!-- Condensed header for Ionic scroll effects -->
4879
5022
  @if (showCondensedHeader()) {
4880
5023
  <ion-header collapse="condense">
@@ -4910,6 +5053,10 @@ class DsMobilePageMainComponent extends MobilePageBase {
4910
5053
 
4911
5054
  <!-- Content wrapper -->
4912
5055
  <div class="content-wrapper">
5056
+ @if (contentLoading()) {
5057
+ <ds-mobile-loader-overlay />
5058
+ }
5059
+
4913
5060
  <!-- Offline indicator slot (appears at top of content) -->
4914
5061
  <ng-content select="[offline-indicator]"></ng-content>
4915
5062
 
@@ -4919,11 +5066,11 @@ class DsMobilePageMainComponent extends MobilePageBase {
4919
5066
  </div>
4920
5067
  </div>
4921
5068
  </ion-content>
4922
- `, 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;-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:scroll;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) + env(safe-area-inset-bottom,0px))}:host .content-inner{flex:1;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}: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}@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"] }] });
5069
+ `, 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}: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}@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: DsMobileLoaderOverlayComponent, selector: "ds-mobile-loader-overlay", inputs: ["spinnerSize", "borderRadius"] }] });
4923
5070
  }
4924
5071
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePageMainComponent, decorators: [{
4925
5072
  type: Component,
4926
- args: [{ selector: 'ds-mobile-page-main', standalone: true, imports: [CommonModule, IonHeader, IonToolbar, IonTitle, IonContent, IonRefresher, IonRefresherContent, DsAvatarComponent, DsLogoComponent], host: {
5073
+ args: [{ selector: 'ds-mobile-page-main', standalone: true, imports: [CommonModule, IonHeader, IonToolbar, IonTitle, IonContent, IonRefresher, IonRefresherContent, DsAvatarComponent, DsLogoComponent, DsMobileLoaderOverlayComponent], host: {
4927
5074
  '[style.--content-wrapper-padding]': 'contentPadding()'
4928
5075
  }, template: `
4929
5076
  <!-- Fixed header at top -->
@@ -4953,7 +5100,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
4953
5100
  </ion-header>
4954
5101
 
4955
5102
  <!-- Content with expandable header -->
4956
- <ion-content [scrollEvents]="true" (ionScroll)="handleScroll($event)">
5103
+ <ion-content [scrollEvents]="true" [forceOverscroll]="true" (ionScroll)="handleScroll($event)">
4957
5104
  <!-- Condensed header for Ionic scroll effects -->
4958
5105
  @if (showCondensedHeader()) {
4959
5106
  <ion-header collapse="condense">
@@ -4989,6 +5136,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
4989
5136
 
4990
5137
  <!-- Content wrapper -->
4991
5138
  <div class="content-wrapper">
5139
+ @if (contentLoading()) {
5140
+ <ds-mobile-loader-overlay />
5141
+ }
5142
+
4992
5143
  <!-- Offline indicator slot (appears at top of content) -->
4993
5144
  <ng-content select="[offline-indicator]"></ng-content>
4994
5145
 
@@ -4998,7 +5149,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
4998
5149
  </div>
4999
5150
  </div>
5000
5151
  </ion-content>
5001
- `, 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;-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:scroll;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) + env(safe-area-inset-bottom,0px))}:host .content-inner{flex:1;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}: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}@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"] }]
5152
+ `, 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}: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}@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"] }]
5002
5153
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { ionContent: [{
5003
5154
  type: ViewChild,
5004
5155
  args: [IonContent]
@@ -5383,7 +5534,7 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
5383
5534
  </ion-header>
5384
5535
 
5385
5536
  <!-- Content with expandable header -->
5386
- <ion-content [scrollEvents]="true" (ionScroll)="handleScroll($event)">
5537
+ <ion-content [scrollEvents]="true" [forceOverscroll]="true" (ionScroll)="handleScroll($event)">
5387
5538
  <!-- Pull to refresh (only on native iOS/Android) -->
5388
5539
  @if (showRefresh() && isNativePlatform()) {
5389
5540
  <ion-refresher
@@ -5420,6 +5571,10 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
5420
5571
 
5421
5572
  <!-- Content wrapper -->
5422
5573
  <div class="content-wrapper">
5574
+ @if (contentLoading()) {
5575
+ <ds-mobile-loader-overlay />
5576
+ }
5577
+
5423
5578
  <!-- Offline indicator slot (appears at top of content) -->
5424
5579
  <ng-content select="[offline-indicator]"></ng-content>
5425
5580
 
@@ -5428,7 +5583,7 @@ class DsMobilePageDetailsComponent extends MobilePageBase {
5428
5583
  </div>
5429
5584
  </div>
5430
5585
  </ion-content>
5431
- `, 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;-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:scroll;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) + env(safe-area-inset-bottom,0px))}:host .content-inner{flex:1;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}: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:var(--color-header-accent)!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:var(--color-header-accent-hover)!important}:host .header-details .back-button:active{background:var(--color-header-accent-active)!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: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }] });
5586
+ `, 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}: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:var(--color-header-accent)!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:var(--color-header-accent-hover)!important}:host .header-details .back-button:active{background:var(--color-header-accent-active)!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: DsMobileLoaderOverlayComponent, selector: "ds-mobile-loader-overlay", inputs: ["spinnerSize", "borderRadius"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }] });
5432
5587
  }
5433
5588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePageDetailsComponent, decorators: [{
5434
5589
  type: Component,
@@ -5441,6 +5596,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5441
5596
  IonRefresher,
5442
5597
  IonRefresherContent,
5443
5598
  DsIconComponent,
5599
+ DsMobileLoaderOverlayComponent,
5444
5600
  DsMobileInlineTabsComponent
5445
5601
  ], host: {
5446
5602
  '[style.--content-wrapper-padding]': 'contentPadding()'
@@ -5461,7 +5617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5461
5617
  </ion-header>
5462
5618
 
5463
5619
  <!-- Content with expandable header -->
5464
- <ion-content [scrollEvents]="true" (ionScroll)="handleScroll($event)">
5620
+ <ion-content [scrollEvents]="true" [forceOverscroll]="true" (ionScroll)="handleScroll($event)">
5465
5621
  <!-- Pull to refresh (only on native iOS/Android) -->
5466
5622
  @if (showRefresh() && isNativePlatform()) {
5467
5623
  <ion-refresher
@@ -5498,6 +5654,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5498
5654
 
5499
5655
  <!-- Content wrapper -->
5500
5656
  <div class="content-wrapper">
5657
+ @if (contentLoading()) {
5658
+ <ds-mobile-loader-overlay />
5659
+ }
5660
+
5501
5661
  <!-- Offline indicator slot (appears at top of content) -->
5502
5662
  <ng-content select="[offline-indicator]"></ng-content>
5503
5663
 
@@ -5506,7 +5666,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5506
5666
  </div>
5507
5667
  </div>
5508
5668
  </ion-content>
5509
- `, 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;-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:scroll;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) + env(safe-area-inset-bottom,0px))}:host .content-inner{flex:1;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}: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:var(--color-header-accent)!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:var(--color-header-accent-hover)!important}:host .header-details .back-button:active{background:var(--color-header-accent-active)!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"] }]
5669
+ `, 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}: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:var(--color-header-accent)!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:var(--color-header-accent-hover)!important}:host .header-details .back-button:active{background:var(--color-header-accent-active)!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"] }]
5510
5670
  }], ctorParameters: () => [{ type: i1.NavController }, { type: i0.ElementRef }], propDecorators: { ionContent: [{
5511
5671
  type: ViewChild,
5512
5672
  args: [IonContent]
@@ -6177,6 +6337,19 @@ class DsMobileCommentComponent {
6177
6337
  * Whether the comment is clickable
6178
6338
  */
6179
6339
  clickable = input(false, ...(ngDevMode ? [{ debugName: "clickable" }] : []));
6340
+ /**
6341
+ * Unified toggle for contextual actions (more button + long press).
6342
+ * - `true` — more button visible on **all** breakpoints, long press enabled
6343
+ * - `false` — more button hidden, long press suppressed
6344
+ * - `undefined` (default) — falls back to desktop-only button
6345
+ */
6346
+ moreActions = input(undefined, ...(ngDevMode ? [{ debugName: "moreActions" }] : []));
6347
+ shouldShowMoreButton = computed(() => {
6348
+ const ma = this.moreActions();
6349
+ if (ma !== undefined)
6350
+ return ma;
6351
+ return this.isDesktop();
6352
+ }, ...(ngDevMode ? [{ debugName: "shouldShowMoreButton" }] : []));
6180
6353
  /**
6181
6354
  * Whether this comment belongs to the current user
6182
6355
  */
@@ -6278,6 +6451,8 @@ class DsMobileCommentComponent {
6278
6451
  * Handle touch start for long press detection
6279
6452
  */
6280
6453
  handleTouchStart(event) {
6454
+ if (this.moreActions() === false)
6455
+ return;
6281
6456
  this.longPressTriggered = false;
6282
6457
  this.touchStartX = event.touches[0].clientX;
6283
6458
  this.touchStartY = event.touches[0].clientY;
@@ -6332,6 +6507,8 @@ class DsMobileCommentComponent {
6332
6507
  * Handle context menu (right-click on desktop) to trigger long press action
6333
6508
  */
6334
6509
  handleContextMenu(event) {
6510
+ if (this.moreActions() === false)
6511
+ return;
6335
6512
  event.preventDefault();
6336
6513
  this.longPress.emit();
6337
6514
  }
@@ -6346,7 +6523,7 @@ class DsMobileCommentComponent {
6346
6523
  this.longPress.emit();
6347
6524
  }
6348
6525
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6349
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileCommentComponent, isStandalone: true, selector: "ds-mobile-comment", inputs: { authorName: { classPropertyName: "authorName", publicName: "authorName", isSignal: true, isRequired: true, transformFunction: null }, authorRole: { classPropertyName: "authorRole", publicName: "authorRole", isSignal: true, isRequired: true, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, avatarType: { classPropertyName: "avatarType", publicName: "avatarType", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, isOwnComment: { classPropertyName: "isOwnComment", publicName: "isOwnComment", isSignal: true, isRequired: false, transformFunction: null }, isLiked: { classPropertyName: "isLiked", publicName: "isLiked", isSignal: true, isRequired: false, transformFunction: null }, likeCount: { classPropertyName: "likeCount", publicName: "likeCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { likeToggled: "likeToggled", commentClick: "commentClick", replyClick: "replyClick", editClick: "editClick", longPress: "longPress" }, host: { listeners: { "click": "handleCommentClick($event)", "touchstart": "handleTouchStart($event)", "touchend": "handleTouchEnd($event)", "touchmove": "handleTouchMove($event)", "contextmenu": "handleContextMenu($event)" }, properties: { "class.clickable": "clickable()" } }, ngImport: i0, template: `
6526
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileCommentComponent, isStandalone: true, selector: "ds-mobile-comment", inputs: { authorName: { classPropertyName: "authorName", publicName: "authorName", isSignal: true, isRequired: true, transformFunction: null }, authorRole: { classPropertyName: "authorRole", publicName: "authorRole", isSignal: true, isRequired: true, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, avatarType: { classPropertyName: "avatarType", publicName: "avatarType", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, moreActions: { classPropertyName: "moreActions", publicName: "moreActions", isSignal: true, isRequired: false, transformFunction: null }, isOwnComment: { classPropertyName: "isOwnComment", publicName: "isOwnComment", isSignal: true, isRequired: false, transformFunction: null }, isLiked: { classPropertyName: "isLiked", publicName: "isLiked", isSignal: true, isRequired: false, transformFunction: null }, likeCount: { classPropertyName: "likeCount", publicName: "likeCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { likeToggled: "likeToggled", commentClick: "commentClick", replyClick: "replyClick", editClick: "editClick", longPress: "longPress" }, host: { listeners: { "click": "handleCommentClick($event)", "touchstart": "handleTouchStart($event)", "touchend": "handleTouchEnd($event)", "touchmove": "handleTouchMove($event)", "contextmenu": "handleContextMenu($event)" }, properties: { "class.clickable": "clickable()" } }, ngImport: i0, template: `
6350
6527
  <div class="avatar-wrapper">
6351
6528
  <ds-avatar [initials]="avatarInitials()" [type]="avatarType()" size="sm" />
6352
6529
  </div>
@@ -6366,8 +6543,7 @@ class DsMobileCommentComponent {
6366
6543
  </div>
6367
6544
  </div>
6368
6545
 
6369
- <!-- Desktop more button - shown on tablet and above (768px+) -->
6370
- @if (isDesktop()) {
6546
+ @if (shouldShowMoreButton()) {
6371
6547
  <ds-icon-button class="desktop-more-button" icon="remixMoreFill" variant="secondary" size="sm" (clicked)="handleMoreButtonClick($event)" aria-label="More options">
6372
6548
  </ds-icon-button>
6373
6549
  }
@@ -6414,8 +6590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6414
6590
  </div>
6415
6591
  </div>
6416
6592
 
6417
- <!-- Desktop more button - shown on tablet and above (768px+) -->
6418
- @if (isDesktop()) {
6593
+ @if (shouldShowMoreButton()) {
6419
6594
  <ds-icon-button class="desktop-more-button" icon="remixMoreFill" variant="secondary" size="sm" (clicked)="handleMoreButtonClick($event)" aria-label="More options">
6420
6595
  </ds-icon-button>
6421
6596
  }
@@ -6432,7 +6607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6432
6607
  </div>
6433
6608
  </div>
6434
6609
  `, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host{display:flex;gap:12px;padding:8px;position:relative;border-radius:16px;transition:all .2s ease;background:var(--color-background-primary, #ffffff);margin-bottom:8px;margin-left:-8px;margin-right:-8px}:host:last-child{margin-bottom:0}:host:after{content:\"\";position:absolute;bottom:-4px;left:44px;right:8px;height:1px;background:var(--border-color-default)}:host:last-child:after{display:none}:host.clickable{cursor:pointer}:host.clickable:active{background:var(--color-background-neutral-primary-hover, #f5f5f5)}.avatar-wrapper{position:relative;display:flex;align-items:flex-start;justify-content:center;flex-shrink:0}.comment-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.comment-header{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.header-actions{display:flex;align-items:center;gap:4px;margin-left:auto}.desktop-more-button::ng-deep button{border-radius:50%!important}.action-like{display:flex;align-items:center;gap:2px;color:var(--color-text-secondary, #737373);cursor:pointer;transition:color .2s ease;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:18px}.like-count{opacity:1}.like-count.hidden{opacity:0}.action-like.active{color:#f91880}.icon-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.icon-pulse{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);opacity:0;pointer-events:none}.icon-pulse.animating{animation:pulse .4s cubic-bezier(.4,0,.2,1)}@keyframes pulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.8}to{transform:translate(-50%,-50%) scale(2.5);opacity:0}}.comment-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:22px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:pre-wrap;word-wrap:break-word}.comment-text ::ng-deep .mention{color:var(--color-accent, #6b5ff5)!important;font-weight:600}.comment-actions{display:flex;align-items:center;gap:12px;margin-top:4px}.action-reply{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-text-secondary, #737373);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:color .2s ease}.action-reply:hover{color:var(--color-text-primary, #1a1a1a)}.action-edit{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-text-secondary, #737373);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:color .2s ease}.action-edit:hover{color:var(--color-text-primary, #1a1a1a)}\n"] }]
6435
- }], ctorParameters: () => [], propDecorators: { authorName: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorName", required: true }] }], authorRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorRole", required: true }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarType: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarType", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], isOwnComment: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOwnComment", required: false }] }], isLiked: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLiked", required: false }] }], likeToggled: [{ type: i0.Output, args: ["likeToggled"] }], likeCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "likeCount", required: false }] }], commentClick: [{ type: i0.Output, args: ["commentClick"] }], replyClick: [{ type: i0.Output, args: ["replyClick"] }], editClick: [{ type: i0.Output, args: ["editClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
6610
+ }], ctorParameters: () => [], propDecorators: { authorName: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorName", required: true }] }], authorRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorRole", required: true }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarType: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarType", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], moreActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreActions", required: false }] }], isOwnComment: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOwnComment", required: false }] }], isLiked: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLiked", required: false }] }], likeToggled: [{ type: i0.Output, args: ["likeToggled"] }], likeCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "likeCount", required: false }] }], commentClick: [{ type: i0.Output, args: ["commentClick"] }], replyClick: [{ type: i0.Output, args: ["replyClick"] }], editClick: [{ type: i0.Output, args: ["editClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
6436
6611
 
6437
6612
  /**
6438
6613
  * DsMobilePostComposerComponent
@@ -6531,92 +6706,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6531
6706
  `, styles: [":host{display:block;max-width:640px;cursor:pointer;transition:all .2s ease}.composer-container{display:flex;align-items:center;gap:12px}.composer-input-wrapper{flex:1;min-width:0}.composer-input{width:100%;background:rgba(var(--header-content-color-rgb, 255, 255, 255),.1);border:none;border-radius:24px;padding:10px 16px;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:20px;letter-spacing:-.3px;color:rgba(var(--header-content-color-rgb, 255, 255, 255),.75);outline:none;cursor:pointer;transition:all .2s ease;pointer-events:none;-webkit-user-select:none;user-select:none}.composer-input::placeholder{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.75);opacity:1}@media (hover: hover){:host:hover .composer-input{opacity:.8}}\n"] }]
6532
6707
  }], propDecorators: { avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarType: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarType", required: false }] }], avatarSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarSrc", required: false }] }], avatarIconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarIconName", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], buttonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonText", required: false }] }], composerClick: [{ type: i0.Output, args: ["composerClick"] }] } });
6533
6708
 
6534
- /**
6535
- * DsMobileLoaderOverlayComponent
6536
- *
6537
- * Reusable loader overlay component that displays a spinner centered over its container.
6538
- * Designed to overlay images or other content during loading states.
6539
- *
6540
- * Features:
6541
- * - Semi-transparent white background overlay
6542
- * - Centered animated spinner
6543
- * - Customizable spinner size
6544
- * - Absolute positioning to cover parent
6545
- * - Accessible with proper z-index stacking
6546
- *
6547
- * @example
6548
- * ```html
6549
- * <!-- Basic usage -->
6550
- * <div style="position: relative;">
6551
- * <img src="image.jpg" alt="Content" />
6552
- * @if (isLoading) {
6553
- * <ds-mobile-loader-overlay />
6554
- * }
6555
- * </div>
6556
- *
6557
- * <!-- With custom spinner size -->
6558
- * <div style="position: relative;">
6559
- * <div class="content">Loading content...</div>
6560
- * <ds-mobile-loader-overlay [spinnerSize]="32" />
6561
- * </div>
6562
- *
6563
- * <!-- Over an image with rounded corners -->
6564
- * <div style="position: relative; border-radius: 12px; overflow: hidden;">
6565
- * <img src="photo.jpg" />
6566
- * <ds-mobile-loader-overlay [borderRadius]="12" />
6567
- * </div>
6568
- * ```
6569
- *
6570
- * @notes
6571
- * - Parent container must have position: relative for the overlay to work correctly
6572
- * - The overlay covers the entire parent element using inset: 0
6573
- * - Spinner animation runs continuously at 0.6s per rotation
6574
- */
6575
- class DsMobileLoaderOverlayComponent {
6576
- /**
6577
- * Size of the spinner in pixels
6578
- * @default 24
6579
- */
6580
- spinnerSize = input(24, ...(ngDevMode ? [{ debugName: "spinnerSize" }] : []));
6581
- /**
6582
- * Border radius of the overlay in pixels (should match parent's border radius)
6583
- * @default 0
6584
- */
6585
- borderRadius = input(0, ...(ngDevMode ? [{ debugName: "borderRadius" }] : []));
6586
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLoaderOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6587
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileLoaderOverlayComponent, isStandalone: true, selector: "ds-mobile-loader-overlay", inputs: { spinnerSize: { classPropertyName: "spinnerSize", publicName: "spinnerSize", isSignal: true, isRequired: false, transformFunction: null }, borderRadius: { classPropertyName: "borderRadius", publicName: "borderRadius", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6588
- <div
6589
- class="loader-overlay"
6590
- [style.border-radius.px]="borderRadius()"
6591
- role="status"
6592
- aria-live="polite"
6593
- aria-label="Loading">
6594
- <div
6595
- class="spinner"
6596
- [style.width.px]="spinnerSize()"
6597
- [style.height.px]="spinnerSize()">
6598
- </div>
6599
- </div>
6600
- `, isInline: true, styles: [":host{display:contents}.loader-overlay{position:absolute;inset:0;background:#ffffffe6;display:flex;align-items:center;justify-content:center;z-index:2}.spinner{border:2px solid var(--color-border-neutral-secondary, #E5E5E5);border-top-color:var(--color-accent, #6B5FF5);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-color-scheme: dark){.loader-overlay{background:#000c}.spinner{border-color:#fff3;border-top-color:var(--color-accent, #6B5FF5)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
6601
- }
6602
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLoaderOverlayComponent, decorators: [{
6603
- type: Component,
6604
- args: [{ selector: 'ds-mobile-loader-overlay', standalone: true, imports: [CommonModule], template: `
6605
- <div
6606
- class="loader-overlay"
6607
- [style.border-radius.px]="borderRadius()"
6608
- role="status"
6609
- aria-live="polite"
6610
- aria-label="Loading">
6611
- <div
6612
- class="spinner"
6613
- [style.width.px]="spinnerSize()"
6614
- [style.height.px]="spinnerSize()">
6615
- </div>
6616
- </div>
6617
- `, styles: [":host{display:contents}.loader-overlay{position:absolute;inset:0;background:#ffffffe6;display:flex;align-items:center;justify-content:center;z-index:2}.spinner{border:2px solid var(--color-border-neutral-secondary, #E5E5E5);border-top-color:var(--color-accent, #6B5FF5);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-color-scheme: dark){.loader-overlay{background:#000c}.spinner{border-color:#fff3;border-top-color:var(--color-accent, #6B5FF5)}}\n"] }]
6618
- }], propDecorators: { spinnerSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinnerSize", required: false }] }], borderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderRadius", required: false }] }] } });
6619
-
6620
6709
  /**
6621
6710
  * DsMobileAttachmentPreviewComponent
6622
6711
  *
@@ -8580,6 +8669,11 @@ class DsMobileInteractiveListItemPostComponent {
8580
8669
  * @default true
8581
8670
  */
8582
8671
  enableLongPress = input(true, ...(ngDevMode ? [{ debugName: "enableLongPress" }] : []));
8672
+ /**
8673
+ * Unified toggle for contextual actions (more button + long press).
8674
+ * When set, takes precedence over `enableLongPress`.
8675
+ */
8676
+ moreActions = input(undefined, ...(ngDevMode ? [{ debugName: "moreActions" }] : []));
8583
8677
  /**
8584
8678
  * Emits when the post card is clicked (if clickable)
8585
8679
  */
@@ -8607,13 +8701,14 @@ class DsMobileInteractiveListItemPostComponent {
8607
8701
  this.longPress.emit();
8608
8702
  }
8609
8703
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemPostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8610
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileInteractiveListItemPostComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-post", inputs: { authorName: { classPropertyName: "authorName", publicName: "authorName", isSignal: true, isRequired: true, transformFunction: null }, authorRole: { classPropertyName: "authorRole", publicName: "authorRole", isSignal: true, isRequired: true, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, avatarType: { classPropertyName: "avatarType", publicName: "avatarType", isSignal: true, isRequired: false, transformFunction: null }, avatarSrc: { classPropertyName: "avatarSrc", publicName: "avatarSrc", isSignal: true, isRequired: false, transformFunction: null }, avatarIconName: { classPropertyName: "avatarIconName", publicName: "avatarIconName", isSignal: true, isRequired: false, transformFunction: null }, showBadge: { classPropertyName: "showBadge", publicName: "showBadge", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { postClick: "postClick", commentClick: "commentClick", longPress: "longPress" }, ngImport: i0, template: `
8704
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileInteractiveListItemPostComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-post", inputs: { authorName: { classPropertyName: "authorName", publicName: "authorName", isSignal: true, isRequired: true, transformFunction: null }, authorRole: { classPropertyName: "authorRole", publicName: "authorRole", isSignal: true, isRequired: true, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, avatarType: { classPropertyName: "avatarType", publicName: "avatarType", isSignal: true, isRequired: false, transformFunction: null }, avatarSrc: { classPropertyName: "avatarSrc", publicName: "avatarSrc", isSignal: true, isRequired: false, transformFunction: null }, avatarIconName: { classPropertyName: "avatarIconName", publicName: "avatarIconName", isSignal: true, isRequired: false, transformFunction: null }, showBadge: { classPropertyName: "showBadge", publicName: "showBadge", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null }, moreActions: { classPropertyName: "moreActions", publicName: "moreActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { postClick: "postClick", commentClick: "commentClick", longPress: "longPress" }, ngImport: i0, template: `
8611
8705
  <ds-mobile-list-item
8612
8706
  [leadingSize]="'32px'"
8613
8707
  [align]="align()"
8614
8708
  [variant]="variant()"
8615
8709
  [interactive]="clickable()"
8616
8710
  [enableLongPress]="enableLongPress()"
8711
+ [moreActions]="moreActions()"
8617
8712
  (itemClick)="handlePostClick()"
8618
8713
  (longPress)="handleLongPress()"
8619
8714
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -8646,7 +8741,7 @@ class DsMobileInteractiveListItemPostComponent {
8646
8741
  <ng-content select="post-actions" />
8647
8742
  </div>
8648
8743
  </ds-mobile-list-item>
8649
- `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.post-header{display:flex;align-items:center;justify-content:space-between;height:32px;margin-bottom:8px}.menu-slot{flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
8744
+ `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.post-header{display:flex;align-items:center;justify-content:space-between;height:32px;margin-bottom:8px}.menu-slot{flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
8650
8745
  }
8651
8746
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemPostComponent, decorators: [{
8652
8747
  type: Component,
@@ -8657,6 +8752,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8657
8752
  [variant]="variant()"
8658
8753
  [interactive]="clickable()"
8659
8754
  [enableLongPress]="enableLongPress()"
8755
+ [moreActions]="moreActions()"
8660
8756
  (itemClick)="handlePostClick()"
8661
8757
  (longPress)="handleLongPress()"
8662
8758
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -8690,7 +8786,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8690
8786
  </div>
8691
8787
  </ds-mobile-list-item>
8692
8788
  `, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.post-header{display:flex;align-items:center;justify-content:space-between;height:32px;margin-bottom:8px}.menu-slot{flex-shrink:0}\n"] }]
8693
- }], propDecorators: { authorName: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorName", required: true }] }], authorRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorRole", required: true }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarType: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarType", required: false }] }], avatarSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarSrc", required: false }] }], avatarIconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarIconName", required: false }] }], showBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBadge", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], postClick: [{ type: i0.Output, args: ["postClick"] }], commentClick: [{ type: i0.Output, args: ["commentClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
8789
+ }], propDecorators: { authorName: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorName", required: true }] }], authorRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "authorRole", required: true }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarType: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarType", required: false }] }], avatarSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarSrc", required: false }] }], avatarIconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarIconName", required: false }] }], showBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBadge", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], moreActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreActions", required: false }] }], postClick: [{ type: i0.Output, args: ["postClick"] }], commentClick: [{ type: i0.Output, args: ["commentClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
8694
8790
  /**
8695
8791
  * PostContentComponent
8696
8792
  *
@@ -9056,6 +9152,11 @@ class DsMobileInteractiveListItemInquiryComponent {
9056
9152
  * @default true
9057
9153
  */
9058
9154
  enableLongPress = input(true, ...(ngDevMode ? [{ debugName: "enableLongPress" }] : []));
9155
+ /**
9156
+ * Unified toggle for contextual actions (more button + long press).
9157
+ * When set, takes precedence over `enableLongPress`.
9158
+ */
9159
+ moreActions = input(undefined, ...(ngDevMode ? [{ debugName: "moreActions" }] : []));
9059
9160
  /**
9060
9161
  * Emits when the inquiry item is clicked (if clickable)
9061
9162
  */
@@ -9084,13 +9185,14 @@ class DsMobileInteractiveListItemInquiryComponent {
9084
9185
  this.longPress.emit();
9085
9186
  }
9086
9187
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemInquiryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9087
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileInteractiveListItemInquiryComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-inquiry", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, statusLabel: { classPropertyName: "statusLabel", publicName: "statusLabel", isSignal: true, isRequired: false, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, showChevron: { classPropertyName: "showChevron", publicName: "showChevron", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inquiryClick: "inquiryClick", longPress: "longPress" }, ngImport: i0, template: `
9188
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileInteractiveListItemInquiryComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-inquiry", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, statusLabel: { classPropertyName: "statusLabel", publicName: "statusLabel", isSignal: true, isRequired: false, transformFunction: null }, timestamp: { classPropertyName: "timestamp", publicName: "timestamp", isSignal: true, isRequired: true, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, showChevron: { classPropertyName: "showChevron", publicName: "showChevron", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null }, moreActions: { classPropertyName: "moreActions", publicName: "moreActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inquiryClick: "inquiryClick", longPress: "longPress" }, ngImport: i0, template: `
9088
9189
  <ds-mobile-list-item
9089
9190
  [leadingSize]="'32px'"
9090
9191
  [align]="align()"
9091
9192
  [variant]="variant()"
9092
9193
  [interactive]="clickable()"
9093
9194
  [enableLongPress]="enableLongPress()"
9195
+ [moreActions]="moreActions()"
9094
9196
  (itemClick)="handleInquiryClick()"
9095
9197
  (longPress)="handleLongPress()"
9096
9198
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -9138,7 +9240,7 @@ class DsMobileInteractiveListItemInquiryComponent {
9138
9240
  </div>
9139
9241
  }
9140
9242
  </ds-mobile-list-item>
9141
- `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.inquiry-avatar{flex-shrink:0}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon{background-color:var(--color-accent, #5d5fef)!important}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon,.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon::ng-deep svg{color:var(--color-on-accent, #ffffff)!important;fill:var(--color-on-accent, #ffffff)!important}.inquiry-avatar.closed::ng-deep .avatar--icon{background-color:var(--text-color-default-tertiary, #737373)!important}.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon,.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon::ng-deep svg{color:#fff!important;fill:#fff!important}.inquiry-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.inquiry-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inquiry-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.inquiry-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.inquiry-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-status.open,.inquiry-status.closed{color:var(--text-color-default-tertiary, #737373)}.inquiry-timestamp{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsShapeIndicatorComponent, selector: "ds-shape-indicator", inputs: ["shape", "variant", "label"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9243
+ `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.inquiry-avatar{flex-shrink:0}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon{background-color:var(--color-accent, #5d5fef)!important}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon,.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon::ng-deep svg{color:var(--color-on-accent, #ffffff)!important;fill:var(--color-on-accent, #ffffff)!important}.inquiry-avatar.closed::ng-deep .avatar--icon{background-color:var(--text-color-default-tertiary, #737373)!important}.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon,.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon::ng-deep svg{color:#fff!important;fill:#fff!important}.inquiry-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.inquiry-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inquiry-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.inquiry-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.inquiry-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-status.open,.inquiry-status.closed{color:var(--text-color-default-tertiary, #737373)}.inquiry-timestamp{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsShapeIndicatorComponent, selector: "ds-shape-indicator", inputs: ["shape", "variant", "label"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9142
9244
  }
9143
9245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemInquiryComponent, decorators: [{
9144
9246
  type: Component,
@@ -9149,6 +9251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
9149
9251
  [variant]="variant()"
9150
9252
  [interactive]="clickable()"
9151
9253
  [enableLongPress]="enableLongPress()"
9254
+ [moreActions]="moreActions()"
9152
9255
  (itemClick)="handleInquiryClick()"
9153
9256
  (longPress)="handleLongPress()"
9154
9257
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -9197,7 +9300,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
9197
9300
  }
9198
9301
  </ds-mobile-list-item>
9199
9302
  `, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.inquiry-avatar{flex-shrink:0}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon{background-color:var(--color-accent, #5d5fef)!important}.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon,.inquiry-avatar:not(.closed)::ng-deep .avatar--icon ds-icon::ng-deep svg{color:var(--color-on-accent, #ffffff)!important;fill:var(--color-on-accent, #ffffff)!important}.inquiry-avatar.closed::ng-deep .avatar--icon{background-color:var(--text-color-default-tertiary, #737373)!important}.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon,.inquiry-avatar.closed::ng-deep .avatar--icon ds-icon::ng-deep svg{color:#fff!important;fill:#fff!important}.inquiry-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.inquiry-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inquiry-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.inquiry-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.inquiry-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-status.open,.inquiry-status.closed{color:var(--text-color-default-tertiary, #737373)}.inquiry-timestamp{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.inquiry-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"] }]
9200
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusLabel", required: false }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], iconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconName", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], showChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChevron", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], inquiryClick: [{ type: i0.Output, args: ["inquiryClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
9303
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusLabel", required: false }] }], timestamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "timestamp", required: true }] }], iconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconName", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], showChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChevron", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], moreActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreActions", required: false }] }], inquiryClick: [{ type: i0.Output, args: ["inquiryClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
9201
9304
 
9202
9305
  /**
9203
9306
  * DsMobileInteractiveListItemMessageComponent
@@ -9286,6 +9389,7 @@ class DsMobileInteractiveListItemMessageComponent {
9286
9389
  [interactive]="clickable()"
9287
9390
  [enableLongPress]="false"
9288
9391
  [showDesktopMoreButton]="false"
9392
+ [moreActions]="false"
9289
9393
  (itemClick)="handleMessageClick()">
9290
9394
 
9291
9395
  <div content-leading>
@@ -9318,7 +9422,7 @@ class DsMobileInteractiveListItemMessageComponent {
9318
9422
  <p class="message-preview">{{ message() }}</p>
9319
9423
  </div>
9320
9424
  </ds-mobile-list-item>
9321
- `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.message-header{display:flex;align-items:center;justify-content:space-between;height:32px;margin-bottom:8px}.sender-details{display:flex;flex-direction:column;align-items:flex-start;gap:2px;flex:1;min-width:0}.sender-name-row{display:flex;align-items:center;gap:6px;flex-shrink:0}.sender-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}.sender-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;display:flex;align-items:center;gap:4px}.meta-separator{color:var(--text-color-default-tertiary, #737373);opacity:.5}.unread-indicator{width:8px;height:8px;border-radius:50%;background:var(--color-brand-primary, #5d5fef);flex-shrink:0}.message-preview{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9425
+ `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.message-header{display:flex;align-items:center;justify-content:space-between;height:32px;margin-bottom:8px}.sender-details{display:flex;flex-direction:column;align-items:flex-start;gap:2px;flex:1;min-width:0}.sender-name-row{display:flex;align-items:center;gap:6px;flex-shrink:0}.sender-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}.sender-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;display:flex;align-items:center;gap:4px}.meta-separator{color:var(--text-color-default-tertiary, #737373);opacity:.5}.unread-indicator{width:8px;height:8px;border-radius:50%;background:var(--color-brand-primary, #5d5fef);flex-shrink:0}.message-preview{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9322
9426
  }
9323
9427
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemMessageComponent, decorators: [{
9324
9428
  type: Component,
@@ -9329,6 +9433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
9329
9433
  [interactive]="clickable()"
9330
9434
  [enableLongPress]="false"
9331
9435
  [showDesktopMoreButton]="false"
9436
+ [moreActions]="false"
9332
9437
  (itemClick)="handleMessageClick()">
9333
9438
 
9334
9439
  <div content-leading>
@@ -9580,6 +9685,11 @@ class DsMobileInteractiveListItemBookingComponent {
9580
9685
  * @default true
9581
9686
  */
9582
9687
  enableLongPress = input(true, ...(ngDevMode ? [{ debugName: "enableLongPress" }] : []));
9688
+ /**
9689
+ * Unified toggle for contextual actions (more button + long press).
9690
+ * When set, takes precedence over `enableLongPress`.
9691
+ */
9692
+ moreActions = input(undefined, ...(ngDevMode ? [{ debugName: "moreActions" }] : []));
9583
9693
  /**
9584
9694
  * Emits when the booking item is clicked (if clickable)
9585
9695
  */
@@ -9610,13 +9720,14 @@ class DsMobileInteractiveListItemBookingComponent {
9610
9720
  this.longPress.emit();
9611
9721
  }
9612
9722
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemBookingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9613
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileInteractiveListItemBookingComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-booking", inputs: { thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, facilityTitle: { classPropertyName: "facilityTitle", publicName: "facilityTitle", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, bookingDate: { classPropertyName: "bookingDate", publicName: "bookingDate", isSignal: true, isRequired: false, transformFunction: null }, bookingTime: { classPropertyName: "bookingTime", publicName: "bookingTime", isSignal: true, isRequired: false, transformFunction: null }, availabilityStatus: { classPropertyName: "availabilityStatus", publicName: "availabilityStatus", isSignal: true, isRequired: false, transformFunction: null }, statusLabel: { classPropertyName: "statusLabel", publicName: "statusLabel", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, showChevron: { classPropertyName: "showChevron", publicName: "showChevron", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { bookingClick: "bookingClick", longPress: "longPress" }, ngImport: i0, template: `
9723
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileInteractiveListItemBookingComponent, isStandalone: true, selector: "ds-mobile-interactive-list-item-booking", inputs: { thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, facilityTitle: { classPropertyName: "facilityTitle", publicName: "facilityTitle", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, bookingDate: { classPropertyName: "bookingDate", publicName: "bookingDate", isSignal: true, isRequired: false, transformFunction: null }, bookingTime: { classPropertyName: "bookingTime", publicName: "bookingTime", isSignal: true, isRequired: false, transformFunction: null }, availabilityStatus: { classPropertyName: "availabilityStatus", publicName: "availabilityStatus", isSignal: true, isRequired: false, transformFunction: null }, statusLabel: { classPropertyName: "statusLabel", publicName: "statusLabel", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, showChevron: { classPropertyName: "showChevron", publicName: "showChevron", isSignal: true, isRequired: false, transformFunction: null }, enableLongPress: { classPropertyName: "enableLongPress", publicName: "enableLongPress", isSignal: true, isRequired: false, transformFunction: null }, moreActions: { classPropertyName: "moreActions", publicName: "moreActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { bookingClick: "bookingClick", longPress: "longPress" }, ngImport: i0, template: `
9614
9724
  <ds-mobile-list-item
9615
9725
  [leadingSize]="'64px'"
9616
9726
  [align]="align()"
9617
9727
  [variant]="variant()"
9618
9728
  [interactive]="clickable()"
9619
9729
  [enableLongPress]="enableLongPress()"
9730
+ [moreActions]="moreActions()"
9620
9731
  (itemClick)="handleBookingClick()"
9621
9732
  (longPress)="handleLongPress()"
9622
9733
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -9680,7 +9791,7 @@ class DsMobileInteractiveListItemBookingComponent {
9680
9791
  </div>
9681
9792
  }
9682
9793
  </ds-mobile-list-item>
9683
- `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.booking-thumbnail{flex-shrink:0;width:64px;height:64px;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center}.booking-thumbnail img{width:100%;height:100%;object-fit:cover}.booking-thumbnail-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-color-default-tertiary, #737373)}.booking-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.booking-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.booking-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.booking-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.booking-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-status.available-today{color:var(--color-accent, #5d5fef)}.booking-status.available-from{color:var(--color-warning, #f59e0b)}.booking-status.unavailable{color:var(--text-color-default-tertiary, #737373)}.booking-datetime{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsShapeIndicatorComponent, selector: "ds-shape-indicator", inputs: ["shape", "variant", "label"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9794
+ `, isInline: true, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.booking-thumbnail{flex-shrink:0;width:64px;height:64px;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center}.booking-thumbnail img{width:100%;height:100%;object-fit:cover}.booking-thumbnail-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-color-default-tertiary, #737373)}.booking-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.booking-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.booking-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.booking-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.booking-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-status.available-today{color:var(--color-accent, #5d5fef)}.booking-status.available-from{color:var(--color-warning, #f59e0b)}.booking-status.unavailable{color:var(--text-color-default-tertiary, #737373)}.booking-datetime{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsShapeIndicatorComponent, selector: "ds-shape-indicator", inputs: ["shape", "variant", "label"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }] });
9684
9795
  }
9685
9796
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileInteractiveListItemBookingComponent, decorators: [{
9686
9797
  type: Component,
@@ -9691,6 +9802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
9691
9802
  [variant]="variant()"
9692
9803
  [interactive]="clickable()"
9693
9804
  [enableLongPress]="enableLongPress()"
9805
+ [moreActions]="moreActions()"
9694
9806
  (itemClick)="handleBookingClick()"
9695
9807
  (longPress)="handleLongPress()"
9696
9808
  (moreButtonClick)="handleMoreButtonClick($event)">
@@ -9755,7 +9867,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
9755
9867
  }
9756
9868
  </ds-mobile-list-item>
9757
9869
  `, styles: [":host{display:block}:host:last-child{--divider-display: none;--item-padding-bottom: 0}.booking-thumbnail{flex-shrink:0;width:64px;height:64px;border-radius:12px;overflow:hidden;background:var(--color-surface-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center}.booking-thumbnail img{width:100%;height:100%;object-fit:cover}.booking-thumbnail-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-color-default-tertiary, #737373)}.booking-content{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.booking-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.booking-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.booking-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66);display:flex;align-items:center;gap:8px;margin-top:4px}.booking-status{display:flex;align-items:center;gap:6px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:500;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-status.available-today{color:var(--color-accent, #5d5fef)}.booking-status.available-from{color:var(--color-warning, #f59e0b)}.booking-status.unavailable{color:var(--text-color-default-tertiary, #737373)}.booking-datetime{display:flex;align-items:center;gap:4px;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-secondary, #545B66)}.booking-trailing{display:flex;align-items:center;color:var(--color-text-tertiary, #a3a3a3)}\n"] }]
9758
- }], propDecorators: { thumbnail: [{ type: i0.Input, args: [{ isSignal: true, alias: "thumbnail", required: false }] }], facilityTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "facilityTitle", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], bookingDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "bookingDate", required: false }] }], bookingTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "bookingTime", required: false }] }], availabilityStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "availabilityStatus", required: false }] }], statusLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusLabel", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], showChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChevron", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], bookingClick: [{ type: i0.Output, args: ["bookingClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
9870
+ }], propDecorators: { thumbnail: [{ type: i0.Input, args: [{ isSignal: true, alias: "thumbnail", required: false }] }], facilityTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "facilityTitle", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], bookingDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "bookingDate", required: false }] }], bookingTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "bookingTime", required: false }] }], availabilityStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "availabilityStatus", required: false }] }], statusLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusLabel", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], showChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChevron", required: false }] }], enableLongPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLongPress", required: false }] }], moreActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreActions", required: false }] }], bookingClick: [{ type: i0.Output, args: ["bookingClick"] }], longPress: [{ type: i0.Output, args: ["longPress"] }] } });
9759
9871
 
9760
9872
  /**
9761
9873
  * DsMobileTabBarComponent
@@ -10356,6 +10468,7 @@ class DsMobileTabBarComponent {
10356
10468
  cssClass: ['ds-bottom-sheet', 'auto-height'],
10357
10469
  });
10358
10470
  await sheet.present();
10471
+ disableModalShadowPointerEvents(sheet);
10359
10472
  const result = await sheet.onWillDismiss();
10360
10473
  if (result.data?.action) {
10361
10474
  // Emit the selected action to parent
@@ -10397,7 +10510,7 @@ class DsMobileTabBarComponent {
10397
10510
  <ds-avatar [size]="'md'" [type]="avatarType" [initials]="avatarInitials" [src]="avatarSrc" [iconName]="avatarIconName" (click)="handleAvatarClick()" />
10398
10511
  </div>
10399
10512
  </ion-tab-bar>
10400
- `, isInline: true, styles: [":host{--ds-tab-bar-height: 64px}@media (min-width: 768px){:host{display:block;--ds-tab-bar-height: 64px}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-header-surface)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-header-surface);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-accent);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-accent);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-accent);border-radius:1000px}ion-tab-button ion-label{font-size:11px;font-weight:500;letter-spacing:-.5px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-header-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-header-content, white);color:rgba(var(--color-header-content-rgb, 255, 255, 255),.7);background:transparent;position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-header-content, white);--color-selected: var(--color-header-content, white);color:var(--color-header-content, white);background:rgba(var(--color-header-content-rgb, 255, 255, 255),.1)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-header-content, white);color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-header-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-header-accent);--color-selected: var(--color-on-header-accent, white);--color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonTabBar, selector: "ion-tab-bar", inputs: ["color", "mode", "selectedTab", "translucent"] }, { kind: "component", type: IonTabButton, selector: "ion-tab-button", inputs: ["disabled", "download", "href", "layout", "mode", "rel", "selected", "tab", "target"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { 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"] }] });
10513
+ `, isInline: true, styles: [":host{--ds-tab-bar-height: 64px}@media (min-width: 768px){:host{display:block;--ds-tab-bar-height: 64px}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-header-surface)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(.plt-android) ion-tab-bar[slot=bottom]{padding-bottom:max(8px,var(--app-safe-bottom, 0px))!important}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:var(--app-safe-bottom, 0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:var(--app-safe-bottom, 0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-header-surface);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-accent);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-accent);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-accent);border-radius:1000px}ion-tab-button ion-label{font-size:11px;font-weight:500;letter-spacing:-.5px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-header-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-header-content, white);color:rgba(var(--color-header-content-rgb, 255, 255, 255),.7);background:transparent;position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-header-content, white);--color-selected: var(--color-header-content, white);color:var(--color-header-content, white);background:rgba(var(--color-header-content-rgb, 255, 255, 255),.1)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-header-content, white);color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-header-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-header-accent);--color-selected: var(--color-on-header-accent, white);--color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonTabBar, selector: "ion-tab-bar", inputs: ["color", "mode", "selectedTab", "translucent"] }, { kind: "component", type: IonTabButton, selector: "ion-tab-button", inputs: ["disabled", "download", "href", "layout", "mode", "rel", "selected", "tab", "target"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { 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"] }] });
10401
10514
  }
10402
10515
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileTabBarComponent, decorators: [{
10403
10516
  type: Component,
@@ -10433,7 +10546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
10433
10546
  <ds-avatar [size]="'md'" [type]="avatarType" [initials]="avatarInitials" [src]="avatarSrc" [iconName]="avatarIconName" (click)="handleAvatarClick()" />
10434
10547
  </div>
10435
10548
  </ion-tab-bar>
10436
- `, styles: [":host{--ds-tab-bar-height: 64px}@media (min-width: 768px){:host{display:block;--ds-tab-bar-height: 64px}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-header-surface)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-header-surface);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-accent);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-accent);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-accent);border-radius:1000px}ion-tab-button ion-label{font-size:11px;font-weight:500;letter-spacing:-.5px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-header-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-header-content, white);color:rgba(var(--color-header-content-rgb, 255, 255, 255),.7);background:transparent;position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-header-content, white);--color-selected: var(--color-header-content, white);color:var(--color-header-content, white);background:rgba(var(--color-header-content-rgb, 255, 255, 255),.1)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-header-content, white);color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-header-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-header-accent);--color-selected: var(--color-on-header-accent, white);--color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"] }]
10549
+ `, styles: [":host{--ds-tab-bar-height: 64px}@media (min-width: 768px){:host{display:block;--ds-tab-bar-height: 64px}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-header-surface)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(.plt-android) ion-tab-bar[slot=bottom]{padding-bottom:max(8px,var(--app-safe-bottom, 0px))!important}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:var(--app-safe-bottom, 0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:var(--app-safe-bottom, 0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-header-surface);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-accent);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-accent);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-accent);border-radius:1000px}ion-tab-button ion-label{font-size:11px;font-weight:500;letter-spacing:-.5px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-header-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-header-content, white);color:rgba(var(--color-header-content-rgb, 255, 255, 255),.7);background:transparent;position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-header-content, white);--color-selected: var(--color-header-content, white);color:var(--color-header-content, white);background:rgba(var(--color-header-content-rgb, 255, 255, 255),.1)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-header-content, white);color:var(--color-header-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-header-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-header-accent);--color-selected: var(--color-on-header-accent, white);--color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-on-header-accent, white);color:var(--color-on-header-accent, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-on-header-accent, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"] }]
10437
10550
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { tabs: [{
10438
10551
  type: Input
10439
10552
  }], avatarType: [{
@@ -12836,6 +12949,13 @@ class MobileModalBase {
12836
12949
  * @default false
12837
12950
  */
12838
12951
  isAutoHeight = input(false, ...(ngDevMode ? [{ debugName: "isAutoHeight" }] : []));
12952
+ /**
12953
+ * Controls how modal content behaves when the keyboard opens.
12954
+ * - 'follow': content is pushed to follow keyboard movement
12955
+ * - 'overlay': keyboard/footer overlays lower content (no auto scroll push)
12956
+ * @default 'follow'
12957
+ */
12958
+ keyboardContentBehavior = input('follow', ...(ngDevMode ? [{ debugName: "keyboardContentBehavior" }] : []));
12839
12959
  /**
12840
12960
  * Emitted when modal is closed
12841
12961
  */
@@ -12900,33 +13020,39 @@ class MobileModalBase {
12900
13020
  try {
12901
13021
  const scrollElement = await this.ionContent.getScrollElement();
12902
13022
  if (scrollElement) {
12903
- // Store current scroll position before keyboard animation
12904
- const currentScrollTop = scrollElement.scrollTop;
12905
13023
  // Get current fixed bottom height and add keyboard height
12906
13024
  const fixedBottomHeight = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--fixed-bottom-height') || '0');
12907
- const totalPadding = fixedBottomHeight + info.keyboardHeight;
13025
+ const totalPadding = this.getScrollPadding(fixedBottomHeight, info.keyboardHeight);
12908
13026
  scrollElement.style.paddingBottom = `${totalPadding}px`;
12909
13027
  // console.log('[MobileModalBase] Updated padding:', totalPadding, '(fixed:', fixedBottomHeight, '+ keyboard:', info.keyboardHeight, ')');
12910
- // Animate scroll position to match keyboard
12911
- const startTime = performance.now();
12912
- const duration = 300; // Match keyboard animation duration
12913
- const animateScroll = (currentTime) => {
12914
- const elapsed = currentTime - startTime;
12915
- const progress = Math.min(elapsed / duration, 1);
12916
- // Ease-out cubic (matches iOS/Android keyboard animation curve)
12917
- const easeProgress = 1 - Math.pow(1 - progress, 3);
12918
- // Scroll down by keyboard height so content "follows" keyboard up
12919
- scrollElement.scrollTop = currentScrollTop + info.keyboardHeight * easeProgress;
12920
- if (progress < 1) {
12921
- requestAnimationFrame(animateScroll);
12922
- }
12923
- else {
12924
- // Animation complete - re-enable ResizeObserver
12925
- // console.log('[MobileModalBase] Keyboard animation complete');
12926
- this.isKeyboardAnimating = false;
12927
- }
12928
- };
12929
- requestAnimationFrame(animateScroll);
13028
+ // In overlay mode, keep content stationary and let keyboard/footer overlap.
13029
+ if (this.isOverlayBehavior()) {
13030
+ this.isKeyboardAnimating = false;
13031
+ }
13032
+ else {
13033
+ // Store current scroll position before keyboard animation
13034
+ const currentScrollTop = scrollElement.scrollTop;
13035
+ // Animate scroll position to match keyboard
13036
+ const startTime = performance.now();
13037
+ const duration = 300; // Match keyboard animation duration
13038
+ const animateScroll = (currentTime) => {
13039
+ const elapsed = currentTime - startTime;
13040
+ const progress = Math.min(elapsed / duration, 1);
13041
+ // Ease-out cubic (matches iOS/Android keyboard animation curve)
13042
+ const easeProgress = 1 - Math.pow(1 - progress, 3);
13043
+ // Scroll down by keyboard height so content "follows" keyboard up
13044
+ scrollElement.scrollTop = currentScrollTop + info.keyboardHeight * easeProgress;
13045
+ if (progress < 1) {
13046
+ requestAnimationFrame(animateScroll);
13047
+ }
13048
+ else {
13049
+ // Animation complete - re-enable ResizeObserver
13050
+ // console.log('[MobileModalBase] ✅ Keyboard animation complete');
13051
+ this.isKeyboardAnimating = false;
13052
+ }
13053
+ };
13054
+ requestAnimationFrame(animateScroll);
13055
+ }
12930
13056
  }
12931
13057
  }
12932
13058
  catch (e) {
@@ -12961,33 +13087,40 @@ class MobileModalBase {
12961
13087
  try {
12962
13088
  const scrollElement = await this.ionContent.getScrollElement();
12963
13089
  if (scrollElement) {
12964
- // Store current scroll position
12965
- const currentScrollTop = scrollElement.scrollTop;
12966
13090
  // Get current fixed bottom height (without keyboard)
12967
13091
  const fixedBottomHeight = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--fixed-bottom-height') || '0');
12968
- scrollElement.style.paddingBottom = `${fixedBottomHeight}px`;
13092
+ const totalPadding = this.getScrollPadding(fixedBottomHeight, 0);
13093
+ scrollElement.style.paddingBottom = `${totalPadding}px`;
12969
13094
  // console.log('[MobileModalBase] Removed keyboard padding, now:', fixedBottomHeight);
12970
- // Animate scroll position back
12971
- const startTime = performance.now();
12972
- const duration = 300;
12973
- const animateScroll = (currentTime) => {
12974
- const elapsed = currentTime - startTime;
12975
- const progress = Math.min(elapsed / duration, 1);
12976
- // Ease-out cubic
12977
- const easeProgress = 1 - Math.pow(1 - progress, 3);
12978
- // Scroll up by keyboard height (reverse the push)
12979
- const newScrollTop = currentScrollTop - keyboardHeight * easeProgress;
12980
- scrollElement.scrollTop = Math.max(0, newScrollTop);
12981
- if (progress < 1) {
12982
- requestAnimationFrame(animateScroll);
12983
- }
12984
- else {
12985
- // Animation complete - re-enable ResizeObserver
12986
- // console.log('[MobileModalBase] Keyboard hide animation complete');
12987
- this.isKeyboardAnimating = false;
12988
- }
12989
- };
12990
- requestAnimationFrame(animateScroll);
13095
+ // In overlay mode, keep content stationary and let keyboard/footer overlap.
13096
+ if (this.isOverlayBehavior()) {
13097
+ this.isKeyboardAnimating = false;
13098
+ }
13099
+ else {
13100
+ // Store current scroll position
13101
+ const currentScrollTop = scrollElement.scrollTop;
13102
+ // Animate scroll position back
13103
+ const startTime = performance.now();
13104
+ const duration = 300;
13105
+ const animateScroll = (currentTime) => {
13106
+ const elapsed = currentTime - startTime;
13107
+ const progress = Math.min(elapsed / duration, 1);
13108
+ // Ease-out cubic
13109
+ const easeProgress = 1 - Math.pow(1 - progress, 3);
13110
+ // Scroll up by keyboard height (reverse the push)
13111
+ const newScrollTop = currentScrollTop - keyboardHeight * easeProgress;
13112
+ scrollElement.scrollTop = Math.max(0, newScrollTop);
13113
+ if (progress < 1) {
13114
+ requestAnimationFrame(animateScroll);
13115
+ }
13116
+ else {
13117
+ // Animation complete - re-enable ResizeObserver
13118
+ // console.log('[MobileModalBase] ✅ Keyboard hide animation complete');
13119
+ this.isKeyboardAnimating = false;
13120
+ }
13121
+ };
13122
+ requestAnimationFrame(animateScroll);
13123
+ }
12991
13124
  }
12992
13125
  }
12993
13126
  catch (e) {
@@ -13010,13 +13143,12 @@ class MobileModalBase {
13010
13143
  * @protected
13011
13144
  */
13012
13145
  async setupFixedBottomObserver() {
13013
- // Determine platform-specific offset
13014
- const isNative = Capacitor.isNativePlatform();
13015
- const offset = isNative ? -24 : -12;
13146
+ // Use measured fixed-bottom height directly; safe-area tuning is handled in CSS.
13147
+ const offset = 0;
13016
13148
  // Small delay to ensure DOM is ready
13017
13149
  setTimeout(async () => {
13018
13150
  const fixedBottom = document.querySelector('.modal-fixed-bottom');
13019
- // console.log('[MobileModalBase] Fixed bottom element:', fixedBottom, 'Platform:', isNative ? 'Native' : 'Web', 'Offset:', offset);
13151
+ // console.log('[MobileModalBase] Fixed bottom element:', fixedBottom, 'Offset:', offset);
13020
13152
  if (fixedBottom) {
13021
13153
  this.fixedBottomObserver = new ResizeObserver(async (entries) => {
13022
13154
  // Skip updates during keyboard animations to prevent conflicts
@@ -13032,7 +13164,7 @@ class MobileModalBase {
13032
13164
  const totalHeight = height + offset;
13033
13165
  // CRITICAL: Include keyboard height if keyboard is visible!
13034
13166
  const keyboardHeight = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--keyboard-height') || '0');
13035
- const paddingWithKeyboard = totalHeight + keyboardHeight;
13167
+ const paddingWithKeyboard = this.getScrollPadding(totalHeight, keyboardHeight);
13036
13168
  // console.log('[MobileModalBase] ResizeObserver - height:', height, 'totalHeight:', totalHeight, 'keyboard:', keyboardHeight, 'finalPadding:', paddingWithKeyboard);
13037
13169
  document.documentElement.style.setProperty('--fixed-bottom-height', `${totalHeight}px`);
13038
13170
  // Also update scroll element padding (including keyboard height!)
@@ -13047,7 +13179,7 @@ class MobileModalBase {
13047
13179
  scrollElement.style.paddingBottom = `${paddingWithKeyboard}px`;
13048
13180
  // CRITICAL: Adjust scroll to maintain visual position
13049
13181
  // When padding increases, we need to scroll down by the same amount
13050
- if (paddingDifference !== 0) {
13182
+ if (!this.isOverlayBehavior() && paddingDifference !== 0) {
13051
13183
  const currentScrollTop = scrollElement.scrollTop;
13052
13184
  scrollElement.scrollTop = currentScrollTop + paddingDifference;
13053
13185
  // console.log('[MobileModalBase] Adjusted scroll by', paddingDifference, 'px (from', currentScrollTop, 'to', scrollElement.scrollTop, ')');
@@ -13073,7 +13205,7 @@ class MobileModalBase {
13073
13205
  if (scrollElement) {
13074
13206
  // Include keyboard height if present
13075
13207
  const keyboardHeight = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--keyboard-height') || '0');
13076
- const paddingWithKeyboard = initialTotal + keyboardHeight;
13208
+ const paddingWithKeyboard = this.getScrollPadding(initialTotal, keyboardHeight);
13077
13209
  scrollElement.style.paddingBottom = `${paddingWithKeyboard}px`;
13078
13210
  }
13079
13211
  }
@@ -13112,15 +13244,30 @@ class MobileModalBase {
13112
13244
  }
13113
13245
  return false;
13114
13246
  }
13247
+ /**
13248
+ * Returns true when keyboard should overlay content without push-scrolling.
13249
+ */
13250
+ isOverlayBehavior() {
13251
+ return this.keyboardContentBehavior() === 'overlay';
13252
+ }
13253
+ /**
13254
+ * Computes scroll bottom inset for current keyboard behavior.
13255
+ */
13256
+ getScrollPadding(fixedBottomHeight, keyboardHeight) {
13257
+ if (this.isOverlayBehavior()) {
13258
+ return fixedBottomHeight;
13259
+ }
13260
+ return fixedBottomHeight + keyboardHeight;
13261
+ }
13115
13262
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13116
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null }, isAutoHeight: { classPropertyName: "isAutoHeight", publicName: "isAutoHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
13263
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null }, isAutoHeight: { classPropertyName: "isAutoHeight", publicName: "isAutoHeight", isSignal: true, isRequired: false, transformFunction: null }, keyboardContentBehavior: { classPropertyName: "keyboardContentBehavior", publicName: "keyboardContentBehavior", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
13117
13264
  }
13118
13265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, decorators: [{
13119
13266
  type: Directive
13120
13267
  }], propDecorators: { ionContent: [{
13121
13268
  type: ViewChild,
13122
13269
  args: [IonContent, { read: IonContent }]
13123
- }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], isAutoHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoHeight", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
13270
+ }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], isAutoHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoHeight", required: false }] }], keyboardContentBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboardContentBehavior", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
13124
13271
 
13125
13272
  /**
13126
13273
  * DsMobileModalBaseComponent
@@ -13134,6 +13281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
13134
13281
  * - Default loading and error state templates (with override capability)
13135
13282
  * - Fixed bottom component support (e.g., message composer)
13136
13283
  * - Automatic keyboard handling
13284
+ * - Configurable keyboard content behavior (`follow` or `overlay`)
13137
13285
  * - Safe area support
13138
13286
  *
13139
13287
  * **Slot Structure:**
@@ -13176,7 +13324,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
13176
13324
  * <ds-mobile-modal-base
13177
13325
  * headerTitle="Create Inquiry"
13178
13326
  * [hasFixedBottom]="true"
13179
- * [enableKeyboardHandling]="true">
13327
+ * [enableKeyboardHandling]="true"
13328
+ * [keyboardContentBehavior]="'overlay'">
13180
13329
  *
13181
13330
  * <div class="content">
13182
13331
  * <input type="text" placeholder="Type something..." />
@@ -13254,6 +13403,12 @@ class DsMobileModalBaseComponent extends MobileModalBase {
13254
13403
  // Auto-detect: show header if there's any header content
13255
13404
  return !!(this.headerTitle() || this.headerMeta() || this.hasContentInSlot(this.headerLeading) || this.hasContentInSlot(this.headerMain));
13256
13405
  }
13406
+ /**
13407
+ * Check whether header-leading slot has actual projected content.
13408
+ */
13409
+ hasHeaderLeadingContent() {
13410
+ return this.hasContentInSlot(this.headerLeading);
13411
+ }
13257
13412
  /**
13258
13413
  * Check if a content child slot has actual content
13259
13414
  */
@@ -13275,7 +13430,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
13275
13430
  <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
13276
13431
  <!-- Header (conditional) -->
13277
13432
  @if (shouldShowHeader()) {
13278
- <div class="modal-header">
13433
+ <div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()">
13279
13434
  <div class="header-content">
13280
13435
  <!-- Leading slot (avatar, icon) - always rendered, CSS handles empty state -->
13281
13436
  <div class="header-leading">
@@ -13346,7 +13501,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
13346
13501
  <ng-content select="[fixed-bottom]"></ng-content>
13347
13502
  <ng-content select="[footer]"></ng-content>
13348
13503
  </div>
13349
- `, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@supports (padding: env(safe-area-inset-bottom)){.modal-content-container{padding-bottom:env(safe-area-inset-bottom)}}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
13504
+ `, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px))}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
13350
13505
  }
13351
13506
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileModalBaseComponent, decorators: [{
13352
13507
  type: Component,
@@ -13364,7 +13519,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
13364
13519
  <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
13365
13520
  <!-- Header (conditional) -->
13366
13521
  @if (shouldShowHeader()) {
13367
- <div class="modal-header">
13522
+ <div class="modal-header" [class.no-leading-content]="!hasHeaderLeadingContent()">
13368
13523
  <div class="header-content">
13369
13524
  <!-- Leading slot (avatar, icon) - always rendered, CSS handles empty state -->
13370
13525
  <div class="header-leading">
@@ -13435,7 +13590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
13435
13590
  <ng-content select="[fixed-bottom]"></ng-content>
13436
13591
  <ng-content select="[footer]"></ng-content>
13437
13592
  </div>
13438
- `, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@supports (padding: env(safe-area-inset-bottom)){.modal-content-container{padding-bottom:env(safe-area-inset-bottom)}}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"] }]
13593
+ `, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.modal-header.no-leading-content{padding-left:20px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.modal-header.no-leading-content .header-content,.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:max(8px,calc(var(--app-safe-bottom, 0px) - 24px))}:host-context(.plt-android) .modal-fixed-bottom{padding-bottom:max(8px,var(--app-safe-bottom, 0px))}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff);padding-bottom:var(--keyboard-height, 0px);transition:padding-bottom .3s cubic-bezier(.215,.61,.355,1)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"] }]
13439
13594
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { ionContent: [{
13440
13595
  type: ViewChild,
13441
13596
  args: [IonContent, { read: IonContent }]
@@ -13577,6 +13732,8 @@ class DsMobilePostDetailModalComponent {
13577
13732
  // State management inputs (passed to modal base)
13578
13733
  loading = false;
13579
13734
  error;
13735
+ // Callback for toggling like on the main post
13736
+ onTogglePostLike;
13580
13737
  // Callback for submitting a new comment
13581
13738
  onSubmitComment;
13582
13739
  // Callback for liking/unliking a comment
@@ -13714,6 +13871,25 @@ class DsMobilePostDetailModalComponent {
13714
13871
  }
13715
13872
  }, 100);
13716
13873
  }
13874
+ /**
13875
+ * Handle post like/unlike toggle
13876
+ */
13877
+ handlePostLikeToggle(ev) {
13878
+ const currentPost = this.post();
13879
+ // Update local state immediately for responsiveness
13880
+ this.post.set({
13881
+ ...currentPost,
13882
+ isLiked: ev.active,
13883
+ likeCount: ev.count
13884
+ });
13885
+ // Call the callback if provided
13886
+ if (this.onTogglePostLike) {
13887
+ this.onTogglePostLike({
13888
+ postId: currentPost.postId,
13889
+ active: ev.active
13890
+ });
13891
+ }
13892
+ }
13717
13893
  /**
13718
13894
  * Handle comment like/unlike toggle
13719
13895
  * @param comment The comment being liked/unliked
@@ -13926,7 +14102,7 @@ class DsMobilePostDetailModalComponent {
13926
14102
  }
13927
14103
  }
13928
14104
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePostDetailModalComponent, deps: [{ token: DsMobileLightboxService }, { token: DsMobileBottomSheetService }], target: i0.ɵɵFactoryTarget.Component });
13929
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobilePostDetailModalComponent, isStandalone: true, selector: "ds-mobile-post-detail-modal", inputs: { postData: "postData", currentUserName: "currentUserName", currentUserInitialsInput: "currentUserInitialsInput", loading: "loading", error: "error", onSubmitComment: "onSubmitComment", onToggleCommentLike: "onToggleCommentLike", onEditComment: "onEditComment", onDeleteComment: "onDeleteComment" }, viewQueries: [{ propertyName: "commentInput", first: true, predicate: ["commentInput"], descendants: true }], ngImport: i0, template: `
14105
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobilePostDetailModalComponent, isStandalone: true, selector: "ds-mobile-post-detail-modal", inputs: { postData: "postData", currentUserName: "currentUserName", currentUserInitialsInput: "currentUserInitialsInput", loading: "loading", error: "error", onTogglePostLike: "onTogglePostLike", onSubmitComment: "onSubmitComment", onToggleCommentLike: "onToggleCommentLike", onEditComment: "onEditComment", onDeleteComment: "onDeleteComment" }, viewQueries: [{ propertyName: "commentInput", first: true, predicate: ["commentInput"], descendants: true }], ngImport: i0, template: `
13930
14106
  <ds-mobile-modal-base
13931
14107
  [loading]="loading"
13932
14108
  [error]="error"
@@ -13954,7 +14130,11 @@ class DsMobilePostDetailModalComponent {
13954
14130
 
13955
14131
  <!-- Post actions -->
13956
14132
  <div class="post-actions">
13957
- <action-like [active]="post().isLiked || false" [count]="post().likeCount || 0" />
14133
+ <action-like
14134
+ [active]="post().isLiked || false"
14135
+ [count]="post().likeCount || 0"
14136
+ (likeClick)="handlePostLikeToggle($event)"
14137
+ />
13958
14138
  <action-comment [count]="post().commentCount || 0" (commentClick)="focusCommentInput()" />
13959
14139
  </div>
13960
14140
  </ds-mobile-section>
@@ -14050,7 +14230,7 @@ class DsMobilePostDetailModalComponent {
14050
14230
  </div>
14051
14231
  </div>
14052
14232
  </ds-mobile-modal-base>
14053
- `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".post-detail-container{display:flex;flex-direction:column;gap:0;width:100%;padding:0}.post-section{width:100%;border-bottom:none;padding:0}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;width:100%;display:flex;flex-direction:column;gap:8px}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-accent, #6b5ff5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-accent, #6b5ff5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-accent, #6b5ff5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-accent, #6b5ff5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;overflow-x:hidden;padding:0;margin:0}.composer-input::-moz-placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;opacity:0;transform:translate(20px) scale(.8);pointer-events:none;transition:opacity .15s ease-in,transform .15s ease-in}.send-button-fixed.show{opacity:1;transform:translate(0) scale(1);pointer-events:auto;animation:slideInFromRight var(--spring-bouncy)}@media (prefers-reduced-motion: no-preference){.send-button-fixed{transition:opacity .15s ease-in,transform .15s ease-in}}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { 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: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "isOwnComment", "isLiked", "likeCount"], outputs: ["likeToggled", "commentClick", "replyClick", "editClick", "longPress"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileEmptyStateComponent, selector: "ds-mobile-empty-state", inputs: ["imageSrc", "imageAlt", "title", "description"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }] });
14233
+ `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".post-detail-container{display:flex;flex-direction:column;gap:0;width:100%;padding:0}.post-section{width:100%;border-bottom:none;padding:0}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;width:100%;display:flex;flex-direction:column;gap:8px}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-accent, #6b5ff5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-accent, #6b5ff5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-accent, #6b5ff5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-accent, #6b5ff5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;overflow-x:hidden;padding:0;margin:0}.composer-input::-moz-placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;opacity:0;transform:translate(20px) scale(.8);pointer-events:none;transition:opacity .15s ease-in,transform .15s ease-in}.send-button-fixed.show{opacity:1;transform:translate(0) scale(1);pointer-events:auto;animation:slideInFromRight var(--spring-bouncy)}@media (prefers-reduced-motion: no-preference){.send-button-fixed{transition:opacity .15s ease-in,transform .15s ease-in}}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { 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: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "moreActions", "isOwnComment", "isLiked", "likeCount"], outputs: ["likeToggled", "commentClick", "replyClick", "editClick", "longPress"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileEmptyStateComponent, selector: "ds-mobile-empty-state", inputs: ["imageSrc", "imageAlt", "title", "description"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }] });
14054
14234
  }
14055
14235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobilePostDetailModalComponent, decorators: [{
14056
14236
  type: Component,
@@ -14096,7 +14276,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
14096
14276
 
14097
14277
  <!-- Post actions -->
14098
14278
  <div class="post-actions">
14099
- <action-like [active]="post().isLiked || false" [count]="post().likeCount || 0" />
14279
+ <action-like
14280
+ [active]="post().isLiked || false"
14281
+ [count]="post().likeCount || 0"
14282
+ (likeClick)="handlePostLikeToggle($event)"
14283
+ />
14100
14284
  <action-comment [count]="post().commentCount || 0" (commentClick)="focusCommentInput()" />
14101
14285
  </div>
14102
14286
  </ds-mobile-section>
@@ -14203,6 +14387,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
14203
14387
  type: Input
14204
14388
  }], error: [{
14205
14389
  type: Input
14390
+ }], onTogglePostLike: [{
14391
+ type: Input
14206
14392
  }], onSubmitComment: [{
14207
14393
  type: Input
14208
14394
  }], onToggleCommentLike: [{
@@ -14376,6 +14562,7 @@ class DsMobilePostDetailModalService extends BaseModalService {
14376
14562
  postData: postData,
14377
14563
  loading: options?.loading ?? false,
14378
14564
  error: options?.error,
14565
+ onTogglePostLike: options?.onTogglePostLike,
14379
14566
  onSubmitComment: options?.onSubmitComment,
14380
14567
  onToggleCommentLike: options?.onToggleCommentLike,
14381
14568
  currentUserName: options?.currentUserName ?? '',
@@ -15924,6 +16111,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15924
16111
  class DsMobileNewInquiryModalComponent {
15925
16112
  modalController = inject(ModalController);
15926
16113
  titleInputRef;
16114
+ descriptionInputRef;
15927
16115
  titleInput;
15928
16116
  fileInput;
15929
16117
  /**
@@ -15977,6 +16165,7 @@ class DsMobileNewInquiryModalComponent {
15977
16165
  // Setup auto-resize for title textarea
15978
16166
  setTimeout(() => {
15979
16167
  this.autoResizeTitleTextarea();
16168
+ this.autoResizeDescriptionTextarea();
15980
16169
  // Focus the title textarea after view initialization to trigger keyboard on iOS
15981
16170
  if (this.titleInputRef) {
15982
16171
  const textareaElement = this.titleInputRef.nativeElement.querySelector('textarea');
@@ -15999,6 +16188,18 @@ class DsMobileNewInquiryModalComponent {
15999
16188
  textareaElement.style.height = textareaElement.scrollHeight + 'px';
16000
16189
  }
16001
16190
  }
16191
+ /**
16192
+ * Auto-resize the description textarea based on content
16193
+ */
16194
+ autoResizeDescriptionTextarea() {
16195
+ if (!this.descriptionInputRef)
16196
+ return;
16197
+ const textareaElement = this.descriptionInputRef.nativeElement.querySelector('textarea');
16198
+ if (textareaElement) {
16199
+ textareaElement.style.height = 'auto';
16200
+ textareaElement.style.height = textareaElement.scrollHeight + 'px';
16201
+ }
16202
+ }
16002
16203
  /**
16003
16204
  * Handle title change with auto-resize
16004
16205
  */
@@ -16006,6 +16207,13 @@ class DsMobileNewInquiryModalComponent {
16006
16207
  this.validateForm();
16007
16208
  this.autoResizeTitleTextarea();
16008
16209
  }
16210
+ /**
16211
+ * Handle description change with auto-resize
16212
+ */
16213
+ handleDescriptionChange(value) {
16214
+ this.validateForm();
16215
+ this.autoResizeDescriptionTextarea();
16216
+ }
16009
16217
  /**
16010
16218
  * Validate form fields
16011
16219
  */
@@ -16162,8 +16370,8 @@ class DsMobileNewInquiryModalComponent {
16162
16370
  }
16163
16371
  }
16164
16372
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16165
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileNewInquiryModalComponent, isStandalone: true, selector: "ds-mobile-new-inquiry-modal", inputs: { loading: "loading", error: "error", onSubmit: "onSubmit", titlePlaceholder: "titlePlaceholder", descriptionPlaceholder: "descriptionPlaceholder", submitButtonLabel: "submitButtonLabel" }, viewQueries: [{ propertyName: "titleInputRef", first: true, predicate: ["titleInput"], descendants: true, read: ElementRef }, { propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
16166
- <ds-mobile-modal-base [loading]="loading" [error]="error" [showHeader]="false" [hasFixedBottom]="true" [enableKeyboardHandling]="true" closeButtonLabel="Close">
16373
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileNewInquiryModalComponent, isStandalone: true, selector: "ds-mobile-new-inquiry-modal", inputs: { loading: "loading", error: "error", onSubmit: "onSubmit", titlePlaceholder: "titlePlaceholder", descriptionPlaceholder: "descriptionPlaceholder", submitButtonLabel: "submitButtonLabel" }, viewQueries: [{ propertyName: "titleInputRef", first: true, predicate: ["titleInput"], descendants: true, read: ElementRef }, { propertyName: "descriptionInputRef", first: true, predicate: ["descriptionInput"], descendants: true, read: ElementRef }, { propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
16374
+ <ds-mobile-modal-base [loading]="loading" [error]="error" [showHeader]="false" [hasFixedBottom]="true" [enableKeyboardHandling]="true" [keyboardContentBehavior]="'overlay'" closeButtonLabel="Close">
16167
16375
  <!-- Form Content -->
16168
16376
  <ds-mobile-section>
16169
16377
  <!-- Title Field (Large Ghost Textarea) -->
@@ -16180,12 +16388,13 @@ class DsMobileNewInquiryModalComponent {
16180
16388
 
16181
16389
  <!-- Description Field (Ghost Textarea) -->
16182
16390
  <ds-textarea
16391
+ #descriptionInput
16183
16392
  [(ngModel)]="description"
16184
16393
  [ghost]="true"
16185
16394
  [rows]="1"
16186
16395
  [placeholder]="descriptionPlaceholder"
16187
16396
  class="inquiry-description-input ghost-input-clean"
16188
- (valueChange)="validateForm()"
16397
+ (valueChange)="handleDescriptionChange($event)"
16189
16398
  />
16190
16399
  </ds-mobile-section>
16191
16400
 
@@ -16224,12 +16433,14 @@ class DsMobileNewInquiryModalComponent {
16224
16433
  </div>
16225
16434
 
16226
16435
  <!-- Submit Button (Right) -->
16227
- <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> {{ submitButtonLabel }} </ds-button>
16436
+ <ds-button class="submit-action-button" variant="primary" size="md" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()">
16437
+ {{ submitButtonLabel }}
16438
+ </ds-button>
16228
16439
  </div>
16229
16440
  </div>
16230
16441
  </div>
16231
16442
  </ds-mobile-modal-base>
16232
- `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsTextareaComponent, selector: "ds-textarea", inputs: ["variant", "placeholder", "disabled", "readonly", "required", "ghost", "rows", "cols", "maxlength", "minlength", "ariaLabel", "ariaDescribedBy", "ariaLabelledBy"], outputs: ["valueChange", "focused", "blurred"] }, { 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: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileAttachmentPreviewComponent, selector: "ds-mobile-attachment-preview", inputs: ["attachment"], outputs: ["remove"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }] });
16443
+ `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;overflow-y:hidden;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.submit-content ds-button.submit-action-button::ng-deep button{height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;overflow-y:hidden;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsTextareaComponent, selector: "ds-textarea", inputs: ["variant", "placeholder", "disabled", "readonly", "required", "ghost", "rows", "cols", "maxlength", "minlength", "ariaLabel", "ariaDescribedBy", "ariaLabelledBy"], outputs: ["valueChange", "focused", "blurred"] }, { 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: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileAttachmentPreviewComponent, selector: "ds-mobile-attachment-preview", inputs: ["attachment"], outputs: ["remove"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }] });
16233
16444
  }
16234
16445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalComponent, decorators: [{
16235
16446
  type: Component,
@@ -16243,7 +16454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
16243
16454
  DsMobileAttachmentPreviewComponent,
16244
16455
  DsMobileSectionComponent,
16245
16456
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
16246
- <ds-mobile-modal-base [loading]="loading" [error]="error" [showHeader]="false" [hasFixedBottom]="true" [enableKeyboardHandling]="true" closeButtonLabel="Close">
16457
+ <ds-mobile-modal-base [loading]="loading" [error]="error" [showHeader]="false" [hasFixedBottom]="true" [enableKeyboardHandling]="true" [keyboardContentBehavior]="'overlay'" closeButtonLabel="Close">
16247
16458
  <!-- Form Content -->
16248
16459
  <ds-mobile-section>
16249
16460
  <!-- Title Field (Large Ghost Textarea) -->
@@ -16260,12 +16471,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
16260
16471
 
16261
16472
  <!-- Description Field (Ghost Textarea) -->
16262
16473
  <ds-textarea
16474
+ #descriptionInput
16263
16475
  [(ngModel)]="description"
16264
16476
  [ghost]="true"
16265
16477
  [rows]="1"
16266
16478
  [placeholder]="descriptionPlaceholder"
16267
16479
  class="inquiry-description-input ghost-input-clean"
16268
- (valueChange)="validateForm()"
16480
+ (valueChange)="handleDescriptionChange($event)"
16269
16481
  />
16270
16482
  </ds-mobile-section>
16271
16483
 
@@ -16304,15 +16516,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
16304
16516
  </div>
16305
16517
 
16306
16518
  <!-- Submit Button (Right) -->
16307
- <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> {{ submitButtonLabel }} </ds-button>
16519
+ <ds-button class="submit-action-button" variant="primary" size="md" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()">
16520
+ {{ submitButtonLabel }}
16521
+ </ds-button>
16308
16522
  </div>
16309
16523
  </div>
16310
16524
  </div>
16311
16525
  </ds-mobile-modal-base>
16312
- `, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"] }]
16526
+ `, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;overflow-y:hidden;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.submit-content ds-button.submit-action-button::ng-deep button{height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;overflow-y:hidden;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"] }]
16313
16527
  }], propDecorators: { titleInputRef: [{
16314
16528
  type: ViewChild,
16315
16529
  args: ['titleInput', { read: ElementRef }]
16530
+ }], descriptionInputRef: [{
16531
+ type: ViewChild,
16532
+ args: ['descriptionInput', { read: ElementRef }]
16316
16533
  }], titleInput: [{
16317
16534
  type: ViewChild,
16318
16535
  args: ['titleInput']
@@ -17098,6 +17315,7 @@ class DsMobileBookingModalService extends BaseModalService {
17098
17315
  mode: 'ios'
17099
17316
  });
17100
17317
  await sheet.present();
17318
+ disableModalShadowPointerEvents(sheet);
17101
17319
  }
17102
17320
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingModalService, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable });
17103
17321
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBookingModalService, providedIn: 'root' });
@@ -17126,6 +17344,7 @@ class DsMobileFacilityCreationModalComponent {
17126
17344
  modalController = inject(ModalController);
17127
17345
  bottomSheetService = inject(DsMobileBottomSheetService);
17128
17346
  titleInputRef;
17347
+ descriptionInputRef;
17129
17348
  titleInput;
17130
17349
  fileInput;
17131
17350
  /**
@@ -17195,6 +17414,7 @@ class DsMobileFacilityCreationModalComponent {
17195
17414
  // Setup auto-resize for title textarea
17196
17415
  setTimeout(() => {
17197
17416
  this.autoResizeTitleTextarea();
17417
+ this.autoResizeDescriptionTextarea();
17198
17418
  // Focus the title textarea after view initialization to trigger keyboard on iOS
17199
17419
  if (this.titleInputRef) {
17200
17420
  const textareaElement = this.titleInputRef.nativeElement.querySelector('textarea');
@@ -17217,6 +17437,18 @@ class DsMobileFacilityCreationModalComponent {
17217
17437
  textareaElement.style.height = textareaElement.scrollHeight + 'px';
17218
17438
  }
17219
17439
  }
17440
+ /**
17441
+ * Auto-resize the description textarea based on content
17442
+ */
17443
+ autoResizeDescriptionTextarea() {
17444
+ if (!this.descriptionInputRef)
17445
+ return;
17446
+ const textareaElement = this.descriptionInputRef.nativeElement.querySelector('textarea');
17447
+ if (textareaElement) {
17448
+ textareaElement.style.height = 'auto';
17449
+ textareaElement.style.height = textareaElement.scrollHeight + 'px';
17450
+ }
17451
+ }
17220
17452
  /**
17221
17453
  * Handle title change with auto-resize
17222
17454
  */
@@ -17224,6 +17456,13 @@ class DsMobileFacilityCreationModalComponent {
17224
17456
  this.validateForm();
17225
17457
  this.autoResizeTitleTextarea();
17226
17458
  }
17459
+ /**
17460
+ * Handle description change with auto-resize
17461
+ */
17462
+ handleDescriptionChange(value) {
17463
+ this.validateForm();
17464
+ this.autoResizeDescriptionTextarea();
17465
+ }
17227
17466
  /**
17228
17467
  * Validate form fields
17229
17468
  */
@@ -17505,13 +17744,14 @@ class DsMobileFacilityCreationModalComponent {
17505
17744
  }
17506
17745
  }
17507
17746
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFacilityCreationModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17508
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileFacilityCreationModalComponent, isStandalone: true, selector: "ds-mobile-facility-creation-modal", inputs: { loading: "loading", error: "error", onSubmit: "onSubmit", titlePlaceholder: "titlePlaceholder", descriptionPlaceholder: "descriptionPlaceholder", submitButtonLabel: "submitButtonLabel" }, viewQueries: [{ propertyName: "titleInputRef", first: true, predicate: ["titleInput"], descendants: true, read: ElementRef }, { propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
17747
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileFacilityCreationModalComponent, isStandalone: true, selector: "ds-mobile-facility-creation-modal", inputs: { loading: "loading", error: "error", onSubmit: "onSubmit", titlePlaceholder: "titlePlaceholder", descriptionPlaceholder: "descriptionPlaceholder", submitButtonLabel: "submitButtonLabel" }, viewQueries: [{ propertyName: "titleInputRef", first: true, predicate: ["titleInput"], descendants: true, read: ElementRef }, { propertyName: "descriptionInputRef", first: true, predicate: ["descriptionInput"], descendants: true, read: ElementRef }, { propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
17509
17748
  <ds-mobile-modal-base
17510
17749
  [loading]="loading"
17511
17750
  [error]="error"
17512
17751
  [showHeader]="false"
17513
17752
  [hasFixedBottom]="true"
17514
17753
  [enableKeyboardHandling]="true"
17754
+ [keyboardContentBehavior]="'overlay'"
17515
17755
  closeButtonLabel="Close"
17516
17756
  >
17517
17757
  <!-- Form Content -->
@@ -17530,12 +17770,13 @@ class DsMobileFacilityCreationModalComponent {
17530
17770
 
17531
17771
  <!-- Description Field (Ghost Textarea) -->
17532
17772
  <ds-textarea
17773
+ #descriptionInput
17533
17774
  [(ngModel)]="description"
17534
17775
  [ghost]="true"
17535
17776
  [rows]="1"
17536
17777
  [placeholder]="descriptionPlaceholder"
17537
17778
  class="inquiry-description-input ghost-input-clean"
17538
- (valueChange)="validateForm()"
17779
+ (valueChange)="handleDescriptionChange($event)"
17539
17780
  />
17540
17781
  </ds-mobile-section>
17541
17782
 
@@ -17641,12 +17882,14 @@ class DsMobileFacilityCreationModalComponent {
17641
17882
  </div>
17642
17883
 
17643
17884
  <!-- Submit Button (Right) -->
17644
- <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> {{ submitButtonLabel }} </ds-button>
17885
+ <ds-button class="submit-action-button" variant="primary" size="sm" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()">
17886
+ {{ submitButtonLabel }}
17887
+ </ds-button>
17645
17888
  </div>
17646
17889
  </div>
17647
17890
  </div>
17648
17891
  </ds-mobile-modal-base>
17649
- `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-wrapper:not(.is-auto-height){min-height:100%}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-content-container{display:flex;flex-direction:column;flex:1}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-main-content{flex:1;display:flex;flex-direction:column}.form-section{flex:1;display:flex;flex-direction:column}.inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:16px;letter-spacing:-.3px;color:var(--text-color-default-tertiary, #868e99)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}@media (min-width: 768px){.submit-container{padding:20px 32px}}.create-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.create-action ds-button{display:block;width:100%}.create-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}@media (min-width: 768px){.create-action{padding:20px 32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsTextareaComponent, selector: "ds-textarea", inputs: ["variant", "placeholder", "disabled", "readonly", "required", "ghost", "rows", "cols", "maxlength", "minlength", "ariaLabel", "ariaDescribedBy", "ariaLabelledBy"], outputs: ["valueChange", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }, { kind: "component", type: DsMobileAttachmentPreviewComponent, selector: "ds-mobile-attachment-preview", inputs: ["attachment"], outputs: ["remove"] }] });
17892
+ `, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-wrapper:not(.is-auto-height){min-height:100%}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-content-container{display:flex;flex-direction:column;flex:1}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-main-content{flex:1;display:flex;flex-direction:column}.form-section{flex:1;display:flex;flex-direction:column}.inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;overflow-y:hidden;resize:none;box-sizing:border-box;padding-right:52px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;overflow-y:hidden;resize:none}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:16px;letter-spacing:-.3px;color:var(--text-color-default-tertiary, #868e99)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.submit-content ds-button.submit-action-button::ng-deep button{height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}@media (min-width: 768px){.submit-container{padding:20px 32px}}.create-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.create-action ds-button{display:block;width:100%}.create-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}@media (min-width: 768px){.create-action{padding:20px 32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsTextareaComponent, selector: "ds-textarea", inputs: ["variant", "placeholder", "disabled", "readonly", "required", "ghost", "rows", "cols", "maxlength", "minlength", "ariaLabel", "ariaDescribedBy", "ariaLabelledBy"], outputs: ["valueChange", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }, { kind: "component", type: DsMobileAttachmentPreviewComponent, selector: "ds-mobile-attachment-preview", inputs: ["attachment"], outputs: ["remove"] }] });
17650
17893
  }
17651
17894
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFacilityCreationModalComponent, decorators: [{
17652
17895
  type: Component,
@@ -17668,6 +17911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
17668
17911
  [showHeader]="false"
17669
17912
  [hasFixedBottom]="true"
17670
17913
  [enableKeyboardHandling]="true"
17914
+ [keyboardContentBehavior]="'overlay'"
17671
17915
  closeButtonLabel="Close"
17672
17916
  >
17673
17917
  <!-- Form Content -->
@@ -17686,12 +17930,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
17686
17930
 
17687
17931
  <!-- Description Field (Ghost Textarea) -->
17688
17932
  <ds-textarea
17933
+ #descriptionInput
17689
17934
  [(ngModel)]="description"
17690
17935
  [ghost]="true"
17691
17936
  [rows]="1"
17692
17937
  [placeholder]="descriptionPlaceholder"
17693
17938
  class="inquiry-description-input ghost-input-clean"
17694
- (valueChange)="validateForm()"
17939
+ (valueChange)="handleDescriptionChange($event)"
17695
17940
  />
17696
17941
  </ds-mobile-section>
17697
17942
 
@@ -17797,15 +18042,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
17797
18042
  </div>
17798
18043
 
17799
18044
  <!-- Submit Button (Right) -->
17800
- <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> {{ submitButtonLabel }} </ds-button>
18045
+ <ds-button class="submit-action-button" variant="primary" size="sm" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()">
18046
+ {{ submitButtonLabel }}
18047
+ </ds-button>
17801
18048
  </div>
17802
18049
  </div>
17803
18050
  </div>
17804
18051
  </ds-mobile-modal-base>
17805
- `, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-wrapper:not(.is-auto-height){min-height:100%}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-content-container{display:flex;flex-direction:column;flex:1}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-main-content{flex:1;display:flex;flex-direction:column}.form-section{flex:1;display:flex;flex-direction:column}.inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:16px;letter-spacing:-.3px;color:var(--text-color-default-tertiary, #868e99)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}@media (min-width: 768px){.submit-container{padding:20px 32px}}.create-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.create-action ds-button{display:block;width:100%}.create-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}@media (min-width: 768px){.create-action{padding:20px 32px}}\n"] }]
18052
+ `, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-base);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}\n", ":host ::ng-deep .modal-wrapper:not(.is-auto-height){min-height:100%}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-content-container{display:flex;flex-direction:column;flex:1}:host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-main-content{flex:1;display:flex;flex-direction:column}.form-section{flex:1;display:flex;flex-direction:column}.inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;overflow-y:hidden;resize:none;box-sizing:border-box;padding-right:52px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;overflow-y:hidden;resize:none}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs, 12px);font-weight:400;line-height:16px;letter-spacing:-.3px;color:var(--text-color-default-tertiary, #868e99)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.submit-content ds-button.submit-action-button::ng-deep button{height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}@media (min-width: 768px){.submit-container{padding:20px 32px}}.create-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.create-action ds-button{display:block;width:100%}.create-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}@media (min-width: 768px){.create-action{padding:20px 32px}}\n"] }]
17806
18053
  }], propDecorators: { titleInputRef: [{
17807
18054
  type: ViewChild,
17808
18055
  args: ['titleInput', { read: ElementRef }]
18056
+ }], descriptionInputRef: [{
18057
+ type: ViewChild,
18058
+ args: ['descriptionInput', { read: ElementRef }]
17809
18059
  }], titleInput: [{
17810
18060
  type: ViewChild,
17811
18061
  args: ['titleInput']
@@ -17984,9 +18234,6 @@ class DsMobileFacilityCreationModalService extends BaseModalService {
17984
18234
  }, {
17985
18235
  keyboardClose: false, // Don't close on keyboard hide for this modal
17986
18236
  cssClass: ['ds-modal-base'],
17987
- breakpoints: [0, 1],
17988
- initialBreakpoint: 1,
17989
- handle: false,
17990
18237
  });
17991
18238
  console.log('[FacilityCreationModal] Modal created, presenting...');
17992
18239
  await modal.present();
@@ -18014,6 +18261,7 @@ class DsMobileFacilityCreationModalService extends BaseModalService {
18014
18261
  presentingElement: undefined
18015
18262
  });
18016
18263
  await sheet.present();
18264
+ disableModalShadowPointerEvents(sheet);
18017
18265
  }
18018
18266
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFacilityCreationModalService, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable });
18019
18267
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFacilityCreationModalService, providedIn: 'root' });
@@ -18892,7 +19140,8 @@ class DsMobileFacilityDetailModalComponent {
18892
19140
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileFacilityDetailModalComponent, isStandalone: true, selector: "ds-mobile-facility-detail-modal", inputs: { facilityData: "facilityData" }, ngImport: i0, template: `
18893
19141
  <ds-mobile-modal-base
18894
19142
  [headerTitle]="facilityData.facilityTitle"
18895
- [hasFixedBottom]="true">
19143
+ [hasFixedBottom]="true"
19144
+ [keyboardContentBehavior]="'overlay'">
18896
19145
 
18897
19146
  <!-- Hero Image Section -->
18898
19147
  <!-- Hero Image and Things to Know Section -->
@@ -18932,22 +19181,20 @@ class DsMobileFacilityDetailModalComponent {
18932
19181
  <!-- Fixed Bottom Button -->
18933
19182
  <div fixed-bottom class="booking-action">
18934
19183
  <ds-button
18935
- size="lg"
19184
+ size="md"
18936
19185
  variant="primary"
18937
19186
  [fullWidth]="true"
18938
19187
  (clicked)="handleBookNow()">
18939
19188
  Book nu
18940
- <ds-icon slot="end" name="remixArrowRightSLine" />
18941
19189
  </ds-button>
18942
19190
  </div>
18943
19191
  </ds-mobile-modal-base>
18944
- `, isInline: true, styles: [":host{display:block}.facility-image{width:100%;max-width:100%;height:280px;object-fit:cover;display:block;border-radius:12px}.info-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-primary, #202227)}.facility-description,.facility-expectations{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227)}.facility-description p,.facility-expectations p{margin:0 0 12px}.facility-description p:last-child,.facility-expectations p:last-child{margin-bottom:0}::ng-deep .facility-description h3,::ng-deep .facility-description headline,::ng-deep .facility-description .section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding-top:24px!important;padding-bottom:8px!important;display:block}::ng-deep .facility-description h3:first-child,::ng-deep .facility-description headline:first-child,::ng-deep .facility-description .section-headline:first-child,::ng-deep .facility-description>*:first-child h3:first-child,::ng-deep .facility-description>*:first-child headline:first-child{padding-top:0!important}::ng-deep .facility-expectations headline,::ng-deep .facility-expectations h3{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}::ng-deep .facility-expectations headline:first-child,::ng-deep .facility-expectations h3:first-child{padding-top:0!important}h2.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0;padding-top:16px!important;padding-bottom:8px}.facility-description ul{list-style:disc;padding-left:20px;margin:0 0 12px}.facility-description ul li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.facility-description ul li:last-child{margin-bottom:0}.facility-restrictions{margin-top:20px}.restrictions-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0 0 12px}.restrictions-list{list-style:disc;padding-left:20px;margin:0}.restrictions-list li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.restrictions-list li:last-child{margin-bottom:0}.info-items-container{display:flex;flex-direction:column;gap:0}.booking-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.booking-action ds-button{display:block;width:100%}.booking-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileSwiperComponent, selector: "ds-mobile-swiper", inputs: ["slideWidth", "gap", "pagination", "autoHeight", "progressiveOpacity", "progressiveScale"] }] });
19192
+ `, isInline: true, styles: [":host{display:block}.facility-image{width:100%;max-width:100%;height:280px;object-fit:cover;display:block;border-radius:12px}.info-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-primary, #202227)}.facility-description,.facility-expectations{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227)}.facility-description p,.facility-expectations p{margin:0 0 12px}.facility-description p:last-child,.facility-expectations p:last-child{margin-bottom:0}::ng-deep .facility-description h3,::ng-deep .facility-description headline,::ng-deep .facility-description .section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding-top:24px!important;padding-bottom:8px!important;display:block}::ng-deep .facility-description h3:first-child,::ng-deep .facility-description headline:first-child,::ng-deep .facility-description .section-headline:first-child,::ng-deep .facility-description>*:first-child h3:first-child,::ng-deep .facility-description>*:first-child headline:first-child{padding-top:0!important}::ng-deep .facility-expectations headline,::ng-deep .facility-expectations h3{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}::ng-deep .facility-expectations headline:first-child,::ng-deep .facility-expectations h3:first-child{padding-top:0!important}h2.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0;padding-top:16px!important;padding-bottom:8px}.facility-description ul{list-style:disc;padding-left:20px;margin:0 0 12px}.facility-description ul li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.facility-description ul li:last-child{margin-bottom:0}.facility-restrictions{margin-top:20px}.restrictions-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0 0 12px}.restrictions-list{list-style:disc;padding-left:20px;margin:0}.restrictions-list li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.restrictions-list li:last-child{margin-bottom:0}.info-items-container{display:flex;flex-direction:column;gap:0}.booking-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.booking-action ds-button{display:block;width:100%}.booking-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileSwiperComponent, selector: "ds-mobile-swiper", inputs: ["slideWidth", "gap", "pagination", "autoHeight", "progressiveOpacity", "progressiveScale"] }] });
18945
19193
  }
18946
19194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFacilityDetailModalComponent, decorators: [{
18947
19195
  type: Component,
18948
19196
  args: [{ selector: 'ds-mobile-facility-detail-modal', standalone: true, imports: [
18949
19197
  CommonModule,
18950
- DsIconComponent,
18951
19198
  DsButtonComponent,
18952
19199
  DsMobileModalBaseComponent,
18953
19200
  DsMobileSectionComponent,
@@ -18955,7 +19202,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
18955
19202
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
18956
19203
  <ds-mobile-modal-base
18957
19204
  [headerTitle]="facilityData.facilityTitle"
18958
- [hasFixedBottom]="true">
19205
+ [hasFixedBottom]="true"
19206
+ [keyboardContentBehavior]="'overlay'">
18959
19207
 
18960
19208
  <!-- Hero Image Section -->
18961
19209
  <!-- Hero Image and Things to Know Section -->
@@ -18995,16 +19243,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
18995
19243
  <!-- Fixed Bottom Button -->
18996
19244
  <div fixed-bottom class="booking-action">
18997
19245
  <ds-button
18998
- size="lg"
19246
+ size="md"
18999
19247
  variant="primary"
19000
19248
  [fullWidth]="true"
19001
19249
  (clicked)="handleBookNow()">
19002
19250
  Book nu
19003
- <ds-icon slot="end" name="remixArrowRightSLine" />
19004
19251
  </ds-button>
19005
19252
  </div>
19006
19253
  </ds-mobile-modal-base>
19007
- `, styles: [":host{display:block}.facility-image{width:100%;max-width:100%;height:280px;object-fit:cover;display:block;border-radius:12px}.info-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-primary, #202227)}.facility-description,.facility-expectations{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227)}.facility-description p,.facility-expectations p{margin:0 0 12px}.facility-description p:last-child,.facility-expectations p:last-child{margin-bottom:0}::ng-deep .facility-description h3,::ng-deep .facility-description headline,::ng-deep .facility-description .section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding-top:24px!important;padding-bottom:8px!important;display:block}::ng-deep .facility-description h3:first-child,::ng-deep .facility-description headline:first-child,::ng-deep .facility-description .section-headline:first-child,::ng-deep .facility-description>*:first-child h3:first-child,::ng-deep .facility-description>*:first-child headline:first-child{padding-top:0!important}::ng-deep .facility-expectations headline,::ng-deep .facility-expectations h3{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}::ng-deep .facility-expectations headline:first-child,::ng-deep .facility-expectations h3:first-child{padding-top:0!important}h2.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0;padding-top:16px!important;padding-bottom:8px}.facility-description ul{list-style:disc;padding-left:20px;margin:0 0 12px}.facility-description ul li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.facility-description ul li:last-child{margin-bottom:0}.facility-restrictions{margin-top:20px}.restrictions-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0 0 12px}.restrictions-list{list-style:disc;padding-left:20px;margin:0}.restrictions-list li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.restrictions-list li:last-child{margin-bottom:0}.info-items-container{display:flex;flex-direction:column;gap:0}.booking-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.booking-action ds-button{display:block;width:100%}.booking-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:48px}\n"] }]
19254
+ `, styles: [":host{display:block}.facility-image{width:100%;max-width:100%;height:280px;object-fit:cover;display:block;border-radius:12px}.info-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);color:var(--text-color-default-primary, #202227)}.facility-description,.facility-expectations{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227)}.facility-description p,.facility-expectations p{margin:0 0 12px}.facility-description p:last-child,.facility-expectations p:last-child{margin-bottom:0}::ng-deep .facility-description h3,::ng-deep .facility-description headline,::ng-deep .facility-description .section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding-top:24px!important;padding-bottom:8px!important;display:block}::ng-deep .facility-description h3:first-child,::ng-deep .facility-description headline:first-child,::ng-deep .facility-description .section-headline:first-child,::ng-deep .facility-description>*:first-child h3:first-child,::ng-deep .facility-description>*:first-child headline:first-child{padding-top:0!important}::ng-deep .facility-expectations headline,::ng-deep .facility-expectations h3{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0!important;padding:24px 0 8px!important;display:block}::ng-deep .facility-expectations headline:first-child,::ng-deep .facility-expectations h3:first-child{padding-top:0!important}h2.section-headline{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0;padding-top:16px!important;padding-bottom:8px}.facility-description ul{list-style:disc;padding-left:20px;margin:0 0 12px}.facility-description ul li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.facility-description ul li:last-child{margin-bottom:0}.facility-restrictions{margin-top:20px}.restrictions-heading{font-family:Brockmann,sans-serif;font-size:var(--font-size-base, 16px);font-weight:600;line-height:1.4;color:var(--text-color-default-primary, #202227);margin:0 0 12px}.restrictions-list{list-style:disc;padding-left:20px;margin:0}.restrictions-list li{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);line-height:1.6;color:var(--text-color-default-primary, #202227);margin-bottom:8px}.restrictions-list li:last-child{margin-bottom:0}.info-items-container{display:flex;flex-direction:column;gap:0}.booking-action{padding:16px 20px;background:var(--color-surface-primary, #ffffff);border-top:1px solid var(--color-border, #e5e5e5)}.booking-action ds-button{display:block;width:100%}.booking-action ::ng-deep ds-button button{width:100%;border-radius:100px;height:44px;min-height:44px;max-height:44px;padding-left:16px;padding-right:16px}\n"] }]
19008
19255
  }], ctorParameters: () => [{ type: i1.ModalController }, { type: DsMobileBookingModalService }], propDecorators: { facilityData: [{
19009
19256
  type: Input
19010
19257
  }] } });
@@ -19310,6 +19557,7 @@ class DsMobileHandbookDetailModalComponent {
19310
19557
  cssClass: ['ds-bottom-sheet', 'auto-height'],
19311
19558
  });
19312
19559
  await sheet.present();
19560
+ disableModalShadowPointerEvents(sheet);
19313
19561
  const result = await sheet.onWillDismiss();
19314
19562
  if (result.data?.action) {
19315
19563
  this.handleContactAction(result.data.action, contact);
@@ -19817,7 +20065,7 @@ class DsMobileHandbookFolderComponent {
19817
20065
  }
19818
20066
  </div>
19819
20067
  </div>
19820
- `, isInline: true, styles: [":host{display:inline-flex;flex-direction:column;align-items:center;gap:16px;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding:16px;border-radius:16px;background:var(--color-background-neutral-secondary, #f0f0f0);transition:background .2s ease}:host:active{background:var(--color-background-neutral-secondary-hover, #ebebeb)}@media (hover: hover){:host:hover{background:var(--color-background-neutral-secondary-hover, #ebebeb)}}:host{--color-red-base: #dc3545;--color-red-strong: #ae1d3b;--color-green-base: #28a745;--color-green-strong: #058057;--color-yellow-base: #ffc107;--color-yellow-strong: #e4b200;--color-purple-base: #6f42c1;--color-purple-strong: #4204c5;--color-indigo-base: #6610f2;--color-indigo-strong: #a527a2;--color-lime-base: #82c91e;--color-lime-strong: #58a503;--color-teal-base: #20c997;--color-teal-strong: #0ca678;--color-cyan-base: #17a2b8;--color-cyan-strong: #1098ad;--color-brown-base: #795548;--color-brown-strong: #5c4033;--color-light-blue-base: #add8e6;--color-light-blue-strong: #87ceeb;--color-light-green-base: #90ee90;--color-light-green-strong: #32cd32;--color-coral-base: #f08080;--color-coral-strong: #cd5c5c;--color-salmon-base: #ffa07a;--color-salmon-strong: #fa8072;--color-seagreen-base: #20b2aa;--color-seagreen-strong: #2e8b57}.folder-container{position:relative;width:100%;display:flex;flex-direction:column;perspective:800px;-webkit-perspective:800px;max-width:160px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}.folder-container.open .page-sheet{-webkit-transform:translateY(-8px);transform:translateY(-8px);transition-delay:.2s}.folder-container.open .page-sheet:nth-child(1){-webkit-transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px);transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(2){-webkit-transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px);transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(3){-webkit-transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px);transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(4){-webkit-transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px);transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(5){-webkit-transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px);transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(6){-webkit-transform:scale(.9) translateY(-28px) rotateX(0deg) translateZ(.1px);transform:scale(.9) translateY(-28px) rotateX(.1px)}.folder-container.open .folder-front{-webkit-transform:translate3d(0,0,0) rotateX(-45deg);transform:translateZ(0) rotateX(-45deg)}.folder-tab{width:50%;height:auto;display:block}.folder-back{height:128px;border-radius:0 12px 12px;position:relative;margin-top:-1px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.page-sheet{position:absolute;width:80%;height:120px;background:#fff;border-radius:8px;box-shadow:0 -1px 5px #0000001a;border:1px solid var(--border-color-default);transition:transform .3s ease-out;-webkit-transition:-webkit-transform .3s ease-out;left:10%;-webkit-transform:translateZ(0);transform:translateZ(0);transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;will-change:transform}.page-sheet:nth-child(1){bottom:2px;z-index:6;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(1) translateZ(.1px);transform:scale(1) translateZ(.1px)}.page-sheet:nth-child(2){bottom:8px;z-index:5;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.98) translateZ(.1px);transform:scale(.98) translateZ(.1px)}.page-sheet:nth-child(3){bottom:14px;z-index:4;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.96) translateZ(.1px);transform:scale(.96) translateZ(.1px)}.page-sheet:nth-child(4){bottom:20px;z-index:3;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.94) translateZ(.1px);transform:scale(.94) translateZ(.1px)}.page-sheet:nth-child(5){bottom:26px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.92) translateZ(.1px);transform:scale(.92) translateZ(.1px)}.page-sheet:nth-child(6){bottom:32px;z-index:1;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.9) translateZ(.1px);transform:scale(.9) translateZ(.1px)}.folder-front{position:absolute;bottom:0;left:0;right:0;height:116px;border-radius:12px;display:flex;align-items:center;justify-content:center;padding:8px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-transition:-webkit-transform .4s ease-in-out;will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;-webkit-transform:rotateX(-20deg) translateZ(.1px);transform:rotateX(-20deg) translateZ(.1px);-webkit-transform:translate3d(0,0,0) rotateX(-20deg);transform:translateZ(0) rotateX(-20deg);box-shadow:inset 0 64px 48px #fff3,inset 0 2px 4px #ffffff4d,inset 0 1px 1px #ffffff4d}.item-count{display:flex;align-items:center;gap:4px}.item-count-label{letter-spacing:.5px}.folder-icon{display:flex;align-items:center;justify-content:center}.folder-label-container{display:flex;flex-direction:column;align-items:center;gap:4px}.folder-label{text-align:center}.loading-indicator,.error-indicator{font-size:var(--font-size-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
20068
+ `, isInline: true, styles: [":host{display:inline-flex;flex-direction:column;align-items:center;gap:16px;width:100%;min-width:0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding:16px;border-radius:16px;background:var(--color-background-neutral-secondary, #f0f0f0);transition:background .2s ease}:host:active{background:var(--color-background-neutral-secondary-hover, #ebebeb)}@media (hover: hover){:host:hover{background:var(--color-background-neutral-secondary-hover, #ebebeb)}}:host{--color-red-base: #dc3545;--color-red-strong: #ae1d3b;--color-green-base: #28a745;--color-green-strong: #058057;--color-yellow-base: #ffc107;--color-yellow-strong: #e4b200;--color-purple-base: #6f42c1;--color-purple-strong: #4204c5;--color-indigo-base: #6610f2;--color-indigo-strong: #a527a2;--color-lime-base: #82c91e;--color-lime-strong: #58a503;--color-teal-base: #20c997;--color-teal-strong: #0ca678;--color-cyan-base: #17a2b8;--color-cyan-strong: #1098ad;--color-brown-base: #795548;--color-brown-strong: #5c4033;--color-light-blue-base: #add8e6;--color-light-blue-strong: #87ceeb;--color-light-green-base: #90ee90;--color-light-green-strong: #32cd32;--color-coral-base: #f08080;--color-coral-strong: #cd5c5c;--color-salmon-base: #ffa07a;--color-salmon-strong: #fa8072;--color-seagreen-base: #20b2aa;--color-seagreen-strong: #2e8b57}.folder-container{position:relative;width:100%;display:flex;flex-direction:column;perspective:800px;-webkit-perspective:800px;max-width:160px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}.folder-container.open .page-sheet{-webkit-transform:translateY(-8px);transform:translateY(-8px);transition-delay:.2s}.folder-container.open .page-sheet:nth-child(1){-webkit-transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px);transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(2){-webkit-transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px);transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(3){-webkit-transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px);transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(4){-webkit-transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px);transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(5){-webkit-transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px);transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(6){-webkit-transform:scale(.9) translateY(-28px) rotateX(0deg) translateZ(.1px);transform:scale(.9) translateY(-28px) rotateX(.1px)}.folder-container.open .folder-front{-webkit-transform:translate3d(0,0,0) rotateX(-45deg);transform:translateZ(0) rotateX(-45deg)}.folder-tab{width:50%;height:auto;display:block}.folder-back{height:128px;border-radius:0 12px 12px;position:relative;margin-top:-1px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.page-sheet{position:absolute;width:80%;height:120px;background:#fff;border-radius:8px;box-shadow:0 -1px 5px #0000001a;border:1px solid var(--border-color-default);transition:transform .3s ease-out;-webkit-transition:-webkit-transform .3s ease-out;left:10%;-webkit-transform:translateZ(0);transform:translateZ(0);transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;will-change:transform}.page-sheet:nth-child(1){bottom:2px;z-index:6;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(1) translateZ(.1px);transform:scale(1) translateZ(.1px)}.page-sheet:nth-child(2){bottom:8px;z-index:5;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.98) translateZ(.1px);transform:scale(.98) translateZ(.1px)}.page-sheet:nth-child(3){bottom:14px;z-index:4;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.96) translateZ(.1px);transform:scale(.96) translateZ(.1px)}.page-sheet:nth-child(4){bottom:20px;z-index:3;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.94) translateZ(.1px);transform:scale(.94) translateZ(.1px)}.page-sheet:nth-child(5){bottom:26px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.92) translateZ(.1px);transform:scale(.92) translateZ(.1px)}.page-sheet:nth-child(6){bottom:32px;z-index:1;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.9) translateZ(.1px);transform:scale(.9) translateZ(.1px)}.folder-front{position:absolute;bottom:0;left:0;right:0;height:116px;border-radius:12px;display:flex;align-items:center;justify-content:center;padding:8px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-transition:-webkit-transform .4s ease-in-out;will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;-webkit-transform:rotateX(-20deg) translateZ(.1px);transform:rotateX(-20deg) translateZ(.1px);-webkit-transform:translate3d(0,0,0) rotateX(-20deg);transform:translateZ(0) rotateX(-20deg);box-shadow:inset 0 64px 48px #fff3,inset 0 2px 4px #ffffff4d,inset 0 1px 1px #ffffff4d}.item-count{display:flex;align-items:center;gap:4px}.item-count-label{letter-spacing:.5px}.folder-icon{display:flex;align-items:center;justify-content:center}.folder-label-container{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;min-width:0}.folder-label{text-align:center;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loading-indicator,.error-indicator{font-size:var(--font-size-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
19821
20069
  }
19822
20070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileHandbookFolderComponent, decorators: [{
19823
20071
  type: Component,
@@ -19862,7 +20110,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
19862
20110
  }
19863
20111
  </div>
19864
20112
  </div>
19865
- `, styles: [":host{display:inline-flex;flex-direction:column;align-items:center;gap:16px;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding:16px;border-radius:16px;background:var(--color-background-neutral-secondary, #f0f0f0);transition:background .2s ease}:host:active{background:var(--color-background-neutral-secondary-hover, #ebebeb)}@media (hover: hover){:host:hover{background:var(--color-background-neutral-secondary-hover, #ebebeb)}}:host{--color-red-base: #dc3545;--color-red-strong: #ae1d3b;--color-green-base: #28a745;--color-green-strong: #058057;--color-yellow-base: #ffc107;--color-yellow-strong: #e4b200;--color-purple-base: #6f42c1;--color-purple-strong: #4204c5;--color-indigo-base: #6610f2;--color-indigo-strong: #a527a2;--color-lime-base: #82c91e;--color-lime-strong: #58a503;--color-teal-base: #20c997;--color-teal-strong: #0ca678;--color-cyan-base: #17a2b8;--color-cyan-strong: #1098ad;--color-brown-base: #795548;--color-brown-strong: #5c4033;--color-light-blue-base: #add8e6;--color-light-blue-strong: #87ceeb;--color-light-green-base: #90ee90;--color-light-green-strong: #32cd32;--color-coral-base: #f08080;--color-coral-strong: #cd5c5c;--color-salmon-base: #ffa07a;--color-salmon-strong: #fa8072;--color-seagreen-base: #20b2aa;--color-seagreen-strong: #2e8b57}.folder-container{position:relative;width:100%;display:flex;flex-direction:column;perspective:800px;-webkit-perspective:800px;max-width:160px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}.folder-container.open .page-sheet{-webkit-transform:translateY(-8px);transform:translateY(-8px);transition-delay:.2s}.folder-container.open .page-sheet:nth-child(1){-webkit-transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px);transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(2){-webkit-transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px);transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(3){-webkit-transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px);transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(4){-webkit-transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px);transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(5){-webkit-transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px);transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(6){-webkit-transform:scale(.9) translateY(-28px) rotateX(0deg) translateZ(.1px);transform:scale(.9) translateY(-28px) rotateX(.1px)}.folder-container.open .folder-front{-webkit-transform:translate3d(0,0,0) rotateX(-45deg);transform:translateZ(0) rotateX(-45deg)}.folder-tab{width:50%;height:auto;display:block}.folder-back{height:128px;border-radius:0 12px 12px;position:relative;margin-top:-1px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.page-sheet{position:absolute;width:80%;height:120px;background:#fff;border-radius:8px;box-shadow:0 -1px 5px #0000001a;border:1px solid var(--border-color-default);transition:transform .3s ease-out;-webkit-transition:-webkit-transform .3s ease-out;left:10%;-webkit-transform:translateZ(0);transform:translateZ(0);transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;will-change:transform}.page-sheet:nth-child(1){bottom:2px;z-index:6;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(1) translateZ(.1px);transform:scale(1) translateZ(.1px)}.page-sheet:nth-child(2){bottom:8px;z-index:5;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.98) translateZ(.1px);transform:scale(.98) translateZ(.1px)}.page-sheet:nth-child(3){bottom:14px;z-index:4;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.96) translateZ(.1px);transform:scale(.96) translateZ(.1px)}.page-sheet:nth-child(4){bottom:20px;z-index:3;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.94) translateZ(.1px);transform:scale(.94) translateZ(.1px)}.page-sheet:nth-child(5){bottom:26px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.92) translateZ(.1px);transform:scale(.92) translateZ(.1px)}.page-sheet:nth-child(6){bottom:32px;z-index:1;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.9) translateZ(.1px);transform:scale(.9) translateZ(.1px)}.folder-front{position:absolute;bottom:0;left:0;right:0;height:116px;border-radius:12px;display:flex;align-items:center;justify-content:center;padding:8px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-transition:-webkit-transform .4s ease-in-out;will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;-webkit-transform:rotateX(-20deg) translateZ(.1px);transform:rotateX(-20deg) translateZ(.1px);-webkit-transform:translate3d(0,0,0) rotateX(-20deg);transform:translateZ(0) rotateX(-20deg);box-shadow:inset 0 64px 48px #fff3,inset 0 2px 4px #ffffff4d,inset 0 1px 1px #ffffff4d}.item-count{display:flex;align-items:center;gap:4px}.item-count-label{letter-spacing:.5px}.folder-icon{display:flex;align-items:center;justify-content:center}.folder-label-container{display:flex;flex-direction:column;align-items:center;gap:4px}.folder-label{text-align:center}.loading-indicator,.error-indicator{font-size:var(--font-size-xs)}\n"] }]
20113
+ `, styles: [":host{display:inline-flex;flex-direction:column;align-items:center;gap:16px;width:100%;min-width:0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding:16px;border-radius:16px;background:var(--color-background-neutral-secondary, #f0f0f0);transition:background .2s ease}:host:active{background:var(--color-background-neutral-secondary-hover, #ebebeb)}@media (hover: hover){:host:hover{background:var(--color-background-neutral-secondary-hover, #ebebeb)}}:host{--color-red-base: #dc3545;--color-red-strong: #ae1d3b;--color-green-base: #28a745;--color-green-strong: #058057;--color-yellow-base: #ffc107;--color-yellow-strong: #e4b200;--color-purple-base: #6f42c1;--color-purple-strong: #4204c5;--color-indigo-base: #6610f2;--color-indigo-strong: #a527a2;--color-lime-base: #82c91e;--color-lime-strong: #58a503;--color-teal-base: #20c997;--color-teal-strong: #0ca678;--color-cyan-base: #17a2b8;--color-cyan-strong: #1098ad;--color-brown-base: #795548;--color-brown-strong: #5c4033;--color-light-blue-base: #add8e6;--color-light-blue-strong: #87ceeb;--color-light-green-base: #90ee90;--color-light-green-strong: #32cd32;--color-coral-base: #f08080;--color-coral-strong: #cd5c5c;--color-salmon-base: #ffa07a;--color-salmon-strong: #fa8072;--color-seagreen-base: #20b2aa;--color-seagreen-strong: #2e8b57}.folder-container{position:relative;width:100%;display:flex;flex-direction:column;perspective:800px;-webkit-perspective:800px;max-width:160px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}.folder-container.open .page-sheet{-webkit-transform:translateY(-8px);transform:translateY(-8px);transition-delay:.2s}.folder-container.open .page-sheet:nth-child(1){-webkit-transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px);transform:scale(1) translateY(-8px) rotateX(-45deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(2){-webkit-transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px);transform:scale(.98) translateY(-12px) rotateX(-36deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(3){-webkit-transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px);transform:scale(.96) translateY(-16px) rotateX(-27deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(4){-webkit-transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px);transform:scale(.94) translateY(-20px) rotateX(-18deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(5){-webkit-transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px);transform:scale(.92) translateY(-24px) rotateX(-9deg) translateZ(.1px)}.folder-container.open .page-sheet:nth-child(6){-webkit-transform:scale(.9) translateY(-28px) rotateX(0deg) translateZ(.1px);transform:scale(.9) translateY(-28px) rotateX(.1px)}.folder-container.open .folder-front{-webkit-transform:translate3d(0,0,0) rotateX(-45deg);transform:translateZ(0) rotateX(-45deg)}.folder-tab{width:50%;height:auto;display:block}.folder-back{height:128px;border-radius:0 12px 12px;position:relative;margin-top:-1px;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.page-sheet{position:absolute;width:80%;height:120px;background:#fff;border-radius:8px;box-shadow:0 -1px 5px #0000001a;border:1px solid var(--border-color-default);transition:transform .3s ease-out;-webkit-transition:-webkit-transform .3s ease-out;left:10%;-webkit-transform:translateZ(0);transform:translateZ(0);transform-style:preserve-3d;-webkit-transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;will-change:transform}.page-sheet:nth-child(1){bottom:2px;z-index:6;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(1) translateZ(.1px);transform:scale(1) translateZ(.1px)}.page-sheet:nth-child(2){bottom:8px;z-index:5;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.98) translateZ(.1px);transform:scale(.98) translateZ(.1px)}.page-sheet:nth-child(3){bottom:14px;z-index:4;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.96) translateZ(.1px);transform:scale(.96) translateZ(.1px)}.page-sheet:nth-child(4){bottom:20px;z-index:3;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.94) translateZ(.1px);transform:scale(.94) translateZ(.1px)}.page-sheet:nth-child(5){bottom:26px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.92) translateZ(.1px);transform:scale(.92) translateZ(.1px)}.page-sheet:nth-child(6){bottom:32px;z-index:1;transform-origin:bottom center;-webkit-transform-origin:bottom center;-webkit-transform:scale(.9) translateZ(.1px);transform:scale(.9) translateZ(.1px)}.folder-front{position:absolute;bottom:0;left:0;right:0;height:116px;border-radius:12px;display:flex;align-items:center;justify-content:center;padding:8px;z-index:2;transform-origin:bottom center;-webkit-transform-origin:bottom center;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-transition:-webkit-transform .4s ease-in-out;will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-font-smoothing:antialiased;-webkit-transform:rotateX(-20deg) translateZ(.1px);transform:rotateX(-20deg) translateZ(.1px);-webkit-transform:translate3d(0,0,0) rotateX(-20deg);transform:translateZ(0) rotateX(-20deg);box-shadow:inset 0 64px 48px #fff3,inset 0 2px 4px #ffffff4d,inset 0 1px 1px #ffffff4d}.item-count{display:flex;align-items:center;gap:4px}.item-count-label{letter-spacing:.5px}.folder-icon{display:flex;align-items:center;justify-content:center}.folder-label-container{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;min-width:0}.folder-label{text-align:center;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loading-indicator,.error-indicator{font-size:var(--font-size-xs)}\n"] }]
19866
20114
  }], ctorParameters: () => [{ type: DsMobileHandbookDetailModalService }], propDecorators: { variant: [{
19867
20115
  type: Input
19868
20116
  }], customColor: [{
@@ -21241,6 +21489,7 @@ class MobileCommunityPageComponent {
21241
21489
  [avatarSrc]="post.avatarSrc || ''"
21242
21490
  [showBadge]="true"
21243
21491
  [clickable]="true"
21492
+ [moreActions]="true"
21244
21493
  (postClick)="openPost(post.id)"
21245
21494
  (commentClick)="openPost(post.id, true)"
21246
21495
  (longPress)="handlePostLongPress(post.id, false)">
@@ -21310,6 +21559,7 @@ class MobileCommunityPageComponent {
21310
21559
  [avatarInitials]="post.avatarInitials || ''"
21311
21560
  [avatarType]="post.avatarType"
21312
21561
  [clickable]="true"
21562
+ [moreActions]="true"
21313
21563
  (postClick)="openPost(post.id)"
21314
21564
  (commentClick)="openPost(post.id, true)"
21315
21565
  (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
@@ -21348,6 +21598,7 @@ class MobileCommunityPageComponent {
21348
21598
  [avatarType]="post.avatarType"
21349
21599
  [showBadge]="post.showBadge || false"
21350
21600
  [clickable]="true"
21601
+ [moreActions]="true"
21351
21602
  (postClick)="openPost(post.id)"
21352
21603
  (commentClick)="openPost(post.id, true)"
21353
21604
  (longPress)="handlePostLongPress(post.id, false)">
@@ -21389,6 +21640,7 @@ class MobileCommunityPageComponent {
21389
21640
  [avatarSrc]="post.avatarSrc || ''"
21390
21641
  [avatarInitials]="post.avatarInitials || ''"
21391
21642
  [clickable]="true"
21643
+ [moreActions]="true"
21392
21644
  (postClick)="openPost(post.id)"
21393
21645
  (commentClick)="openPost(post.id, true)"
21394
21646
  (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
@@ -21443,7 +21695,7 @@ class MobileCommunityPageComponent {
21443
21695
  }
21444
21696
  </ds-mobile-section>
21445
21697
  </ds-mobile-page-main>
21446
- `, 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", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "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"], 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"] }] });
21698
+ `, 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", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "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"] }] });
21447
21699
  }
21448
21700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileCommunityPageComponent, decorators: [{
21449
21701
  type: Component,
@@ -21518,6 +21770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
21518
21770
  [avatarSrc]="post.avatarSrc || ''"
21519
21771
  [showBadge]="true"
21520
21772
  [clickable]="true"
21773
+ [moreActions]="true"
21521
21774
  (postClick)="openPost(post.id)"
21522
21775
  (commentClick)="openPost(post.id, true)"
21523
21776
  (longPress)="handlePostLongPress(post.id, false)">
@@ -21587,6 +21840,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
21587
21840
  [avatarInitials]="post.avatarInitials || ''"
21588
21841
  [avatarType]="post.avatarType"
21589
21842
  [clickable]="true"
21843
+ [moreActions]="true"
21590
21844
  (postClick)="openPost(post.id)"
21591
21845
  (commentClick)="openPost(post.id, true)"
21592
21846
  (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
@@ -21625,6 +21879,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
21625
21879
  [avatarType]="post.avatarType"
21626
21880
  [showBadge]="post.showBadge || false"
21627
21881
  [clickable]="true"
21882
+ [moreActions]="true"
21628
21883
  (postClick)="openPost(post.id)"
21629
21884
  (commentClick)="openPost(post.id, true)"
21630
21885
  (longPress)="handlePostLongPress(post.id, false)">
@@ -21666,6 +21921,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
21666
21921
  [avatarSrc]="post.avatarSrc || ''"
21667
21922
  [avatarInitials]="post.avatarInitials || ''"
21668
21923
  [clickable]="true"
21924
+ [moreActions]="true"
21669
21925
  (postClick)="openPost(post.id)"
21670
21926
  (commentClick)="openPost(post.id, true)"
21671
21927
  (longPress)="handlePostLongPress(post.id, post.authorRole === 'Dig')">
@@ -22010,7 +22266,7 @@ class MobileHandbookPageComponent {
22010
22266
  </div>
22011
22267
  </ds-mobile-section>
22012
22268
  </ds-mobile-page-main>
22013
- `, isInline: true, styles: [".folders-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;justify-items:center}@media (min-width: 768px){.folders-grid{grid-template-columns:repeat(3,1fr)}}ds-mobile-handbook-folder{width:100%}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileHandbookFolderComponent, selector: "ds-mobile-handbook-folder", inputs: ["variant", "customColor", "iconName", "itemCount", "label", "items", "loading", "error"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }] });
22269
+ `, isInline: true, styles: [".folders-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;justify-items:center}@media (min-width: 768px){.folders-grid{grid-template-columns:repeat(3,1fr)}}ds-mobile-handbook-folder{width:100%;min-width:0}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileHandbookFolderComponent, selector: "ds-mobile-handbook-folder", inputs: ["variant", "customColor", "iconName", "itemCount", "label", "items", "loading", "error"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }] });
22014
22270
  }
22015
22271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHandbookPageComponent, decorators: [{
22016
22272
  type: Component,
@@ -22036,7 +22292,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
22036
22292
  </div>
22037
22293
  </ds-mobile-section>
22038
22294
  </ds-mobile-page-main>
22039
- `, styles: [".folders-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;justify-items:center}@media (min-width: 768px){.folders-grid{grid-template-columns:repeat(3,1fr)}}ds-mobile-handbook-folder{width:100%}\n"] }]
22295
+ `, styles: [".folders-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;justify-items:center}@media (min-width: 768px){.folders-grid{grid-template-columns:repeat(3,1fr)}}ds-mobile-handbook-folder{width:100%;min-width:0}\n"] }]
22040
22296
  }], ctorParameters: () => [{ type: UserService }], propDecorators: { pageComponent: [{
22041
22297
  type: ViewChild,
22042
22298
  args: ['pageComponent']
@@ -22127,6 +22383,7 @@ class MobileHomePageComponent {
22127
22383
  postsService;
22128
22384
  postModal;
22129
22385
  trackingPermissionService;
22386
+ bottomSheet;
22130
22387
  pageComponent;
22131
22388
  // Get recent posts from PostsService - exclude pinned post (post-4) and limit to 3
22132
22389
  recentPosts = computed(() => this.postsService.posts()
@@ -22160,12 +22417,13 @@ class MobileHomePageComponent {
22160
22417
  openInquiries = computed(() => this.allInquiries()
22161
22418
  .filter(inquiry => inquiry.status === 'open')
22162
22419
  .slice(0, 3), ...(ngDevMode ? [{ debugName: "openInquiries" }] : []));
22163
- constructor(router, userService, postsService, postModal, trackingPermissionService) {
22420
+ constructor(router, userService, postsService, postModal, trackingPermissionService, bottomSheet) {
22164
22421
  this.router = router;
22165
22422
  this.userService = userService;
22166
22423
  this.postsService = postsService;
22167
22424
  this.postModal = postModal;
22168
22425
  this.trackingPermissionService = trackingPermissionService;
22426
+ this.bottomSheet = bottomSheet;
22169
22427
  console.log('MobileHomePageComponent constructor');
22170
22428
  }
22171
22429
  ngOnInit() {
@@ -22207,7 +22465,36 @@ class MobileHomePageComponent {
22207
22465
  console.log('Navigating to inquiries page');
22208
22466
  this.router.navigate(['/inquiries']);
22209
22467
  }
22210
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHomePageComponent, deps: [{ token: i1$4.Router }, { token: UserService }, { token: PostsService }, { token: DsMobilePostDetailModalService }, { token: TrackingPermissionService }], target: i0.ɵɵFactoryTarget.Component });
22468
+ async handlePostLongPress(postId) {
22469
+ const sheet = await this.bottomSheet.create({
22470
+ component: DsMobileActionsBottomSheetComponent,
22471
+ componentProps: { isOwnContent: false },
22472
+ breakpoints: [0, 1],
22473
+ initialBreakpoint: 1,
22474
+ handle: true,
22475
+ backdropDismiss: true,
22476
+ cssClass: 'auto-height'
22477
+ });
22478
+ const result = await sheet.onWillDismiss();
22479
+ if (result.role === 'select' && result.data) {
22480
+ const action = result.data.action;
22481
+ switch (action) {
22482
+ case 'like':
22483
+ const post = this.postsService.getPostById(postId);
22484
+ if (post) {
22485
+ this.postsService.updatePost(postId, {
22486
+ isLiked: !post.isLiked,
22487
+ likeCount: post.isLiked ? post.likeCount - 1 : post.likeCount + 1
22488
+ });
22489
+ }
22490
+ break;
22491
+ case 'reply':
22492
+ await this.openPost(postId, true);
22493
+ break;
22494
+ }
22495
+ }
22496
+ }
22497
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHomePageComponent, deps: [{ token: i1$4.Router }, { token: UserService }, { token: PostsService }, { token: DsMobilePostDetailModalService }, { token: TrackingPermissionService }, { token: DsMobileBottomSheetService }], target: i0.ɵɵFactoryTarget.Component });
22211
22498
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MobileHomePageComponent, isStandalone: true, selector: "app-home-page", viewQueries: [{ propertyName: "pageComponent", first: true, predicate: ["pageComponent"], descendants: true }], ngImport: i0, template: `
22212
22499
  <ds-mobile-page-main
22213
22500
  #pageComponent
@@ -22215,7 +22502,8 @@ class MobileHomePageComponent {
22215
22502
  headerTitle="Velkommen, Lars"
22216
22503
  [avatarInitials]="userService.avatarInitials()"
22217
22504
  [avatarType]="userService.avatarType()"
22218
- (refresh)="handleRefresh($event)">
22505
+ (refresh)="handleRefresh($event)"
22506
+ >
22219
22507
 
22220
22508
  <!-- Offline indicator -->
22221
22509
  @if (pageComponent.isOffline()) {
@@ -22250,9 +22538,10 @@ class MobileHomePageComponent {
22250
22538
  [avatarInitials]="post.avatarInitials || ''"
22251
22539
  [showBadge]="post.showBadge || false"
22252
22540
  [clickable]="true"
22253
- [enableLongPress]="false"
22541
+ [moreActions]="true"
22254
22542
  (postClick)="openPost(post.id)"
22255
- (commentClick)="openPost(post.id, true)">
22543
+ (commentClick)="openPost(post.id, true)"
22544
+ (longPress)="handlePostLongPress(post.id)">
22256
22545
 
22257
22546
  <post-content>
22258
22547
  @if (post.content) {
@@ -22324,7 +22613,7 @@ class MobileHomePageComponent {
22324
22613
  </div>
22325
22614
  </ds-mobile-section>
22326
22615
  </ds-mobile-page-main>
22327
- `, isInline: true, styles: [".posts-list,.inquiries-list{display:flex;flex-direction:column}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.empty-state ds-button{display:block;margin-top:16px}.empty-state ds-button::ng-deep .btn{width:100%;border-radius:9999px}.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: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileIllustrationComponent, selector: "ds-mobile-illustration", inputs: ["variant", "size", "alt"] }, { kind: "component", type: DsMobilePropertyBannerComponent, selector: "ds-mobile-property-banner", inputs: ["address", "photoUrl"] }, { kind: "component", type: DsMobileInteractiveListItemPostComponent, selector: "ds-mobile-interactive-list-item-post", inputs: ["authorName", "authorRole", "timestamp", "avatarInitials", "avatarType", "avatarSrc", "avatarIconName", "showBadge", "variant", "align", "clickable", "enableLongPress"], outputs: ["postClick", "commentClick", "longPress"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "align", "clickable", "showChevron", "enableLongPress"], outputs: ["inquiryClick", "longPress"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: PostContentComponent, selector: "post-content" }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { 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"] }] });
22616
+ `, isInline: true, styles: [".posts-list,.inquiries-list{display:flex;flex-direction:column}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.empty-state ds-button{display:block;margin-top:16px}.empty-state ds-button::ng-deep .btn{width:100%;border-radius:9999px}.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: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileIllustrationComponent, selector: "ds-mobile-illustration", inputs: ["variant", "size", "alt"] }, { kind: "component", type: DsMobilePropertyBannerComponent, selector: "ds-mobile-property-banner", inputs: ["address", "photoUrl"] }, { 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: 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: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: PostContentComponent, selector: "post-content" }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { 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"] }] });
22328
22617
  }
22329
22618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHomePageComponent, decorators: [{
22330
22619
  type: Component,
@@ -22349,7 +22638,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
22349
22638
  headerTitle="Velkommen, Lars"
22350
22639
  [avatarInitials]="userService.avatarInitials()"
22351
22640
  [avatarType]="userService.avatarType()"
22352
- (refresh)="handleRefresh($event)">
22641
+ (refresh)="handleRefresh($event)"
22642
+ >
22353
22643
 
22354
22644
  <!-- Offline indicator -->
22355
22645
  @if (pageComponent.isOffline()) {
@@ -22384,9 +22674,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
22384
22674
  [avatarInitials]="post.avatarInitials || ''"
22385
22675
  [showBadge]="post.showBadge || false"
22386
22676
  [clickable]="true"
22387
- [enableLongPress]="false"
22677
+ [moreActions]="true"
22388
22678
  (postClick)="openPost(post.id)"
22389
- (commentClick)="openPost(post.id, true)">
22679
+ (commentClick)="openPost(post.id, true)"
22680
+ (longPress)="handlePostLongPress(post.id)">
22390
22681
 
22391
22682
  <post-content>
22392
22683
  @if (post.content) {
@@ -22459,7 +22750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
22459
22750
  </ds-mobile-section>
22460
22751
  </ds-mobile-page-main>
22461
22752
  `, styles: [".posts-list,.inquiries-list{display:flex;flex-direction:column}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.empty-state ds-button{display:block;margin-top:16px}.empty-state ds-button::ng-deep .btn{width:100%;border-radius:9999px}.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"] }]
22462
- }], ctorParameters: () => [{ type: i1$4.Router }, { type: UserService }, { type: PostsService }, { type: DsMobilePostDetailModalService }, { type: TrackingPermissionService }], propDecorators: { pageComponent: [{
22753
+ }], ctorParameters: () => [{ type: i1$4.Router }, { type: UserService }, { type: PostsService }, { type: DsMobilePostDetailModalService }, { type: TrackingPermissionService }, { type: DsMobileBottomSheetService }], propDecorators: { pageComponent: [{
22463
22754
  type: ViewChild,
22464
22755
  args: ['pageComponent']
22465
22756
  }] } });
@@ -22649,7 +22940,7 @@ class MobileInquiriesPageComponent {
22649
22940
  ariaLabel="Create new inquiry"
22650
22941
  (clicked)="createNewInquiry()">
22651
22942
  </ds-mobile-fab>
22652
- `, 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", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "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"], 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"] }] });
22943
+ `, 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", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "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"] }] });
22653
22944
  }
22654
22945
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, decorators: [{
22655
22946
  type: Component,
@@ -22848,7 +23139,7 @@ class MobileInquiryDetailPageComponent {
22848
23139
  // Day 1 - Yesterday morning (9:15 AM)
22849
23140
  {
22850
23141
  id: '1',
22851
- content: 'Good morning! I wanted to follow up on your inquiry regarding the maintenance schedule.',
23142
+ content: 'Godmorgen! Jeg ville lige følge op din henvendelse vedrørende vedligeholdelsesplanen.',
22852
23143
  senderId: messageId,
22853
23144
  senderName: messageThread.senderName,
22854
23145
  senderRole: messageThread.role,
@@ -22859,7 +23150,7 @@ class MobileInquiryDetailPageComponent {
22859
23150
  },
22860
23151
  {
22861
23152
  id: '2',
22862
- content: 'We have reviewed your case and identified the root cause of the issue.',
23153
+ content: 'Vi har gennemgået din sag og identificeret den grundlæggende årsag til problemet.',
22863
23154
  senderId: messageId,
22864
23155
  senderName: messageThread.senderName,
22865
23156
  senderRole: messageThread.role,
@@ -22870,7 +23161,7 @@ class MobileInquiryDetailPageComponent {
22870
23161
  },
22871
23162
  {
22872
23163
  id: '3',
22873
- content: 'Thanks for looking into this! What did you find?',
23164
+ content: 'Tak fordi du kiggede på det! Hvad fandt du?',
22874
23165
  senderId: 'current-user',
22875
23166
  senderName: 'You',
22876
23167
  timestamp: new Date(Date.now() - 86400000 - 32100000), // Yesterday 9:25 AM (new group - 7 min gap)
@@ -22880,7 +23171,7 @@ class MobileInquiryDetailPageComponent {
22880
23171
  },
22881
23172
  {
22882
23173
  id: '4',
22883
- content: 'Can you also send me the maintenance report?',
23174
+ content: 'Kan du også sende mig vedligeholdelsesrapporten?',
22884
23175
  senderId: 'current-user',
22885
23176
  senderName: 'You',
22886
23177
  timestamp: new Date(Date.now() - 86400000 - 31980000), // Yesterday 9:27 AM (grouped with previous)
@@ -22902,7 +23193,7 @@ class MobileInquiryDetailPageComponent {
22902
23193
  },
22903
23194
  {
22904
23195
  id: '6',
22905
- content: 'I\'ve attached the detailed report to your inquiry dashboard. Please review it when you have a moment.',
23196
+ content: 'Jeg har vedhæftet den detaljerede rapport dit henvendelsesdashboard. Gennemgå den gerne, når du har et øjeblik.',
22906
23197
  senderId: messageId,
22907
23198
  senderName: messageThread.senderName,
22908
23199
  senderRole: messageThread.role,
@@ -22914,7 +23205,7 @@ class MobileInquiryDetailPageComponent {
22914
23205
  // Day 2 - Today morning (10:45 AM - new day)
22915
23206
  {
22916
23207
  id: '7',
22917
- content: 'Perfect! I\'ve reviewed the report and everything looks good.',
23208
+ content: 'Perfekt! Jeg har gennemgået rapporten, og alt ser godt ud.',
22918
23209
  senderId: 'current-user',
22919
23210
  senderName: 'You',
22920
23211
  timestamp: new Date(Date.now() - 7500000), // Today 10:45 AM (new group - new day)
@@ -22924,7 +23215,7 @@ class MobileInquiryDetailPageComponent {
22924
23215
  },
22925
23216
  {
22926
23217
  id: '8',
22927
- content: 'When can we schedule the maintenance work?',
23218
+ content: 'Hvornår kan vi planlægge vedligeholdelsesarbejdet?',
22928
23219
  senderId: 'current-user',
22929
23220
  senderName: 'You',
22930
23221
  timestamp: new Date(Date.now() - 7320000), // Today 10:48 AM (grouped with previous)
@@ -22935,7 +23226,7 @@ class MobileInquiryDetailPageComponent {
22935
23226
  // Day 2 - Today (just now - 2 minutes ago)
22936
23227
  {
22937
23228
  id: '9',
22938
- content: 'Great to hear! I can schedule it for next Tuesday at 9:00 AM. Does that work for you?',
23229
+ content: 'Dejligt at høre! Jeg kan planlægge det til næste tirsdag kl. 09.00. Passer det dig?',
22939
23230
  senderId: messageId,
22940
23231
  senderName: messageThread.senderName,
22941
23232
  senderRole: messageThread.role,
@@ -22946,7 +23237,7 @@ class MobileInquiryDetailPageComponent {
22946
23237
  },
22947
23238
  {
22948
23239
  id: '10',
22949
- content: 'I\'ll send you a calendar invitation with all the details.',
23240
+ content: 'Jeg sender dig en kalenderinvitation med alle detaljerne.',
22950
23241
  senderId: messageId,
22951
23242
  senderName: messageThread.senderName,
22952
23243
  senderRole: messageThread.role,
@@ -23085,7 +23376,7 @@ class MobileInquiryDetailPageComponent {
23085
23376
  </ds-mobile-section>
23086
23377
  }
23087
23378
  </ds-mobile-page-details>
23088
- `, isInline: true, styles: [".activity-list{display:flex;flex-direction:column;gap:12px;position:relative}.activity-list ds-mobile-list-item:not(:last-child) [content-leading]:after{content:\"\";position:absolute;top:40px;left:50%;transform:translate(-50%);width:1px;height:calc(100% - 2px);background:var(--border-color-default, #e5e5e5);z-index:0}.activity-icon-wrapper{width:100%;height:100%;border-radius:8px;background:var(--color-background-neutral-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;z-index:1}.avatar-wrapper{position:relative;display:flex;align-items:start;justify-content:center;flex-shrink:0;width:100%;height:100%;z-index:1}.avatar-badge{position:absolute;bottom:-6px;right:-6px;width:20px;height:20px;border-radius:8px;background:var(--color-brand-secondary, #5d5fef);display:flex;align-items:center;justify-content:center;border:2px solid var(--color-background-primary, #ffffff)}.avatar-badge svg{width:10px;position:relative;top:1px;fill:#fff}.activity-content{display:flex;flex-direction:column;gap:4px}.activity-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0}.activity-title .actor-name{font-weight:600;color:var(--text-color-default-primary, #202227)}.activity-title .activity-text{color:var(--text-color-default-secondary, #545B66);font-weight:400}.activity-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0}.activity-timestamp{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373);display:flex;align-items:center;gap:4px;margin-top:2px}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:24px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.detail-value.description-text{padding:0 0 8px}.detail-tag{display:inline-flex;align-items:center;padding:4px 12px;border-radius:12px;background:var(--color-background-neutral-secondary, #f5f5f5);font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--text-color-default-secondary, #525866);margin-top:4px;margin-bottom:10px;width:-moz-fit-content;width:fit-content}.photo-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.photo-add{width:100%;aspect-ratio:1;border-radius:12px;border:1px dashed var(--border-color-default, #e5e5e5);background:var(--color-background-neutral-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center;cursor:pointer}.photo-item{width:100%;aspect-ratio:1;border-radius:12px;-o-object-fit:cover;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobilePageDetailsComponent, selector: "ds-mobile-page-details", inputs: ["title", "backRoute", "contentPadding", "tabs", "activeTab", "showRefresh", "scrollThreshold", "headerFadeDistance"], outputs: ["back", "tabChange", "refresh", "scroll"] }, { kind: "component", type: DsMobileInteractiveListItemMessageComponent, selector: "ds-mobile-interactive-list-item-message", inputs: ["senderName", "senderRole", "timestamp", "message", "avatarInitials", "avatarType", "avatarSrc", "unread", "clickable", "align"], outputs: ["messageClick", "longPress"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }, { kind: "component", type: DsBadgeComponent, selector: "ds-badge", inputs: ["variant", "contentType", "content", "leadingIcon", "indicatorShape"] }, { kind: "component", type: DsMobileCardInlineBannerComponent, selector: "ds-mobile-card-inline-banner", inputs: ["title", "timestamp", "unreadCount", "layout"], outputs: ["bannerClick"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileInlinePhotoComponent, selector: "ds-mobile-inline-photo", inputs: ["images", "loadingStates", "author", "maxVisible", "useGrid"], outputs: ["photoClick"] }] });
23379
+ `, isInline: true, styles: [".activity-list{display:flex;flex-direction:column;gap:12px;position:relative}.activity-list ds-mobile-list-item:not(:last-child) [content-leading]:after{content:\"\";position:absolute;top:40px;left:50%;transform:translate(-50%);width:1px;height:calc(100% - 2px);background:var(--border-color-default, #e5e5e5);z-index:0}.activity-icon-wrapper{width:100%;height:100%;border-radius:8px;background:var(--color-background-neutral-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;z-index:1}.avatar-wrapper{position:relative;display:flex;align-items:start;justify-content:center;flex-shrink:0;width:100%;height:100%;z-index:1}.avatar-badge{position:absolute;bottom:-6px;right:-6px;width:20px;height:20px;border-radius:8px;background:var(--color-brand-secondary, #5d5fef);display:flex;align-items:center;justify-content:center;border:2px solid var(--color-background-primary, #ffffff)}.avatar-badge svg{width:10px;position:relative;top:1px;fill:#fff}.activity-content{display:flex;flex-direction:column;gap:4px}.activity-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227);margin:0}.activity-title .actor-name{font-weight:600;color:var(--text-color-default-primary, #202227)}.activity-title .activity-text{color:var(--text-color-default-secondary, #545B66);font-weight:400}.activity-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:20px;letter-spacing:-.3px;color:var(--text-color-default-secondary, #545B66);margin:0}.activity-timestamp{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373);display:flex;align-items:center;gap:4px;margin-top:2px}.detail-label{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--text-color-default-tertiary, #737373)}.detail-value{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:24px;letter-spacing:-.3px;color:var(--text-color-default-primary, #202227)}.detail-value.description-text{padding:0 0 8px}.detail-tag{display:inline-flex;align-items:center;padding:4px 12px;border-radius:12px;background:var(--color-background-neutral-secondary, #f5f5f5);font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;color:var(--text-color-default-secondary, #525866);margin-top:4px;margin-bottom:10px;width:-moz-fit-content;width:fit-content}.photo-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.photo-add{width:100%;aspect-ratio:1;border-radius:12px;border:1px dashed var(--border-color-default, #e5e5e5);background:var(--color-background-neutral-secondary, #f5f5f5);display:flex;align-items:center;justify-content:center;cursor:pointer}.photo-item{width:100%;aspect-ratio:1;border-radius:12px;-o-object-fit:cover;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsAvatarWithBadgeComponent, selector: "ds-avatar-with-badge", inputs: ["type", "size", "initials", "src", "iconName", "showBadge", "badgePosition"] }, { kind: "component", type: DsMobilePageDetailsComponent, selector: "ds-mobile-page-details", inputs: ["title", "backRoute", "contentPadding", "tabs", "activeTab", "showRefresh", "scrollThreshold", "headerFadeDistance"], outputs: ["back", "tabChange", "refresh", "scroll"] }, { kind: "component", type: DsMobileInteractiveListItemMessageComponent, selector: "ds-mobile-interactive-list-item-message", inputs: ["senderName", "senderRole", "timestamp", "message", "avatarInitials", "avatarType", "avatarSrc", "unread", "clickable", "align"], outputs: ["messageClick", "longPress"] }, { kind: "component", type: DsMobileListItemComponent, selector: "ds-mobile-list-item", inputs: ["leadingSize", "variant", "align", "interactive", "disabled", "loading", "enableLongPress", "showDesktopMoreButton", "moreActions", "interactiveOffset", "title", "subtitle", "showDivider", "dividerSpacing"], outputs: ["itemClick", "moreButtonClick"] }, { kind: "component", type: DsBadgeComponent, selector: "ds-badge", inputs: ["variant", "contentType", "content", "leadingIcon", "indicatorShape"] }, { kind: "component", type: DsMobileCardInlineBannerComponent, selector: "ds-mobile-card-inline-banner", inputs: ["title", "timestamp", "unreadCount", "layout"], outputs: ["bannerClick"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileInlinePhotoComponent, selector: "ds-mobile-inline-photo", inputs: ["images", "loadingStates", "author", "maxVisible", "useGrid"], outputs: ["photoClick"] }] });
23089
23380
  }
23090
23381
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiryDetailPageComponent, decorators: [{
23091
23382
  type: Component,
@@ -24536,30 +24827,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24536
24827
  class MobileBookingPageComponent {
24537
24828
  facilityModal;
24538
24829
  facilityCreationModal;
24830
+ userService;
24539
24831
  pageComponent;
24540
24832
  bookingsSwiper;
24541
- constructor(facilityModal, facilityCreationModal) {
24833
+ constructor(facilityModal, facilityCreationModal, userService) {
24542
24834
  this.facilityModal = facilityModal;
24543
24835
  this.facilityCreationModal = facilityCreationModal;
24836
+ this.userService = userService;
24544
24837
  }
24545
24838
  // Active bookings (current and upcoming)
24546
24839
  activeBookings = signal([
24547
24840
  {
24548
24841
  id: 'booking-1',
24549
- thumbnail: '/Assets/Dummy-photos/park.jpg',
24550
- facilityTitle: 'Gæsteparkering',
24842
+ thumbnail: '/Assets/Dummy-photos/rooftop-party.jpg',
24843
+ facilityTitle: 'Festlokale på taget',
24551
24844
  bookingDate: '14. februar, 2026',
24552
24845
  bookingTime: '9:00 - 17:00',
24553
- description: 'Your active parking booking',
24554
- heroImage: '/Assets/Dummy-photos/park.jpg',
24555
- fullDescription: '<p>The guest parking area provides convenient, secure parking for your visitors. Located near the main entrance, it offers easy access to the building while ensuring residents\' parking spaces remain available.</p>',
24846
+ description: 'Din aktive booking af festlokalet på taget',
24847
+ heroImage: '/Assets/Dummy-photos/rooftop-party.jpg',
24848
+ fullDescription: '<p>Festlokalet taget giver jer et lyst og indbydende rum med flot udsigt over byen. Lokalet er velegnet til fødselsdage, mindre sammenkomster og hyggelige middage med naboer og venner.</p>',
24556
24849
  requirements: ['Kræver nøglekort'],
24557
- bookingType: 'Instant booking',
24558
- expectations: '<p>The parking space is well-lit and monitored for security. Please ensure your guests display the provided visitor permit visibly in their vehicle. The space is available during your reserved time slot.</p>',
24850
+ bookingType: 'Øjeblikkelig booking',
24851
+ expectations: '<p>Lokalet er klargjort med borde og stole ved ankomst. Husk at rydde op efter brug, området er klar til de næste beboere.</p>',
24559
24852
  restrictions: [
24560
- 'Maximum vehicle height: 2.1 meters',
24561
- 'No overnight parking without prior approval',
24562
- 'Visitors must display parking permit at all times'
24853
+ 'Maksimal bookingvarighed: 3 timer',
24854
+ 'Ingen høj musik efter kl. 22',
24855
+ 'Efterlad lokalet rent og opryddet'
24563
24856
  ]
24564
24857
  }
24565
24858
  ], ...(ngDevMode ? [{ debugName: "activeBookings" }] : []));
@@ -24569,102 +24862,102 @@ class MobileBookingPageComponent {
24569
24862
  id: 'facility-1',
24570
24863
  thumbnail: '/Assets/Dummy-photos/handyman.jpg',
24571
24864
  facilityTitle: 'Boremaskinen',
24572
- description: 'Book a guest parking spot to give your visitors convenient access to the property at any time.',
24865
+ description: 'Lån en boremaskine til mindre gør-det-selv-opgaver i boligen.',
24573
24866
  availabilityStatus: 'available-today',
24574
24867
  statusLabel: 'Ledig i dag',
24575
24868
  heroImage: '/Assets/Dummy-photos/handyman.jpg',
24576
- fullDescription: '<p>Our professional-grade drill is available for all residents to use for their home improvement projects. Perfect for hanging shelves, mounting fixtures, or any drilling needs around your apartment.</p>',
24869
+ fullDescription: '<p>Vores boremaskine i professionel kvalitet er tilgængelig for alle beboere til mindre forbedringer i hjemmet. Den er ideel til ophængning af hylder, montering af beslag og andre boreopgaver i lejligheden.</p>',
24577
24870
  requirements: ['Kræver nøglekort'],
24578
- bookingType: 'Instant booking',
24579
- expectations: '<p>The drill comes with a comprehensive set of bits and accessories. It\'s fully charged and ready to use. Please return it in clean condition after use. Basic instructions are included with the tool.</p>',
24871
+ bookingType: 'Øjeblikkelig booking',
24872
+ expectations: '<p>Boremaskinen udleveres med et sæt bor og tilbehør. Den er opladet og klar til brug. Returner værktøjet i rengjort stand efter brug.</p>',
24580
24873
  restrictions: [
24581
- 'Maximum booking duration: 48 hours',
24582
- 'Must return the drill in the same condition',
24583
- 'Report any damages immediately',
24584
- 'Not for commercial use'
24874
+ 'Maksimal bookingvarighed: 48 timer',
24875
+ 'Skal returneres i samme stand',
24876
+ 'Skader skal meldes med det samme',
24877
+ ' ikke bruges til kommercielt arbejde'
24585
24878
  ]
24586
24879
  },
24587
24880
  {
24588
24881
  id: 'facility-2',
24589
- thumbnail: '/Assets/Dummy-photos/balcony-view.jpg',
24882
+ thumbnail: '/Assets/Dummy-photos/rooftop-party.jpg',
24590
24883
  facilityTitle: 'Festlokale på taget',
24591
- description: 'Book the shared party room for birthdays, celebrations, or community events with friend...',
24884
+ description: 'Book det fælles festlokale taget til fødselsdage, fejring og mindre arrangementer.',
24592
24885
  availabilityStatus: 'available-today',
24593
24886
  statusLabel: 'Ledig i dag',
24594
- heroImage: '/Assets/Dummy-photos/balcony-view.jpg',
24887
+ heroImage: '/Assets/Dummy-photos/rooftop-party.jpg',
24595
24888
  fullDescription: `
24596
- <p>The rooftop terrace is designed as a relaxing escape and a vibrant community hub, offering residents a beautiful setting with panoramic city views. Whether you're planning a small gathering, enjoying a quiet evening outdoors, or hosting friends, the terrace provides the perfect spot to enjoy fresh air above the bustle of the city.</p>
24889
+ <p>Tagterrassen er indrettet som et afslappende fristed og et levende samlingspunkt for beboerne med flot udsigt over byen. Uanset om du planlægger en mindre sammenkomst, en rolig aften udendørs eller en hyggelig stund med venner, giver terrassen de perfekte rammer.</p>
24597
24890
 
24598
24891
  <h3 class="section-headline">Hvad du kan forvente</h3>
24599
- <p>The terrace is furnished with tables, chairs, and lounge seating, making it ideal for social events, casual dining, or simply unwinding. Seasonal plants and greenery create a welcoming atmosphere, and the space is fitted with lighting for use during the evenings. Please note that the terrace is not a playground, children must be supervised at all times.</p>
24892
+ <p>Terrassen er møbleret med borde, stole og loungeområder, den egner sig godt til sociale arrangementer, afslappet spisning eller en rolig pause. Sæsonens planter giver en indbydende stemning, og området har belysning til brug om aftenen. Terrassen er ikke en legeplads, og børn skal være under opsyn.</p>
24600
24893
 
24601
24894
  <h3 class="section-headline">Restriktioner</h3>
24602
24895
  <ul>
24603
- <li>No smoking or vaping is allowed anywhere on the terrace.</li>
24604
- <li>No loud music or parties beyond reasonable volume levels.</li>
24605
- <li>No open flames or candles for safety reasons.</li>
24606
- <li>No private grills or cooking equipment, only the shared facilities provided may be used.</li>
24607
- <li>No pets are allowed on the terrace, except service animals.</li>
24896
+ <li>Rygning og vaping er ikke tilladt terrassen.</li>
24897
+ <li>Høj musik og fester over rimeligt lydniveau er ikke tilladt.</li>
24898
+ <li>Åben ild og stearinlys er ikke tilladt af sikkerhedshensyn.</li>
24899
+ <li>Private grill eller eget madudstyr ikke anvendes; brug kun fælles faciliteter.</li>
24900
+ <li>Kæledyr er ikke tilladt terrassen, undtaget servicehunde.</li>
24608
24901
  </ul>
24609
24902
 
24610
- <h3 class="section-headline">Safety and conduct</h3>
24611
- <p>For everyone's comfort and safety, please:</p>
24903
+ <h3 class="section-headline">Sikkerhed og adfærd</h3>
24904
+ <p>For alles komfort og sikkerhed beder vi dig:</p>
24612
24905
  <ul>
24613
- <li>Avoid overcrowding, the terrace has a maximum capacity of 20 people at one time.</li>
24614
- <li>Supervise children at all times.</li>
24615
- <li>Do not move or remove furniture.</li>
24616
- <li>Keep emergency exits and pathways clear.</li>
24617
- <li>Dispose of any waste in the bins provided.</li>
24906
+ <li>Undgå overfyldning; terrassen har plads til maks. 20 personer ad gangen.</li>
24907
+ <li>Holde børn under opsyn til enhver tid.</li>
24908
+ <li>Undlade at flytte eller fjerne møbler.</li>
24909
+ <li>Holde nødudgange og gangarealer fri.</li>
24910
+ <li>Bortskaffe affald i de opsatte skraldespande.</li>
24618
24911
  </ul>
24619
24912
 
24620
- <h3 class="section-headline">Booking and duration</h3>
24621
- <p>The terrace must be booked in advance for private events:</p>
24913
+ <h3 class="section-headline">Booking og varighed</h3>
24914
+ <p>Terrassen skal bookes forhånd ved private arrangementer:</p>
24622
24915
  <ul>
24623
- <li>Max duration: 3 hours per booking.</li>
24624
- <li>Cleaning up: Residents are responsible for leaving the terrace clean and ready for the next booking.</li>
24916
+ <li>Maksimal varighed: 3 timer pr. booking.</li>
24917
+ <li>Oprydning: Beboeren har ansvar for at efterlade terrassen ren og klar til næste booking.</li>
24625
24918
  </ul>
24626
24919
  `,
24627
24920
  requirements: ['Kræver nøglekort'],
24628
- bookingType: 'Instant booking',
24921
+ bookingType: 'Øjeblikkelig booking',
24629
24922
  expectations: '',
24630
24923
  restrictions: []
24631
24924
  },
24632
24925
  {
24633
24926
  id: 'facility-3',
24634
- thumbnail: '/Assets/Dummy-photos/park.jpg',
24927
+ thumbnail: '/Assets/Dummy-photos/parking.jpg',
24635
24928
  facilityTitle: 'Gæsteparkering',
24636
- description: 'Book the shared party room for birthdays, celebrations, or community events with friend...',
24929
+ description: 'Book en gæsteparkeringsplads, dine besøgende nemt kan parkere ved ejendommen.',
24637
24930
  availabilityStatus: 'available-from',
24638
24931
  statusLabel: 'Ledig fra 28. februar, 2026',
24639
- heroImage: '/Assets/Dummy-photos/park.jpg',
24640
- fullDescription: '<p>Additional guest parking spaces are available for residents who need extra parking for their visitors. These spaces ensure your guests have a convenient place to park when visiting your home.</p>',
24932
+ heroImage: '/Assets/Dummy-photos/parking.jpg',
24933
+ fullDescription: '<p>Ekstra gæsteparkeringspladser er tilgængelige for beboere, der har brug for parkering til besøgende. Pladserne giver dine gæster en nem og tryg parkeringsmulighed tæt boligen.</p>',
24641
24934
  requirements: ['Kræver nøglekort'],
24642
- bookingType: 'Advance booking required',
24643
- expectations: '<p>The parking area is secure and well-maintained. Visitor permits must be displayed at all times. Please inform your guests about the parking location and any specific instructions.</p>',
24935
+ bookingType: 'Forudgående booking påkrævet',
24936
+ expectations: '<p>Parkeringsområdet er sikkert og velholdt. Gæstetilladelse skal være synlig i forruden under hele parkeringen. Informer gerne dine gæster om placering og regler.</p>',
24644
24937
  restrictions: [
24645
- 'Advance booking required (minimum 24 hours)',
24646
- 'Maximum booking duration: 12 hours',
24647
- 'Visitors must display parking permit',
24648
- 'No commercial vehicles allowed'
24938
+ 'Forudgående booking påkrævet (minimum 24 timer)',
24939
+ 'Maksimal bookingvarighed: 12 timer',
24940
+ 'Gæster skal vise synlig parkeringstilladelse',
24941
+ 'Ingen erhvervskøretøjer tilladt'
24649
24942
  ]
24650
24943
  },
24651
24944
  {
24652
24945
  id: 'facility-4',
24653
24946
  thumbnail: '/Assets/Dummy-photos/yard.jpg',
24654
24947
  facilityTitle: 'BBQ område',
24655
- description: 'Book the shared party room for birthdays, celebrations, or community events with friend...',
24948
+ description: 'Book grillområdet til sommerarrangementer og udendørs spisning med naboer og venner.',
24656
24949
  availabilityStatus: 'unavailable',
24657
24950
  statusLabel: 'Ikke tilgængelig',
24658
24951
  heroImage: '/Assets/Dummy-photos/yard.jpg',
24659
- fullDescription: '<p>The BBQ area features professional-grade grills and outdoor seating, perfect for summer gatherings and outdoor dining. The space is designed to accommodate both small family meals and larger social events.</p>',
24952
+ fullDescription: '<p>BBQ-området har grill i professionel kvalitet og udendørs siddepladser, perfekt til sommerarrangementer og fællesspisning. Området er velegnet til både mindre familiemåltider og større sociale arrangementer.</p>',
24660
24953
  requirements: ['Kræver nøglekort'],
24661
- bookingType: 'Seasonal availability',
24662
- expectations: '<p>All BBQ equipment and cleaning supplies are provided. The area includes covered seating and preparation tables. Please clean the grills after use and dispose of charcoal properly in the designated containers.</p>',
24954
+ bookingType: 'Sæsonbestemt tilgængelighed',
24955
+ expectations: '<p>Alt grilludstyr og rengøringsartikler stilles til rådighed. Området har overdækkede siddepladser og borde til forberedelse. Rengør grillen efter brug, og bortskaf kul korrekt i de anviste beholdere.</p>',
24663
24956
  restrictions: [
24664
- 'Currently closed for winter season',
24665
- 'Opens again in May 2026',
24666
- 'Maximum group size: 20 people',
24667
- 'Music must end by 10 PM'
24957
+ 'Lukket i vintersæsonen',
24958
+ 'Åbner igen i maj 2026',
24959
+ 'Maksimal gruppestørrelse: 20 personer',
24960
+ 'Musik skal stoppe senest kl. 22'
24668
24961
  ]
24669
24962
  }
24670
24963
  ], ...(ngDevMode ? [{ debugName: "availableFacilities" }] : []));
@@ -24745,11 +25038,13 @@ class MobileBookingPageComponent {
24745
25038
  }
24746
25039
  });
24747
25040
  }
24748
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileBookingPageComponent, deps: [{ token: DsMobileFacilityDetailModalService }, { token: DsMobileFacilityCreationModalService }], target: i0.ɵɵFactoryTarget.Component });
25041
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileBookingPageComponent, deps: [{ token: DsMobileFacilityDetailModalService }, { token: DsMobileFacilityCreationModalService }, { token: UserService }], target: i0.ɵɵFactoryTarget.Component });
24749
25042
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MobileBookingPageComponent, isStandalone: true, selector: "app-mobile-booking-page", viewQueries: [{ propertyName: "pageComponent", first: true, predicate: ["pageComponent"], descendants: true }, { propertyName: "bookingsSwiper", first: true, predicate: ["bookingsSwiper"], descendants: true }], ngImport: i0, template: `
24750
25043
  <ds-mobile-page-main
24751
25044
  #pageComponent
24752
- [title]="'Booking'"
25045
+ [title]="'Bookinger'"
25046
+ [avatarInitials]="userService.avatarInitials()"
25047
+ [avatarType]="userService.avatarType()"
24753
25048
  (refresh)="handleRefresh($event)">
24754
25049
 
24755
25050
  @if (pageComponent.isOffline()) {
@@ -24839,10 +25134,10 @@ class MobileBookingPageComponent {
24839
25134
  <ds-mobile-fab
24840
25135
  icon="remixAddLine"
24841
25136
  position="bottom-right"
24842
- ariaLabel="Create facility"
25137
+ ariaLabel="Opret facilitet"
24843
25138
  (clicked)="openFacilityCreationModal()">
24844
25139
  </ds-mobile-fab>
24845
- `, isInline: true, styles: [".bookings-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 .bookings-swiper .swiper-slide{width:100%;max-width:600px;height:auto;pointer-events:auto}@media (min-width: 768px){::ng-deep .bookings-swiper .swiper-slide{max-width:100%}}::ng-deep .bookings-swiper .swiper-slide ds-mobile-interactive-list-item-booking{width:100%;pointer-events:auto}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileInteractiveListItemBookingComponent, selector: "ds-mobile-interactive-list-item-booking", inputs: ["thumbnail", "facilityTitle", "description", "bookingDate", "bookingTime", "availabilityStatus", "statusLabel", "variant", "align", "clickable", "showChevron", "enableLongPress"], outputs: ["bookingClick", "longPress"] }, { kind: "component", type: DsMobileSwiperComponent, selector: "ds-mobile-swiper", inputs: ["slideWidth", "gap", "pagination", "autoHeight", "progressiveOpacity", "progressiveScale"] }, { 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: 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"] }] });
25140
+ `, isInline: true, styles: [".bookings-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 .bookings-swiper .swiper-slide{width:100%;max-width:600px;height:auto;pointer-events:auto}@media (min-width: 768px){::ng-deep .bookings-swiper .swiper-slide{max-width:100%}}::ng-deep .bookings-swiper .swiper-slide ds-mobile-interactive-list-item-booking{width:100%;pointer-events:auto}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileInteractiveListItemBookingComponent, selector: "ds-mobile-interactive-list-item-booking", inputs: ["thumbnail", "facilityTitle", "description", "bookingDate", "bookingTime", "availabilityStatus", "statusLabel", "variant", "align", "clickable", "showChevron", "enableLongPress", "moreActions"], outputs: ["bookingClick", "longPress"] }, { kind: "component", type: DsMobileSwiperComponent, selector: "ds-mobile-swiper", inputs: ["slideWidth", "gap", "pagination", "autoHeight", "progressiveOpacity", "progressiveScale"] }, { 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: 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"] }] });
24846
25141
  }
24847
25142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileBookingPageComponent, decorators: [{
24848
25143
  type: Component,
@@ -24857,7 +25152,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24857
25152
  ], template: `
24858
25153
  <ds-mobile-page-main
24859
25154
  #pageComponent
24860
- [title]="'Booking'"
25155
+ [title]="'Bookinger'"
25156
+ [avatarInitials]="userService.avatarInitials()"
25157
+ [avatarType]="userService.avatarType()"
24861
25158
  (refresh)="handleRefresh($event)">
24862
25159
 
24863
25160
  @if (pageComponent.isOffline()) {
@@ -24947,11 +25244,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24947
25244
  <ds-mobile-fab
24948
25245
  icon="remixAddLine"
24949
25246
  position="bottom-right"
24950
- ariaLabel="Create facility"
25247
+ ariaLabel="Opret facilitet"
24951
25248
  (clicked)="openFacilityCreationModal()">
24952
25249
  </ds-mobile-fab>
24953
25250
  `, styles: [".bookings-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 .bookings-swiper .swiper-slide{width:100%;max-width:600px;height:auto;pointer-events:auto}@media (min-width: 768px){::ng-deep .bookings-swiper .swiper-slide{max-width:100%}}::ng-deep .bookings-swiper .swiper-slide ds-mobile-interactive-list-item-booking{width:100%;pointer-events:auto}\n"] }]
24954
- }], ctorParameters: () => [{ type: DsMobileFacilityDetailModalService }, { type: DsMobileFacilityCreationModalService }], propDecorators: { pageComponent: [{
25251
+ }], ctorParameters: () => [{ type: DsMobileFacilityDetailModalService }, { type: DsMobileFacilityCreationModalService }, { type: UserService }], propDecorators: { pageComponent: [{
24955
25252
  type: ViewChild,
24956
25253
  args: ['pageComponent']
24957
25254
  }], bookingsSwiper: [{
@@ -25385,7 +25682,7 @@ class MobilePostDetailPageComponent {
25385
25682
  </div>
25386
25683
  </div>
25387
25684
  </ds-mobile-page-details>
25388
- `, isInline: true, styles: [".post-detail-container{display:flex;flex-direction:column;gap:16px;max-width:640px}.post-section{border-bottom:1px solid var(--border-color-default);padding-bottom:16px}.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}.comments-section{display:flex;flex-direction:column;margin-left:-8px;margin-right:-8px}.comments-header{font-family:Brockmann,sans-serif;font-size:18px;font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding-left:8px;padding-right:8px}.comments-list{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: DsMobilePageDetailsComponent, selector: "ds-mobile-page-details", inputs: ["title", "backRoute", "contentPadding", "tabs", "activeTab", "showRefresh", "scrollThreshold", "headerFadeDistance"], outputs: ["back", "tabChange", "refresh", "scroll"] }, { kind: "component", type: DsMobileInteractiveListItemPostComponent, selector: "ds-mobile-interactive-list-item-post", inputs: ["authorName", "authorRole", "timestamp", "avatarInitials", "avatarType", "avatarSrc", "avatarIconName", "showBadge", "variant", "align", "clickable", "enableLongPress"], outputs: ["postClick", "commentClick", "longPress"] }, { kind: "component", type: PostContentComponent, selector: "post-content" }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { 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: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "isOwnComment", "isLiked", "likeCount"], outputs: ["likeToggled", "commentClick", "replyClick", "editClick", "longPress"] }] });
25685
+ `, isInline: true, styles: [".post-detail-container{display:flex;flex-direction:column;gap:16px;max-width:640px}.post-section{border-bottom:1px solid var(--border-color-default);padding-bottom:16px}.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}.comments-section{display:flex;flex-direction:column;margin-left:-8px;margin-right:-8px}.comments-header{font-family:Brockmann,sans-serif;font-size:18px;font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding-left:8px;padding-right:8px}.comments-list{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: DsMobilePageDetailsComponent, selector: "ds-mobile-page-details", inputs: ["title", "backRoute", "contentPadding", "tabs", "activeTab", "showRefresh", "scrollThreshold", "headerFadeDistance"], outputs: ["back", "tabChange", "refresh", "scroll"] }, { 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: PostContentComponent, selector: "post-content" }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { 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: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "moreActions", "isOwnComment", "isLiked", "likeCount"], outputs: ["likeToggled", "commentClick", "replyClick", "editClick", "longPress"] }] });
25389
25686
  }
25390
25687
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobilePostDetailPageComponent, decorators: [{
25391
25688
  type: Component,