@propbinder/mobile-design 0.0.28 → 0.1.0

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
@@ -3,7 +3,6 @@ import { AfterViewInit, ElementRef, OnDestroy, EventEmitter, OnInit, Application
3
3
  import { IonContent, NavController, ModalController, GestureController } from '@ionic/angular/standalone';
4
4
  import { ImpactStyle } from '@capacitor/haptics';
5
5
  import { Router, ActivatedRoute } from '@angular/router';
6
- import { BreakpointObserver } from '@angular/cdk/layout';
7
6
  import { Animation } from '@ionic/angular';
8
7
 
9
8
  /**
@@ -444,7 +443,7 @@ declare class DsMobilePostCardComponent {
444
443
  * - 'detail' - Full detail view
445
444
  * - 'compact' - Compact display for nested/related posts
446
445
  */
447
- variant: _angular_core.InputSignal<"feed" | "detail" | "compact">;
446
+ variant: _angular_core.InputSignal<"compact" | "feed" | "detail">;
448
447
  /**
449
448
  * Whether the post card is clickable
450
449
  */
@@ -944,7 +943,7 @@ declare class DsMobileListItemComponent {
944
943
  * - 'detail' - Full detail view
945
944
  * - 'compact' - Compact display for nested/related items
946
945
  */
947
- variant: _angular_core.InputSignal<"feed" | "detail" | "compact">;
946
+ variant: _angular_core.InputSignal<"compact" | "feed" | "detail">;
948
947
  /**
949
948
  * Whether the list item is interactive (clickable and long-pressable)
950
949
  * When true, adds interactive background, cursor pointer, and touch handlers
@@ -1046,57 +1045,6 @@ declare class DsMobileListItemComponent {
1046
1045
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileListItemComponent, "ds-mobile-list-item", never, { "leadingSize": { "alias": "leadingSize"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "enableLongPress": { "alias": "enableLongPress"; "required": false; "isSignal": true; }; "showDesktopMoreButton": { "alias": "showDesktopMoreButton"; "required": false; "isSignal": true; }; "interactiveOffset": { "alias": "interactiveOffset"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "showDivider": { "alias": "showDivider"; "required": false; "isSignal": true; }; "dividerSpacing": { "alias": "dividerSpacing"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "moreButtonClick": "moreButtonClick"; }, never, ["[content-leading]", "[content-main]", "*", "[content-trailing]"], true, [{ directive: typeof DsMobileLongPressDirective; inputs: {}; outputs: { "longPress": "longPress"; }; }]>;
1047
1046
  }
1048
1047
 
1049
- /**
1050
- * DsMobileListItemStaticComponent
1051
- *
1052
- * A read-only version of the interactive list item component.
1053
- * Used for displaying static information without interaction.
1054
- *
1055
- * This component has the same structure as the interactive list item but without:
1056
- * - Padding
1057
- * - Rounded corners
1058
- * - Hover states
1059
- * - Click interactions
1060
- * - Background fill (transparent)
1061
- *
1062
- * @example
1063
- * ```html
1064
- * <ds-mobile-list-item-static
1065
- * [leadingSize]="'40px'">
1066
- *
1067
- * <div content-leading>
1068
- * <ds-avatar initials="JD" />
1069
- * </div>
1070
- *
1071
- * <div content-main>
1072
- * <h3>Main Content</h3>
1073
- * <p>Supporting text goes here...</p>
1074
- * </div>
1075
- *
1076
- * <div content-trailing>
1077
- * <span>Info</span>
1078
- * </div>
1079
- * </ds-mobile-list-item-static>
1080
- * ```
1081
- */
1082
- declare class DsMobileListItemStaticComponent {
1083
- /**
1084
- * CSS size value for the leading content area (e.g., '32px', '40px', '48px')
1085
- * Defaults to '32px' for standard list item avatars
1086
- */
1087
- leadingSize: _angular_core.InputSignal<string>;
1088
- /**
1089
- * Check if leading content slot has content
1090
- */
1091
- hasLeadingContent: _angular_core.Signal<boolean>;
1092
- /**
1093
- * Check if trailing content slot has content
1094
- */
1095
- hasTrailingContent: _angular_core.Signal<boolean>;
1096
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileListItemStaticComponent, never>;
1097
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileListItemStaticComponent, "ds-mobile-list-item-static", never, { "leadingSize": { "alias": "leadingSize"; "required": false; "isSignal": true; }; }, {}, never, ["[content-leading]", "[content-main]", "*", "[content-trailing]"], true, never>;
1098
- }
1099
-
1100
1048
  /**
1101
1049
  * DsMobileInteractiveListItemPostComponent
1102
1050
  *
@@ -1165,7 +1113,7 @@ declare class DsMobileInteractiveListItemPostComponent {
1165
1113
  * - 'detail' - Full detail view
1166
1114
  * - 'compact' - Compact display for nested/related posts
1167
1115
  */
1168
- variant: _angular_core.InputSignal<"feed" | "detail" | "compact">;
1116
+ variant: _angular_core.InputSignal<"compact" | "feed" | "detail">;
1169
1117
  /**
1170
1118
  * Whether the post card is clickable
1171
1119
  */
@@ -1270,7 +1218,7 @@ declare class DsMobileInteractiveListItemInquiryComponent {
1270
1218
  * - 'detail' - Full detail view
1271
1219
  * - 'compact' - Compact display
1272
1220
  */
1273
- variant: _angular_core.InputSignal<"feed" | "detail" | "compact">;
1221
+ variant: _angular_core.InputSignal<"compact" | "feed" | "detail">;
1274
1222
  /**
1275
1223
  * Whether the inquiry item is clickable
1276
1224
  */
@@ -1419,81 +1367,63 @@ declare class DsMobileContactListItemComponent {
1419
1367
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileContactListItemComponent, "ds-mobile-contact-list-item", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "initials": { "alias": "initials"; "required": true; "isSignal": true; }; "contactPerson": { "alias": "contactPerson"; "required": false; "isSignal": true; }; "phoneNumber": { "alias": "phoneNumber"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; }, { "contactClick": "contactClick"; }, never, never, true, never>;
1420
1368
  }
1421
1369
 
1422
- interface TabConfig$2 {
1370
+ interface TabConfig$1 {
1423
1371
  id: string;
1424
1372
  label: string;
1425
1373
  route: string;
1426
1374
  icon: string;
1427
1375
  iconActive: string;
1428
1376
  }
1429
- type HeaderVariant = 'home' | 'simple' | 'back' | 'none';
1430
1377
  /**
1431
- * DsMobileAppLayoutComponent
1378
+ * DsMobileTabBarComponent
1432
1379
  *
1433
- * A complete mobile application shell component based on actual mobile page patterns.
1434
- * Provides tab navigation, flexible headers, and mobile-optimized layout.
1380
+ * Responsive navigation tab bar that adapts from mobile to desktop:
1381
+ * - Mobile (< 768px): Bottom tab bar with icons + labels
1382
+ * - Desktop (≥ 768px): Top navigation bar with logo, tabs, and avatar
1435
1383
  *
1436
- * Features:
1437
- * - Tab bar navigation with active state
1438
- * - Multiple header variants (home with logomark, simple title, back button)
1439
- * - Pull-to-refresh support
1440
- * - Purple brand background with content wrapper
1441
- * - iOS safe area support
1384
+ * Use this component INSIDE your own `ion-tabs` when Angular routing
1385
+ * requires `ion-tabs` to be a direct child in your component.
1442
1386
  *
1443
1387
  * @example
1444
1388
  * ```html
1445
- * <ds-mobile-app-layout
1446
- * [showTabBar]="true"
1447
- * [tabs]="tabsConfig"
1448
- * [headerVariant]="'home'"
1449
- * [avatarInitials]="'JD'"
1450
- * />
1389
+ * <!-- In your component with child routes -->
1390
+ * <ion-tabs>
1391
+ * <ds-mobile-tab-bar
1392
+ * [tabs]="tabs"
1393
+ * [avatarInitials]="'JD'"
1394
+ * (avatarClick)="handleAvatarClick()"
1395
+ * />
1396
+ * </ion-tabs>
1451
1397
  * ```
1452
1398
  */
1453
- declare class DsMobileAppLayoutComponent implements AfterViewInit {
1454
- private router;
1399
+ declare class DsMobileTabBarComponent implements OnInit, AfterViewInit, OnDestroy {
1455
1400
  private elementRef;
1456
- private breakpointObserver;
1457
- ionContent: IonContent;
1458
- private platform;
1459
- isNativePlatform: _angular_core.Signal<boolean>;
1460
- headerVariant: _angular_core.InputSignal<HeaderVariant>;
1461
- pageTitle: _angular_core.InputSignal<string>;
1462
- showBackButton: _angular_core.InputSignal<boolean>;
1463
- showPullToRefresh: _angular_core.InputSignal<boolean>;
1464
- showTabBar: _angular_core.InputSignal<boolean>;
1465
- tabs: _angular_core.InputSignal<TabConfig$2[]>;
1466
- avatarType: _angular_core.InputSignal<"initials" | "photo" | "icon">;
1467
- avatarInitials: _angular_core.InputSignal<string>;
1468
- avatarSrc: _angular_core.InputSignal<string>;
1469
- avatarIconName: _angular_core.InputSignal<string>;
1470
- backClick: _angular_core.OutputEmitterRef<void>;
1471
- refresh: _angular_core.OutputEmitterRef<any>;
1472
- avatarClick: _angular_core.OutputEmitterRef<void>;
1473
- scroll: _angular_core.OutputEmitterRef<any>;
1474
- private scrollY;
1401
+ tabs: TabConfig$1[];
1402
+ avatarType: 'initials' | 'photo' | 'icon';
1403
+ avatarInitials: string;
1404
+ avatarSrc: string;
1405
+ avatarIconName: string;
1406
+ avatarClick: EventEmitter<void>;
1475
1407
  activeTab: _angular_core.WritableSignal<string>;
1476
1408
  isDesktop: _angular_core.WritableSignal<boolean>;
1477
- constructor(router: Router, elementRef: ElementRef, breakpointObserver: BreakpointObserver);
1409
+ private mutationObserver?;
1410
+ private resizeObserver?;
1411
+ private mediaQuery?;
1412
+ constructor(elementRef: ElementRef);
1413
+ ngOnInit(): void;
1478
1414
  ngAfterViewInit(): void;
1479
- handleScroll(event: any): void;
1480
- handleRefresh(event: any): Promise<void>;
1481
- handleBackClick(): void;
1482
- handleAvatarClick(): void;
1483
- navigateToTab(route: string): void;
1484
- private ensureScrollable;
1415
+ ngOnDestroy(): void;
1416
+ private setupBreakpointDetection;
1417
+ private handleBreakpointChange;
1418
+ private setupTitleRemovalObserver;
1419
+ private removeTitleAttributes;
1420
+ trackByTabId(index: number, tab: TabConfig$1): string;
1485
1421
  isTabActive(tabId: string): boolean;
1486
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileAppLayoutComponent, never>;
1487
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileAppLayoutComponent, "ds-mobile-app-layout", never, { "headerVariant": { "alias": "headerVariant"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "showPullToRefresh": { "alias": "showPullToRefresh"; "required": false; "isSignal": true; }; "showTabBar": { "alias": "showTabBar"; "required": false; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "avatarType": { "alias": "avatarType"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; "isSignal": true; }; }, { "backClick": "backClick"; "refresh": "refresh"; "avatarClick": "avatarClick"; "scroll": "scroll"; }, never, ["*"], true, never>;
1422
+ handleAvatarClick(): void;
1423
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileTabBarComponent, never>;
1424
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabBarComponent, "ds-mobile-tab-bar", never, { "tabs": { "alias": "tabs"; "required": false; }; "avatarType": { "alias": "avatarType"; "required": false; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; }; }, { "avatarClick": "avatarClick"; }, never, never, true, never>;
1488
1425
  }
1489
1426
 
1490
- interface TabConfig$1 {
1491
- id: string;
1492
- label: string;
1493
- route: string;
1494
- icon: string;
1495
- iconActive: string;
1496
- }
1497
1427
  /**
1498
1428
  * DsMobileTabsComponent
1499
1429
  *
@@ -1504,6 +1434,11 @@ interface TabConfig$1 {
1504
1434
  * Wraps ion-tabs to maintain native routing functionality while
1505
1435
  * providing a responsive navigation experience with branding.
1506
1436
  *
1437
+ * NOTE: This component wraps `ion-tabs` internally. If your Angular
1438
+ * routing requires `ion-tabs` to be a direct child in your component
1439
+ * (e.g., when using `ion-router-outlet` in app.html), use the
1440
+ * `DsMobileTabBarComponent` directly inside your own `ion-tabs` instead.
1441
+ *
1507
1442
  * @example
1508
1443
  * ```html
1509
1444
  * <ds-mobile-tabs
@@ -1513,44 +1448,35 @@ interface TabConfig$1 {
1513
1448
  * />
1514
1449
  * ```
1515
1450
  */
1516
- declare class DsMobileTabsComponent implements OnInit, AfterViewInit {
1517
- private elementRef;
1451
+ declare class DsMobileTabsComponent implements OnInit {
1518
1452
  tabs: TabConfig$1[];
1519
1453
  avatarType: 'initials' | 'photo' | 'icon';
1520
1454
  avatarInitials: string;
1521
1455
  avatarSrc: string;
1522
1456
  avatarIconName: string;
1523
1457
  avatarClick: EventEmitter<void>;
1524
- activeTab: _angular_core.WritableSignal<string>;
1525
- isDesktop: _angular_core.WritableSignal<boolean>;
1526
- private mutationObserver?;
1527
- constructor(elementRef: ElementRef);
1458
+ constructor();
1528
1459
  ngOnInit(): void;
1529
- ngAfterViewInit(): void;
1530
- ngOnDestroy(): void;
1531
- private setupTitleRemovalObserver;
1532
- private removeTitleAttributes;
1533
1460
  trackByTabId(index: number, tab: TabConfig$1): string;
1534
- isTabActive(tabId: string): boolean;
1535
1461
  handleAvatarClick(): void;
1536
1462
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileTabsComponent, never>;
1537
1463
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabsComponent, "ds-mobile-tabs", never, { "tabs": { "alias": "tabs"; "required": false; }; "avatarType": { "alias": "avatarType"; "required": false; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; }; "avatarIconName": { "alias": "avatarIconName"; "required": false; }; }, { "avatarClick": "avatarClick"; }, never, never, true, never>;
1538
1464
  }
1539
1465
 
1540
- interface TabItem {
1466
+ interface InlineTabItem {
1541
1467
  id: string;
1542
1468
  label: string;
1543
1469
  badge?: number;
1544
1470
  }
1545
1471
  /**
1546
- * DsMobileTabBarComponent
1472
+ * DsMobileInlineTabsComponent
1547
1473
  *
1548
- * Pill-style tab bar for filtering/switching views
1474
+ * Pill-style inline tabs for filtering/switching views
1549
1475
  * Used in the purple header section of pages
1550
1476
  *
1551
1477
  * @example
1552
1478
  * ```html
1553
- * <ds-mobile-tab-bar
1479
+ * <ds-mobile-inline-tabs
1554
1480
  * [tabs]="[
1555
1481
  * { id: 'all', label: 'All' },
1556
1482
  * { id: 'open', label: 'Open' },
@@ -1558,14 +1484,14 @@ interface TabItem {
1558
1484
  * ]"
1559
1485
  * [activeTab]="'all'"
1560
1486
  * (tabChange)="handleTabChange($event)">
1561
- * </ds-mobile-tab-bar>
1487
+ * </ds-mobile-inline-tabs>
1562
1488
  * ```
1563
1489
  */
1564
- declare class DsMobileTabBarComponent {
1490
+ declare class DsMobileInlineTabsComponent {
1565
1491
  /**
1566
1492
  * Array of tab items to display
1567
1493
  */
1568
- tabs: _angular_core.InputSignal<TabItem[]>;
1494
+ tabs: _angular_core.InputSignal<InlineTabItem[]>;
1569
1495
  /**
1570
1496
  * Currently active tab ID
1571
1497
  */
@@ -1575,8 +1501,8 @@ declare class DsMobileTabBarComponent {
1575
1501
  */
1576
1502
  tabChange: _angular_core.OutputEmitterRef<string>;
1577
1503
  handleTabClick(tabId: string): void;
1578
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileTabBarComponent, never>;
1579
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileTabBarComponent, "ds-mobile-tab-bar", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": true; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
1504
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileInlineTabsComponent, never>;
1505
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileInlineTabsComponent, "ds-mobile-inline-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": true; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
1580
1506
  }
1581
1507
 
1582
1508
  interface ActionResult {
@@ -2761,55 +2687,6 @@ interface ContactItem {
2761
2687
  contactPerson?: string;
2762
2688
  phoneNumber?: string;
2763
2689
  }
2764
- /**
2765
- * DsMobileHandbookDetailModalComponent
2766
- *
2767
- * Modal wrapper for displaying handbook folder details.
2768
- *
2769
- * Features:
2770
- * - Folder content display
2771
- * - Items list with descriptions
2772
- * - Images and attachments
2773
- * - Contact information
2774
- * - Native modal controls (close, swipe down)
2775
- * - Safe area support
2776
- *
2777
- * This component is typically not used directly - use DsMobileHandbookDetailModalService instead.
2778
- */
2779
- declare class DsMobileHandbookDetailModalComponent {
2780
- private modalController;
2781
- handbookData: HandbookDetailData;
2782
- handbook: _angular_core.WritableSignal<HandbookDetailData>;
2783
- constructor(modalController: ModalController);
2784
- ngOnInit(): void;
2785
- /**
2786
- * Split handbook items to enforce content structure rules:
2787
- * - Never mix photos and documents (attachments) in the same section
2788
- * - Never mix contact persons and attachments together in the same section
2789
- *
2790
- * This method splits items that violate these rules into multiple display items.
2791
- * Each resulting item will have only compatible content types.
2792
- */
2793
- splitItemsByContentRules(item: HandbookItem): HandbookItem[];
2794
- /**
2795
- * Get all display items with enforced content structure rules applied
2796
- */
2797
- getDisplayItems(): HandbookItem[];
2798
- /**
2799
- * Close the modal
2800
- */
2801
- close(): void;
2802
- /**
2803
- * Handle contact click
2804
- */
2805
- handleContactClick(contact: ContactItem): void;
2806
- /**
2807
- * Handle attachment click
2808
- */
2809
- handleAttachmentClick(attachment: AttachmentItem): void;
2810
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsMobileHandbookDetailModalComponent, never>;
2811
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsMobileHandbookDetailModalComponent, "ds-mobile-handbook-detail-modal", never, { "handbookData": { "alias": "handbookData"; "required": false; }; }, {}, never, never, true, never>;
2812
- }
2813
2690
 
2814
2691
  /**
2815
2692
  * DsMobileHandbookDetailModalService
@@ -3092,8 +2969,8 @@ declare class MobileInquiriesPageComponent {
3092
2969
  userService: UserService;
3093
2970
  private navCtrl;
3094
2971
  constructor(userService: UserService, navCtrl: NavController);
3095
- filterStatus: _angular_core.WritableSignal<"open" | "closed" | "all">;
3096
- tabItems: TabItem[];
2972
+ filterStatus: _angular_core.WritableSignal<"all" | "open" | "closed">;
2973
+ tabItems: InlineTabItem[];
3097
2974
  inquiries: _angular_core.WritableSignal<Inquiry[]>;
3098
2975
  filteredInquiries: _angular_core.Signal<Inquiry[]>;
3099
2976
  openInquiries: _angular_core.Signal<Inquiry[]>;
@@ -3137,7 +3014,7 @@ declare class MobileInquiryDetailPageComponent extends MobilePageBase implements
3137
3014
  isNativePlatform: _angular_core.Signal<boolean>;
3138
3015
  inquiryTitle: string;
3139
3016
  activeTab: _angular_core.WritableSignal<string>;
3140
- tabItems: TabItem[];
3017
+ tabItems: InlineTabItem[];
3141
3018
  activities: ActivityItem[];
3142
3019
  messageThreads: MessageThread[];
3143
3020
  unreadMessagesCount: _angular_core.Signal<number>;
@@ -3164,6 +3041,7 @@ declare class MobileTabsExampleComponent implements OnInit {
3164
3041
  userService: UserService;
3165
3042
  private modalController;
3166
3043
  private router;
3044
+ private whitelabelDemoModal;
3167
3045
  constructor(userService: UserService, modalController: ModalController, router: Router);
3168
3046
  ngOnInit(): void;
3169
3047
  tabs: TabConfig[];
@@ -3228,8 +3106,10 @@ interface WhitelabelConfig {
3228
3106
  logoHeight?: number;
3229
3107
  logoMarkWidth?: number;
3230
3108
  logoMarkHeight?: number;
3231
- primaryColor: string;
3232
- secondaryColor: string;
3109
+ primarySurface: string;
3110
+ primaryContent: string;
3111
+ secondarySurface: string;
3112
+ secondaryContent: string;
3233
3113
  organizationName: string;
3234
3114
  organizationId: string;
3235
3115
  }
@@ -3258,13 +3138,16 @@ interface WhitelabelConfig {
3258
3138
  */
3259
3139
  declare class WhitelabelService {
3260
3140
  private _config;
3261
- readonly logoUrl: () => string;
3262
- readonly logoMarkUrl: () => string;
3263
- readonly logoAlt: () => string;
3264
- readonly primaryColor: () => string;
3265
- readonly secondaryColor: () => string;
3266
- readonly organizationName: () => string;
3267
- readonly organizationId: () => string;
3141
+ readonly logoUrl: _angular_core.Signal<string>;
3142
+ readonly logoMarkUrl: _angular_core.Signal<string>;
3143
+ readonly logoAlt: _angular_core.Signal<string>;
3144
+ readonly logoHeight: _angular_core.Signal<number>;
3145
+ readonly primarySurface: _angular_core.Signal<string>;
3146
+ readonly primaryContent: _angular_core.Signal<string>;
3147
+ readonly secondarySurface: _angular_core.Signal<string>;
3148
+ readonly secondaryContent: _angular_core.Signal<string>;
3149
+ readonly organizationName: _angular_core.Signal<string>;
3150
+ readonly organizationId: _angular_core.Signal<string>;
3268
3151
  readonly config: _angular_core.Signal<WhitelabelConfig>;
3269
3152
  constructor();
3270
3153
  /**
@@ -3286,16 +3169,32 @@ declare class WhitelabelService {
3286
3169
  /**
3287
3170
  * Update only the brand colors
3288
3171
  */
3289
- updateColors(primaryColor: string, secondaryColor: string): void;
3172
+ updateColors(colors: {
3173
+ primarySurface?: string;
3174
+ primaryContent?: string;
3175
+ secondarySurface?: string;
3176
+ secondaryContent?: string;
3177
+ }): void;
3290
3178
  /**
3291
3179
  * Reset to default configuration
3292
3180
  */
3293
3181
  resetToDefault(): void;
3294
3182
  /**
3295
- * Apply colors to CSS custom properties
3183
+ * Convert hex color to RGB values
3184
+ */
3185
+ private hexToRgb;
3186
+ /**
3187
+ * Apply colors to CSS custom properties and native StatusBar
3296
3188
  * This updates the actual CSS variables used throughout the app
3189
+ * and the native status bar color on mobile devices
3297
3190
  */
3298
3191
  private applyColors;
3192
+ /**
3193
+ * Update the native status bar color
3194
+ * Note: This only works on Android. On iOS, the status bar is transparent
3195
+ * and shows the web content behind it (controlled by CSS variables)
3196
+ */
3197
+ private updateNativeStatusBar;
3299
3198
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelService, never>;
3300
3199
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<WhitelabelService>;
3301
3200
  }
@@ -3303,24 +3202,20 @@ declare class WhitelabelService {
3303
3202
  /**
3304
3203
  * Whitelabel Demo Page
3305
3204
  *
3306
- * Demonstrates the whitelabeling system with live color and logo switching.
3205
+ * Demonstrates the whitelabeling system with theme selection, brand colors, and logo previews.
3307
3206
  */
3308
3207
  declare class WhitelabelDemoPage implements OnInit {
3309
3208
  whitelabelService: WhitelabelService;
3310
- customPrimaryColor: string;
3311
- customSecondaryColor: string;
3312
- uploadedFullLogoName: string;
3313
- uploadedLogomarkName: string;
3209
+ currentTheme: string;
3210
+ customPrimarySurface: string;
3211
+ customPrimaryContent: string;
3212
+ customSecondarySurface: string;
3213
+ customSecondaryContent: string;
3314
3214
  ngOnInit(): void;
3315
- handleFullLogoUpload(event: Event): void;
3316
- handleLogomarkUpload(event: Event): void;
3317
- resetFullLogo(): void;
3318
- resetLogomark(): void;
3319
- configJson(): string;
3320
3215
  applyDefaultTheme(): void;
3321
- applyBlueTheme(): void;
3322
- applyGreenTheme(): void;
3323
- applyOrangeTheme(): void;
3216
+ applyCejTheme(): void;
3217
+ applyPkaTheme(): void;
3218
+ applyClaveTheme(): void;
3324
3219
  applyCustomColors(): void;
3325
3220
  private updateCustomColorInputs;
3326
3221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WhitelabelDemoPage, never>;
@@ -3346,5 +3241,5 @@ declare const customPageTransition: (_: HTMLElement, opts: any) => Animation;
3346
3241
  */
3347
3242
  declare const customBackTransition: (_: HTMLElement, opts: any) => Animation;
3348
3243
 
3349
- export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent, DsMobileActionsBottomSheetComponent, DsMobileAppLayoutComponent, DsMobileBottomSheetService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileContentSectionComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileInlinePhotoComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileLongPressDirective, DsMobileModalService, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostCardComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobileTabBarComponent, DsMobileTabsComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, SectionHeaderComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, UserService, WhitelabelDemoPage, customBackTransition, customPageTransition };
3350
- export type { ActionGroup, ActionItem, ActionResult, AttachmentItem, BottomSheetOptions, ActionResult as CommentActionResult, CommentData, ContactItem, ContentWidth, HandbookDetailData, HandbookItem, HeaderVariant, LightboxAuthor, LightboxImage, LightboxImageOptions, LightboxMediaFile, LightboxMediaType, LightboxOptions, LightboxPdf, LightboxPdfOptions, ModalOptions, ActionResult as PostActionResult, PostDetailData, TabConfig$1 as TabConfig, TabItem };
3244
+ export { ActionCommentComponent, ActionLikeComponent, ContentRowComponent, DsMobileActionsBottomSheetComponent, DsMobileBottomSheetService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileContentSectionComponent, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileLongPressDirective, DsMobileModalService, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostCardComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobileTabBarComponent, DsMobileTabsComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, SectionHeaderComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, UserService, WhitelabelDemoPage, WhitelabelService, customBackTransition, customPageTransition };
3245
+ export type { ActionGroup, ActionItem, ActionResult, BottomSheetOptions, ActionResult as CommentActionResult, CommentData, ContentWidth, InlineTabItem, LightboxAuthor, LightboxImage, LightboxImageOptions, LightboxMediaFile, LightboxMediaType, LightboxOptions, LightboxPdf, LightboxPdfOptions, ModalOptions, ActionResult as PostActionResult, PostDetailData, TabConfig$1 as TabConfig, WhitelabelConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@propbinder/mobile-design",
3
- "version": "0.0.28",
3
+ "version": "0.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0 || ^21.0.0",
6
6
  "@angular/core": "^20.3.0 || ^21.0.0"
@@ -28,6 +28,15 @@
28
28
  "./styles/globals.css": {
29
29
  "default": "./styles/globals.css"
30
30
  },
31
+ "./styles/ionic.css": {
32
+ "default": "./styles/ionic.css"
33
+ },
34
+ "./styles/mobile-common.css": {
35
+ "default": "./styles/mobile-common.css"
36
+ },
37
+ "./styles/mobile-page-base.css": {
38
+ "default": "./styles/mobile-page-base.css"
39
+ },
31
40
  "./ui/*": {
32
41
  "default": "./ui/*"
33
42
  },