@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.
Files changed (221) hide show
  1. package/fesm2022/propbinder-mobile-design.mjs +26206 -0
  2. package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
  3. package/index.d.ts +8193 -0
  4. package/package.json +39 -3
  5. package/ng-package.json +0 -24
  6. package/src/animations/page-transitions.ts +0 -165
  7. package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -102
  8. package/src/components/action-list-item/index.ts +0 -2
  9. package/src/components/app-icon/ds-app-icon.ts +0 -133
  10. package/src/components/app-icon/index.ts +0 -2
  11. package/src/components/attachment-preview/ds-mobile-attachment-preview.css +0 -139
  12. package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +0 -164
  13. package/src/components/attachment-preview/index.ts +0 -1
  14. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -142
  15. package/src/components/avatar-with-badge/index.ts +0 -2
  16. package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +0 -71
  17. package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +0 -121
  18. package/src/components/booking-modal/ds-mobile-booking-modal.ts +0 -598
  19. package/src/components/booking-modal/ds-mobile-booking-summary.ts +0 -161
  20. package/src/components/booking-modal/index.ts +0 -4
  21. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -266
  22. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +0 -146
  23. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +0 -156
  24. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -101
  25. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -169
  26. package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +0 -211
  27. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -578
  28. package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +0 -614
  29. package/src/components/bottom-sheet/index.ts +0 -8
  30. package/src/components/bottom-sheet/modal-shadow-fix.ts +0 -42
  31. package/src/components/card-inline/ds-mobile-card-inline.ts +0 -301
  32. package/src/components/card-inline/index.ts +0 -2
  33. package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +0 -118
  34. package/src/components/card-inline-banner/index.ts +0 -1
  35. package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +0 -120
  36. package/src/components/card-inline-contact/index.ts +0 -1
  37. package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +0 -141
  38. package/src/components/card-inline-file/index.ts +0 -1
  39. package/src/components/chat-modal/ds-mobile-chat-modal.css +0 -159
  40. package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +0 -105
  41. package/src/components/chat-modal/ds-mobile-chat-modal.ts +0 -918
  42. package/src/components/chat-modal/index.ts +0 -8
  43. package/src/components/comment/ds-mobile-comment.ts +0 -568
  44. package/src/components/comment/index.ts +0 -2
  45. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +0 -182
  46. package/src/components/contact-list-item/index.ts +0 -2
  47. package/src/components/content/ds-mobile-content.ts +0 -139
  48. package/src/components/content/index.ts +0 -2
  49. package/src/components/dropdown/ds-mobile-dropdown.css +0 -199
  50. package/src/components/dropdown/ds-mobile-dropdown.ts +0 -340
  51. package/src/components/dropdown/index.ts +0 -2
  52. package/src/components/ds-mobile-tabs.css +0 -407
  53. package/src/components/ds-mobile-tabs.ts +0 -216
  54. package/src/components/empty-state/ds-mobile-empty-state.ts +0 -120
  55. package/src/components/empty-state/index.ts +0 -2
  56. package/src/components/fab/ds-mobile-fab.ts +0 -315
  57. package/src/components/fab/index.ts +0 -1
  58. package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +0 -121
  59. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +0 -189
  60. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +0 -135
  61. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +0 -656
  62. package/src/components/facility-creation-modal/index.ts +0 -9
  63. package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +0 -105
  64. package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +0 -188
  65. package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +0 -460
  66. package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +0 -134
  67. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +0 -69
  68. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +0 -379
  69. package/src/components/facility-detail-modal/index.ts +0 -2
  70. package/src/components/file-attachment/ds-mobile-file-attachment.ts +0 -164
  71. package/src/components/file-attachment/index.ts +0 -2
  72. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +0 -214
  73. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -84
  74. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -424
  75. package/src/components/handbook-detail-modal/index.ts +0 -3
  76. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -175
  77. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -533
  78. package/src/components/handbook-folder/index.ts +0 -4
  79. package/src/components/header-content/ds-mobile-header-content.ts +0 -222
  80. package/src/components/header-content/index.ts +0 -2
  81. package/src/components/illustration/ds-mobile-illustration.ts +0 -124
  82. package/src/components/illustration/index.ts +0 -2
  83. package/src/components/index.ts +0 -124
  84. package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -361
  85. package/src/components/inline-photo/index.ts +0 -1
  86. package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +0 -132
  87. package/src/components/inline-tabs/index.ts +0 -2
  88. package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +0 -350
  89. package/src/components/interactive-list-item-booking/index.ts +0 -1
  90. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -321
  91. package/src/components/interactive-list-item-inquiry/index.ts +0 -2
  92. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +0 -237
  93. package/src/components/interactive-list-item-message/index.ts +0 -2
  94. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -549
  95. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +0 -124
  96. package/src/components/interactive-list-item-post/index.ts +0 -13
  97. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +0 -315
  98. package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -202
  99. package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -484
  100. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -377
  101. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +0 -374
  102. package/src/components/lightbox/ds-mobile-lightbox.css +0 -587
  103. package/src/components/lightbox/ds-mobile-lightbox.service.ts +0 -296
  104. package/src/components/lightbox/ds-mobile-lightbox.ts +0 -529
  105. package/src/components/lightbox/index.ts +0 -22
  106. package/src/components/list-item/ds-mobile-list-item.ts +0 -603
  107. package/src/components/list-item/index.ts +0 -2
  108. package/src/components/list-item-static/ds-mobile-list-item-static.ts +0 -133
  109. package/src/components/list-item-static/index.ts +0 -2
  110. package/src/components/loader-overlay/ds-mobile-loader-overlay.css +0 -49
  111. package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +0 -77
  112. package/src/components/loader-overlay/index.ts +0 -1
  113. package/src/components/logo/ds-logo.ts +0 -95
  114. package/src/components/logo/index.ts +0 -2
  115. package/src/components/message-bubble/ds-mobile-message-bubble.ts +0 -633
  116. package/src/components/message-bubble/index.ts +0 -7
  117. package/src/components/message-composer/ds-mobile-message-composer.ts +0 -1146
  118. package/src/components/message-composer/index.ts +0 -7
  119. package/src/components/modal/ds-mobile-modal.css +0 -163
  120. package/src/components/modal/ds-mobile-modal.service.ts +0 -329
  121. package/src/components/modal/index.ts +0 -8
  122. package/src/components/modal-base/ds-mobile-modal-base.css +0 -378
  123. package/src/components/modal-base/ds-mobile-modal-base.ts +0 -261
  124. package/src/components/modal-base/index.ts +0 -2
  125. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +0 -112
  126. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +0 -93
  127. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +0 -442
  128. package/src/components/new-inquiry-modal/index.ts +0 -4
  129. package/src/components/offline-banner/ds-mobile-offline-banner.ts +0 -135
  130. package/src/components/offline-banner/index.ts +0 -1
  131. package/src/components/page-details/ds-mobile-page-details.css +0 -83
  132. package/src/components/page-details/ds-mobile-page-details.ts +0 -282
  133. package/src/components/page-details/index.ts +0 -2
  134. package/src/components/page-main/ds-mobile-page-main.css +0 -68
  135. package/src/components/page-main/ds-mobile-page-main.ts +0 -421
  136. package/src/components/page-main/index.ts +0 -2
  137. package/src/components/post-composer/ds-mobile-post-composer.ts +0 -140
  138. package/src/components/post-composer/index.ts +0 -2
  139. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +0 -390
  140. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -108
  141. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -722
  142. package/src/components/post-detail-modal/index.ts +0 -9
  143. package/src/components/property-banner/ds-mobile-property-banner.ts +0 -95
  144. package/src/components/property-banner/index.ts +0 -2
  145. package/src/components/section/ds-mobile-section.ts +0 -263
  146. package/src/components/section/index.ts +0 -2
  147. package/src/components/shared/directives/index.ts +0 -2
  148. package/src/components/shared/directives/long-press.directive.ts +0 -212
  149. package/src/components/shared/index.ts +0 -3
  150. package/src/components/shared/mobile-modal-base.ts +0 -457
  151. package/src/components/shared/mobile-page-base.ts +0 -204
  152. package/src/components/swiper/ds-mobile-swiper-with-nav.ts +0 -160
  153. package/src/components/swiper/ds-mobile-swiper.ts +0 -327
  154. package/src/components/swiper/index.ts +0 -3
  155. package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +0 -129
  156. package/src/components/system-message-banner/index.ts +0 -2
  157. package/src/components/tab-bar/ds-mobile-tab-bar.css +0 -533
  158. package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -735
  159. package/src/components/tab-bar/index.ts +0 -2
  160. package/src/components/tabs/ds-mobile-tabs.css +0 -25
  161. package/src/components/tabs/ds-mobile-tabs.ts +0 -89
  162. package/src/components/tabs/index.ts +0 -2
  163. package/src/components/text-input/ds-text-input.ts +0 -287
  164. package/src/components/text-input/index.ts +0 -2
  165. package/src/examples/booking.page.ts +0 -434
  166. package/src/examples/community.page.ts +0 -776
  167. package/src/examples/handbook.page.ts +0 -324
  168. package/src/examples/home.page.ts +0 -347
  169. package/src/examples/index.ts +0 -12
  170. package/src/examples/inquiries.example.ts +0 -273
  171. package/src/examples/inquiry-detail.example.css +0 -189
  172. package/src/examples/inquiry-detail.example.ts +0 -415
  173. package/src/examples/mobile-tabs-example.component.ts +0 -208
  174. package/src/examples/post-create.page.ts +0 -311
  175. package/src/examples/post-detail.page.ts +0 -296
  176. package/src/examples/sign-in.page.ts +0 -291
  177. package/src/examples/whitelabel-demo-modal.component.ts +0 -1094
  178. package/src/examples/whitelabel-demo-modal.service.ts +0 -77
  179. package/src/models/index.ts +0 -7
  180. package/src/models/post.model.ts +0 -41
  181. package/src/pages/community.page.ts +0 -769
  182. package/src/pages/handbook.page.ts +0 -388
  183. package/src/pages/home.page.ts +0 -303
  184. package/src/pages/index.ts +0 -11
  185. package/src/pages/inquiries.example.ts +0 -273
  186. package/src/pages/inquiry-detail.example.css +0 -189
  187. package/src/pages/inquiry-detail.example.ts +0 -415
  188. package/src/pages/mobile-tabs-example.component.ts +0 -179
  189. package/src/pages/post-create.page.ts +0 -311
  190. package/src/pages/post-detail.page.ts +0 -296
  191. package/src/pages/sign-in.page.ts +0 -291
  192. package/src/pages/whitelabel-demo-modal.component.ts +0 -1094
  193. package/src/pages/whitelabel-demo-modal.service.ts +0 -77
  194. package/src/public-api.ts +0 -6
  195. package/src/services/base-modal.service.ts +0 -101
  196. package/src/services/index.ts +0 -11
  197. package/src/services/posts.service.ts +0 -542
  198. package/src/services/tracking-permission.service.ts +0 -88
  199. package/src/services/user.service.ts +0 -60
  200. package/src/services/whitelabel.service.ts +0 -675
  201. package/tsconfig.lib.json +0 -17
  202. package/tsconfig.lib.prod.json +0 -9
  203. package/tsconfig.spec.json +0 -13
  204. /package/{src/assets → assets}/fonts/Brockmann-Bold.otf +0 -0
  205. /package/{src/assets → assets}/fonts/Brockmann-BoldItalic.otf +0 -0
  206. /package/{src/assets → assets}/fonts/Brockmann-Medium.otf +0 -0
  207. /package/{src/assets → assets}/fonts/Brockmann-MediumItalic.otf +0 -0
  208. /package/{src/assets → assets}/fonts/Brockmann-Regular.otf +0 -0
  209. /package/{src/assets → assets}/fonts/Brockmann-RegularItalic.otf +0 -0
  210. /package/{src/assets → assets}/fonts/Brockmann-SemiBold.otf +0 -0
  211. /package/{src/assets → assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  212. /package/{src/assets → assets}/fonts/Brockmann_desktop_license.pdf +0 -0
  213. /package/{src/assets → assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
  214. /package/{src/assets → assets}/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
  215. /package/{src/assets → assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
  216. /package/{src/assets → assets}/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
  217. /package/{src/assets → assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
  218. /package/{src/assets → assets}/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
  219. /package/{src/styles → styles}/ionic.css +0 -0
  220. /package/{src/components/shared → styles}/mobile-common.css +0 -0
  221. /package/{src/components/shared → styles}/mobile-page-base.css +0 -0
@@ -1,1094 +0,0 @@
1
- import { Component, OnInit, inject, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule } from '@angular/forms';
4
- import { WhitelabelService } from '../services/whitelabel.service';
5
- import { DsLogoComponent } from '../components/logo/ds-logo';
6
- import { DsAvatarWithBadgeComponent } from '../components/avatar-with-badge/ds-avatar-with-badge';
7
- import { DsAppIconComponent } from '../components/app-icon/ds-app-icon';
8
- import { DsIconButtonComponent } from '@propbinder/design-system';
9
- import { IonContent, ModalController } from '@ionic/angular/standalone';
10
-
11
- /**
12
- * Whitelabel Demo Modal Component
13
- *
14
- * Demonstrates the whitelabeling system with theme selection, brand colors, and logo previews.
15
- * Opens as a full-screen modal similar to post details.
16
- */
17
- @Component({
18
- selector: 'ds-whitelabel-demo-modal',
19
- standalone: true,
20
- imports: [
21
- CommonModule,
22
- FormsModule,
23
- IonContent,
24
- DsLogoComponent,
25
- DsAvatarWithBadgeComponent,
26
- DsAppIconComponent,
27
- DsIconButtonComponent
28
- ],
29
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
30
- styles: [`
31
- /* Host fills the modal with flex layout */
32
- :host {
33
- display: flex;
34
- flex-direction: column;
35
- height: 100%;
36
- width: 100%;
37
- background: var(--color-background-neutral-primary, #ffffff);
38
- }
39
-
40
- /* Fixed header at top */
41
- .modal-header {
42
- flex-shrink: 0;
43
- background: var(--color-background-neutral-primary, #ffffff);
44
- border-bottom: 1px solid var(--border-color-default, #e0e0e0);
45
- padding: 0 16px;
46
- }
47
-
48
- /* ion-content fills remaining space and scrolls */
49
- ion-content,
50
- .modal-content {
51
- --background: #ffffff;
52
- flex: 1;
53
- width: 100%;
54
- }
55
-
56
- .header-content {
57
- display: flex;
58
- align-items: center;
59
- justify-content: space-between;
60
- gap: 12px;
61
- min-height: 56px;
62
- }
63
-
64
- .header-title {
65
- font-family: 'Brockmann', sans-serif;
66
- font-size: 17px;
67
- font-weight: 600;
68
- color: var(--color-text-primary, #1a1a1a);
69
- flex: 1;
70
- }
71
-
72
- .close-button {
73
- flex-shrink: 0;
74
- border-radius: 50%;
75
- }
76
-
77
- .close-button::ng-deep button {
78
- border-radius: 50% !important;
79
- width: 36px !important;
80
- height: 36px !important;
81
- min-width: 36px !important;
82
- min-height: 36px !important;
83
- padding: 0 !important;
84
- display: flex !important;
85
- align-items: center !important;
86
- justify-content: center !important;
87
- background: var(--color-background-neutral-secondary, #f5f5f5) !important;
88
- color: var(--color-text-primary, #1a1a1a) !important;
89
- }
90
-
91
- .demo-container {
92
- padding: 20px;
93
- max-width: 600px;
94
- margin: 0 auto;
95
- width: 100%;
96
- }
97
-
98
- .demo-section {
99
- margin-bottom: 32px;
100
- }
101
-
102
- .demo-section h2 {
103
- margin-bottom: 16px;
104
- font-size: 18px;
105
- font-weight: 600;
106
- color: #333;
107
- }
108
-
109
- /* Theme Selection */
110
- .theme-buttons {
111
- display: flex;
112
- gap: 12px;
113
- flex-wrap: wrap;
114
- }
115
-
116
- .theme-btn {
117
- padding: 8px 16px;
118
- border-radius: 8px;
119
- font-size: 14px;
120
- font-weight: 500;
121
- border: none;
122
- cursor: pointer;
123
- transition: all 0.2s ease;
124
- background: #e0e0e0;
125
- color: #333;
126
- }
127
-
128
- .theme-btn:active {
129
- transform: scale(0.98);
130
- }
131
-
132
- .theme-btn.active {
133
- background: var(--color-secondary-surface);
134
- color: var(--color-secondary-content);
135
- }
136
-
137
- /* Logo Preview */
138
- .logo-preview {
139
- display: flex;
140
- align-items: center;
141
- justify-content: center;
142
- padding: 24px;
143
- background: var(--color-brand-secondary);
144
- border-radius: 12px;
145
- min-height: 80px;
146
- }
147
-
148
- .logomark-preview {
149
- display: flex;
150
- align-items: center;
151
- justify-content: center;
152
- padding: 24px;
153
- background: white;
154
- border: 1px solid #e0e0e0;
155
- border-radius: 12px;
156
- min-height: 80px;
157
- }
158
-
159
- .preview-grid {
160
- display: grid;
161
- grid-template-columns: 1fr 1fr;
162
- gap: 16px;
163
- }
164
-
165
- .preview-tile {
166
- background: white;
167
- border-radius: 12px;
168
- }
169
-
170
- .preview-tile h3 {
171
- font-size: 13px;
172
- font-weight: 600;
173
- color: #666;
174
- margin-top: 0;
175
- margin-bottom: 12px;
176
- }
177
-
178
- /* App Icon Sizes */
179
- .app-icon-sizes {
180
- display: flex;
181
- gap: 24px;
182
- align-items: flex-end;
183
- justify-content: center;
184
- padding: 24px;
185
- background: white;
186
- border-radius: 12px;
187
- border: 1px solid var(--border-color-default, #e0e0e0);
188
- flex-wrap: wrap;
189
- }
190
-
191
- .app-icon-demo {
192
- display: flex;
193
- flex-direction: column;
194
- align-items: center;
195
- gap: 12px;
196
- /* Use app icon surface color as app icon background */
197
- --app-icon-background: var(--color-app-icon-surface);
198
- }
199
-
200
- .app-icon-demo span {
201
- font-size: 12px;
202
- color: #666;
203
- font-family: monospace;
204
- }
205
-
206
- /* Brand Colors */
207
- .color-section {
208
- background: white;
209
- border-radius: 12px;
210
- }
211
-
212
- .color-swatches {
213
- display: grid;
214
- grid-template-columns: 1fr 1fr;
215
- gap: 16px;
216
- margin-bottom: 24px;
217
- }
218
-
219
- .swatch {
220
- padding: 16px;
221
- border-radius: 8px;
222
- text-align: center;
223
- }
224
-
225
- .swatch-label {
226
- font-size: 12px;
227
- font-weight: 600;
228
- margin-bottom: 4px;
229
- }
230
-
231
- .swatch-value {
232
- font-size: 11px;
233
- opacity: 0.8;
234
- font-family: monospace;
235
- }
236
-
237
- .swatch--app-icon-surface {
238
- background: var(--color-app-icon-surface);
239
- color: var(--color-app-icon-content);
240
- }
241
-
242
- .swatch--app-icon-content {
243
- background: var(--color-app-icon-content);
244
- color: var(--color-app-icon-surface);
245
- border: 1px solid #e0e0e0;
246
- }
247
-
248
- .swatch--accent {
249
- background: var(--color-accent);
250
- color: var(--color-on-accent);
251
- }
252
-
253
- .swatch--on-accent {
254
- background: var(--color-on-accent);
255
- color: var(--color-accent);
256
- border: 1px solid #e0e0e0;
257
- }
258
-
259
- .swatch--header-surface {
260
- background: var(--color-header-surface);
261
- color: var(--color-header-content);
262
- }
263
-
264
- .swatch--header-content {
265
- background: var(--color-header-content);
266
- color: var(--color-header-surface);
267
- border: 1px solid #e0e0e0;
268
- }
269
-
270
- /* Color Inputs */
271
- .color-inputs {
272
- display: flex;
273
- flex-direction: column;
274
- gap: 12px;
275
- }
276
-
277
- .color-group-label {
278
- font-size: 13px;
279
- font-weight: 600;
280
- color: #333;
281
- margin-top: 8px;
282
- }
283
-
284
- .color-row {
285
- display: flex;
286
- align-items: center;
287
- gap: 12px;
288
- }
289
-
290
- .color-row label {
291
- min-width: 70px;
292
- font-size: 13px;
293
- color: #666;
294
- }
295
-
296
- .color-row input[type="color"] {
297
- width: 40px;
298
- height: 32px;
299
- border: none;
300
- border-radius: 6px;
301
- cursor: pointer;
302
- padding: 0;
303
- }
304
-
305
- .color-row input[type="text"] {
306
- flex: 1;
307
- padding: 8px 12px;
308
- border: 1px solid #ddd;
309
- border-radius: 6px;
310
- font-family: monospace;
311
- font-size: 13px;
312
- }
313
-
314
- /* Toggle switch styling */
315
- .toggle-row {
316
- display: flex;
317
- align-items: center;
318
- justify-content: space-between;
319
- gap: 12px;
320
- padding: 12px 0;
321
- }
322
-
323
- .toggle-row label {
324
- font-size: 14px;
325
- color: #333;
326
- font-weight: 500;
327
- }
328
-
329
- .toggle-row input[type="checkbox"] {
330
- width: 48px;
331
- height: 28px;
332
- -webkit-appearance: none;
333
- appearance: none;
334
- background: #ddd;
335
- border-radius: 14px;
336
- position: relative;
337
- cursor: pointer;
338
- transition: background 0.2s ease;
339
- flex-shrink: 0;
340
- }
341
-
342
- .toggle-row input[type="checkbox"]:checked {
343
- background: var(--color-accent);
344
- }
345
-
346
- .toggle-row input[type="checkbox"]::before {
347
- content: '';
348
- position: absolute;
349
- width: 24px;
350
- height: 24px;
351
- border-radius: 50%;
352
- background: white;
353
- top: 2px;
354
- left: 2px;
355
- transition: transform 0.2s ease;
356
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
357
- }
358
-
359
- .toggle-row input[type="checkbox"]:checked::before {
360
- transform: translateX(20px);
361
- }
362
-
363
- /* Radio button styling */
364
- .radio-group {
365
- display: flex;
366
- gap: 16px;
367
- margin-bottom: 16px;
368
- }
369
-
370
- .radio-option {
371
- display: flex;
372
- align-items: center;
373
- gap: 8px;
374
- cursor: pointer;
375
- }
376
-
377
- .radio-option input[type="radio"] {
378
- width: 18px;
379
- height: 18px;
380
- cursor: pointer;
381
- accent-color: var(--color-accent);
382
- }
383
-
384
- .radio-option label {
385
- font-size: 14px;
386
- color: #333;
387
- cursor: pointer;
388
- font-weight: 500;
389
- }
390
-
391
- /* Background preview */
392
- .bg-preview {
393
- height: 80px;
394
- border-radius: 8px;
395
- margin-bottom: 16px;
396
- border: 1px solid #e0e0e0;
397
- position: relative;
398
- overflow: hidden;
399
- }
400
-
401
- .bg-preview::after {
402
- content: 'Preview';
403
- position: absolute;
404
- top: 50%;
405
- left: 50%;
406
- transform: translate(-50%, -50%);
407
- font-size: 12px;
408
- font-weight: 600;
409
- color: rgba(0, 0, 0, 0.3);
410
- text-shadow: 0 1px 2px rgba(255, 255, 255, 0.5);
411
- }
412
-
413
- /* Safe area support */
414
- @supports (padding: env(safe-area-inset-bottom)) {
415
- .demo-container {
416
- padding-bottom: calc(20px + env(safe-area-inset-bottom));
417
- }
418
- }
419
- `],
420
- template: `
421
- <!-- Fixed Header -->
422
- <div class="modal-header">
423
- <div class="header-content">
424
- <span class="header-title">Whitelabel</span>
425
- <ds-icon-button
426
- icon="remixCloseLine"
427
- variant="secondary"
428
- size="lg"
429
- (click)="close()"
430
- class="close-button"
431
- aria-label="Close">
432
- </ds-icon-button>
433
- </div>
434
- </div>
435
-
436
- <!-- Scrollable Content -->
437
- <ion-content [scrollY]="true" class="modal-content">
438
- <div class="demo-container">
439
- <!-- Theme Selection -->
440
- <div class="demo-section">
441
- <h2>Theme</h2>
442
- <div class="theme-buttons">
443
- <button class="theme-btn" (click)="applyDefaultTheme()" [class.active]="currentTheme === 'default'">
444
- Propbinder
445
- </button>
446
- <button class="theme-btn" (click)="applyCejTheme()" [class.active]="currentTheme === 'cej'">
447
- CEJ
448
- </button>
449
- <button class="theme-btn" (click)="applyPkaTheme()" [class.active]="currentTheme === 'pka'">
450
- PKA
451
- </button>
452
- <button class="theme-btn" (click)="applyClaveTheme()" [class.active]="currentTheme === 'clave'">
453
- Clave
454
- </button>
455
- <button class="theme-btn" (click)="applyFreedomTheme()" [class.active]="currentTheme === 'freedom'">
456
- Freedom
457
- </button>
458
- <button class="theme-btn" (click)="applyCobblestoneTheme()" [class.active]="currentTheme === 'cobblestone'">
459
- Cobblestone
460
- </button>
461
- </div>
462
- </div>
463
-
464
- <!-- Sign-in Page Options -->
465
- <div class="demo-section">
466
- <h2>Sign-in Page</h2>
467
- <div class="color-section">
468
- <div class="toggle-row">
469
- <label>Show City Illustration</label>
470
- <input
471
- type="checkbox"
472
- [checked]="whitelabelService.showCityIllustration()"
473
- [disabled]="currentTheme !== 'default'"
474
- (change)="toggleCityIllustration()"
475
- [style.opacity]="currentTheme !== 'default' ? '0.5' : '1'"
476
- [style.cursor]="currentTheme !== 'default' ? 'not-allowed' : 'pointer'"
477
- />
478
- </div>
479
-
480
- <div style="margin-top: 24px;">
481
- <h3 style="font-size: 14px; font-weight: 600; color: #333; margin: 0 0 12px 0;">Background</h3>
482
-
483
- <!-- Background type selector -->
484
- <div class="radio-group">
485
- <div class="radio-option">
486
- <input
487
- type="radio"
488
- id="bg-solid"
489
- name="bgType"
490
- value="solid"
491
- [checked]="whitelabelService.signInBgType() === 'solid'"
492
- (change)="updateSignInBgType('solid')"
493
- />
494
- <label for="bg-solid">Solid</label>
495
- </div>
496
- <div class="radio-option">
497
- <input
498
- type="radio"
499
- id="bg-gradient"
500
- name="bgType"
501
- value="gradient"
502
- [checked]="whitelabelService.signInBgType() === 'gradient'"
503
- (change)="updateSignInBgType('gradient')"
504
- />
505
- <label for="bg-gradient">Gradient</label>
506
- </div>
507
- </div>
508
-
509
- <!-- Background preview -->
510
- <div class="bg-preview" [style.background]="whitelabelService.signInBgStyle()"></div>
511
-
512
- <!-- Solid color input -->
513
- @if (whitelabelService.signInBgType() === 'solid') {
514
- <div class="color-row">
515
- <label>Color</label>
516
- <input
517
- type="color"
518
- [(ngModel)]="customSignInBgSolid"
519
- (change)="applySignInBackground()"
520
- />
521
- <input
522
- type="text"
523
- [(ngModel)]="customSignInBgSolid"
524
- (change)="applySignInBackground()"
525
- />
526
- </div>
527
- }
528
-
529
- <!-- Gradient color inputs -->
530
- @if (whitelabelService.signInBgType() === 'gradient') {
531
- <div class="color-row">
532
- <label>Start</label>
533
- <input
534
- type="color"
535
- [(ngModel)]="customSignInBgGradientStart"
536
- (change)="applySignInBackground()"
537
- />
538
- <input
539
- type="text"
540
- [(ngModel)]="customSignInBgGradientStart"
541
- (change)="applySignInBackground()"
542
- />
543
- </div>
544
- <div class="color-row">
545
- <label>End</label>
546
- <input
547
- type="color"
548
- [(ngModel)]="customSignInBgGradientEnd"
549
- (change)="applySignInBackground()"
550
- />
551
- <input
552
- type="text"
553
- [(ngModel)]="customSignInBgGradientEnd"
554
- (change)="applySignInBackground()"
555
- />
556
- </div>
557
- }
558
-
559
- <!-- Sign-in content color -->
560
- <div style="margin-top: 24px;">
561
- <h3 style="font-size: 14px; font-weight: 600; color: #333; margin: 0 0 12px 0;">Content Color</h3>
562
- <div class="color-row">
563
- <label>Text</label>
564
- <input
565
- type="color"
566
- [(ngModel)]="customSignInContentColor"
567
- (change)="applySignInContentColor()"
568
- />
569
- <input
570
- type="text"
571
- [(ngModel)]="customSignInContentColor"
572
- (change)="applySignInContentColor()"
573
- />
574
- </div>
575
- </div>
576
- </div>
577
- </div>
578
- </div>
579
-
580
- <!-- Logo & Logomark Preview -->
581
- <div class="demo-section">
582
- <h2>Logo Preview</h2>
583
-
584
- <!-- Logo Size Selector -->
585
- <div style="margin-bottom: 16px;">
586
- <h3 style="font-size: 14px; font-weight: 600; color: #333; margin: 0 0 12px 0;">Header Logo Size</h3>
587
- <div class="theme-buttons">
588
- <button
589
- class="theme-btn"
590
- (click)="updateLogoSize('sm')"
591
- [class.active]="whitelabelService.logoSize() === 'sm'">
592
- Small (24px)
593
- </button>
594
- <button
595
- class="theme-btn"
596
- (click)="updateLogoSize('md')"
597
- [class.active]="whitelabelService.logoSize() === 'md'">
598
- Medium (28px)
599
- </button>
600
- <button
601
- class="theme-btn"
602
- (click)="updateLogoSize('lg')"
603
- [class.active]="whitelabelService.logoSize() === 'lg'">
604
- Large (32px)
605
- </button>
606
- <button
607
- class="theme-btn"
608
- (click)="updateLogoSize('xl')"
609
- [class.active]="whitelabelService.logoSize() === 'xl'">
610
- XLarge (36px)
611
- </button>
612
- </div>
613
- </div>
614
-
615
- <div class="preview-grid">
616
- <div class="preview-tile">
617
- <h3>Logo</h3>
618
- <div class="logo-preview">
619
- <ds-logo variant="full" />
620
- </div>
621
- </div>
622
- <div class="preview-tile">
623
- <h3>Logomark</h3>
624
- <div class="logomark-preview">
625
- <ds-avatar-with-badge
626
- [type]="'initials'"
627
- [initials]="'KN'"
628
- [size]="'md'"
629
- [badgePosition]="'bottom-right'"
630
- />
631
- </div>
632
- </div>
633
- </div>
634
- </div>
635
-
636
- <!-- App Icon -->
637
- <div class="demo-section">
638
- <h2>App Icon</h2>
639
- <div class="app-icon-sizes">
640
- <div class="app-icon-demo">
641
- <ds-app-icon size="xl" />
642
- </div>
643
- </div>
644
- </div>
645
-
646
- <!-- Brand Colors -->
647
- <div class="demo-section">
648
- <h2>Brand Colors</h2>
649
- <div class="color-section">
650
- <div class="color-swatches">
651
- <div class="swatch swatch--app-icon-surface">
652
- <div class="swatch-label">App Icon Surface</div>
653
- <div class="swatch-value">{{ whitelabelService.appIconSurface() }}</div>
654
- </div>
655
- <div class="swatch swatch--app-icon-content">
656
- <div class="swatch-label">App Icon Content</div>
657
- <div class="swatch-value">{{ whitelabelService.appIconContent() }}</div>
658
- </div>
659
- <div class="swatch swatch--accent">
660
- <div class="swatch-label">Accent</div>
661
- <div class="swatch-value">{{ whitelabelService.accent() }}</div>
662
- </div>
663
- <div class="swatch swatch--on-accent">
664
- <div class="swatch-label">On Accent</div>
665
- <div class="swatch-value">{{ whitelabelService.onAccent() }}</div>
666
- </div>
667
- <div class="swatch swatch--header-surface">
668
- <div class="swatch-label">Header Surface</div>
669
- <div class="swatch-value">{{ whitelabelService.headerSurface() }}</div>
670
- </div>
671
- <div class="swatch swatch--header-content">
672
- <div class="swatch-label">Header Content</div>
673
- <div class="swatch-value">{{ whitelabelService.headerContent() }}</div>
674
- </div>
675
- </div>
676
-
677
- <div class="color-inputs">
678
- <div class="color-group-label">App Icon</div>
679
- <div class="color-row">
680
- <label>Surface</label>
681
- <input
682
- type="color"
683
- [(ngModel)]="customAppIconSurface"
684
- (change)="applyCustomColors()"
685
- />
686
- <input
687
- type="text"
688
- [(ngModel)]="customAppIconSurface"
689
- (change)="applyCustomColors()"
690
- />
691
- </div>
692
- <div class="color-row">
693
- <label>Content</label>
694
- <input
695
- type="color"
696
- [(ngModel)]="customAppIconContent"
697
- (change)="applyCustomColors()"
698
- />
699
- <input
700
- type="text"
701
- [(ngModel)]="customAppIconContent"
702
- (change)="applyCustomColors()"
703
- />
704
- </div>
705
-
706
- <div class="color-group-label">Accent</div>
707
- <div class="color-row">
708
- <label>Base</label>
709
- <input
710
- type="color"
711
- [(ngModel)]="customAccent"
712
- (change)="applyCustomColors()"
713
- />
714
- <input
715
- type="text"
716
- [(ngModel)]="customAccent"
717
- (change)="applyCustomColors()"
718
- />
719
- </div>
720
- <div class="color-row">
721
- <label>On Accent</label>
722
- <input
723
- type="color"
724
- [(ngModel)]="customOnAccent"
725
- (change)="applyCustomColors()"
726
- />
727
- <input
728
- type="text"
729
- [(ngModel)]="customOnAccent"
730
- (change)="applyCustomColors()"
731
- />
732
- </div>
733
-
734
- <div class="color-group-label">Header</div>
735
- <div class="color-row">
736
- <label>Surface</label>
737
- <input
738
- type="color"
739
- [(ngModel)]="customHeaderSurface"
740
- (change)="applyCustomColors()"
741
- />
742
- <input
743
- type="text"
744
- [(ngModel)]="customHeaderSurface"
745
- (change)="applyCustomColors()"
746
- />
747
- </div>
748
- <div class="color-row">
749
- <label>Content</label>
750
- <input
751
- type="color"
752
- [(ngModel)]="customHeaderContent"
753
- (change)="applyCustomColors()"
754
- />
755
- <input
756
- type="text"
757
- [(ngModel)]="customHeaderContent"
758
- (change)="applyCustomColors()"
759
- />
760
- </div>
761
- <div class="color-row">
762
- <label>Accent</label>
763
- <input
764
- type="color"
765
- [(ngModel)]="customHeaderAccent"
766
- (change)="applyCustomColors()"
767
- />
768
- <input
769
- type="text"
770
- [(ngModel)]="customHeaderAccent"
771
- (change)="applyCustomColors()"
772
- />
773
- </div>
774
- <div class="color-row">
775
- <label>On Accent</label>
776
- <input
777
- type="color"
778
- [(ngModel)]="customOnHeaderAccent"
779
- (change)="applyCustomColors()"
780
- />
781
- <input
782
- type="text"
783
- [(ngModel)]="customOnHeaderAccent"
784
- (change)="applyCustomColors()"
785
- />
786
- </div>
787
- </div>
788
- </div>
789
- </div>
790
- </div>
791
- </ion-content>
792
- `
793
- })
794
- export class WhitelabelDemoModalComponent implements OnInit {
795
- whitelabelService = inject(WhitelabelService);
796
-
797
- private modalController = inject(ModalController);
798
-
799
- // Current active theme
800
- currentTheme = 'default';
801
-
802
- // Custom color inputs
803
- customAppIconSurface = '#6B5FF5';
804
- customAppIconContent = '#FFFFFF';
805
- customAccent = '#6B5FF5';
806
- customOnAccent = '#FFFFFF';
807
- customHeaderSurface = '#221a4c';
808
- customHeaderContent = '#FFFFFF';
809
- customHeaderAccent = 'rgba(255, 255, 255, 0.15)';
810
- customOnHeaderAccent = '#FFFFFF';
811
-
812
- // Sign-in background inputs
813
- customSignInBgSolid = '#D6C7FF';
814
- customSignInBgGradientStart = '#D6C7FF';
815
- customSignInBgGradientEnd = '#8A9BFF';
816
- customSignInContentColor = '#1a1a1a';
817
-
818
- ngOnInit() {
819
- this.updateCustomColorInputs();
820
- this.updateSignInBgInputs();
821
- this.updateSignInContentColorInput();
822
- this.detectCurrentTheme();
823
- }
824
-
825
- /**
826
- * Detect the current active theme based on colors
827
- */
828
- private detectCurrentTheme() {
829
- const headerSurface = this.whitelabelService.headerSurface().toUpperCase();
830
-
831
- if (headerSurface === '#A70923') {
832
- this.currentTheme = 'cej';
833
- } else if (headerSurface === '#660036') {
834
- this.currentTheme = 'pka';
835
- } else if (headerSurface === '#262424') {
836
- this.currentTheme = 'clave';
837
- } else if (headerSurface === '#1D4A49') {
838
- this.currentTheme = 'freedom';
839
- } else if (headerSurface === '#2C3E50') {
840
- this.currentTheme = 'cobblestone';
841
- } else {
842
- this.currentTheme = 'default';
843
- }
844
- }
845
-
846
- /**
847
- * Close the modal
848
- */
849
- close(): void {
850
- this.modalController.dismiss();
851
- }
852
-
853
- applyDefaultTheme() {
854
- this.currentTheme = 'default';
855
- this.whitelabelService.updateConfig({
856
- logoUrl: '/Assets/logos/propbinder-logomark.svg',
857
- logoMarkUrl: '/Assets/logos/propbinder-logomark.svg',
858
- logoAlt: 'Propbinder',
859
- logoSize: 'md',
860
- appIconSurface: '#6B5FF5',
861
- appIconContent: '#FFFFFF',
862
- accent: '#6B5FF5',
863
- onAccent: '#FFFFFF',
864
- headerSurface: '#221a4c',
865
- headerContent: '#FFFFFF',
866
- headerAccent: '#6B5FF5',
867
- onHeaderAccent: '#FFFFFF',
868
- showCityIllustration: true,
869
- signInBgType: 'gradient',
870
- signInBgSolid: '#D6C7FF',
871
- signInBgGradientStart: '#D6C7FF',
872
- signInBgGradientEnd: '#8A9BFF',
873
- signInContentColor: '#1a1a1a',
874
- organizationName: 'Propbinder',
875
- organizationId: 'default'
876
- });
877
- this.updateCustomColorInputs();
878
- this.updateSignInBgInputs();
879
- this.updateSignInContentColorInput();
880
- }
881
-
882
- applyCejTheme() {
883
- this.currentTheme = 'cej';
884
- this.whitelabelService.updateConfig({
885
- logoUrl: '/Assets/logos/cej-logo.png',
886
- logoMarkUrl: '/Assets/logos/cej-logo.png',
887
- logoAlt: 'CEJ',
888
- logoSize: 'xl',
889
- appIconSurface: '#A70923',
890
- appIconContent: '#FFFFFF',
891
- accent: '#dc092c',
892
- onAccent: '#FFFFFF',
893
- headerSurface: '#A70923',
894
- headerContent: '#FFFFFF',
895
- headerAccent: '#dc092c',
896
- onHeaderAccent: '#FFFFFF',
897
- showCityIllustration: false,
898
- signInBgType: 'gradient',
899
- signInBgSolid: '#FFE5E8',
900
- signInBgGradientStart: '#FFE5E8',
901
- signInBgGradientEnd: '#FFC7CE',
902
- signInContentColor: '#1a1a1a',
903
- organizationName: 'CEJ',
904
- organizationId: 'cej'
905
- });
906
- this.updateCustomColorInputs();
907
- this.updateSignInBgInputs();
908
- this.updateSignInContentColorInput();
909
- }
910
-
911
- applyPkaTheme() {
912
- this.currentTheme = 'pka';
913
- this.whitelabelService.updateConfig({
914
- logoUrl: '/Assets/logos/pka-logo.svg',
915
- logoMarkUrl: '/Assets/logos/pka-logo.svg',
916
- logoAlt: 'PKA',
917
- logoSize: 'md',
918
- appIconSurface: '#CC006C',
919
- appIconContent: '#FFFFFF',
920
- accent: '#CC006C',
921
- onAccent: '#FFFFFF',
922
- headerSurface: '#660036',
923
- headerContent: '#FFFFFF',
924
- headerAccent: '#CC006C',
925
- onHeaderAccent: '#FFFFFF',
926
- showCityIllustration: false,
927
- signInBgType: 'gradient',
928
- signInBgSolid: '#FFE0F0',
929
- signInBgGradientStart: '#FFE0F0',
930
- signInBgGradientEnd: '#FFB3D9',
931
- signInContentColor: '#1a1a1a',
932
- organizationName: 'PKA',
933
- organizationId: 'pka'
934
- });
935
- this.updateCustomColorInputs();
936
- this.updateSignInBgInputs();
937
- this.updateSignInContentColorInput();
938
- }
939
-
940
- applyClaveTheme() {
941
- this.currentTheme = 'clave';
942
- this.whitelabelService.updateConfig({
943
- logoUrl: '/Assets/logos/clave-logo.svg',
944
- logoMarkUrl: '/Assets/logos/clave-logo.svg',
945
- logoAlt: 'Clave',
946
- logoSize: 'lg',
947
- appIconSurface: '#262424',
948
- appIconContent: '#FFFFFF',
949
- accent: '#868764',
950
- onAccent: '#FFFFFF',
951
- headerSurface: '#262424',
952
- headerContent: '#FFFFFF',
953
- headerAccent: '#868764',
954
- onHeaderAccent: '#FFFFFF',
955
- showCityIllustration: false,
956
- signInBgType: 'gradient',
957
- signInBgSolid: '#E8E8E0',
958
- signInBgGradientStart: '#E8E8E0',
959
- signInBgGradientEnd: '#D4D4C3',
960
- signInContentColor: '#1a1a1a',
961
- organizationName: 'Clave',
962
- organizationId: 'clave'
963
- });
964
- this.updateCustomColorInputs();
965
- this.updateSignInBgInputs();
966
- this.updateSignInContentColorInput();
967
- }
968
-
969
- applyFreedomTheme() {
970
- this.currentTheme = 'freedom';
971
- this.whitelabelService.updateConfig({
972
- logoUrl: '/Assets/logos/freedom-logo.svg',
973
- logoMarkUrl: '/Assets/logos/freedom-logomark.svg',
974
- logoAlt: 'Freedom',
975
- logoSize: 'md',
976
- appIconSurface: '#1D4A49',
977
- appIconContent: '#FFFFFF',
978
- accent: '#1D4A49',
979
- onAccent: '#FFFFFF',
980
- headerSurface: '#1D4A49',
981
- headerContent: '#FFFFFF',
982
- headerAccent: '#AACFC3',
983
- onHeaderAccent: '#1D4A49',
984
- showCityIllustration: false,
985
- signInBgType: 'gradient',
986
- signInBgSolid: '#D5E8E6',
987
- signInBgGradientStart: '#D5E8E6',
988
- signInBgGradientEnd: '#AACFC3',
989
- signInContentColor: '#FFFFFF',
990
- organizationName: 'Freedom',
991
- organizationId: 'freedom'
992
- });
993
- this.updateCustomColorInputs();
994
- this.updateSignInBgInputs();
995
- this.updateSignInContentColorInput();
996
- }
997
-
998
- applyCobblestoneTheme() {
999
- this.currentTheme = 'cobblestone';
1000
- this.whitelabelService.updateConfig({
1001
- logoUrl: '/Assets/logos/cobblestone-logo.svg',
1002
- logoMarkUrl: '/Assets/logos/cobblestone-logomark.svg',
1003
- logoAlt: 'Cobblestone',
1004
- logoSize: 'sm',
1005
- appIconSurface: '#2C3E50',
1006
- appIconContent: '#FFFFFF',
1007
- accent: '#3498DB',
1008
- onAccent: '#FFFFFF',
1009
- headerSurface: '#2C3E50',
1010
- headerContent: '#FFFFFF',
1011
- headerAccent: '#3498DB',
1012
- onHeaderAccent: '#FFFFFF',
1013
- showCityIllustration: false,
1014
- signInBgType: 'gradient',
1015
- signInBgSolid: '#E8EEF2',
1016
- signInBgGradientStart: '#E8EEF2',
1017
- signInBgGradientEnd: '#BDC3C7',
1018
- signInContentColor: '#1a1a1a',
1019
- organizationName: 'Cobblestone',
1020
- organizationId: 'cobblestone'
1021
- });
1022
- this.updateCustomColorInputs();
1023
- this.updateSignInBgInputs();
1024
- this.updateSignInContentColorInput();
1025
- }
1026
-
1027
- applyCustomColors() {
1028
- this.whitelabelService.updateColors({
1029
- appIconSurface: this.customAppIconSurface,
1030
- appIconContent: this.customAppIconContent,
1031
- accent: this.customAccent,
1032
- onAccent: this.customOnAccent,
1033
- headerSurface: this.customHeaderSurface,
1034
- headerContent: this.customHeaderContent,
1035
- headerAccent: this.customHeaderAccent,
1036
- onHeaderAccent: this.customOnHeaderAccent
1037
- });
1038
- }
1039
-
1040
- toggleCityIllustration() {
1041
- this.whitelabelService.updateConfig({
1042
- showCityIllustration: !this.whitelabelService.showCityIllustration()
1043
- });
1044
- }
1045
-
1046
- updateSignInBgType(type: 'solid' | 'gradient') {
1047
- this.whitelabelService.updateConfig({
1048
- signInBgType: type
1049
- });
1050
- }
1051
-
1052
- updateLogoSize(size: 'sm' | 'md' | 'lg' | 'xl') {
1053
- this.whitelabelService.updateConfig({
1054
- logoSize: size,
1055
- logoHeight: undefined // Clear custom height to use size-based calculation
1056
- });
1057
- }
1058
-
1059
- applySignInBackground() {
1060
- this.whitelabelService.updateConfig({
1061
- signInBgSolid: this.customSignInBgSolid,
1062
- signInBgGradientStart: this.customSignInBgGradientStart,
1063
- signInBgGradientEnd: this.customSignInBgGradientEnd
1064
- });
1065
- }
1066
-
1067
- applySignInContentColor() {
1068
- this.whitelabelService.updateConfig({
1069
- signInContentColor: this.customSignInContentColor
1070
- });
1071
- }
1072
-
1073
- private updateSignInBgInputs() {
1074
- this.customSignInBgSolid = this.whitelabelService.signInBgSolid();
1075
- this.customSignInBgGradientStart = this.whitelabelService.signInBgGradientStart();
1076
- this.customSignInBgGradientEnd = this.whitelabelService.signInBgGradientEnd();
1077
- }
1078
-
1079
- private updateSignInContentColorInput() {
1080
- this.customSignInContentColor = this.whitelabelService.signInContentColor();
1081
- }
1082
-
1083
- private updateCustomColorInputs() {
1084
- this.customAppIconSurface = this.whitelabelService.appIconSurface();
1085
- this.customAppIconContent = this.whitelabelService.appIconContent();
1086
- this.customAccent = this.whitelabelService.accent();
1087
- this.customOnAccent = this.whitelabelService.onAccent();
1088
- this.customHeaderSurface = this.whitelabelService.headerSurface();
1089
- this.customHeaderContent = this.whitelabelService.headerContent();
1090
- this.customHeaderAccent = this.whitelabelService.headerAccent();
1091
- this.customOnHeaderAccent = this.whitelabelService.onHeaderAccent();
1092
- }
1093
- }
1094
-