@propbinder/mobile-design 0.2.26 → 0.2.27

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.
package/index.d.ts CHANGED
@@ -5375,6 +5375,18 @@ declare class DsMobileNewInquiryModalComponent implements OnInit, AfterViewInit
5375
5375
  * Callback function when form is submitted
5376
5376
  */
5377
5377
  onSubmit?: (data: NewInquiryData) => void | Promise<void>;
5378
+ /**
5379
+ * Placeholder for the title field
5380
+ */
5381
+ titlePlaceholder: string;
5382
+ /**
5383
+ * Placeholder for the description field
5384
+ */
5385
+ descriptionPlaceholder: string;
5386
+ /**
5387
+ * Label for the submit button
5388
+ */
5389
+ submitButtonLabel: string;
5378
5390
  /**
5379
5391
  * Form title field
5380
5392
  */
@@ -5438,7 +5450,7 @@ declare class DsMobileNewInquiryModalComponent implements OnInit, AfterViewInit
5438
5450
  */
5439
5451
  handleSubmit(): Promise<void>;
5440
5452
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileNewInquiryModalComponent, never>;
5441
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileNewInquiryModalComponent, "ds-mobile-new-inquiry-modal", never, { "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; "onSubmit": { "alias": "onSubmit"; "required": false; }; }, {}, never, never, true, never>;
5453
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileNewInquiryModalComponent, "ds-mobile-new-inquiry-modal", never, { "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; "onSubmit": { "alias": "onSubmit"; "required": false; }; "titlePlaceholder": { "alias": "titlePlaceholder"; "required": false; }; "descriptionPlaceholder": { "alias": "descriptionPlaceholder"; "required": false; }; "submitButtonLabel": { "alias": "submitButtonLabel"; "required": false; }; }, {}, never, never, true, never>;
5442
5454
  }
5443
5455
 
5444
5456
  /**
@@ -5451,6 +5463,12 @@ interface NewInquiryModalOptions {
5451
5463
  loading?: boolean;
5452
5464
  /** Initial error message */
5453
5465
  error?: string;
5466
+ /** Custom placeholder for title field */
5467
+ titlePlaceholder?: string;
5468
+ /** Custom placeholder for description field */
5469
+ descriptionPlaceholder?: string;
5470
+ /** Custom label for submit button */
5471
+ submitButtonLabel?: string;
5454
5472
  }
5455
5473
  /**
5456
5474
  * DsMobileNewInquiryModalService
@@ -5913,7 +5931,7 @@ declare class DsTextInputComponent implements ControlValueAccessor {
5913
5931
  hasError: _angular_core.InputSignal<boolean>;
5914
5932
  errorMessage: _angular_core.InputSignal<string>;
5915
5933
  autocomplete: _angular_core.InputSignal<string>;
5916
- inputmode: _angular_core.InputSignal<"search" | "text" | "url" | "numeric" | "email" | "tel" | undefined>;
5934
+ inputmode: _angular_core.InputSignal<"search" | "text" | "numeric" | "url" | "email" | "tel" | undefined>;
5917
5935
  autoClearError: _angular_core.InputSignal<boolean>;
5918
5936
  validator: _angular_core.InputSignal<((value: string) => boolean) | null>;
5919
5937
  valueChange: _angular_core.OutputEmitterRef<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@propbinder/mobile-design",
3
- "version": "0.2.26",
3
+ "version": "0.2.27",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0 || ^21.0.0",
6
6
  "@angular/core": "^20.3.0 || ^21.0.0"
package/styles/ionic.css CHANGED
@@ -598,24 +598,29 @@ ion-tab-button::part(native) {
598
598
  Base Modal Styles (Shared across all modals)
599
599
  ============================================ */
600
600
 
601
- .ds-modal-base {
601
+ ion-modal.ds-modal-base {
602
602
  --background: var(--color-background-neutral-primary, #ffffff);
603
603
  --width: 100%;
604
604
  --max-width: 640px;
605
- --height: 100dvh; /* Full viewport height - content top offset creates gap */
605
+ /* Subtract top offset from total height to avoid bottom clipping */
606
+ --height: calc(100dvh - var(--app-sheet-top-offset, 24px)) !important;
607
+ --max-height: calc(100dvh - var(--app-sheet-top-offset, 24px)) !important;
606
608
  --border-radius: 16px 16px 0 0;
609
+ display: flex !important;
610
+ align-items: flex-end !important;
607
611
  }
608
612
 
609
- .ds-modal-base::part(content) {
613
+ ion-modal.ds-modal-base::part(content) {
610
614
  border-radius: 16px 16px 0 0;
611
615
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
612
616
  background: var(--color-background-neutral-primary, #ffffff);
613
617
  max-width: 640px;
614
618
  margin: 0 auto;
615
- /* Use top positioning instead of margin-top to work with fixed positioning */
616
- top: var(--app-sheet-top-offset) !important;
617
- height: calc(100% - var(--app-sheet-top-offset)) !important;
618
- max-height: calc(100vh - var(--app-sheet-top-offset)) !important;
619
+ /* Reset Ionic's default top offset and stick to bottom */
620
+ top: auto !important;
621
+ bottom: 0 !important;
622
+ height: 100% !important;
623
+ position: relative !important;
619
624
  }
620
625
 
621
626
  /* Auto-height support for base modals */
@@ -630,6 +635,8 @@ ion-tab-button::part(native) {
630
635
  margin-top: auto !important;
631
636
  position: relative !important;
632
637
  top: auto !important;
638
+ max-height: calc(100dvh - var(--app-sheet-top-offset, 24px)) !important;
639
+ bottom: 0 !important;
633
640
  }
634
641
 
635
642
  .ds-modal-base.auto-height ion-content {