@propbinder/mobile-design 0.2.22 → 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.
package/index.d.ts CHANGED
@@ -2387,7 +2387,7 @@ declare class DsMobileListItemComponent {
2387
2387
  * - 'center' - Align to center
2388
2388
  * - 'bottom' - Align to bottom
2389
2389
  */
2390
- align: _angular_core.InputSignal<"center" | "top" | "bottom">;
2390
+ align: _angular_core.InputSignal<"top" | "center" | "bottom">;
2391
2391
  /**
2392
2392
  * Whether the list item is interactive (clickable and long-pressable)
2393
2393
  * When true, adds interactive background, cursor pointer, and touch handlers
@@ -4144,21 +4144,14 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
4144
4144
  * - Any custom CSS padding value
4145
4145
  *
4146
4146
  * @default '0'
4147
- *
4148
- * @example
4149
- * ```html
4150
- * <!-- Default: sections handle padding -->
4151
- * <ds-mobile-modal-base headerTitle="Details">
4152
- * <ds-mobile-section headline="Info">...</ds-mobile-section>
4153
- * </ds-mobile-modal-base>
4154
- *
4155
- * <!-- Legacy: content without sections -->
4156
- * <ds-mobile-modal-base headerTitle="Details" contentPadding="20px">
4157
- * <div>Padded content</div>
4158
- * </ds-mobile-modal-base>
4159
- * ```
4160
4147
  */
4161
4148
  contentPadding: _angular_core.InputSignal<string>;
4149
+ /**
4150
+ * Enable auto-height behavior for bottom sheets
4151
+ * When true, sets [fullscreen]="false" on ion-content and enforces flex: 0 0 auto
4152
+ * @default false
4153
+ */
4154
+ isAutoHeight: _angular_core.InputSignal<boolean>;
4162
4155
  /**
4163
4156
  * Emitted when modal is closed
4164
4157
  */
@@ -4200,7 +4193,7 @@ declare abstract class MobileModalBase implements OnInit, OnDestroy {
4200
4193
  */
4201
4194
  protected cleanupKeyboardListeners(): void;
4202
4195
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileModalBase, never>;
4203
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MobileModalBase, never, never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerMeta": { "alias": "headerMeta"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "enableKeyboardHandling": { "alias": "enableKeyboardHandling"; "required": false; "isSignal": true; }; "hasFixedBottom": { "alias": "hasFixedBottom"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "keyboardWillShow": "keyboardWillShow"; "keyboardWillHide": "keyboardWillHide"; }, never, never, true, never>;
4196
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MobileModalBase, never, never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "headerTitle": { "alias": "headerTitle"; "required": false; "isSignal": true; }; "headerMeta": { "alias": "headerMeta"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "enableKeyboardHandling": { "alias": "enableKeyboardHandling"; "required": false; "isSignal": true; }; "hasFixedBottom": { "alias": "hasFixedBottom"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; "isAutoHeight": { "alias": "isAutoHeight"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "keyboardWillShow": "keyboardWillShow"; "keyboardWillHide": "keyboardWillHide"; }, never, never, true, never>;
4204
4197
  }
4205
4198
 
4206
4199
  /**
@@ -4748,7 +4741,7 @@ declare class DsMobileCardInlineComponent {
4748
4741
  * - 'default' - Column layout with standard padding (gap: 12px, padding: 10px 12px)
4749
4742
  * - 'compact' - Row layout with reduced padding (gap: 8px, padding: 10px)
4750
4743
  */
4751
- variant: _angular_core.InputSignal<"default" | "compact">;
4744
+ variant: _angular_core.InputSignal<"compact" | "default">;
4752
4745
  /**
4753
4746
  * Whether the card is disabled
4754
4747
  * Disables all interactions and reduces opacity
@@ -4811,7 +4804,7 @@ declare class DsMobileCardInlineBannerComponent {
4811
4804
  * - 'default' - Standard padding and column layout
4812
4805
  * - 'compact' - Reduced padding and row layout
4813
4806
  */
4814
- layout: _angular_core.InputSignal<"default" | "compact">;
4807
+ layout: _angular_core.InputSignal<"compact" | "default">;
4815
4808
  /**
4816
4809
  * Emits when the banner is clicked
4817
4810
  */
@@ -4862,7 +4855,7 @@ declare class DsMobileCardInlineContactComponent {
4862
4855
  * - 'default' - Standard padding and column layout
4863
4856
  * - 'compact' - Reduced padding and row layout
4864
4857
  */
4865
- layout: _angular_core.InputSignal<"default" | "compact">;
4858
+ layout: _angular_core.InputSignal<"compact" | "default">;
4866
4859
  /**
4867
4860
  * Whether the contact item is clickable
4868
4861
  */
@@ -4919,7 +4912,7 @@ declare class DsMobileCardInlineFileComponent {
4919
4912
  * - 'default' - Standard padding and column layout
4920
4913
  * - 'compact' - Reduced padding and row layout
4921
4914
  */
4922
- layout: _angular_core.InputSignal<"default" | "compact">;
4915
+ layout: _angular_core.InputSignal<"compact" | "default">;
4923
4916
  /**
4924
4917
  * Optional URL to open when clicked
4925
4918
  * If provided, clicking the card will open this URL in a new tab
@@ -5360,6 +5353,7 @@ interface NewInquiryData {
5360
5353
  * ```
5361
5354
  */
5362
5355
  declare class DsMobileNewInquiryModalComponent implements OnInit, AfterViewInit {
5356
+ private modalController;
5363
5357
  titleInputRef?: ElementRef<HTMLElement>;
5364
5358
  titleInput?: DsTextareaComponent;
5365
5359
  fileInput?: ElementRef<HTMLInputElement>;
@@ -5468,16 +5462,18 @@ interface NewInquiryModalOptions {
5468
5462
  *
5469
5463
  * @example
5470
5464
  * ```typescript
5471
- * constructor(private inquiryModal: DsMobileNewInquiryModalService) {}
5465
+ * constructor(private newInquiryModal: DsMobileNewInquiryModalService) {}
5466
+ *
5467
+ * async createNewInquiry(): Promise<void> {
5468
+ * console.log('[InquiriesPage] FAB clicked, opening modal...');
5472
5469
  *
5473
- * async createNewInquiry() {
5474
- * await this.inquiryModal.open({
5470
+ * await this.newInquiryModal.open({
5475
5471
  * onSubmit: async (data) => {
5476
5472
  * console.log('Creating inquiry:', data);
5477
5473
  * // Call your API to create the inquiry
5478
5474
  * await this.apiService.createInquiry(data);
5479
5475
  * // Close the modal
5480
- * await this.inquiryModal.close();
5476
+ * await this.newInquiryModal.close();
5481
5477
  * }
5482
5478
  * });
5483
5479
  * }
@@ -5996,7 +5992,7 @@ declare class DsMobileFabComponent implements AfterViewInit, OnDestroy {
5996
5992
  /**
5997
5993
  * Emitted when the FAB is clicked
5998
5994
  */
5999
- fabClick: _angular_core.OutputEmitterRef<void>;
5995
+ clicked: _angular_core.OutputEmitterRef<void>;
6000
5996
  ngAfterViewInit(): void;
6001
5997
  /**
6002
5998
  * Calculate the FAB position dynamically based on actual tab bar height
@@ -6013,7 +6009,7 @@ declare class DsMobileFabComponent implements AfterViewInit, OnDestroy {
6013
6009
  handleClick(): void;
6014
6010
  ngOnDestroy(): void;
6015
6011
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileFabComponent, never>;
6016
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFabComponent, "ds-mobile-fab", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "fabClick": "fabClick"; }, never, never, true, never>;
6012
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileFabComponent, "ds-mobile-fab", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
6017
6013
  }
6018
6014
 
6019
6015
  type AppIconSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -6506,7 +6502,7 @@ declare class MobileInquiriesPageComponent {
6506
6502
  private newInquiryModal;
6507
6503
  pageComponent: DsMobilePageMainComponent;
6508
6504
  constructor(userService: UserService, navCtrl: NavController, newInquiryModal: DsMobileNewInquiryModalService);
6509
- filterStatus: _angular_core.WritableSignal<"open" | "closed" | "all">;
6505
+ filterStatus: _angular_core.WritableSignal<"all" | "open" | "closed">;
6510
6506
  tabItems: InlineTabItem[];
6511
6507
  inquiries: _angular_core.WritableSignal<Inquiry[]>;
6512
6508
  filteredInquiries: _angular_core.Signal<Inquiry[]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@propbinder/mobile-design",
3
- "version": "0.2.22",
3
+ "version": "0.2.23",
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
@@ -618,6 +618,24 @@ ion-tab-button::part(native) {
618
618
  max-height: calc(100vh - var(--app-sheet-top-offset)) !important;
619
619
  }
620
620
 
621
+ /* Auto-height support for base modals */
622
+ .ds-modal-base.auto-height {
623
+ display: flex;
624
+ flex-direction: column;
625
+ justify-content: flex-end;
626
+ }
627
+
628
+ .ds-modal-base.auto-height::part(content) {
629
+ height: auto !important;
630
+ margin-top: auto !important;
631
+ position: relative !important;
632
+ top: auto !important;
633
+ }
634
+
635
+ .ds-modal-base.auto-height ion-content {
636
+ height: auto !important;
637
+ --height: auto;
638
+ }
621
639
  .ds-modal-base::part(backdrop) {
622
640
  background: rgba(0, 0, 0, 0.4);
623
641
  backdrop-filter: blur(4px);