@propbinder/mobile-design 0.2.48 → 0.2.50

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/ng-package.json +24 -0
  2. package/package.json +3 -39
  3. package/src/animations/page-transitions.ts +165 -0
  4. package/src/assets/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
  5. package/src/assets/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
  6. package/src/assets/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
  7. package/src/components/action-list-item/ds-mobile-action-list-item.ts +102 -0
  8. package/src/components/action-list-item/index.ts +2 -0
  9. package/src/components/app-icon/ds-app-icon.ts +133 -0
  10. package/src/components/app-icon/index.ts +2 -0
  11. package/src/components/attachment-preview/ds-mobile-attachment-preview.css +139 -0
  12. package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +164 -0
  13. package/src/components/attachment-preview/index.ts +1 -0
  14. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +142 -0
  15. package/src/components/avatar-with-badge/index.ts +2 -0
  16. package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +71 -0
  17. package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +121 -0
  18. package/src/components/booking-modal/ds-mobile-booking-modal.ts +598 -0
  19. package/src/components/booking-modal/ds-mobile-booking-summary.ts +161 -0
  20. package/src/components/booking-modal/index.ts +4 -0
  21. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +266 -0
  22. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +146 -0
  23. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +156 -0
  24. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +101 -0
  25. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +169 -0
  26. package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +211 -0
  27. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +578 -0
  28. package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +614 -0
  29. package/src/components/bottom-sheet/index.ts +8 -0
  30. package/src/components/bottom-sheet/modal-shadow-fix.ts +42 -0
  31. package/src/components/card-inline/ds-mobile-card-inline.ts +301 -0
  32. package/src/components/card-inline/index.ts +2 -0
  33. package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +118 -0
  34. package/src/components/card-inline-banner/index.ts +1 -0
  35. package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +120 -0
  36. package/src/components/card-inline-contact/index.ts +1 -0
  37. package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +141 -0
  38. package/src/components/card-inline-file/index.ts +1 -0
  39. package/src/components/chat-modal/ds-mobile-chat-modal.css +159 -0
  40. package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +105 -0
  41. package/src/components/chat-modal/ds-mobile-chat-modal.ts +918 -0
  42. package/src/components/chat-modal/index.ts +8 -0
  43. package/src/components/comment/ds-mobile-comment.ts +568 -0
  44. package/src/components/comment/index.ts +2 -0
  45. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +182 -0
  46. package/src/components/contact-list-item/index.ts +2 -0
  47. package/src/components/content/ds-mobile-content.ts +139 -0
  48. package/src/components/content/index.ts +2 -0
  49. package/src/components/dropdown/ds-mobile-dropdown.css +199 -0
  50. package/src/components/dropdown/ds-mobile-dropdown.ts +340 -0
  51. package/src/components/dropdown/index.ts +2 -0
  52. package/src/components/ds-mobile-tabs.css +407 -0
  53. package/src/components/ds-mobile-tabs.ts +216 -0
  54. package/src/components/empty-state/ds-mobile-empty-state.ts +120 -0
  55. package/src/components/empty-state/index.ts +2 -0
  56. package/src/components/fab/ds-mobile-fab.ts +315 -0
  57. package/src/components/fab/index.ts +1 -0
  58. package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +121 -0
  59. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +189 -0
  60. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +135 -0
  61. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +656 -0
  62. package/src/components/facility-creation-modal/index.ts +9 -0
  63. package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +105 -0
  64. package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +188 -0
  65. package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +460 -0
  66. package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +134 -0
  67. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +69 -0
  68. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +379 -0
  69. package/src/components/facility-detail-modal/index.ts +2 -0
  70. package/src/components/file-attachment/ds-mobile-file-attachment.ts +164 -0
  71. package/src/components/file-attachment/index.ts +2 -0
  72. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +214 -0
  73. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +84 -0
  74. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +424 -0
  75. package/src/components/handbook-detail-modal/index.ts +3 -0
  76. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +175 -0
  77. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +533 -0
  78. package/src/components/handbook-folder/index.ts +4 -0
  79. package/src/components/header-content/ds-mobile-header-content.ts +222 -0
  80. package/src/components/header-content/index.ts +2 -0
  81. package/src/components/illustration/ds-mobile-illustration.ts +124 -0
  82. package/src/components/illustration/index.ts +2 -0
  83. package/src/components/index.ts +124 -0
  84. package/src/components/inline-photo/ds-mobile-inline-photo.ts +361 -0
  85. package/src/components/inline-photo/index.ts +1 -0
  86. package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +132 -0
  87. package/src/components/inline-tabs/index.ts +2 -0
  88. package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +350 -0
  89. package/src/components/interactive-list-item-booking/index.ts +1 -0
  90. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +321 -0
  91. package/src/components/interactive-list-item-inquiry/index.ts +2 -0
  92. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +237 -0
  93. package/src/components/interactive-list-item-message/index.ts +2 -0
  94. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +549 -0
  95. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +124 -0
  96. package/src/components/interactive-list-item-post/index.ts +13 -0
  97. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +315 -0
  98. package/src/components/lightbox/ds-mobile-lightbox-header.ts +202 -0
  99. package/src/components/lightbox/ds-mobile-lightbox-image.ts +484 -0
  100. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +377 -0
  101. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +374 -0
  102. package/src/components/lightbox/ds-mobile-lightbox.css +587 -0
  103. package/src/components/lightbox/ds-mobile-lightbox.service.ts +296 -0
  104. package/src/components/lightbox/ds-mobile-lightbox.ts +529 -0
  105. package/src/components/lightbox/index.ts +22 -0
  106. package/src/components/list-item/ds-mobile-list-item.ts +603 -0
  107. package/src/components/list-item/index.ts +2 -0
  108. package/src/components/list-item-static/ds-mobile-list-item-static.ts +133 -0
  109. package/src/components/list-item-static/index.ts +2 -0
  110. package/src/components/loader-overlay/ds-mobile-loader-overlay.css +49 -0
  111. package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +77 -0
  112. package/src/components/loader-overlay/index.ts +1 -0
  113. package/src/components/logo/ds-logo.ts +95 -0
  114. package/src/components/logo/index.ts +2 -0
  115. package/src/components/message-bubble/ds-mobile-message-bubble.ts +633 -0
  116. package/src/components/message-bubble/index.ts +7 -0
  117. package/src/components/message-composer/ds-mobile-message-composer.ts +1146 -0
  118. package/src/components/message-composer/index.ts +7 -0
  119. package/src/components/modal/ds-mobile-modal.css +163 -0
  120. package/src/components/modal/ds-mobile-modal.service.ts +329 -0
  121. package/src/components/modal/index.ts +8 -0
  122. package/src/components/modal-base/ds-mobile-modal-base.css +378 -0
  123. package/src/components/modal-base/ds-mobile-modal-base.ts +261 -0
  124. package/src/components/modal-base/index.ts +2 -0
  125. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +112 -0
  126. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +93 -0
  127. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +442 -0
  128. package/src/components/new-inquiry-modal/index.ts +4 -0
  129. package/src/components/offline-banner/ds-mobile-offline-banner.ts +135 -0
  130. package/src/components/offline-banner/index.ts +1 -0
  131. package/src/components/page-details/ds-mobile-page-details.css +83 -0
  132. package/src/components/page-details/ds-mobile-page-details.ts +282 -0
  133. package/src/components/page-details/index.ts +2 -0
  134. package/src/components/page-main/ds-mobile-page-main.css +68 -0
  135. package/src/components/page-main/ds-mobile-page-main.ts +421 -0
  136. package/src/components/page-main/index.ts +2 -0
  137. package/src/components/post-composer/ds-mobile-post-composer.ts +140 -0
  138. package/src/components/post-composer/index.ts +2 -0
  139. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +390 -0
  140. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +108 -0
  141. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +722 -0
  142. package/src/components/post-detail-modal/index.ts +9 -0
  143. package/src/components/property-banner/ds-mobile-property-banner.ts +95 -0
  144. package/src/components/property-banner/index.ts +2 -0
  145. package/src/components/section/ds-mobile-section.ts +263 -0
  146. package/src/components/section/index.ts +2 -0
  147. package/src/components/shared/directives/index.ts +2 -0
  148. package/src/components/shared/directives/long-press.directive.ts +212 -0
  149. package/src/components/shared/index.ts +3 -0
  150. package/src/components/shared/mobile-modal-base.ts +457 -0
  151. package/src/components/shared/mobile-page-base.ts +204 -0
  152. package/src/components/swiper/ds-mobile-swiper-with-nav.ts +160 -0
  153. package/src/components/swiper/ds-mobile-swiper.ts +327 -0
  154. package/src/components/swiper/index.ts +3 -0
  155. package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +129 -0
  156. package/src/components/system-message-banner/index.ts +2 -0
  157. package/src/components/tab-bar/ds-mobile-tab-bar.css +533 -0
  158. package/src/components/tab-bar/ds-mobile-tab-bar.ts +735 -0
  159. package/src/components/tab-bar/index.ts +2 -0
  160. package/src/components/tabs/ds-mobile-tabs.css +25 -0
  161. package/src/components/tabs/ds-mobile-tabs.ts +89 -0
  162. package/src/components/tabs/index.ts +2 -0
  163. package/src/components/text-input/ds-text-input.ts +287 -0
  164. package/src/components/text-input/index.ts +2 -0
  165. package/src/examples/booking.page.ts +434 -0
  166. package/src/examples/community.page.ts +776 -0
  167. package/src/examples/handbook.page.ts +324 -0
  168. package/src/examples/home.page.ts +347 -0
  169. package/src/examples/index.ts +12 -0
  170. package/src/examples/inquiries.example.ts +273 -0
  171. package/src/examples/inquiry-detail.example.css +189 -0
  172. package/src/examples/inquiry-detail.example.ts +415 -0
  173. package/src/examples/mobile-tabs-example.component.ts +208 -0
  174. package/src/examples/post-create.page.ts +311 -0
  175. package/src/examples/post-detail.page.ts +296 -0
  176. package/src/examples/sign-in.page.ts +291 -0
  177. package/src/examples/whitelabel-demo-modal.component.ts +1094 -0
  178. package/src/examples/whitelabel-demo-modal.service.ts +77 -0
  179. package/src/models/index.ts +7 -0
  180. package/src/models/post.model.ts +41 -0
  181. package/src/pages/community.page.ts +769 -0
  182. package/src/pages/handbook.page.ts +388 -0
  183. package/src/pages/home.page.ts +303 -0
  184. package/src/pages/index.ts +11 -0
  185. package/src/pages/inquiries.example.ts +273 -0
  186. package/src/pages/inquiry-detail.example.css +189 -0
  187. package/src/pages/inquiry-detail.example.ts +415 -0
  188. package/src/pages/mobile-tabs-example.component.ts +179 -0
  189. package/src/pages/post-create.page.ts +311 -0
  190. package/src/pages/post-detail.page.ts +296 -0
  191. package/src/pages/sign-in.page.ts +291 -0
  192. package/src/pages/whitelabel-demo-modal.component.ts +1094 -0
  193. package/src/pages/whitelabel-demo-modal.service.ts +77 -0
  194. package/src/public-api.ts +6 -0
  195. package/src/services/base-modal.service.ts +101 -0
  196. package/src/services/index.ts +11 -0
  197. package/src/services/posts.service.ts +542 -0
  198. package/src/services/tracking-permission.service.ts +88 -0
  199. package/src/services/user.service.ts +60 -0
  200. package/src/services/whitelabel.service.ts +675 -0
  201. package/{styles → src/styles}/ionic.css +25 -0
  202. package/tsconfig.lib.json +17 -0
  203. package/tsconfig.lib.prod.json +9 -0
  204. package/tsconfig.spec.json +13 -0
  205. package/fesm2022/propbinder-mobile-design.mjs +0 -26168
  206. package/fesm2022/propbinder-mobile-design.mjs.map +0 -1
  207. package/index.d.ts +0 -8169
  208. /package/{assets → src/assets}/fonts/Brockmann-Bold.otf +0 -0
  209. /package/{assets → src/assets}/fonts/Brockmann-BoldItalic.otf +0 -0
  210. /package/{assets → src/assets}/fonts/Brockmann-Medium.otf +0 -0
  211. /package/{assets → src/assets}/fonts/Brockmann-MediumItalic.otf +0 -0
  212. /package/{assets → src/assets}/fonts/Brockmann-Regular.otf +0 -0
  213. /package/{assets → src/assets}/fonts/Brockmann-RegularItalic.otf +0 -0
  214. /package/{assets → src/assets}/fonts/Brockmann-SemiBold.otf +0 -0
  215. /package/{assets → src/assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  216. /package/{assets → src/assets}/fonts/Brockmann_desktop_license.pdf +0 -0
  217. /package/{assets → src/assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
  218. /package/{assets → src/assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
  219. /package/{assets → src/assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
  220. /package/{styles → src/components/shared}/mobile-common.css +0 -0
  221. /package/{styles → src/components/shared}/mobile-page-base.css +0 -0
@@ -0,0 +1,133 @@
1
+ import { Component, input, computed } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+
4
+ /**
5
+ * DsMobileListItemStaticComponent
6
+ *
7
+ * A read-only version of the interactive list item component.
8
+ * Used for displaying static information without interaction.
9
+ *
10
+ * This component has the same structure as the interactive list item but without:
11
+ * - Padding
12
+ * - Rounded corners
13
+ * - Hover states
14
+ * - Click interactions
15
+ * - Background fill (transparent)
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <ds-mobile-list-item-static
20
+ * [leadingSize]="'40px'">
21
+ *
22
+ * <div content-leading>
23
+ * <ds-avatar initials="JD" />
24
+ * </div>
25
+ *
26
+ * <div content-main>
27
+ * <h3>Main Content</h3>
28
+ * <p>Supporting text goes here...</p>
29
+ * </div>
30
+ *
31
+ * <div content-trailing>
32
+ * <span>Info</span>
33
+ * </div>
34
+ * </ds-mobile-list-item-static>
35
+ * ```
36
+ */
37
+ @Component({
38
+ selector: 'ds-mobile-list-item-static',
39
+ standalone: true,
40
+ imports: [CommonModule],
41
+ host: {
42
+ '[style.--leading-size]': 'leadingSize()'
43
+ },
44
+ styles: [`
45
+ :host {
46
+ display: flex;
47
+ flex-direction: row;
48
+ align-items: flex-start;
49
+ background: transparent;
50
+ padding: 0;
51
+ gap: 12px;
52
+ position: relative;
53
+ --leading-size: 32px;
54
+ }
55
+
56
+ :host::after {
57
+ content: '';
58
+ position: absolute;
59
+ bottom: -10px;
60
+ left: calc(var(--leading-size) + 12px);
61
+ right: 0;
62
+ height: 1px;
63
+ background: var(--border-color-default);
64
+ }
65
+
66
+ :host:last-child::after {
67
+ display: none;
68
+ }
69
+
70
+ .content-leading {
71
+ flex-shrink: 0;
72
+ width: var(--leading-size);
73
+ min-height: var(--leading-size);
74
+ height: auto;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ }
79
+
80
+ .content-main {
81
+ flex: 1;
82
+ min-width: 0;
83
+ min-height: var(--leading-size);
84
+ display: flex;
85
+ flex-direction: column;
86
+ justify-content: center;
87
+ align-items: flex-start;
88
+ gap: 8px;
89
+ }
90
+
91
+ .content-trailing {
92
+ flex-shrink: 0;
93
+ display: flex;
94
+ align-items: flex-start;
95
+ }
96
+ `],
97
+ template: `
98
+ @if (hasLeadingContent()) {
99
+ <div class="content-leading">
100
+ <ng-content select="[content-leading]" />
101
+ </div>
102
+ }
103
+
104
+ <div class="content-main">
105
+ <ng-content select="[content-main]" />
106
+ <ng-content />
107
+ </div>
108
+
109
+ @if (hasTrailingContent()) {
110
+ <div class="content-trailing">
111
+ <ng-content select="[content-trailing]" />
112
+ </div>
113
+ }
114
+ `
115
+ })
116
+ export class DsMobileListItemStaticComponent {
117
+ /**
118
+ * CSS size value for the leading content area (e.g., '32px', '40px', '48px')
119
+ * Defaults to '32px' for standard list item avatars
120
+ */
121
+ leadingSize = input<string>('32px');
122
+
123
+ /**
124
+ * Check if leading content slot has content
125
+ */
126
+ hasLeadingContent = computed(() => true); // Always render slot container for consistency
127
+
128
+ /**
129
+ * Check if trailing content slot has content
130
+ */
131
+ hasTrailingContent = computed(() => true); // Always render slot container for consistency
132
+ }
133
+
@@ -0,0 +1,2 @@
1
+ export * from './ds-mobile-list-item-static';
2
+
@@ -0,0 +1,49 @@
1
+ /* ============================================
2
+ LOADER OVERLAY COMPONENT
3
+ ============================================ */
4
+
5
+ :host {
6
+ display: contents;
7
+ }
8
+
9
+ /* ============================================
10
+ OVERLAY CONTAINER
11
+ ============================================ */
12
+
13
+ .loader-overlay {
14
+ position: absolute;
15
+ inset: 0;
16
+ background: var(--color-background-neutral-primary, #ffffff);
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ z-index: 100;
21
+ }
22
+
23
+ /* ============================================
24
+ SPINNER
25
+ ============================================ */
26
+
27
+ .spinner {
28
+ border: 2px solid var(--color-border-neutral-secondary, #E5E5E5);
29
+ border-top-color: var(--color-accent, #6B5FF5);
30
+ border-radius: 50%;
31
+ animation: spin 0.6s linear infinite;
32
+ }
33
+
34
+ @keyframes spin {
35
+ to {
36
+ transform: rotate(360deg);
37
+ }
38
+ }
39
+
40
+ /* ============================================
41
+ DARK MODE SUPPORT (Optional)
42
+ ============================================ */
43
+
44
+ @media (prefers-color-scheme: dark) {
45
+ .spinner {
46
+ border-color: rgba(255, 255, 255, 0.2);
47
+ border-top-color: var(--color-accent, #6B5FF5);
48
+ }
49
+ }
@@ -0,0 +1,77 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+
4
+ /**
5
+ * DsMobileLoaderOverlayComponent
6
+ *
7
+ * Reusable loader overlay component that displays a spinner centered over its container.
8
+ * Designed to overlay images or other content during loading states.
9
+ *
10
+ * Features:
11
+ * - Semi-transparent white background overlay
12
+ * - Centered animated spinner
13
+ * - Customizable spinner size
14
+ * - Absolute positioning to cover parent
15
+ * - Accessible with proper z-index stacking
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <!-- Basic usage -->
20
+ * <div style="position: relative;">
21
+ * <img src="image.jpg" alt="Content" />
22
+ * @if (isLoading) {
23
+ * <ds-mobile-loader-overlay />
24
+ * }
25
+ * </div>
26
+ *
27
+ * <!-- With custom spinner size -->
28
+ * <div style="position: relative;">
29
+ * <div class="content">Loading content...</div>
30
+ * <ds-mobile-loader-overlay [spinnerSize]="32" />
31
+ * </div>
32
+ *
33
+ * <!-- Over an image with rounded corners -->
34
+ * <div style="position: relative; border-radius: 12px; overflow: hidden;">
35
+ * <img src="photo.jpg" />
36
+ * <ds-mobile-loader-overlay [borderRadius]="12" />
37
+ * </div>
38
+ * ```
39
+ *
40
+ * @notes
41
+ * - Parent container must have position: relative for the overlay to work correctly
42
+ * - The overlay covers the entire parent element using inset: 0
43
+ * - Spinner animation runs continuously at 0.6s per rotation
44
+ */
45
+ @Component({
46
+ selector: 'ds-mobile-loader-overlay',
47
+ standalone: true,
48
+ imports: [CommonModule],
49
+ styleUrls: ['./ds-mobile-loader-overlay.css'],
50
+ template: `
51
+ <div
52
+ class="loader-overlay"
53
+ [style.border-radius.px]="borderRadius()"
54
+ role="status"
55
+ aria-live="polite"
56
+ aria-label="Loading">
57
+ <div
58
+ class="spinner"
59
+ [style.width.px]="spinnerSize()"
60
+ [style.height.px]="spinnerSize()">
61
+ </div>
62
+ </div>
63
+ `
64
+ })
65
+ export class DsMobileLoaderOverlayComponent {
66
+ /**
67
+ * Size of the spinner in pixels
68
+ * @default 24
69
+ */
70
+ spinnerSize = input<number>(24);
71
+
72
+ /**
73
+ * Border radius of the overlay in pixels (should match parent's border radius)
74
+ * @default 0
75
+ */
76
+ borderRadius = input<number>(0);
77
+ }
@@ -0,0 +1 @@
1
+ export * from './ds-mobile-loader-overlay';
@@ -0,0 +1,95 @@
1
+ import { Component, Input, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { WhitelabelService } from '../../services/whitelabel.service';
4
+
5
+ export type LogoVariant = 'full' | 'mark';
6
+ export type LogoSize = 'sm' | 'md' | 'lg' | 'xl';
7
+
8
+ /**
9
+ * DsLogoComponent
10
+ *
11
+ * Displays the whitelabeled logo or logomark based on current configuration.
12
+ * Automatically pulls logo assets from WhitelabelService.
13
+ *
14
+ * @example
15
+ * Full logo in header:
16
+ * ```html
17
+ * <ds-logo variant="full" size="md" />
18
+ * ```
19
+ *
20
+ * Logomark for compact spaces:
21
+ * ```html
22
+ * <ds-logo variant="mark" size="sm" />
23
+ * ```
24
+ */
25
+ @Component({
26
+ selector: 'ds-logo',
27
+ standalone: true,
28
+ imports: [CommonModule],
29
+ styles: [`
30
+ :host {
31
+ display: flex;
32
+ justify-content: flex-start;
33
+ line-height: 0;
34
+ }
35
+
36
+ .logo {
37
+ display: block;
38
+ object-fit: contain;
39
+ width: auto;
40
+ /* Base height is set via inline style, desktop adds +4px */
41
+ height: var(--logo-height-mobile);
42
+ }
43
+
44
+ /* Desktop breakpoint: add 4px to logo height */
45
+ @media (min-width: 768px) {
46
+ .logo {
47
+ height: var(--logo-height-desktop);
48
+ }
49
+ }
50
+ `],
51
+ template: `
52
+ <img
53
+ [src]="logoSrc"
54
+ [alt]="logoAlt"
55
+ class="logo"
56
+ [style.--logo-height-mobile.px]="effectiveHeight"
57
+ [style.--logo-height-desktop.px]="effectiveHeight + 4"
58
+ [style.width]="customWidth ? customWidth + 'px' : 'auto'"
59
+ />
60
+ `
61
+ })
62
+ export class DsLogoComponent {
63
+ whitelabelService = inject(WhitelabelService);
64
+
65
+ @Input() variant: LogoVariant = 'full';
66
+ @Input() size: LogoSize = 'md';
67
+ @Input() customHeight?: number;
68
+ @Input() customWidth?: number;
69
+
70
+ get logoSrc(): string {
71
+ const logoUrl = this.whitelabelService.logoUrl();
72
+ const logoMarkUrl = this.whitelabelService.logoMarkUrl();
73
+
74
+ if (this.variant === 'full') {
75
+ // Use logo, fall back to logomark if logo doesn't exist
76
+ return logoUrl || logoMarkUrl;
77
+ } else {
78
+ // Use logomark, fall back to logo if logomark doesn't exist
79
+ return logoMarkUrl || logoUrl;
80
+ }
81
+ }
82
+
83
+ get logoAlt(): string {
84
+ const alt = this.whitelabelService.logoAlt();
85
+ return this.variant === 'full' ? alt : `${alt} logo`;
86
+ }
87
+
88
+ /**
89
+ * Priority: customHeight input > whitelabel config logoHeight > default 32px
90
+ */
91
+ get effectiveHeight(): number {
92
+ return this.customHeight ?? this.whitelabelService.logoHeight();
93
+ }
94
+ }
95
+
@@ -0,0 +1,2 @@
1
+ export * from './ds-logo';
2
+