@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,301 +0,0 @@
1
- import { Component, input, output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
-
4
- /**
5
- * DsMobileCardInlineComponent
6
- *
7
- * A versatile, always-interactive inline card component for standalone or small-group usage.
8
- * Designed for tappable card-like elements such as file attachments, contact cards, etc.
9
- * Not intended for long scrolling lists - use ds-mobile-list-item for that purpose.
10
- *
11
- * Features:
12
- * - Always interactive/tappable (unless disabled)
13
- * - Two layout variants: default (column) and compact (row)
14
- * - Flexible content projection with leading/main/trailing slots
15
- * - Consistent styling with rounded corners and neutral background
16
- * - Built-in hover and active states
17
- * - Accessibility features (role, tabindex, aria attributes)
18
- *
19
- * @example
20
- * ```html
21
- * <!-- Default variant (column layout) -->
22
- * <ds-mobile-card-inline
23
- * [variant]="'default'"
24
- * (cardClick)="handleClick()">
25
- *
26
- * <div content-leading>
27
- * <ds-avatar initials="JD" />
28
- * </div>
29
- *
30
- * <div content-main>
31
- * <div class="title">Document Title</div>
32
- * <div class="subtitle">PDF · 1.2 MB</div>
33
- * </div>
34
- *
35
- * <ds-icon content-trailing name="remixArrowRightSLine" />
36
- * </ds-mobile-card-inline>
37
- *
38
- * <!-- Compact variant (row layout) -->
39
- * <ds-mobile-card-inline
40
- * [variant]="'compact'"
41
- * (cardClick)="handleClick()">
42
- *
43
- * <ds-avatar content-leading size="sm" />
44
- *
45
- * <div content-main>
46
- * <span class="name">File.pdf</span>
47
- * <span class="size">245 KB</span>
48
- * </div>
49
- *
50
- * <ds-icon content-trailing name="remixArrowRightSLine" />
51
- * </ds-mobile-card-inline>
52
- *
53
- * <!-- Disabled state -->
54
- * <ds-mobile-card-inline [disabled]="true">
55
- * <div content-main>Disabled card</div>
56
- * </ds-mobile-card-inline>
57
- * ```
58
- */
59
- @Component({
60
- selector: 'ds-mobile-card-inline',
61
- standalone: true,
62
- imports: [CommonModule],
63
- host: {
64
- '[class.disabled]': 'disabled()',
65
- '[class.variant-compact]': 'variant() === "compact"',
66
- '[class.variant-default]': 'variant() === "default"',
67
- '[attr.role]': '"button"',
68
- '[attr.tabindex]': 'disabled() ? null : "0"',
69
- '[attr.aria-disabled]': 'disabled() ? "true" : null',
70
- '(click)': 'handleClick($event)',
71
- '(keydown.enter)': 'handleKeyDown($event)',
72
- '(keydown.space)': 'handleKeyDown($event)'
73
- },
74
- styles: [`
75
- :host {
76
- display: flex;
77
- align-items: center;
78
- background: var(--color-background-neutral-secondary, #f5f5f5);
79
- border-radius: 16px;
80
- cursor: pointer;
81
- transition: all 0.2s ease;
82
- box-sizing: border-box;
83
- }
84
-
85
- /* Default variant - column layout with more padding */
86
- :host(.variant-default) {
87
- gap: 12px;
88
- padding: 10px 12px;
89
- }
90
-
91
- /* Compact variant - row layout with less padding */
92
- :host(.variant-compact) {
93
- gap: 8px;
94
- padding: 10px;
95
- }
96
-
97
- /* Hover state (desktop only) */
98
- @media (hover: hover) and (pointer: fine) {
99
- :host(:hover):not(.disabled) {
100
- background: var(--color-background-neutral-secondary-hover, #ebebeb);
101
- }
102
- }
103
-
104
- /* Active state */
105
- :host(:active):not(.disabled) {
106
- transform: scale(0.98);
107
- background: var(--color-background-neutral-secondary-hover, #ebebeb);
108
- }
109
-
110
- /* Focus visible for keyboard navigation */
111
- :host(:focus-visible):not(.disabled) {
112
- outline: 2px solid var(--color-brand-primary, #5d5fef);
113
- outline-offset: 2px;
114
- }
115
-
116
- /* Disabled state */
117
- :host(.disabled) {
118
- opacity: 0.5;
119
- pointer-events: none;
120
- cursor: not-allowed;
121
- }
122
-
123
- /* Inner container */
124
- .card-inline-inner {
125
- display: flex;
126
- align-items: center;
127
- gap: inherit;
128
- width: 100%;
129
- min-width: 0;
130
- }
131
-
132
- /* Content slots */
133
- .content-leading {
134
- flex-shrink: 0;
135
- display: flex;
136
- align-items: center;
137
- justify-content: center;
138
- }
139
-
140
- .content-main {
141
- flex: 1;
142
- min-width: 0;
143
- display: flex;
144
- align-items: center;
145
- }
146
-
147
- /* Compact variant - main content flows inline */
148
- :host(.variant-compact) .content-main {
149
- flex-direction: row;
150
- gap: 8px;
151
- }
152
-
153
- /* Default variant - main content flows column */
154
- :host(.variant-default) .content-main {
155
- flex-direction: column;
156
- align-items: flex-start;
157
- gap: 2px;
158
- }
159
-
160
- .content-trailing {
161
- flex-shrink: 0;
162
- display: flex;
163
- align-items: center;
164
- }
165
-
166
- /* ============================================
167
- Shared item styles for child components
168
- ============================================ */
169
-
170
- /* Item avatar container */
171
- ::ng-deep .item-avatar {
172
- flex-shrink: 0;
173
- }
174
-
175
- /* Item content wrapper - default stacks vertically */
176
- ::ng-deep .item-content {
177
- flex: 1;
178
- min-width: 0;
179
- display: flex;
180
- flex-direction: column;
181
- justify-content: center;
182
- gap: 2px;
183
- }
184
-
185
- /* Compact layout - content flows inline */
186
- :host(.variant-compact) ::ng-deep .item-content {
187
- flex-direction: row;
188
- align-items: center;
189
- justify-content: flex-start;
190
- gap: 8px;
191
- }
192
-
193
- /* Item name - primary text with truncation */
194
- ::ng-deep .item-name {
195
- font-family: 'Brockmann', sans-serif;
196
- font-size: var(--font-size-sm);
197
- font-weight: 600;
198
- line-height: 20px;
199
- letter-spacing: -0.3px;
200
- color: var(--color-text-primary, #1a1a1a);
201
- margin: 0;
202
- white-space: nowrap;
203
- overflow: hidden;
204
- text-overflow: ellipsis;
205
- text-align: left;
206
- }
207
-
208
- /* Item meta - secondary text */
209
- ::ng-deep .item-meta {
210
- font-family: 'Brockmann', sans-serif;
211
- font-size: var(--font-size-xs);
212
- font-weight: 400;
213
- line-height: 1.2;
214
- letter-spacing: -0.26px;
215
- color: var(--color-text-tertiary, #737373);
216
- margin: 0;
217
- display: flex;
218
- align-items: center;
219
- justify-content: flex-start;
220
- gap: 4px;
221
- white-space: nowrap;
222
- flex-shrink: 0;
223
- }
224
-
225
- /* Item trailing icon */
226
- ::ng-deep .item-trailing {
227
- display: flex;
228
- align-items: center;
229
- color: var(--color-text-tertiary, #a3a3a3);
230
- flex-shrink: 0;
231
- }
232
- `],
233
- template: `
234
- <div class="card-inline-inner">
235
- <div class="content-leading">
236
- <ng-content select="[content-leading]" />
237
- </div>
238
-
239
- <div class="content-main">
240
- <ng-content select="[content-main]" />
241
- <ng-content />
242
- </div>
243
-
244
- <div class="content-trailing">
245
- <ng-content select="[content-trailing]" />
246
- </div>
247
- </div>
248
- `
249
- })
250
- export class DsMobileCardInlineComponent {
251
- /**
252
- * Display variant
253
- * - 'default' - Column layout with standard padding (gap: 12px, padding: 10px 12px)
254
- * - 'compact' - Row layout with reduced padding (gap: 8px, padding: 10px)
255
- */
256
- variant = input<'default' | 'compact'>('default');
257
-
258
- /**
259
- * Whether the card is disabled
260
- * Disables all interactions and reduces opacity
261
- */
262
- disabled = input<boolean>(false);
263
-
264
- /**
265
- * Emits when the card is clicked (if not disabled)
266
- */
267
- cardClick = output<void>();
268
-
269
- /**
270
- * Handle click events
271
- */
272
- handleClick(event: Event): void {
273
- if (this.disabled()) {
274
- return;
275
- }
276
-
277
- // Don't emit click if it came from an interactive child element
278
- const target = event.target as HTMLElement;
279
- const closestInteractive = target.closest('button, a, input, select, textarea, [role="button"]');
280
-
281
- // Check if the interactive element is a child, not the host itself
282
- if (closestInteractive && closestInteractive !== event.currentTarget) {
283
- return;
284
- }
285
-
286
- this.cardClick.emit();
287
- }
288
-
289
- /**
290
- * Handle keyboard events (Enter/Space)
291
- */
292
- handleKeyDown(event: KeyboardEvent): void {
293
- if (this.disabled()) {
294
- return;
295
- }
296
-
297
- event.preventDefault();
298
- this.cardClick.emit();
299
- }
300
- }
301
-
@@ -1,2 +0,0 @@
1
- export { DsMobileCardInlineComponent } from './ds-mobile-card-inline';
2
-
@@ -1,118 +0,0 @@
1
- import { Component, input, output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { DsIconComponent } from '@propbinder/design-system';
4
- import { DsAvatarComponent } from '@propbinder/design-system';
5
- import { DsMobileCardInlineComponent } from '../card-inline';
6
-
7
- /**
8
- * DsMobileCardInlineBannerComponent
9
- *
10
- * Specialized interactive component for displaying notification banners.
11
- * Used to show unread message notifications above inquiry details.
12
- *
13
- * Features:
14
- * - Neutral background matching file/contact cards
15
- * - Avatar icon with message symbol
16
- * - Title and timestamp
17
- * - Unread count badge
18
- * - Chevron for navigation indication
19
- *
20
- * @example
21
- * ```html
22
- * <ds-mobile-card-inline-banner
23
- * [title]="'New messages'"
24
- * [timestamp]="'2 min ago'"
25
- * [unreadCount]="3"
26
- * (bannerClick)="navigateToMessages()">
27
- * </ds-mobile-card-inline-banner>
28
- * ```
29
- */
30
- @Component({
31
- selector: 'ds-mobile-card-inline-banner',
32
- standalone: true,
33
- imports: [CommonModule, DsIconComponent, DsAvatarComponent, DsMobileCardInlineComponent],
34
- styles: [`
35
- /* Component-specific styles only - shared styles come from base component */
36
-
37
- /* Badge for unread count - using whitelabel brand colors */
38
- .unread-badge {
39
- min-width: 24px;
40
- height: 16px;
41
- padding: 0 6px;
42
- border-radius: 10px;
43
- background: var(--color-accent, #6B5FF5);
44
- color: var(--color-on-accent, #ffffff);
45
- font-family: 'Brockmann', sans-serif;
46
- font-size: var(--font-size-xs);
47
- font-weight: 600;
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- line-height: 1;
52
- margin-right: 8px;
53
- }
54
- `],
55
- template: `
56
- <ds-mobile-card-inline
57
- [variant]="layout()"
58
- (cardClick)="handleBannerClick()">
59
-
60
- <div content-leading class="item-avatar">
61
- <ds-avatar
62
- type="icon"
63
- [iconName]="'remixNotificationLine'"
64
- [size]="layout() === 'compact' ? 'sm' : 'md'"
65
- />
66
- </div>
67
-
68
- <div content-main class="item-content">
69
- <div class="item-name">{{ title() }}</div>
70
-
71
- @if (timestamp()) {
72
- <div class="item-meta">
73
- <span>{{ timestamp() }}</span>
74
- </div>
75
- }
76
- </div>
77
-
78
- <div content-trailing class="item-trailing">
79
- @if (unreadCount() && unreadCount()! > 0) {
80
- <span class="unread-badge">{{ unreadCount() }}</span>
81
- }
82
- <ds-icon name="remixArrowRightSLine" size="20px" />
83
- </div>
84
- </ds-mobile-card-inline>
85
- `
86
- })
87
- export class DsMobileCardInlineBannerComponent {
88
- /**
89
- * Banner title (e.g., "New messages", "Unread messages")
90
- */
91
- title = input.required<string>();
92
-
93
- /**
94
- * Timestamp text (e.g., "2 min ago", "Just now")
95
- */
96
- timestamp = input<string>('');
97
-
98
- /**
99
- * Number of unread items (optional, shows badge if > 0)
100
- */
101
- unreadCount = input<number>(0);
102
-
103
- /**
104
- * Layout variant
105
- * - 'default' - Standard padding and column layout
106
- * - 'compact' - Reduced padding and row layout
107
- */
108
- layout = input<'default' | 'compact'>('default');
109
-
110
- /**
111
- * Emits when the banner is clicked
112
- */
113
- bannerClick = output<void>();
114
-
115
- handleBannerClick(): void {
116
- this.bannerClick.emit();
117
- }
118
- }
@@ -1 +0,0 @@
1
- export * from './ds-mobile-card-inline-banner';
@@ -1,120 +0,0 @@
1
- import { Component, input, output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { DsIconComponent } from '@propbinder/design-system';
4
- import { DsAvatarComponent } from '@propbinder/design-system';
5
- import { DsMobileCardInlineComponent } from '../card-inline';
6
-
7
- /**
8
- * DsMobileCardInlineContactComponent
9
- *
10
- * Specialized interactive component for displaying contacts.
11
- * Displays contact name with avatar initials and metadata (person name + phone number).
12
- * Similar styling to file attachments with rounded corners and hover states.
13
- *
14
- * @example
15
- * ```html
16
- * <ds-mobile-card-inline-contact
17
- * [name]="'Mortensen & Søn ApS'"
18
- * [initials]="'M'"
19
- * [contactPerson]="'John Mortensen'"
20
- * [phoneNumber]="'+45 12 34 56 78'"
21
- * [clickable]="true"
22
- * (contactClick)="openContact()">
23
- * </ds-mobile-card-inline-contact>
24
- * ```
25
- */
26
- @Component({
27
- selector: 'ds-mobile-card-inline-contact',
28
- standalone: true,
29
- imports: [CommonModule, DsIconComponent, DsAvatarComponent, DsMobileCardInlineComponent],
30
- styles: [`
31
- /* Component-specific styles only - shared styles come from base component */
32
- `],
33
- template: `
34
- <ds-mobile-card-inline
35
- [variant]="layout()"
36
- [disabled]="!clickable()"
37
- (cardClick)="handleContactClick()">
38
-
39
- <div content-leading class="item-avatar">
40
- <ds-avatar
41
- [initials]="initials()"
42
- type="initials"
43
- [size]="layout() === 'compact' ? 'sm' : 'md'"
44
- />
45
- </div>
46
-
47
- <div content-main class="item-content">
48
- <div class="item-name">{{ name() }}</div>
49
-
50
- @if (contactPerson() || phoneNumber()) {
51
- <div class="item-meta">
52
- @if (contactPerson()) {
53
- <span>{{ contactPerson() }}</span>
54
- }
55
- @if (contactPerson() && phoneNumber()) {
56
- <span>·</span>
57
- }
58
- @if (phoneNumber()) {
59
- <span>{{ phoneNumber() }}</span>
60
- }
61
- </div>
62
- }
63
- </div>
64
-
65
- @if (showChevron()) {
66
- <div content-trailing class="item-trailing">
67
- <ds-icon name="remixArrowRightSLine" size="20px" />
68
- </div>
69
- }
70
- </ds-mobile-card-inline>
71
- `
72
- })
73
- export class DsMobileCardInlineContactComponent {
74
- /**
75
- * Contact/company name
76
- */
77
- name = input.required<string>();
78
-
79
- /**
80
- * Avatar initials (usually 1-2 letters)
81
- */
82
- initials = input.required<string>();
83
-
84
- /**
85
- * Contact person name (optional)
86
- */
87
- contactPerson = input<string>('');
88
-
89
- /**
90
- * Phone number (optional)
91
- */
92
- phoneNumber = input<string>('');
93
-
94
- /**
95
- * Layout variant
96
- * - 'default' - Standard padding and column layout
97
- * - 'compact' - Reduced padding and row layout
98
- */
99
- layout = input<'default' | 'compact'>('default');
100
-
101
- /**
102
- * Whether the contact item is clickable
103
- */
104
- clickable = input<boolean>(true);
105
-
106
- /**
107
- * Whether to show chevron icon
108
- */
109
- showChevron = input<boolean>(true);
110
-
111
- /**
112
- * Emits when the contact item is clicked (if clickable)
113
- */
114
- contactClick = output<void>();
115
-
116
- handleContactClick(): void {
117
- this.contactClick.emit();
118
- }
119
- }
120
-
@@ -1 +0,0 @@
1
- export { DsMobileCardInlineContactComponent } from './ds-mobile-card-inline-contact';
@@ -1,141 +0,0 @@
1
- import { Component, input, output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { DsAvatarComponent } from '@propbinder/design-system';
4
- import { DsIconComponent } from '@propbinder/design-system';
5
- import { DsMobileCardInlineComponent } from '../card-inline';
6
-
7
- /**
8
- * DsMobileCardInlineFileComponent
9
- *
10
- * File attachment display for various document types.
11
- * Shows file info card with icon, filename, and file size.
12
- * Supports PDF and generic document formats.
13
- * Emits click event to open file in viewer.
14
- *
15
- * @example
16
- * ```html
17
- * <ds-mobile-card-inline-file
18
- * [fileName]="'Document.pdf'"
19
- * [fileSize]="'1.2 MB'"
20
- * [variant]="'pdf'"
21
- * [layout]="'compact'"
22
- * (fileClick)="openFile()">
23
- * </ds-mobile-card-inline-file>
24
- * ```
25
- */
26
- @Component({
27
- selector: 'ds-mobile-card-inline-file',
28
- standalone: true,
29
- imports: [
30
- CommonModule,
31
- DsAvatarComponent,
32
- DsIconComponent,
33
- DsMobileCardInlineComponent,
34
- ],
35
- styles: [
36
- `
37
- /* PDF variant - red icon background */
38
- .item-avatar.pdf ::ng-deep .avatar--icon {
39
- background-color: #ff5757 !important;
40
- }
41
-
42
- /* Doc variant - blue icon background */
43
- .item-avatar.doc ::ng-deep .avatar--icon {
44
- background-color: var(--color-blue-base, #3b82f6) !important;
45
- }
46
- `,
47
- ],
48
- template: `
49
- <ds-mobile-card-inline [variant]="layout()" (cardClick)="handleClick()">
50
- <div
51
- content-leading
52
- class="item-avatar"
53
- [class.pdf]="variant() === 'pdf'"
54
- [class.doc]="variant() === 'doc'"
55
- >
56
- <ds-avatar
57
- type="icon"
58
- [iconName]="getIconName()"
59
- [size]="layout() === 'compact' ? 'sm' : 'md'"
60
- />
61
- </div>
62
-
63
- <div content-main class="item-content">
64
- <div class="item-name">{{ fileName() }}</div>
65
- @if (fileSize()) {
66
- <div class="item-meta">{{ getFileTypeLabel() }} · {{ fileSize() }}</div>
67
- } @else {
68
- <div class="item-meta">{{ getFileTypeLabel() }}</div>
69
- }
70
- </div>
71
-
72
- <ds-icon
73
- content-trailing
74
- name="remixArrowRightSLine"
75
- size="20px"
76
- class="item-trailing"
77
- />
78
- </ds-mobile-card-inline>
79
- `,
80
- })
81
- export class DsMobileCardInlineFileComponent {
82
- /**
83
- * File name
84
- */
85
- fileName = input<string>('Document');
86
-
87
- /**
88
- * File size display (e.g., '1.2 MB')
89
- */
90
- fileSize = input<string>('');
91
-
92
- /**
93
- * File type variant
94
- * - 'pdf' - PDF document (red icon)
95
- * - 'doc' - Generic document (blue icon)
96
- */
97
- variant = input<'pdf' | 'doc'>('doc');
98
-
99
- /**
100
- * Layout variant
101
- * - 'default' - Standard padding and column layout
102
- * - 'compact' - Reduced padding and row layout
103
- */
104
- layout = input<'default' | 'compact'>('default');
105
-
106
- /**
107
- * Optional URL to open when clicked
108
- * If provided, clicking the card will open this URL in a new tab
109
- */
110
- fileUrl = input<string | undefined>(undefined);
111
-
112
- /**
113
- * Emits when the file attachment is clicked
114
- */
115
- fileClick = output<void>();
116
-
117
- /**
118
- * Get the appropriate icon name based on variant
119
- */
120
- getIconName(): string {
121
- return this.variant() === 'pdf'
122
- ? 'remixFileTextLine'
123
- : 'remixAttachmentLine';
124
- }
125
-
126
- /**
127
- * Get the file type label based on variant
128
- */
129
- getFileTypeLabel(): string {
130
- return this.variant() === 'pdf' ? 'PDF' : 'DOC';
131
- }
132
-
133
- handleClick(): void {
134
- const url = this.fileUrl();
135
- console.log(url);
136
- if (url) {
137
- window.open(url, '_blank', 'noopener,noreferrer');
138
- }
139
- this.fileClick.emit();
140
- }
141
- }
@@ -1 +0,0 @@
1
- export { DsMobileCardInlineFileComponent } from './ds-mobile-card-inline-file';