@propbinder/mobile-design 0.2.21 → 0.2.23

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.
@@ -1212,10 +1212,15 @@ class DsMobileListItemComponent {
1212
1212
  // (but not the host element itself)
1213
1213
  const target = event.target;
1214
1214
  const closestInteractive = target.closest('button, a, input, select, textarea, [role="button"]');
1215
- // Check if the interactive element is a child, not the host itself
1215
+ // Only block if the interactive element is a REAL child action (like a button in trailing slot),
1216
+ // but NOT if it's just the host itself or something inside leading/main that shouldn't block.
1216
1217
  if (closestInteractive && closestInteractive !== event.currentTarget) {
1217
- // console.log('[ListItem] Click ignored - came from interactive child:', closestInteractive);
1218
- return;
1218
+ // If the target is inside content-leading or content-main, we generally want to allow the click
1219
+ const isInsidePrimaryContent = !!target.closest('[content-leading], [content-main], .structured-title, .structured-subtitle');
1220
+ if (!isInsidePrimaryContent) {
1221
+ // console.log('[ListItem] Click ignored - came from interactive child in trailing/unknown slot:', closestInteractive);
1222
+ return;
1223
+ }
1219
1224
  }
1220
1225
  if (!this.longPressTriggered) {
1221
1226
  // console.log('[ListItem] Emitting itemClick');
@@ -1446,7 +1451,7 @@ class DsMobileBottomSheetWrapperComponent {
1446
1451
  <div class="bottom-sheet-wrapper">
1447
1452
  <ng-content></ng-content>
1448
1453
  </div>
1449
- `, isInline: true, styles: [":host{display:block;background:var(--color-background-neutral-primary, #ffffff);background:#fff}.bottom-sheet-wrapper{display:flex;flex-direction:column;background:var(--color-background-neutral-primary, #ffffff);background:#fff;padding-bottom:max(8px,calc(env(safe-area-inset-bottom) - 16px));overflow:hidden;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
1454
+ `, isInline: true, styles: [":host{display:block;background:var(--color-background-neutral-primary, #ffffff);background:#fff}.bottom-sheet-wrapper{display:flex;flex-direction:column;background:var(--color-background-neutral-primary, #ffffff);background:#fff;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px);overflow:hidden;width:100%;height:auto;min-height:unset}:host ::ng-deep .view-container:not(.is-animating){height:auto!important;min-height:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
1450
1455
  }
1451
1456
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileBottomSheetWrapperComponent, decorators: [{
1452
1457
  type: Component,
@@ -1454,7 +1459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1454
1459
  <div class="bottom-sheet-wrapper">
1455
1460
  <ng-content></ng-content>
1456
1461
  </div>
1457
- `, styles: [":host{display:block;background:var(--color-background-neutral-primary, #ffffff);background:#fff}.bottom-sheet-wrapper{display:flex;flex-direction:column;background:var(--color-background-neutral-primary, #ffffff);background:#fff;padding-bottom:max(8px,calc(env(safe-area-inset-bottom) - 16px));overflow:hidden;width:100%}\n"] }]
1462
+ `, styles: [":host{display:block;background:var(--color-background-neutral-primary, #ffffff);background:#fff}.bottom-sheet-wrapper{display:flex;flex-direction:column;background:var(--color-background-neutral-primary, #ffffff);background:#fff;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px);overflow:hidden;width:100%;height:auto;min-height:unset}:host ::ng-deep .view-container:not(.is-animating){height:auto!important;min-height:0!important}\n"] }]
1458
1463
  }] });
1459
1464
 
1460
1465
  /**
@@ -2499,9 +2504,12 @@ class DsMobileProfileActionsSheetComponent {
2499
2504
  <ds-mobile-bottom-sheet-wrapper>
2500
2505
  <div class="profile-sheet-content" #sheetWrapper>
2501
2506
  <!-- View Container with CSS Animation -->
2502
- <div class="view-container" #viewContainer [class.show-language]="currentView() === 'language'" [style.height.px]="containerHeight()">
2507
+ <div class="view-container" #viewContainer
2508
+ [class.show-language]="currentView() === 'language'"
2509
+ [class.is-animating]="isAnimating()"
2510
+ [style.height.px]="isAnimating() ? containerHeight() : null">
2503
2511
  <!-- Main Actions View -->
2504
- <div class="view main-view">
2512
+ <div class="view main-view" [class.active]="currentView() === 'main'">
2505
2513
  <div class="actions-list">
2506
2514
  @for (group of actionGroups; track $index; let isLast = $last) {
2507
2515
  <!-- Action Group -->
@@ -2538,7 +2546,7 @@ class DsMobileProfileActionsSheetComponent {
2538
2546
  </div>
2539
2547
 
2540
2548
  <!-- Language Selection View -->
2541
- <div class="view language-view">
2549
+ <div class="view language-view" [class.active]="currentView() === 'language'">
2542
2550
  <!-- Header with back and done buttons -->
2543
2551
  <ion-header>
2544
2552
  <ion-toolbar>
@@ -2572,7 +2580,7 @@ class DsMobileProfileActionsSheetComponent {
2572
2580
  </div>
2573
2581
  </div>
2574
2582
  </ds-mobile-bottom-sheet-wrapper>
2575
- `, isInline: true, styles: [":host{display:block;height:auto}.profile-sheet-content{overflow:hidden;width:100%}.view-container{display:grid;grid-template-columns:50% 50%;width:200%;transform:translate(0);transition:transform .3s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.4,0,.2,1),opacity .15s ease-in-out;overflow:hidden}.view-container.show-language{transform:translate(-50%)}.view{width:100%}.main-view{padding-top:16px}.actions-list{display:flex;flex-direction:column}.action-group{display:flex;flex-direction:column;padding:0 16px}.language-view{display:flex;flex-direction:column}ion-header{box-shadow:none}:host ::ng-deep .header-ios ion-toolbar:last-of-type{--border-width: 0 !important}ion-toolbar{--background: var(--color-background-neutral-primary, #ffffff);--border-width: 0 !important;--border-color: var(--color-border-default, #e5e7eb) !important;--padding-top: 12px;--padding-bottom: 8px;--min-height: 56px;border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-toolbar::part(native){border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:22px;letter-spacing:-.4px;color:var(--color-text-primary, #1a1a1a)}ion-buttons[slot=start] ds-button{--border-radius: 100px}ion-buttons[slot=start] ds-button::ng-deep button{border-radius:100px}ion-buttons[slot=end] ds-button{--border-radius: 100px}ion-buttons[slot=end] ds-button::ng-deep button{border-radius:100px}.language-list{padding:8px 16px}.language-flag{width:24px;height:24px;object-fit:cover}.radio-wrapper{display:flex;align-items:center;justify-content:center}.radio-indicator{width:20px;height:20px;border:2px solid var(--color-border-default, #d1d5db);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.radio-indicator.radio-checked{border-color:var(--color-accent, #7c3aed)}.radio-inner{width:10px;height:10px;border-radius:50%;background:transparent;transition:background .2s ease}.radio-checked .radio-inner{background:var(--color-accent, #7c3aed)}.trailing-content{display:flex;align-items:center;gap:8px}.subtitle-flag{width:16px;height:16px;object-fit:cover;border-radius:2px}.subtitle{font-size:15px;color:var(--color-text-subtle, #6b7280);line-height:20px}.chevron-icon{color:var(--color-text-secondary, #737373)}.check-icon{color:var(--color-primary-base, #7c3aed)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item{--color-background-primary: transparent;--color-background-neutral-primary-hover: var(--color-background-neutral-secondary, #f5f5f5)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .list-item-inner:before{z-index:0!important}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-leading,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-main,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-trailing{position:relative;z-index:1}ds-mobile-action-list-item.destructive{--text-color-default-primary: var(--color-error-base, #ef4444)}.destructive-icon{color:var(--color-error-base, #ef4444)}.action-group-divider{height:1px;background:var(--color-border-subtle, #e5e5e5);margin:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsMobileActionListItemComponent, selector: "ds-mobile-action-list-item", inputs: ["title", "showDivider", "disabled"], outputs: ["itemClick"] }, { 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: 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper" }] });
2583
+ `, isInline: true, styles: [":host{display:block;height:auto}.profile-sheet-content{overflow:hidden;width:100%}.view-container{display:grid;grid-template-columns:50% 50%;width:200%;transform:translate(0);transition:transform .3s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.4,0,.2,1),opacity .15s ease-in-out;overflow:hidden}.view-container.show-language{transform:translate(-50%)}.view{width:100%}.view-container:not(.is-animating) .view:not(.active){height:0!important;overflow:hidden!important}.main-view{padding-top:16px}.actions-list{display:flex;flex-direction:column}.action-group{display:flex;flex-direction:column;padding:0 16px}.language-view{display:flex;flex-direction:column}ion-header{box-shadow:none}:host ::ng-deep .header-ios ion-toolbar:last-of-type{--border-width: 0 !important}ion-toolbar{--background: var(--color-background-neutral-primary, #ffffff);--border-width: 0 !important;--border-color: var(--color-border-default, #e5e7eb) !important;--padding-top: 12px;--padding-bottom: 8px;--min-height: 56px;border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-toolbar::part(native){border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:22px;letter-spacing:-.4px;color:var(--color-text-primary, #1a1a1a)}ion-buttons[slot=start] ds-button{--border-radius: 100px}ion-buttons[slot=start] ds-button::ng-deep button{border-radius:100px}ion-buttons[slot=end] ds-button{--border-radius: 100px}ion-buttons[slot=end] ds-button::ng-deep button{border-radius:100px}.language-list{padding:8px 16px}.language-flag{width:24px;height:24px;object-fit:cover}.radio-wrapper{display:flex;align-items:center;justify-content:center}.radio-indicator{width:20px;height:20px;border:2px solid var(--color-border-default, #d1d5db);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.radio-indicator.radio-checked{border-color:var(--color-accent, #7c3aed)}.radio-inner{width:10px;height:10px;border-radius:50%;background:transparent;transition:background .2s ease}.radio-checked .radio-inner{background:var(--color-accent, #7c3aed)}.trailing-content{display:flex;align-items:center;gap:8px}.subtitle-flag{width:16px;height:16px;object-fit:cover;border-radius:2px}.subtitle{font-size:15px;color:var(--color-text-subtle, #6b7280);line-height:20px}.chevron-icon{color:var(--color-text-secondary, #737373)}.check-icon{color:var(--color-primary-base, #7c3aed)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item{--color-background-primary: transparent;--color-background-neutral-primary-hover: var(--color-background-neutral-secondary, #f5f5f5)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .list-item-inner:before{z-index:0!important}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-leading,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-main,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-trailing{position:relative;z-index:1}ds-mobile-action-list-item.destructive{--text-color-default-primary: var(--color-error-base, #ef4444)}.destructive-icon{color:var(--color-error-base, #ef4444)}.action-group-divider{height:1px;background:var(--color-border-subtle, #e5e5e5);margin:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsMobileActionListItemComponent, selector: "ds-mobile-action-list-item", inputs: ["title", "showDivider", "disabled"], outputs: ["itemClick"] }, { 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: 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper" }] });
2576
2584
  }
2577
2585
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileProfileActionsSheetComponent, decorators: [{
2578
2586
  type: Component,
@@ -2580,9 +2588,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2580
2588
  <ds-mobile-bottom-sheet-wrapper>
2581
2589
  <div class="profile-sheet-content" #sheetWrapper>
2582
2590
  <!-- View Container with CSS Animation -->
2583
- <div class="view-container" #viewContainer [class.show-language]="currentView() === 'language'" [style.height.px]="containerHeight()">
2591
+ <div class="view-container" #viewContainer
2592
+ [class.show-language]="currentView() === 'language'"
2593
+ [class.is-animating]="isAnimating()"
2594
+ [style.height.px]="isAnimating() ? containerHeight() : null">
2584
2595
  <!-- Main Actions View -->
2585
- <div class="view main-view">
2596
+ <div class="view main-view" [class.active]="currentView() === 'main'">
2586
2597
  <div class="actions-list">
2587
2598
  @for (group of actionGroups; track $index; let isLast = $last) {
2588
2599
  <!-- Action Group -->
@@ -2619,7 +2630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2619
2630
  </div>
2620
2631
 
2621
2632
  <!-- Language Selection View -->
2622
- <div class="view language-view">
2633
+ <div class="view language-view" [class.active]="currentView() === 'language'">
2623
2634
  <!-- Header with back and done buttons -->
2624
2635
  <ion-header>
2625
2636
  <ion-toolbar>
@@ -2653,7 +2664,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2653
2664
  </div>
2654
2665
  </div>
2655
2666
  </ds-mobile-bottom-sheet-wrapper>
2656
- `, styles: [":host{display:block;height:auto}.profile-sheet-content{overflow:hidden;width:100%}.view-container{display:grid;grid-template-columns:50% 50%;width:200%;transform:translate(0);transition:transform .3s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.4,0,.2,1),opacity .15s ease-in-out;overflow:hidden}.view-container.show-language{transform:translate(-50%)}.view{width:100%}.main-view{padding-top:16px}.actions-list{display:flex;flex-direction:column}.action-group{display:flex;flex-direction:column;padding:0 16px}.language-view{display:flex;flex-direction:column}ion-header{box-shadow:none}:host ::ng-deep .header-ios ion-toolbar:last-of-type{--border-width: 0 !important}ion-toolbar{--background: var(--color-background-neutral-primary, #ffffff);--border-width: 0 !important;--border-color: var(--color-border-default, #e5e7eb) !important;--padding-top: 12px;--padding-bottom: 8px;--min-height: 56px;border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-toolbar::part(native){border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:22px;letter-spacing:-.4px;color:var(--color-text-primary, #1a1a1a)}ion-buttons[slot=start] ds-button{--border-radius: 100px}ion-buttons[slot=start] ds-button::ng-deep button{border-radius:100px}ion-buttons[slot=end] ds-button{--border-radius: 100px}ion-buttons[slot=end] ds-button::ng-deep button{border-radius:100px}.language-list{padding:8px 16px}.language-flag{width:24px;height:24px;object-fit:cover}.radio-wrapper{display:flex;align-items:center;justify-content:center}.radio-indicator{width:20px;height:20px;border:2px solid var(--color-border-default, #d1d5db);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.radio-indicator.radio-checked{border-color:var(--color-accent, #7c3aed)}.radio-inner{width:10px;height:10px;border-radius:50%;background:transparent;transition:background .2s ease}.radio-checked .radio-inner{background:var(--color-accent, #7c3aed)}.trailing-content{display:flex;align-items:center;gap:8px}.subtitle-flag{width:16px;height:16px;object-fit:cover;border-radius:2px}.subtitle{font-size:15px;color:var(--color-text-subtle, #6b7280);line-height:20px}.chevron-icon{color:var(--color-text-secondary, #737373)}.check-icon{color:var(--color-primary-base, #7c3aed)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item{--color-background-primary: transparent;--color-background-neutral-primary-hover: var(--color-background-neutral-secondary, #f5f5f5)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .list-item-inner:before{z-index:0!important}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-leading,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-main,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-trailing{position:relative;z-index:1}ds-mobile-action-list-item.destructive{--text-color-default-primary: var(--color-error-base, #ef4444)}.destructive-icon{color:var(--color-error-base, #ef4444)}.action-group-divider{height:1px;background:var(--color-border-subtle, #e5e5e5);margin:8px 0}\n"] }]
2667
+ `, styles: [":host{display:block;height:auto}.profile-sheet-content{overflow:hidden;width:100%}.view-container{display:grid;grid-template-columns:50% 50%;width:200%;transform:translate(0);transition:transform .3s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.4,0,.2,1),opacity .15s ease-in-out;overflow:hidden}.view-container.show-language{transform:translate(-50%)}.view{width:100%}.view-container:not(.is-animating) .view:not(.active){height:0!important;overflow:hidden!important}.main-view{padding-top:16px}.actions-list{display:flex;flex-direction:column}.action-group{display:flex;flex-direction:column;padding:0 16px}.language-view{display:flex;flex-direction:column}ion-header{box-shadow:none}:host ::ng-deep .header-ios ion-toolbar:last-of-type{--border-width: 0 !important}ion-toolbar{--background: var(--color-background-neutral-primary, #ffffff);--border-width: 0 !important;--border-color: var(--color-border-default, #e5e7eb) !important;--padding-top: 12px;--padding-bottom: 8px;--min-height: 56px;border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-toolbar::part(native){border-bottom:1px solid var(--color-border-default, #e5e7eb)!important}ion-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:22px;letter-spacing:-.4px;color:var(--color-text-primary, #1a1a1a)}ion-buttons[slot=start] ds-button{--border-radius: 100px}ion-buttons[slot=start] ds-button::ng-deep button{border-radius:100px}ion-buttons[slot=end] ds-button{--border-radius: 100px}ion-buttons[slot=end] ds-button::ng-deep button{border-radius:100px}.language-list{padding:8px 16px}.language-flag{width:24px;height:24px;object-fit:cover}.radio-wrapper{display:flex;align-items:center;justify-content:center}.radio-indicator{width:20px;height:20px;border:2px solid var(--color-border-default, #d1d5db);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.radio-indicator.radio-checked{border-color:var(--color-accent, #7c3aed)}.radio-inner{width:10px;height:10px;border-radius:50%;background:transparent;transition:background .2s ease}.radio-checked .radio-inner{background:var(--color-accent, #7c3aed)}.trailing-content{display:flex;align-items:center;gap:8px}.subtitle-flag{width:16px;height:16px;object-fit:cover;border-radius:2px}.subtitle{font-size:15px;color:var(--color-text-subtle, #6b7280);line-height:20px}.chevron-icon{color:var(--color-text-secondary, #737373)}.check-icon{color:var(--color-primary-base, #7c3aed)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item{--color-background-primary: transparent;--color-background-neutral-primary-hover: var(--color-background-neutral-secondary, #f5f5f5)}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .list-item-inner:before{z-index:0!important}::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-leading,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-main,::ng-deep ds-mobile-action-list-item ds-mobile-list-item .content-trailing{position:relative;z-index:1}ds-mobile-action-list-item.destructive{--text-color-default-primary: var(--color-error-base, #ef4444)}.destructive-icon{color:var(--color-error-base, #ef4444)}.action-group-divider{height:1px;background:var(--color-border-subtle, #e5e5e5);margin:8px 0}\n"] }]
2657
2668
  }], ctorParameters: () => [{ type: i1.ModalController }, { type: i0.Injector }], propDecorators: { actionGroups: [{
2658
2669
  type: Input
2659
2670
  }], currentLanguage: [{
@@ -11799,21 +11810,14 @@ class MobileModalBase {
11799
11810
  * - Any custom CSS padding value
11800
11811
  *
11801
11812
  * @default '0'
11802
- *
11803
- * @example
11804
- * ```html
11805
- * <!-- Default: sections handle padding -->
11806
- * <ds-mobile-modal-base headerTitle="Details">
11807
- * <ds-mobile-section headline="Info">...</ds-mobile-section>
11808
- * </ds-mobile-modal-base>
11809
- *
11810
- * <!-- Legacy: content without sections -->
11811
- * <ds-mobile-modal-base headerTitle="Details" contentPadding="20px">
11812
- * <div>Padded content</div>
11813
- * </ds-mobile-modal-base>
11814
- * ```
11815
11813
  */
11816
11814
  contentPadding = input('0', ...(ngDevMode ? [{ debugName: "contentPadding" }] : []));
11815
+ /**
11816
+ * Enable auto-height behavior for bottom sheets
11817
+ * When true, sets [fullscreen]="false" on ion-content and enforces flex: 0 0 auto
11818
+ * @default false
11819
+ */
11820
+ isAutoHeight = input(false, ...(ngDevMode ? [{ debugName: "isAutoHeight" }] : []));
11817
11821
  /**
11818
11822
  * Emitted when modal is closed
11819
11823
  */
@@ -12059,14 +12063,14 @@ class MobileModalBase {
12059
12063
  });
12060
12064
  }
12061
12065
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12062
- 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 } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
12066
+ 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 });
12063
12067
  }
12064
12068
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, decorators: [{
12065
12069
  type: Directive
12066
12070
  }], propDecorators: { ionContent: [{
12067
12071
  type: ViewChild,
12068
12072
  args: [IonContent, { read: IonContent }]
12069
- }], 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 }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
12073
+ }], 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"] }] } });
12070
12074
 
12071
12075
  /**
12072
12076
  * DsMobileModalBaseComponent
@@ -12198,10 +12202,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12198
12202
  if (showHeaderValue === false)
12199
12203
  return false;
12200
12204
  // Auto-detect: show header if there's any header content
12201
- return !!(this.headerTitle() ||
12202
- this.headerMeta() ||
12203
- this.hasContentInSlot(this.headerLeading) ||
12204
- this.hasContentInSlot(this.headerMain));
12205
+ return !!(this.headerTitle() || this.headerMeta() || this.hasContentInSlot(this.headerLeading) || this.hasContentInSlot(this.headerMain));
12205
12206
  }
12206
12207
  /**
12207
12208
  * Check if a content child slot has actual content
@@ -12210,13 +12211,12 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12210
12211
  if (!slot)
12211
12212
  return false;
12212
12213
  const element = slot.nativeElement;
12213
- return element && (element.childNodes.length > 0 ||
12214
- element.textContent?.trim().length > 0);
12214
+ return element && (element.childNodes.length > 0 || element.textContent?.trim().length > 0);
12215
12215
  }
12216
12216
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileModalBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12217
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileModalBaseComponent, isStandalone: true, selector: "ds-mobile-modal-base", inputs: { showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--modal-content-padding": "contentPadding()" } }, queries: [{ propertyName: "customLoadingState", first: true, predicate: ["[loading-state]"], descendants: true, read: ElementRef }, { propertyName: "customErrorState", first: true, predicate: ["[error-state]"], descendants: true, read: ElementRef }, { propertyName: "headerLeading", first: true, predicate: ["[header-leading]"], descendants: true, read: ElementRef }, { propertyName: "headerMain", first: true, predicate: ["[header-main]"], descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], usesInheritance: true, ngImport: i0, template: `
12218
- <ion-content [fullscreen]="true" [scrollY]="true" class="modal-base-content">
12219
- <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()">
12217
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileModalBaseComponent, isStandalone: true, selector: "ds-mobile-modal-base", inputs: { showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--modal-content-padding": "contentPadding()", "class.is-auto-height": "isAutoHeight()" } }, queries: [{ propertyName: "customLoadingState", first: true, predicate: ["[loading-state]"], descendants: true, read: ElementRef }, { propertyName: "customErrorState", first: true, predicate: ["[error-state]"], descendants: true, read: ElementRef }, { propertyName: "headerLeading", first: true, predicate: ["[header-leading]"], descendants: true, read: ElementRef }, { propertyName: "headerMain", first: true, predicate: ["[header-main]"], descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], usesInheritance: true, ngImport: i0, template: `
12218
+ <ion-content [fullscreen]="!isAutoHeight()" [scrollY]="!isAutoHeight()" class="modal-base-content" [class.is-auto-height]="isAutoHeight()">
12219
+ <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
12220
12220
  <!-- Header (conditional) -->
12221
12221
  @if (shouldShowHeader()) {
12222
12222
  <div class="modal-header">
@@ -12225,7 +12225,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12225
12225
  <div class="header-leading">
12226
12226
  <ng-content select="[header-leading]"></ng-content>
12227
12227
  </div>
12228
-
12228
+
12229
12229
  <!-- Main (title + meta or custom) -->
12230
12230
  <div class="header-main">
12231
12231
  @if (headerTitle()) {
@@ -12236,30 +12236,16 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12236
12236
  }
12237
12237
  <ng-content select="[header-main]"></ng-content>
12238
12238
  </div>
12239
-
12239
+
12240
12240
  <!-- Close button (in header) -->
12241
- <ds-icon-button
12242
- icon="remixCloseLine"
12243
- variant="secondary"
12244
- size="lg"
12245
- (clicked)="close()"
12246
- class="close-button"
12247
- [attr.aria-label]="closeButtonLabel()"
12248
- />
12241
+ <ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button" [attr.aria-label]="closeButtonLabel()" />
12249
12242
  </div>
12250
12243
  </div>
12251
12244
  }
12252
-
12245
+
12253
12246
  <!-- Absolute close button (when header is hidden) -->
12254
12247
  @if (!shouldShowHeader()) {
12255
- <ds-icon-button
12256
- icon="remixCloseLine"
12257
- variant="secondary"
12258
- size="lg"
12259
- (clicked)="close()"
12260
- class="close-button-absolute"
12261
- [attr.aria-label]="closeButtonLabel()"
12262
- />
12248
+ <ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button-absolute" [attr.aria-label]="closeButtonLabel()" />
12263
12249
  }
12264
12250
 
12265
12251
  <!-- Content Container -->
@@ -12268,7 +12254,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12268
12254
  <div class="custom-loading-slot" [class.state-hidden]="!(loading() && hasCustomLoadingState)">
12269
12255
  <ng-content select="[loading-state]"></ng-content>
12270
12256
  </div>
12271
-
12257
+
12272
12258
  <!-- Default Loading State -->
12273
12259
  @if (loading() && !hasCustomLoadingState) {
12274
12260
  <div class="modal-loading-state">
@@ -12276,12 +12262,12 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12276
12262
  <p class="loading-text">Loading...</p>
12277
12263
  </div>
12278
12264
  }
12279
-
12265
+
12280
12266
  <!-- Custom Error State Slot - always present -->
12281
12267
  <div class="custom-error-slot" [class.state-hidden]="!(error() && !loading() && hasCustomErrorState)">
12282
12268
  <ng-content select="[error-state]"></ng-content>
12283
12269
  </div>
12284
-
12270
+
12285
12271
  <!-- Default Error State -->
12286
12272
  @if (error() && !loading() && !hasCustomErrorState) {
12287
12273
  <div class="modal-error-state">
@@ -12290,7 +12276,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12290
12276
  <p class="error-state-description">{{ error() }}</p>
12291
12277
  </div>
12292
12278
  }
12293
-
12279
+
12294
12280
  <!-- Main content - always rendered but hidden when loading/error -->
12295
12281
  <div class="modal-main-content" [class.content-hidden]="loading() || !!error()">
12296
12282
  <ng-content></ng-content>
@@ -12300,24 +12286,20 @@ class DsMobileModalBaseComponent extends MobileModalBase {
12300
12286
  </ion-content>
12301
12287
 
12302
12288
  <!-- Fixed Bottom Component / Footer (slides with keyboard) -->
12303
- <div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()">
12289
+ <div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()" [class.is-auto-height]="isAutoHeight()">
12304
12290
  <ng-content select="[fixed-bottom]"></ng-content>
12305
12291
  <ng-content select="[footer]"></ng-content>
12306
12292
  </div>
12307
- `, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.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-sm);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}.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:8px}.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"] }] });
12293
+ `, 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-sm);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)}.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"] }] });
12308
12294
  }
12309
12295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileModalBaseComponent, decorators: [{
12310
12296
  type: Component,
12311
- args: [{ selector: 'ds-mobile-modal-base', standalone: true, imports: [
12312
- CommonModule,
12313
- IonContent,
12314
- DsIconButtonComponent,
12315
- DsIconComponent
12316
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], host: {
12317
- '[style.--modal-content-padding]': 'contentPadding()'
12297
+ args: [{ selector: 'ds-mobile-modal-base', standalone: true, imports: [CommonModule, IonContent, DsIconButtonComponent, DsIconComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], host: {
12298
+ '[style.--modal-content-padding]': 'contentPadding()',
12299
+ '[class.is-auto-height]': 'isAutoHeight()',
12318
12300
  }, template: `
12319
- <ion-content [fullscreen]="true" [scrollY]="true" class="modal-base-content">
12320
- <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()">
12301
+ <ion-content [fullscreen]="!isAutoHeight()" [scrollY]="!isAutoHeight()" class="modal-base-content" [class.is-auto-height]="isAutoHeight()">
12302
+ <div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
12321
12303
  <!-- Header (conditional) -->
12322
12304
  @if (shouldShowHeader()) {
12323
12305
  <div class="modal-header">
@@ -12326,7 +12308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12326
12308
  <div class="header-leading">
12327
12309
  <ng-content select="[header-leading]"></ng-content>
12328
12310
  </div>
12329
-
12311
+
12330
12312
  <!-- Main (title + meta or custom) -->
12331
12313
  <div class="header-main">
12332
12314
  @if (headerTitle()) {
@@ -12337,30 +12319,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12337
12319
  }
12338
12320
  <ng-content select="[header-main]"></ng-content>
12339
12321
  </div>
12340
-
12322
+
12341
12323
  <!-- Close button (in header) -->
12342
- <ds-icon-button
12343
- icon="remixCloseLine"
12344
- variant="secondary"
12345
- size="lg"
12346
- (clicked)="close()"
12347
- class="close-button"
12348
- [attr.aria-label]="closeButtonLabel()"
12349
- />
12324
+ <ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button" [attr.aria-label]="closeButtonLabel()" />
12350
12325
  </div>
12351
12326
  </div>
12352
12327
  }
12353
-
12328
+
12354
12329
  <!-- Absolute close button (when header is hidden) -->
12355
12330
  @if (!shouldShowHeader()) {
12356
- <ds-icon-button
12357
- icon="remixCloseLine"
12358
- variant="secondary"
12359
- size="lg"
12360
- (clicked)="close()"
12361
- class="close-button-absolute"
12362
- [attr.aria-label]="closeButtonLabel()"
12363
- />
12331
+ <ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button-absolute" [attr.aria-label]="closeButtonLabel()" />
12364
12332
  }
12365
12333
 
12366
12334
  <!-- Content Container -->
@@ -12369,7 +12337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12369
12337
  <div class="custom-loading-slot" [class.state-hidden]="!(loading() && hasCustomLoadingState)">
12370
12338
  <ng-content select="[loading-state]"></ng-content>
12371
12339
  </div>
12372
-
12340
+
12373
12341
  <!-- Default Loading State -->
12374
12342
  @if (loading() && !hasCustomLoadingState) {
12375
12343
  <div class="modal-loading-state">
@@ -12377,12 +12345,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12377
12345
  <p class="loading-text">Loading...</p>
12378
12346
  </div>
12379
12347
  }
12380
-
12348
+
12381
12349
  <!-- Custom Error State Slot - always present -->
12382
12350
  <div class="custom-error-slot" [class.state-hidden]="!(error() && !loading() && hasCustomErrorState)">
12383
12351
  <ng-content select="[error-state]"></ng-content>
12384
12352
  </div>
12385
-
12353
+
12386
12354
  <!-- Default Error State -->
12387
12355
  @if (error() && !loading() && !hasCustomErrorState) {
12388
12356
  <div class="modal-error-state">
@@ -12391,7 +12359,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12391
12359
  <p class="error-state-description">{{ error() }}</p>
12392
12360
  </div>
12393
12361
  }
12394
-
12362
+
12395
12363
  <!-- Main content - always rendered but hidden when loading/error -->
12396
12364
  <div class="modal-main-content" [class.content-hidden]="loading() || !!error()">
12397
12365
  <ng-content></ng-content>
@@ -12401,11 +12369,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12401
12369
  </ion-content>
12402
12370
 
12403
12371
  <!-- Fixed Bottom Component / Footer (slides with keyboard) -->
12404
- <div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()">
12372
+ <div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()" [class.is-auto-height]="isAutoHeight()">
12405
12373
  <ng-content select="[fixed-bottom]"></ng-content>
12406
12374
  <ng-content select="[footer]"></ng-content>
12407
12375
  </div>
12408
- `, styles: [":host{display:block;position:relative;height:100%;width:100%}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.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-sm);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}.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:8px}.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"] }]
12376
+ `, 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-sm);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)}.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"] }]
12409
12377
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { ionContent: [{
12410
12378
  type: ViewChild,
12411
12379
  args: [IonContent, { read: IonContent }]
@@ -14901,6 +14869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
14901
14869
  * ```
14902
14870
  */
14903
14871
  class DsMobileNewInquiryModalComponent {
14872
+ modalController = inject(ModalController);
14904
14873
  titleInputRef;
14905
14874
  titleInput;
14906
14875
  fileInput;
@@ -14998,9 +14967,9 @@ class DsMobileNewInquiryModalComponent {
14998
14967
  id: `photo-${Date.now()}`,
14999
14968
  src: image.webPath,
15000
14969
  type: 'image',
15001
- name: `Photo ${this.attachments().length + 1}`
14970
+ name: `Photo ${this.attachments().length + 1}`,
15002
14971
  };
15003
- this.attachments.update(attachments => [...attachments, newAttachment]);
14972
+ this.attachments.update((attachments) => [...attachments, newAttachment]);
15004
14973
  }
15005
14974
  }
15006
14975
  catch (error) {
@@ -15012,7 +14981,7 @@ class DsMobileNewInquiryModalComponent {
15012
14981
  * Remove an attachment
15013
14982
  */
15014
14983
  removeAttachment(attachmentId) {
15015
- this.attachments.update(attachments => attachments.filter(a => a.id !== attachmentId));
14984
+ this.attachments.update((attachments) => attachments.filter((a) => a.id !== attachmentId));
15016
14985
  }
15017
14986
  /**
15018
14987
  * Handle attachment button click
@@ -15063,7 +15032,7 @@ class DsMobileNewInquiryModalComponent {
15063
15032
  const k = 1024;
15064
15033
  const sizes = ['B', 'KB', 'MB', 'GB'];
15065
15034
  const i = Math.floor(Math.log(bytes) / Math.log(k));
15066
- return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
15035
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
15067
15036
  }
15068
15037
  /**
15069
15038
  * Handle file selection from file input
@@ -15077,7 +15046,7 @@ class DsMobileNewInquiryModalComponent {
15077
15046
  // Process each selected file (up to the limit)
15078
15047
  const remainingSlots = 6 - this.attachments().length;
15079
15048
  const filesToProcess = Array.from(files).slice(0, remainingSlots);
15080
- filesToProcess.forEach(file => {
15049
+ filesToProcess.forEach((file) => {
15081
15050
  const fileType = this.detectFileType(file);
15082
15051
  // Create a data URL for preview
15083
15052
  const reader = new FileReader();
@@ -15089,9 +15058,9 @@ class DsMobileNewInquiryModalComponent {
15089
15058
  src: result,
15090
15059
  type: fileType,
15091
15060
  name: file.name,
15092
- size: this.formatFileSize(file.size)
15061
+ size: this.formatFileSize(file.size),
15093
15062
  };
15094
- this.attachments.update(attachments => [...attachments, newAttachment]);
15063
+ this.attachments.update((attachments) => [...attachments, newAttachment]);
15095
15064
  }
15096
15065
  };
15097
15066
  reader.readAsDataURL(file);
@@ -15111,13 +15080,14 @@ class DsMobileNewInquiryModalComponent {
15111
15080
  const inquiryData = {
15112
15081
  title: this.title.trim(),
15113
15082
  description: this.description.trim(),
15114
- attachments: this.attachments()
15083
+ attachments: this.attachments(),
15115
15084
  };
15116
15085
  console.log('[NewInquiryModal] Submitting inquiry:', inquiryData);
15117
15086
  if (this.onSubmit) {
15118
15087
  await this.onSubmit(inquiryData);
15119
15088
  }
15120
- // Success - modal will be closed by the service
15089
+ // Success - close the modal
15090
+ this.modalController.dismiss();
15121
15091
  }
15122
15092
  catch (error) {
15123
15093
  console.error('[NewInquiryModal] Error submitting inquiry:', error);
@@ -15135,8 +15105,9 @@ class DsMobileNewInquiryModalComponent {
15135
15105
  [showHeader]="false"
15136
15106
  [hasFixedBottom]="true"
15137
15107
  [enableKeyboardHandling]="true"
15138
- closeButtonLabel="Close">
15139
-
15108
+ [isAutoHeight]="true"
15109
+ closeButtonLabel="Close"
15110
+ >
15140
15111
  <!-- Form Content -->
15141
15112
  <ds-mobile-section>
15142
15113
  <!-- Title Field (Large Ghost Textarea) -->
@@ -15169,10 +15140,7 @@ class DsMobileNewInquiryModalComponent {
15169
15140
  <div class="attachment-previews-section">
15170
15141
  <div class="image-previews">
15171
15142
  @for (attachment of attachments(); track attachment.id) {
15172
- <ds-mobile-attachment-preview
15173
- [attachment]="attachment"
15174
- (remove)="removeAttachment($event)"
15175
- />
15143
+ <ds-mobile-attachment-preview [attachment]="attachment" (remove)="removeAttachment($event)" />
15176
15144
  }
15177
15145
  </div>
15178
15146
  </div>
@@ -15183,13 +15151,7 @@ class DsMobileNewInquiryModalComponent {
15183
15151
  <div class="submit-content">
15184
15152
  <!-- Upload Actions (Left) -->
15185
15153
  <div class="upload-actions">
15186
- <ds-icon-button
15187
- icon="remixImageLine"
15188
- variant="secondary"
15189
- size="md"
15190
- (clicked)="addPhoto()"
15191
- [disabled]="attachments().length >= 6"
15192
- aria-label="Add photo">
15154
+ <ds-icon-button icon="remixImageLine" variant="secondary" size="md" (clicked)="addPhoto()" [disabled]="attachments().length >= 6" aria-label="Add photo">
15193
15155
  </ds-icon-button>
15194
15156
  <ds-icon-button
15195
15157
  icon="remixAttachmentLine"
@@ -15197,34 +15159,21 @@ class DsMobileNewInquiryModalComponent {
15197
15159
  size="md"
15198
15160
  (clicked)="handleAddAttachment()"
15199
15161
  [disabled]="attachments().length >= 6"
15200
- aria-label="Add attachment">
15162
+ aria-label="Add attachment"
15163
+ >
15201
15164
  </ds-icon-button>
15202
-
15165
+
15203
15166
  <!-- Hidden file input for file selection -->
15204
- <input
15205
- #fileInput
15206
- type="file"
15207
- accept="*/*"
15208
- multiple
15209
- (change)="handleFileSelect($event)"
15210
- style="display: none;"
15211
- aria-hidden="true"
15212
- />
15167
+ <input #fileInput type="file" accept="*/*" multiple (change)="handleFileSelect($event)" style="display: none;" aria-hidden="true" />
15213
15168
  </div>
15214
15169
 
15215
15170
  <!-- Submit Button (Right) -->
15216
- <ds-button
15217
- variant="primary"
15218
- size="lg"
15219
- [disabled]="!isFormValid() || isSubmitting()"
15220
- (clicked)="handleSubmit()">
15221
- Submit
15222
- </ds-button>
15171
+ <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> Submit </ds-button>
15223
15172
  </div>
15224
15173
  </div>
15225
15174
  </div>
15226
15175
  </ds-mobile-modal-base>
15227
- `, 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;flex-wrap:wrap;gap:8px}.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:200px;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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.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"] }] });
15176
+ `, 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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.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"] }] });
15228
15177
  }
15229
15178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalComponent, decorators: [{
15230
15179
  type: Component,
@@ -15236,7 +15185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15236
15185
  DsIconButtonComponent,
15237
15186
  DsMobileModalBaseComponent,
15238
15187
  DsMobileAttachmentPreviewComponent,
15239
- DsMobileSectionComponent
15188
+ DsMobileSectionComponent,
15240
15189
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
15241
15190
  <ds-mobile-modal-base
15242
15191
  [loading]="loading"
@@ -15244,8 +15193,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15244
15193
  [showHeader]="false"
15245
15194
  [hasFixedBottom]="true"
15246
15195
  [enableKeyboardHandling]="true"
15247
- closeButtonLabel="Close">
15248
-
15196
+ [isAutoHeight]="true"
15197
+ closeButtonLabel="Close"
15198
+ >
15249
15199
  <!-- Form Content -->
15250
15200
  <ds-mobile-section>
15251
15201
  <!-- Title Field (Large Ghost Textarea) -->
@@ -15278,10 +15228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15278
15228
  <div class="attachment-previews-section">
15279
15229
  <div class="image-previews">
15280
15230
  @for (attachment of attachments(); track attachment.id) {
15281
- <ds-mobile-attachment-preview
15282
- [attachment]="attachment"
15283
- (remove)="removeAttachment($event)"
15284
- />
15231
+ <ds-mobile-attachment-preview [attachment]="attachment" (remove)="removeAttachment($event)" />
15285
15232
  }
15286
15233
  </div>
15287
15234
  </div>
@@ -15292,13 +15239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15292
15239
  <div class="submit-content">
15293
15240
  <!-- Upload Actions (Left) -->
15294
15241
  <div class="upload-actions">
15295
- <ds-icon-button
15296
- icon="remixImageLine"
15297
- variant="secondary"
15298
- size="md"
15299
- (clicked)="addPhoto()"
15300
- [disabled]="attachments().length >= 6"
15301
- aria-label="Add photo">
15242
+ <ds-icon-button icon="remixImageLine" variant="secondary" size="md" (clicked)="addPhoto()" [disabled]="attachments().length >= 6" aria-label="Add photo">
15302
15243
  </ds-icon-button>
15303
15244
  <ds-icon-button
15304
15245
  icon="remixAttachmentLine"
@@ -15306,34 +15247,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15306
15247
  size="md"
15307
15248
  (clicked)="handleAddAttachment()"
15308
15249
  [disabled]="attachments().length >= 6"
15309
- aria-label="Add attachment">
15250
+ aria-label="Add attachment"
15251
+ >
15310
15252
  </ds-icon-button>
15311
-
15253
+
15312
15254
  <!-- Hidden file input for file selection -->
15313
- <input
15314
- #fileInput
15315
- type="file"
15316
- accept="*/*"
15317
- multiple
15318
- (change)="handleFileSelect($event)"
15319
- style="display: none;"
15320
- aria-hidden="true"
15321
- />
15255
+ <input #fileInput type="file" accept="*/*" multiple (change)="handleFileSelect($event)" style="display: none;" aria-hidden="true" />
15322
15256
  </div>
15323
15257
 
15324
15258
  <!-- Submit Button (Right) -->
15325
- <ds-button
15326
- variant="primary"
15327
- size="lg"
15328
- [disabled]="!isFormValid() || isSubmitting()"
15329
- (clicked)="handleSubmit()">
15330
- Submit
15331
- </ds-button>
15259
+ <ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> Submit </ds-button>
15332
15260
  </div>
15333
15261
  </div>
15334
15262
  </div>
15335
15263
  </ds-mobile-modal-base>
15336
- `, 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;flex-wrap:wrap;gap:8px}.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:200px;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"] }]
15264
+ `, 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"] }]
15337
15265
  }], propDecorators: { titleInputRef: [{
15338
15266
  type: ViewChild,
15339
15267
  args: ['titleInput', { read: ElementRef }]
@@ -15367,16 +15295,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15367
15295
  *
15368
15296
  * @example
15369
15297
  * ```typescript
15370
- * constructor(private inquiryModal: DsMobileNewInquiryModalService) {}
15298
+ * constructor(private newInquiryModal: DsMobileNewInquiryModalService) {}
15371
15299
  *
15372
- * async createNewInquiry() {
15373
- * await this.inquiryModal.open({
15300
+ * async createNewInquiry(): Promise<void> {
15301
+ * console.log('[InquiriesPage] FAB clicked, opening modal...');
15302
+ *
15303
+ * await this.newInquiryModal.open({
15374
15304
  * onSubmit: async (data) => {
15375
15305
  * console.log('Creating inquiry:', data);
15376
15306
  * // Call your API to create the inquiry
15377
15307
  * await this.apiService.createInquiry(data);
15378
15308
  * // Close the modal
15379
- * await this.inquiryModal.close();
15309
+ * await this.newInquiryModal.close();
15380
15310
  * }
15381
15311
  * });
15382
15312
  * }
@@ -15400,10 +15330,14 @@ class DsMobileNewInquiryModalService extends BaseModalService {
15400
15330
  error: options?.error,
15401
15331
  }, {
15402
15332
  keyboardClose: false, // Don't close on keyboard hide for this modal
15333
+ cssClass: ['ds-modal-base', 'auto-height'],
15334
+ breakpoints: [0, 1],
15335
+ initialBreakpoint: 1,
15336
+ handle: false,
15403
15337
  });
15404
- // console.log('[NewInquiryModal] Modal created, presenting...');
15338
+ console.log('[NewInquiryModal] Modal created, presenting...');
15405
15339
  await modal.present();
15406
- // console.log('[NewInquiryModal] Modal presented');
15340
+ console.log('[NewInquiryModal] Modal presented');
15407
15341
  }
15408
15342
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalService, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable });
15409
15343
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalService, providedIn: 'root' });
@@ -16518,7 +16452,7 @@ class DsMobileFabComponent {
16518
16452
  /**
16519
16453
  * Emitted when the FAB is clicked
16520
16454
  */
16521
- fabClick = output();
16455
+ clicked = output();
16522
16456
  ngAfterViewInit() {
16523
16457
  // Only calculate position on mobile (not desktop)
16524
16458
  if (!this.platform.is('desktop')) {
@@ -16558,14 +16492,14 @@ class DsMobileFabComponent {
16558
16492
  */
16559
16493
  handleClick() {
16560
16494
  if (!this.disabled()) {
16561
- this.fabClick.emit();
16495
+ this.clicked.emit();
16562
16496
  }
16563
16497
  }
16564
16498
  ngOnDestroy() {
16565
16499
  this.resizeObserver?.disconnect();
16566
16500
  }
16567
16501
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16568
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileFabComponent, isStandalone: true, selector: "ds-mobile-fab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fabClick: "fabClick" }, host: { properties: { "class.fab-bottom-right": "position() === \"bottom-right\"", "class.fab-bottom-left": "position() === \"bottom-left\"", "class.fab-bottom-center": "position() === \"bottom-center\"" } }, ngImport: i0, template: `
16502
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileFabComponent, isStandalone: true, selector: "ds-mobile-fab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.fab-bottom-right": "position() === \"bottom-right\"", "class.fab-bottom-left": "position() === \"bottom-left\"", "class.fab-bottom-center": "position() === \"bottom-center\"" } }, ngImport: i0, template: `
16569
16503
  <div class="fab-container">
16570
16504
  <ds-icon-button
16571
16505
  [icon]="icon()"
@@ -16573,7 +16507,7 @@ class DsMobileFabComponent {
16573
16507
  [size]="size()"
16574
16508
  [ariaLabel]="ariaLabel()"
16575
16509
  [disabled]="disabled()"
16576
- (click)="handleClick()"
16510
+ (clicked)="handleClick()"
16577
16511
  class="fab-button">
16578
16512
  </ds-icon-button>
16579
16513
  </div>
@@ -16593,12 +16527,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
16593
16527
  [size]="size()"
16594
16528
  [ariaLabel]="ariaLabel()"
16595
16529
  [disabled]="disabled()"
16596
- (click)="handleClick()"
16530
+ (clicked)="handleClick()"
16597
16531
  class="fab-button">
16598
16532
  </ds-icon-button>
16599
16533
  </div>
16600
16534
  `, styles: [":host{display:block;position:fixed;z-index:1000;pointer-events:none}.fab-container{position:relative;pointer-events:none;animation:fabEnter .3s cubic-bezier(.4,0,.2,1) forwards}@keyframes fabEnter{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}:host(.fab-bottom-right){bottom:var(--fab-calculated-bottom, 84px);right:20px}:host(.fab-bottom-left){bottom:var(--fab-calculated-bottom, 84px);left:20px}:host(.fab-bottom-center){bottom:var(--fab-calculated-bottom, 84px);left:50%;transform:translate(-50%)}@supports (padding-right: env(safe-area-inset-right)){:host(.fab-bottom-right){right:calc(20px + env(safe-area-inset-right))}}@supports (padding-left: env(safe-area-inset-left)){:host(.fab-bottom-left){left:calc(20px + env(safe-area-inset-left))}}@media (min-width: 768px){:host-context(.plt-desktop).fab-bottom-right{bottom:40px;right:40px}:host-context(.plt-desktop).fab-bottom-left{bottom:40px;left:40px}:host-context(.plt-desktop).fab-bottom-center{bottom:40px}@supports (padding-right: env(safe-area-inset-right)){:host-context(.plt-desktop).fab-bottom-right{right:calc(40px + env(safe-area-inset-right))}}@supports (padding-left: env(safe-area-inset-left)){:host-context(.plt-desktop).fab-bottom-left{left:calc(40px + env(safe-area-inset-left))}}}.fab-button{pointer-events:auto;display:block}.fab-button::ng-deep button{width:56px!important;height:56px!important;min-width:56px!important;min-height:56px!important;border-radius:50%!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important;background:var(--color-accent)!important;color:var(--color-on-accent)!important;border:none!important;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;transition:all .2s cubic-bezier(.4,0,.2,1)}.fab-button::ng-deep button:hover:not(:disabled){background:var(--color-accent-hover)!important;box-shadow:0 5px 7px -2px #0003,0 8px 14px #00000024,0 2px 22px #0000001f;transform:scale(1.05)}.fab-button::ng-deep button:active:not(:disabled){background:var(--color-accent-active)!important;box-shadow:0 2px 4px -1px #0003,0 4px 8px #00000024,0 1px 14px #0000001f;transform:scale(.95)}.fab-button::ng-deep button:disabled{opacity:.5;cursor:not-allowed;box-shadow:0 2px 4px -1px #0000001a,0 4px 8px #00000014,0 1px 14px #0000000f}.fab-button::ng-deep button .btn__icon,.fab-button::ng-deep button .btn__icon svg{color:var(--color-on-accent)!important;fill:var(--color-on-accent)!important}.fab-button::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.fab-button::ng-deep button .btn__icon svg{width:24px!important;height:24px!important}\n"] }]
16601
- }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], fabClick: [{ type: i0.Output, args: ["fabClick"] }] } });
16535
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
16602
16536
 
16603
16537
  /**
16604
16538
  * DsMobileOfflineBannerComponent
@@ -18987,7 +18921,7 @@ class MobileInquiriesPageComponent {
18987
18921
  }, 1000);
18988
18922
  }
18989
18923
  async createNewInquiry() {
18990
- console.log('Opening new inquiry modal...');
18924
+ console.log('[InquiriesPage] FAB clicked, opening modal...');
18991
18925
  await this.newInquiryModal.open({
18992
18926
  onSubmit: async (data) => {
18993
18927
  console.log('New inquiry submitted:', data);
@@ -19076,9 +19010,9 @@ class MobileInquiriesPageComponent {
19076
19010
  icon="remixAddLine"
19077
19011
  position="bottom-right"
19078
19012
  ariaLabel="Create new inquiry"
19079
- (fabClick)="createNewInquiry()">
19013
+ (clicked)="createNewInquiry()">
19080
19014
  </ds-mobile-fab>
19081
- `, 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"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "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: ["fabClick"] }] });
19015
+ `, 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"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "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"] }] });
19082
19016
  }
19083
19017
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, decorators: [{
19084
19018
  type: Component,
@@ -19159,7 +19093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
19159
19093
  icon="remixAddLine"
19160
19094
  position="bottom-right"
19161
19095
  ariaLabel="Create new inquiry"
19162
- (fabClick)="createNewInquiry()">
19096
+ (clicked)="createNewInquiry()">
19163
19097
  </ds-mobile-fab>
19164
19098
  `, 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"] }]
19165
19099
  }], ctorParameters: () => [{ type: UserService }, { type: i1.NavController }, { type: DsMobileNewInquiryModalService }], propDecorators: { pageComponent: [{