@propbinder/mobile-design 0.2.50 → 0.2.52
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/fesm2022/propbinder-mobile-design.mjs +26206 -0
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
- package/index.d.ts +8193 -0
- package/package.json +39 -3
- package/ng-package.json +0 -24
- package/src/animations/page-transitions.ts +0 -165
- package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -102
- package/src/components/action-list-item/index.ts +0 -2
- package/src/components/app-icon/ds-app-icon.ts +0 -133
- package/src/components/app-icon/index.ts +0 -2
- package/src/components/attachment-preview/ds-mobile-attachment-preview.css +0 -139
- package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +0 -164
- package/src/components/attachment-preview/index.ts +0 -1
- package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -142
- package/src/components/avatar-with-badge/index.ts +0 -2
- package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +0 -71
- package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +0 -121
- package/src/components/booking-modal/ds-mobile-booking-modal.ts +0 -598
- package/src/components/booking-modal/ds-mobile-booking-summary.ts +0 -161
- package/src/components/booking-modal/index.ts +0 -4
- package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -266
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +0 -146
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +0 -156
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -101
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -169
- package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +0 -211
- package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -578
- package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +0 -614
- package/src/components/bottom-sheet/index.ts +0 -8
- package/src/components/bottom-sheet/modal-shadow-fix.ts +0 -42
- package/src/components/card-inline/ds-mobile-card-inline.ts +0 -301
- package/src/components/card-inline/index.ts +0 -2
- package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +0 -118
- package/src/components/card-inline-banner/index.ts +0 -1
- package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +0 -120
- package/src/components/card-inline-contact/index.ts +0 -1
- package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +0 -141
- package/src/components/card-inline-file/index.ts +0 -1
- package/src/components/chat-modal/ds-mobile-chat-modal.css +0 -159
- package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +0 -105
- package/src/components/chat-modal/ds-mobile-chat-modal.ts +0 -918
- package/src/components/chat-modal/index.ts +0 -8
- package/src/components/comment/ds-mobile-comment.ts +0 -568
- package/src/components/comment/index.ts +0 -2
- package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +0 -182
- package/src/components/contact-list-item/index.ts +0 -2
- package/src/components/content/ds-mobile-content.ts +0 -139
- package/src/components/content/index.ts +0 -2
- package/src/components/dropdown/ds-mobile-dropdown.css +0 -199
- package/src/components/dropdown/ds-mobile-dropdown.ts +0 -340
- package/src/components/dropdown/index.ts +0 -2
- package/src/components/ds-mobile-tabs.css +0 -407
- package/src/components/ds-mobile-tabs.ts +0 -216
- package/src/components/empty-state/ds-mobile-empty-state.ts +0 -120
- package/src/components/empty-state/index.ts +0 -2
- package/src/components/fab/ds-mobile-fab.ts +0 -315
- package/src/components/fab/index.ts +0 -1
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +0 -121
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +0 -189
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +0 -135
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +0 -656
- package/src/components/facility-creation-modal/index.ts +0 -9
- package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +0 -105
- package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +0 -188
- package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +0 -460
- package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +0 -134
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +0 -69
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +0 -379
- package/src/components/facility-detail-modal/index.ts +0 -2
- package/src/components/file-attachment/ds-mobile-file-attachment.ts +0 -164
- package/src/components/file-attachment/index.ts +0 -2
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +0 -214
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -84
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -424
- package/src/components/handbook-detail-modal/index.ts +0 -3
- package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -175
- package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -533
- package/src/components/handbook-folder/index.ts +0 -4
- package/src/components/header-content/ds-mobile-header-content.ts +0 -222
- package/src/components/header-content/index.ts +0 -2
- package/src/components/illustration/ds-mobile-illustration.ts +0 -124
- package/src/components/illustration/index.ts +0 -2
- package/src/components/index.ts +0 -124
- package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -361
- package/src/components/inline-photo/index.ts +0 -1
- package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +0 -132
- package/src/components/inline-tabs/index.ts +0 -2
- package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +0 -350
- package/src/components/interactive-list-item-booking/index.ts +0 -1
- package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -321
- package/src/components/interactive-list-item-inquiry/index.ts +0 -2
- package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +0 -237
- package/src/components/interactive-list-item-message/index.ts +0 -2
- package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -549
- package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +0 -124
- package/src/components/interactive-list-item-post/index.ts +0 -13
- package/src/components/lightbox/ds-mobile-lightbox-footer.ts +0 -315
- package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -202
- package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -484
- package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -377
- package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +0 -374
- package/src/components/lightbox/ds-mobile-lightbox.css +0 -587
- package/src/components/lightbox/ds-mobile-lightbox.service.ts +0 -296
- package/src/components/lightbox/ds-mobile-lightbox.ts +0 -529
- package/src/components/lightbox/index.ts +0 -22
- package/src/components/list-item/ds-mobile-list-item.ts +0 -603
- package/src/components/list-item/index.ts +0 -2
- package/src/components/list-item-static/ds-mobile-list-item-static.ts +0 -133
- package/src/components/list-item-static/index.ts +0 -2
- package/src/components/loader-overlay/ds-mobile-loader-overlay.css +0 -49
- package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +0 -77
- package/src/components/loader-overlay/index.ts +0 -1
- package/src/components/logo/ds-logo.ts +0 -95
- package/src/components/logo/index.ts +0 -2
- package/src/components/message-bubble/ds-mobile-message-bubble.ts +0 -633
- package/src/components/message-bubble/index.ts +0 -7
- package/src/components/message-composer/ds-mobile-message-composer.ts +0 -1146
- package/src/components/message-composer/index.ts +0 -7
- package/src/components/modal/ds-mobile-modal.css +0 -163
- package/src/components/modal/ds-mobile-modal.service.ts +0 -329
- package/src/components/modal/index.ts +0 -8
- package/src/components/modal-base/ds-mobile-modal-base.css +0 -378
- package/src/components/modal-base/ds-mobile-modal-base.ts +0 -261
- package/src/components/modal-base/index.ts +0 -2
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +0 -112
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +0 -93
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +0 -442
- package/src/components/new-inquiry-modal/index.ts +0 -4
- package/src/components/offline-banner/ds-mobile-offline-banner.ts +0 -135
- package/src/components/offline-banner/index.ts +0 -1
- package/src/components/page-details/ds-mobile-page-details.css +0 -83
- package/src/components/page-details/ds-mobile-page-details.ts +0 -282
- package/src/components/page-details/index.ts +0 -2
- package/src/components/page-main/ds-mobile-page-main.css +0 -68
- package/src/components/page-main/ds-mobile-page-main.ts +0 -421
- package/src/components/page-main/index.ts +0 -2
- package/src/components/post-composer/ds-mobile-post-composer.ts +0 -140
- package/src/components/post-composer/index.ts +0 -2
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +0 -390
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -108
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -722
- package/src/components/post-detail-modal/index.ts +0 -9
- package/src/components/property-banner/ds-mobile-property-banner.ts +0 -95
- package/src/components/property-banner/index.ts +0 -2
- package/src/components/section/ds-mobile-section.ts +0 -263
- package/src/components/section/index.ts +0 -2
- package/src/components/shared/directives/index.ts +0 -2
- package/src/components/shared/directives/long-press.directive.ts +0 -212
- package/src/components/shared/index.ts +0 -3
- package/src/components/shared/mobile-modal-base.ts +0 -457
- package/src/components/shared/mobile-page-base.ts +0 -204
- package/src/components/swiper/ds-mobile-swiper-with-nav.ts +0 -160
- package/src/components/swiper/ds-mobile-swiper.ts +0 -327
- package/src/components/swiper/index.ts +0 -3
- package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +0 -129
- package/src/components/system-message-banner/index.ts +0 -2
- package/src/components/tab-bar/ds-mobile-tab-bar.css +0 -533
- package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -735
- package/src/components/tab-bar/index.ts +0 -2
- package/src/components/tabs/ds-mobile-tabs.css +0 -25
- package/src/components/tabs/ds-mobile-tabs.ts +0 -89
- package/src/components/tabs/index.ts +0 -2
- package/src/components/text-input/ds-text-input.ts +0 -287
- package/src/components/text-input/index.ts +0 -2
- package/src/examples/booking.page.ts +0 -434
- package/src/examples/community.page.ts +0 -776
- package/src/examples/handbook.page.ts +0 -324
- package/src/examples/home.page.ts +0 -347
- package/src/examples/index.ts +0 -12
- package/src/examples/inquiries.example.ts +0 -273
- package/src/examples/inquiry-detail.example.css +0 -189
- package/src/examples/inquiry-detail.example.ts +0 -415
- package/src/examples/mobile-tabs-example.component.ts +0 -208
- package/src/examples/post-create.page.ts +0 -311
- package/src/examples/post-detail.page.ts +0 -296
- package/src/examples/sign-in.page.ts +0 -291
- package/src/examples/whitelabel-demo-modal.component.ts +0 -1094
- package/src/examples/whitelabel-demo-modal.service.ts +0 -77
- package/src/models/index.ts +0 -7
- package/src/models/post.model.ts +0 -41
- package/src/pages/community.page.ts +0 -769
- package/src/pages/handbook.page.ts +0 -388
- package/src/pages/home.page.ts +0 -303
- package/src/pages/index.ts +0 -11
- package/src/pages/inquiries.example.ts +0 -273
- package/src/pages/inquiry-detail.example.css +0 -189
- package/src/pages/inquiry-detail.example.ts +0 -415
- package/src/pages/mobile-tabs-example.component.ts +0 -179
- package/src/pages/post-create.page.ts +0 -311
- package/src/pages/post-detail.page.ts +0 -296
- package/src/pages/sign-in.page.ts +0 -291
- package/src/pages/whitelabel-demo-modal.component.ts +0 -1094
- package/src/pages/whitelabel-demo-modal.service.ts +0 -77
- package/src/public-api.ts +0 -6
- package/src/services/base-modal.service.ts +0 -101
- package/src/services/index.ts +0 -11
- package/src/services/posts.service.ts +0 -542
- package/src/services/tracking-permission.service.ts +0 -88
- package/src/services/user.service.ts +0 -60
- package/src/services/whitelabel.service.ts +0 -675
- package/tsconfig.lib.json +0 -17
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
- /package/{src/assets → assets}/fonts/Brockmann-Bold.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-BoldItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-Medium.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-MediumItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-Regular.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-RegularItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-SemiBold.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann_desktop_license.pdf +0 -0
- /package/{src/assets → assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
- /package/{src/styles → styles}/ionic.css +0 -0
- /package/{src/components/shared → styles}/mobile-common.css +0 -0
- /package/{src/components/shared → styles}/mobile-page-base.css +0 -0
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import { Component, signal, inject, ViewChild, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { DsTextInputComponent } from '../components/text-input';
|
|
5
|
-
import { DsButtonComponent } from '@propbinder/design-system';
|
|
6
|
-
import { DsAppIconComponent } from '../components/app-icon';
|
|
7
|
-
import { WhitelabelService } from '../services/whitelabel.service';
|
|
8
|
-
import { Keyboard } from '@capacitor/keyboard';
|
|
9
|
-
import { StatusBar, Style } from '@capacitor/status-bar';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* SignInPageComponent
|
|
13
|
-
*
|
|
14
|
-
* Sign-in page with email authentication.
|
|
15
|
-
* Features logomark, decorative city background, and form validation.
|
|
16
|
-
* Auto-focuses email input on iOS to trigger keyboard.
|
|
17
|
-
*/
|
|
18
|
-
@Component({
|
|
19
|
-
selector: 'app-sign-in',
|
|
20
|
-
standalone: true,
|
|
21
|
-
imports: [CommonModule, FormsModule, DsTextInputComponent, DsButtonComponent, DsAppIconComponent],
|
|
22
|
-
template: `
|
|
23
|
-
<div class="tw-relative tw-min-h-screen tw-flex tw-justify-center tw-overflow-hidden" [style.background]="whitelabelService.signInBgStyle()">
|
|
24
|
-
<!-- City background decoration -->
|
|
25
|
-
@if (whitelabelService.showCityIllustration()) {
|
|
26
|
-
<div class="tw-absolute tw-bottom-0 tw-left-0 tw-right-0 tw-w-full tw-h-[35%] tw-z-0 tw-pointer-events-none tw-overflow-hidden md:tw-h-[50%] md:tw-min-h-[400px]" aria-hidden="true">
|
|
27
|
-
<img src="/Assets/city.svg" alt="" class="tw-w-full tw-h-full tw-object-cover tw-object-top" />
|
|
28
|
-
</div>
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
<!-- Main content -->
|
|
32
|
-
<div class="tw-relative tw-z-[1] tw-w-full tw-pt-24 tw-max-w-[440px] tw-flex tw-flex-col tw-items-center lg:tw-max-w-[480px] lg:tw-pt-24">
|
|
33
|
-
<!-- App Icon -->
|
|
34
|
-
<div class="tw-flex tw-justify-center tw-items-center app-icon-container">
|
|
35
|
-
<ds-app-icon size="xl" />
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<!-- Sign in form -->
|
|
39
|
-
<div class="tw-w-full tw-py-10 tw-px-6 md:tw-px-8 md:tw-py-12 lg:tw-p-12 tw-relative tw-min-h-[400px] tw-box-border">
|
|
40
|
-
<!-- Form view -->
|
|
41
|
-
<div class="tw-transition-all tw-duration-300 tw-ease-out tw-absolute tw-inset-y-10 tw-inset-x-6 md:tw-inset-y-12 md:tw-inset-x-8 lg:tw-inset-12 tw-box-border"
|
|
42
|
-
[class.tw-opacity-100]="!emailSent()"
|
|
43
|
-
[class.tw-translate-y-0]="!emailSent()"
|
|
44
|
-
[class.tw-z-10]="!emailSent()"
|
|
45
|
-
[class.tw-opacity-0]="emailSent()"
|
|
46
|
-
[class.-tw-translate-y-5]="emailSent()"
|
|
47
|
-
[class.tw-pointer-events-none]="emailSent()"
|
|
48
|
-
[class.tw-z-0]="emailSent()">
|
|
49
|
-
<div class="tw-w-full tw-h-full tw-flex tw-flex-col">
|
|
50
|
-
<h1 class="tw-text-2xl lg:tw-text-3xl tw-font-semibold tw-text-center tw-mt-0 tw-mb-2 signin-text">Welcome home</h1>
|
|
51
|
-
|
|
52
|
-
<p class="body-base-regular tw-m-0 tw-mb-8 tw-text-center signin-text">
|
|
53
|
-
Enter your email to continue
|
|
54
|
-
</p>
|
|
55
|
-
|
|
56
|
-
<form class="tw-flex tw-flex-col tw-gap-4" (ngSubmit)="handleSubmit()">
|
|
57
|
-
<ds-text-input
|
|
58
|
-
#emailInput
|
|
59
|
-
id="email-input"
|
|
60
|
-
type="email"
|
|
61
|
-
placeholder="Enter your email"
|
|
62
|
-
[(ngModel)]="email"
|
|
63
|
-
name="email"
|
|
64
|
-
[required]="true"
|
|
65
|
-
[hasError]="emailError()"
|
|
66
|
-
[errorMessage]="emailError() ? 'Please enter a valid email address' : ''"
|
|
67
|
-
[autoClearError]="true"
|
|
68
|
-
autocomplete="email"
|
|
69
|
-
inputmode="email"
|
|
70
|
-
(errorCleared)="emailError.set(false)">
|
|
71
|
-
</ds-text-input>
|
|
72
|
-
|
|
73
|
-
<ds-button
|
|
74
|
-
type="submit"
|
|
75
|
-
variant="primary"
|
|
76
|
-
size="lg"
|
|
77
|
-
[loading]="isSubmitting()"
|
|
78
|
-
class="tw-w-full">
|
|
79
|
-
Continue
|
|
80
|
-
</ds-button>
|
|
81
|
-
</form>
|
|
82
|
-
</div>
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<!-- Email sent confirmation view -->
|
|
86
|
-
<div class="tw-transition-all tw-duration-300 tw-ease-out tw-flex tw-flex-col tw-items-center tw-absolute tw-inset-y-10 tw-inset-x-6 md:tw-inset-y-12 md:tw-inset-x-8 lg:tw-inset-12 tw-box-border tw-overflow-hidden"
|
|
87
|
-
[class.tw-opacity-0]="!emailSent()"
|
|
88
|
-
[class.tw-translate-y-5]="!emailSent()"
|
|
89
|
-
[class.tw-pointer-events-none]="!emailSent()"
|
|
90
|
-
[class.tw-z-0]="!emailSent()"
|
|
91
|
-
[class.tw-opacity-100]="emailSent()"
|
|
92
|
-
[class.tw-translate-y-0]="emailSent()"
|
|
93
|
-
[class.tw-pointer-events-auto]="emailSent()"
|
|
94
|
-
[class.tw-z-10]="emailSent()">
|
|
95
|
-
<div class="tw-w-full tw-flex tw-flex-col tw-items-center">
|
|
96
|
-
<h1 class="tw-text-lg tw-font-semibold lg:tw-text-xl tw-text-center tw-mt-0 tw-mb-4 signin-text">Check your email</h1>
|
|
97
|
-
|
|
98
|
-
<p class="body-base-regular tw-m-0 tw-mb-8 tw-text-center signin-text tw-max-w-[272px]">
|
|
99
|
-
We've sent you a temporary login to <span class="body-base-semiBold">{{ email }}</span>
|
|
100
|
-
</p>
|
|
101
|
-
|
|
102
|
-
<a
|
|
103
|
-
href="#"
|
|
104
|
-
(click)="handleBackToLogin(); $event.preventDefault()"
|
|
105
|
-
class="back-link">
|
|
106
|
-
Back to login
|
|
107
|
-
</a>
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
`,
|
|
114
|
-
styles: [`
|
|
115
|
-
/* Button styling override for full width */
|
|
116
|
-
ds-button {
|
|
117
|
-
width: 100%;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
ds-button::ng-deep button {
|
|
121
|
-
width: 100%;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/* Link styling */
|
|
125
|
-
.back-link {
|
|
126
|
-
display: block;
|
|
127
|
-
width: 100%;
|
|
128
|
-
text-align: center;
|
|
129
|
-
font-family: 'Brockmann', system-ui, -apple-system, sans-serif;
|
|
130
|
-
font-size: var(--font-size-base);
|
|
131
|
-
font-weight: 600;
|
|
132
|
-
color: var(--color-signin-content, var(--text-color-default-primary));
|
|
133
|
-
text-decoration: none;
|
|
134
|
-
cursor: pointer;
|
|
135
|
-
transition: opacity 0.2s ease;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.back-link:hover {
|
|
139
|
-
opacity: 0.8;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/* Sign-in page text color override - applies to text elements only, not buttons */
|
|
143
|
-
:host ::ng-deep .signin-text,
|
|
144
|
-
:host h1,
|
|
145
|
-
:host h2,
|
|
146
|
-
:host p {
|
|
147
|
-
color: var(--color-signin-content, var(--text-color-default-primary));
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* Exclude buttons and their children from sign-in content color */
|
|
151
|
-
:host ::ng-deep ds-button,
|
|
152
|
-
:host ::ng-deep ds-button * {
|
|
153
|
-
color: inherit;
|
|
154
|
-
}
|
|
155
|
-
`]
|
|
156
|
-
})
|
|
157
|
-
export class SignInPageComponent implements AfterViewInit, OnDestroy {
|
|
158
|
-
@ViewChild('emailInput', { read: ElementRef }) emailInputRef?: ElementRef;
|
|
159
|
-
|
|
160
|
-
whitelabelService = inject(WhitelabelService);
|
|
161
|
-
|
|
162
|
-
email = '';
|
|
163
|
-
emailError = signal<boolean>(false);
|
|
164
|
-
isSubmitting = signal<boolean>(false);
|
|
165
|
-
emailSent = signal<boolean>(false);
|
|
166
|
-
|
|
167
|
-
ngAfterViewInit(): void {
|
|
168
|
-
// Update status bar for sign-in page
|
|
169
|
-
this.updateSignInStatusBar();
|
|
170
|
-
|
|
171
|
-
// Auto-focus email input to bring up keyboard on iOS
|
|
172
|
-
// Longer delay for sign-in page to ensure gradient background is rendered
|
|
173
|
-
setTimeout(() => {
|
|
174
|
-
// Only focus if we haven't already sent the email
|
|
175
|
-
if (!this.emailSent() && this.emailInputRef) {
|
|
176
|
-
// The ds-text-input component wraps the actual input element
|
|
177
|
-
const inputElement = this.emailInputRef.nativeElement.querySelector('input');
|
|
178
|
-
if (inputElement) {
|
|
179
|
-
console.log('Found input element, focusing...');
|
|
180
|
-
inputElement.focus();
|
|
181
|
-
// Explicitly show keyboard on mobile platforms
|
|
182
|
-
this.showKeyboard();
|
|
183
|
-
} else {
|
|
184
|
-
console.error('Input element not found in ds-text-input component');
|
|
185
|
-
}
|
|
186
|
-
} else if (!this.emailInputRef) {
|
|
187
|
-
console.error('emailInputRef not found');
|
|
188
|
-
}
|
|
189
|
-
}, 500);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Show the keyboard on mobile platforms
|
|
194
|
-
*/
|
|
195
|
-
private showKeyboard(): void {
|
|
196
|
-
Keyboard.show().catch(() => {
|
|
197
|
-
// Keyboard API not available (web browser) - focus() is enough
|
|
198
|
-
console.log('Keyboard API not available');
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
handleSubmit(): void {
|
|
203
|
-
// Basic email validation
|
|
204
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
205
|
-
|
|
206
|
-
// Always validate on submit
|
|
207
|
-
if (!this.email || !emailRegex.test(this.email)) {
|
|
208
|
-
this.emailError.set(true);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Only proceed if email is valid
|
|
213
|
-
this.emailError.set(false);
|
|
214
|
-
this.isSubmitting.set(true);
|
|
215
|
-
|
|
216
|
-
// Simulate API call
|
|
217
|
-
setTimeout(() => {
|
|
218
|
-
console.log('Sign in with email:', this.email);
|
|
219
|
-
this.isSubmitting.set(false);
|
|
220
|
-
this.emailSent.set(true);
|
|
221
|
-
// TODO: Implement actual sign-in logic and navigation
|
|
222
|
-
}, 1500);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
handleBackToLogin(): void {
|
|
226
|
-
this.emailSent.set(false);
|
|
227
|
-
this.email = '';
|
|
228
|
-
this.emailError.set(false);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Update status bar for sign-in page background
|
|
233
|
-
* Uses the sign-in background color to determine appropriate status bar style
|
|
234
|
-
*/
|
|
235
|
-
private async updateSignInStatusBar(): Promise<void> {
|
|
236
|
-
try {
|
|
237
|
-
const config = this.whitelabelService.config();
|
|
238
|
-
|
|
239
|
-
// Get the background color based on sign-in page background type
|
|
240
|
-
const backgroundColor = config.signInBgType === 'gradient'
|
|
241
|
-
? config.signInBgGradientStart
|
|
242
|
-
: config.signInBgSolid;
|
|
243
|
-
|
|
244
|
-
// Calculate and set appropriate style
|
|
245
|
-
const style = this.whitelabelService.getStatusBarStyleForColor(backgroundColor);
|
|
246
|
-
|
|
247
|
-
// Set background color (Android only)
|
|
248
|
-
await StatusBar.setBackgroundColor({ color: backgroundColor });
|
|
249
|
-
|
|
250
|
-
// Set style (iOS and Android)
|
|
251
|
-
await StatusBar.setStyle({ style });
|
|
252
|
-
|
|
253
|
-
console.log(`Sign-in status bar updated: color=${backgroundColor}, style=${style === Style.Light ? 'Light' : 'Dark'}`);
|
|
254
|
-
} catch (e) {
|
|
255
|
-
// StatusBar API not available (web browser)
|
|
256
|
-
console.log('StatusBar not available on sign-in page:', e);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Restore status bar to header color when leaving sign-in page
|
|
262
|
-
*/
|
|
263
|
-
ngOnDestroy(): void {
|
|
264
|
-
this.restoreHeaderStatusBar();
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Restore status bar to use header surface color
|
|
269
|
-
*/
|
|
270
|
-
private async restoreHeaderStatusBar(): Promise<void> {
|
|
271
|
-
try {
|
|
272
|
-
const config = this.whitelabelService.config();
|
|
273
|
-
const headerColor = config.headerSurface;
|
|
274
|
-
|
|
275
|
-
// Calculate and set appropriate style for header
|
|
276
|
-
const style = this.whitelabelService.getStatusBarStyleForColor(headerColor);
|
|
277
|
-
|
|
278
|
-
// Set background color (Android only)
|
|
279
|
-
await StatusBar.setBackgroundColor({ color: headerColor });
|
|
280
|
-
|
|
281
|
-
// Set style (iOS and Android)
|
|
282
|
-
await StatusBar.setStyle({ style });
|
|
283
|
-
|
|
284
|
-
console.log(`Status bar restored to header: color=${headerColor}, style=${style === Style.Light ? 'Light' : 'Dark'}`);
|
|
285
|
-
} catch (e) {
|
|
286
|
-
// StatusBar API not available (web browser)
|
|
287
|
-
console.log('StatusBar restore not available:', e);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|