@propbinder/mobile-design 0.2.50 → 0.2.53

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,379 +0,0 @@
1
- import { Component, Input, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ModalController } from '@ionic/angular/standalone';
4
- import { DsButtonComponent } from '@propbinder/design-system';
5
- import { DsMobileModalBaseComponent } from '../modal-base/ds-mobile-modal-base';
6
- import { DsMobileSectionComponent } from '../section';
7
- import { DsMobileSwiperComponent } from '../swiper/ds-mobile-swiper';
8
- import { DsMobileBookingModalService } from '../booking-modal';
9
-
10
- /**
11
- * Facility data interface for the modal
12
- *
13
- * Represents a facility with its content, images, requirements, and restrictions.
14
- * Use this interface to map your API response data to the component.
15
- *
16
- * @example
17
- * ```typescript
18
- * const facilityData: FacilityDetailData = {
19
- * id: 'facility-1',
20
- * facilityTitle: 'Festlokale på taget',
21
- * heroImage: '/Assets/Dummy-photos/balcony-view.jpg',
22
- * fullDescription: '<p>The rooftop terrace...</p>',
23
- * requirements: ['Kræver nøglekort'],
24
- * bookingType: 'Instant booking',
25
- * expectations: '<p>The terrace is furnished...</p>',
26
- * restrictions: ['No smoking...']
27
- * };
28
- * ```
29
- */
30
- export interface FacilityDetailData {
31
- /** Unique facility identifier */
32
- id: string;
33
- /** Facility title/name */
34
- facilityTitle: string;
35
- /** Hero image URL for the top of the modal */
36
- heroImage?: string;
37
- /** Full description of the facility (HTML rich text) */
38
- fullDescription: string;
39
- /** List of requirements (e.g., "Kræver nøglekort") */
40
- requirements?: string[];
41
- /** Booking type (e.g., "Instant booking") */
42
- bookingType?: string;
43
- /** Expectations section content (HTML rich text) */
44
- expectations?: string;
45
- /** List of restrictions */
46
- restrictions?: string[];
47
- /** Availability status for display */
48
- availabilityStatus?: string;
49
- /** Status label text */
50
- statusLabel?: string;
51
- /** Booking date (for active bookings) */
52
- bookingDate?: string;
53
- /** Booking time range (for active bookings) */
54
- bookingTime?: string;
55
- }
56
-
57
- /**
58
- * DsMobileFacilityDetailModalComponent
59
- *
60
- * Modal wrapper for displaying facility details with rich content.
61
- * Follows the same pattern as the post detail modal for consistent behavior.
62
- *
63
- * Features:
64
- * - Hero image with swiper support
65
- * - Requirements and booking type display
66
- * - Rich text description
67
- * - Expectations section
68
- * - Restrictions list
69
- * - Fixed bottom booking button
70
- * - Native modal controls (close, swipe down)
71
- * - Safe area support
72
- *
73
- * This component is typically not used directly - use DsMobileFacilityDetailModalService instead.
74
- *
75
- * @example
76
- * ```typescript
77
- * // Don't instantiate directly - use the service:
78
- * constructor(private facilityModal: DsMobileFacilityDetailModalService) {}
79
- *
80
- * openFacility() {
81
- * this.facilityModal.open({
82
- * id: 'facility-1',
83
- * facilityTitle: 'Festlokale på taget',
84
- * fullDescription: '<p>Description...</p>'
85
- * });
86
- * }
87
- * ```
88
- */
89
- @Component({
90
- selector: 'ds-mobile-facility-detail-modal',
91
- standalone: true,
92
- imports: [
93
- CommonModule,
94
- DsButtonComponent,
95
- DsMobileModalBaseComponent,
96
- DsMobileSectionComponent,
97
- DsMobileSwiperComponent,
98
- ],
99
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
100
- styles: [`
101
- :host {
102
- display: block;
103
- }
104
-
105
- /* Hero image styling */
106
- .facility-image {
107
- width: 100%;
108
- max-width: 100%;
109
- height: 280px;
110
- object-fit: cover;
111
- display: block;
112
- border-radius: 12px;
113
- }
114
-
115
- /* Info items (requirements, booking type) */
116
- .info-item {
117
- display: flex;
118
- align-items: center;
119
- gap: 8px;
120
- padding: 8px 0;
121
- font-family: 'Brockmann', sans-serif;
122
- font-size: var(--font-size-sm, 14px);
123
- color: var(--text-color-default-primary, #202227);
124
- }
125
-
126
- /* Rich text content */
127
- .facility-description,
128
- .facility-expectations {
129
- font-family: 'Brockmann', sans-serif;
130
- font-size: var(--font-size-sm, 14px);
131
- line-height: 1.6;
132
- color: var(--text-color-default-primary, #202227);
133
- }
134
-
135
- .facility-description p,
136
- .facility-expectations p {
137
- margin: 0 0 12px 0;
138
- }
139
-
140
- .facility-description p:last-child,
141
- .facility-expectations p:last-child {
142
- margin-bottom: 0;
143
- }
144
-
145
- /* Headings within description - use ::ng-deep to penetrate innerHTML */
146
- ::ng-deep .facility-description h3,
147
- ::ng-deep .facility-description headline,
148
- ::ng-deep .facility-description .section-headline {
149
- font-family: 'Brockmann', sans-serif;
150
- font-size: var(--font-size-base, 16px);
151
- font-weight: 600;
152
- line-height: 1.4;
153
- color: var(--text-color-default-primary, #202227);
154
- margin: 0 !important;
155
- padding: 0 !important;
156
- padding-top: 24px !important;
157
- padding-bottom: 8px !important;
158
- display: block;
159
- }
160
-
161
- /* Headings within description */
162
- .section-headline {
163
- font-family: 'Brockmann', sans-serif;
164
- font-size: var(--font-size-base, 16px);
165
- font-weight: 600;
166
- line-height: 1.4;
167
- color: var(--text-color-default-primary, #202227);
168
- margin: 0 !important;
169
- padding-top: 24px !important;
170
- padding-bottom: 8px !important;
171
- display: block;
172
- }
173
-
174
-
175
- ::ng-deep .facility-description h3:first-child,
176
- ::ng-deep .facility-description headline:first-child,
177
- ::ng-deep .facility-description .section-headline:first-child,
178
- ::ng-deep .facility-description > *:first-child h3:first-child,
179
- ::ng-deep .facility-description > *:first-child headline:first-child {
180
- padding-top: 0 !important;
181
- }
182
-
183
- /* Expectations section headings */
184
- ::ng-deep .facility-expectations headline,
185
- ::ng-deep .facility-expectations h3 {
186
- font-family: 'Brockmann', sans-serif;
187
- font-size: var(--font-size-base, 16px);
188
- font-weight: 600;
189
- line-height: 1.4;
190
- color: var(--text-color-default-primary, #202227);
191
- margin: 0 !important;
192
- padding: 0 !important;
193
- padding-top: 24px !important;
194
- padding-bottom: 8px !important;
195
- display: block;
196
- }
197
-
198
- ::ng-deep .facility-expectations headline:first-child,
199
- ::ng-deep .facility-expectations h3:first-child {
200
- padding-top: 0 !important;
201
- }
202
-
203
- /* Standalone section headline (used for "Ting, du skal vide") */
204
- h2.section-headline {
205
- font-family: 'Brockmann', sans-serif;
206
- font-size: var(--font-size-base, 16px);
207
- font-weight: 600;
208
- line-height: 1.4;
209
- color: var(--text-color-default-primary, #202227);
210
- margin: 0;
211
- padding-top: 16px !important;
212
- padding-bottom: 8px;
213
- }
214
-
215
- /* Lists within description */
216
- .facility-description ul {
217
- list-style: disc;
218
- padding-left: 20px;
219
- margin: 0 0 12px 0;
220
- }
221
-
222
- .facility-description ul li {
223
- font-family: 'Brockmann', sans-serif;
224
- font-size: var(--font-size-sm, 14px);
225
- line-height: 1.6;
226
- color: var(--text-color-default-primary, #202227);
227
- margin-bottom: 8px;
228
- }
229
-
230
- .facility-description ul li:last-child {
231
- margin-bottom: 0;
232
- }
233
-
234
- /* Restrictions within the same section */
235
- .facility-restrictions {
236
- margin-top: 20px;
237
- }
238
-
239
- .restrictions-heading {
240
- font-family: 'Brockmann', sans-serif;
241
- font-size: var(--font-size-base, 16px);
242
- font-weight: 600;
243
- line-height: 1.4;
244
- color: var(--text-color-default-primary, #202227);
245
- margin: 0 0 12px 0;
246
- }
247
-
248
- /* Restrictions list */
249
- .restrictions-list {
250
- list-style: disc;
251
- padding-left: 20px;
252
- margin: 0;
253
- }
254
-
255
- .restrictions-list li {
256
- font-family: 'Brockmann', sans-serif;
257
- font-size: var(--font-size-sm, 14px);
258
- line-height: 1.6;
259
- color: var(--text-color-default-primary, #202227);
260
- margin-bottom: 8px;
261
- }
262
-
263
- .restrictions-list li:last-child {
264
- margin-bottom: 0;
265
- }
266
-
267
- /* Info items container */
268
- .info-items-container {
269
- display: flex;
270
- flex-direction: column;
271
- gap: 0;
272
- }
273
-
274
- /* Fixed bottom button */
275
- .booking-action {
276
- padding: 16px 20px;
277
- background: var(--color-surface-primary, #ffffff);
278
- border-top: 1px solid var(--color-border, #e5e5e5);
279
- }
280
-
281
- .booking-action ds-button {
282
- display: block;
283
- width: 100%;
284
- }
285
-
286
- .booking-action ::ng-deep ds-button button {
287
- width: 100%;
288
- border-radius: 100px;
289
- height: 44px;
290
- min-height: 44px;
291
- max-height: 44px;
292
- padding-left: 16px;
293
- padding-right: 16px;
294
- }
295
- `],
296
- template: `
297
- <ds-mobile-modal-base
298
- [headerTitle]="facilityData.facilityTitle"
299
- [hasFixedBottom]="true"
300
- [keyboardContentBehavior]="'overlay'">
301
-
302
- <!-- Hero Image Section -->
303
- <!-- Hero Image and Things to Know Section -->
304
- @if (facilityData.heroImage) {
305
- <ds-mobile-section contentGap="20px">
306
- <ds-mobile-swiper
307
- [slideWidth]="'100%'"
308
- [gap]="16">
309
- <div class="swiper-slide">
310
- <img [src]="facilityData.heroImage" [alt]="facilityData.facilityTitle" class="facility-image" />
311
- </div>
312
- </ds-mobile-swiper>
313
-
314
- </ds-mobile-section>
315
- }
316
-
317
- <!-- Full Description Section -->
318
- <ds-mobile-section>
319
- <div class="facility-description" [innerHTML]="facilityData.fullDescription"></div>
320
-
321
- @if (facilityData.expectations) {
322
- <div class="facility-expectations" [innerHTML]="facilityData.expectations"></div>
323
- }
324
-
325
- @if (facilityData.restrictions?.length) {
326
- <div class="facility-restrictions">
327
- <h3 class="restrictions-heading">Restriktioner</h3>
328
- <ul class="restrictions-list">
329
- @for (restriction of facilityData.restrictions; track restriction) {
330
- <li>{{ restriction }}</li>
331
- }
332
- </ul>
333
- </div>
334
- }
335
- </ds-mobile-section>
336
-
337
- <!-- Fixed Bottom Button -->
338
- <div fixed-bottom class="booking-action">
339
- <ds-button
340
- size="md"
341
- variant="primary"
342
- [fullWidth]="true"
343
- (clicked)="handleBookNow()">
344
- Book nu
345
- </ds-button>
346
- </div>
347
- </ds-mobile-modal-base>
348
- `
349
- })
350
- export class DsMobileFacilityDetailModalComponent {
351
- /**
352
- * Facility data to display in the modal
353
- */
354
- @Input() facilityData!: FacilityDetailData;
355
-
356
- constructor(
357
- private modalController: ModalController,
358
- private bookingModalService: DsMobileBookingModalService
359
- ) {}
360
-
361
- /**
362
- * Handle booking button click
363
- * Opens the booking modal for date/time selection
364
- */
365
- async handleBookNow(): Promise<void> {
366
- await this.bookingModalService.open({
367
- facilityId: this.facilityData.id,
368
- facilityTitle: this.facilityData.facilityTitle,
369
- facilityThumbnail: this.facilityData.heroImage
370
- });
371
- }
372
-
373
- /**
374
- * Close the modal
375
- */
376
- close(): void {
377
- this.modalController.dismiss();
378
- }
379
- }
@@ -1,2 +0,0 @@
1
- export * from './ds-mobile-facility-detail-modal';
2
- export * from './ds-mobile-facility-detail-modal.service';
@@ -1,164 +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
-
6
- /**
7
- * DsMobileFileAttachmentComponent
8
- *
9
- * File attachment display for various document types.
10
- * Shows file info card with icon, filename, and file size.
11
- * Supports PDF and generic document formats.
12
- * Emits click event to open file in viewer.
13
- *
14
- * @example
15
- * ```html
16
- * <ds-mobile-file-attachment
17
- * [fileName]="'Document.pdf'"
18
- * [fileSize]="'1.2 MB'"
19
- * [variant]="'pdf'"
20
- * (fileClick)="openFile()">
21
- * </ds-mobile-file-attachment>
22
- * ```
23
- */
24
- @Component({
25
- selector: 'ds-mobile-file-attachment',
26
- standalone: true,
27
- imports: [CommonModule, DsAvatarComponent, DsIconComponent],
28
- host: {
29
- '(click)': 'handleClick($event)'
30
- },
31
- styles: [`
32
- :host {
33
- display: flex;
34
- align-items: center;
35
- gap: 12px;
36
- padding: 10px 12px;
37
- background: var(--color-background-neutral-secondary, #f5f5f5);
38
- border-radius: 16px;
39
- cursor: pointer;
40
- transition: all 0.2s ease;
41
- }
42
-
43
- :host:hover {
44
- background: var(--color-background-neutral-secondary-hover, #ebebeb);
45
- }
46
-
47
- :host:active {
48
- transform: scale(0.98);
49
- }
50
-
51
- .file-avatar {
52
- flex-shrink: 0;
53
- }
54
-
55
- .file-avatar.pdf::ng-deep .avatar--icon {
56
- background-color: #ff5757 !important;
57
- }
58
-
59
- .file-avatar.doc::ng-deep .avatar--icon {
60
- background-color: var(--color-blue-base, #3B82F6) !important;
61
- }
62
-
63
- .file-info {
64
- flex: 1;
65
- min-width: 0;
66
- display: flex;
67
- flex-direction: column;
68
- gap: 2px;
69
- }
70
-
71
- .file-name {
72
- font-family: 'Brockmann', sans-serif;
73
- font-size: var(--font-size-sm);
74
- font-weight: 600;
75
- line-height: 20px;
76
- letter-spacing: -0.3px;
77
- color: var(--color-text-primary, #1a1a1a);
78
- white-space: nowrap;
79
- overflow: hidden;
80
- text-overflow: ellipsis;
81
- }
82
-
83
- .file-meta {
84
- font-family: 'Brockmann', sans-serif;
85
- font-size: var(--font-size-xs);
86
- font-weight: 400;
87
- line-height: 1.2;
88
- letter-spacing: -0.26px;
89
- color: var(--color-text-tertiary, #737373);
90
- }
91
-
92
- .open-icon {
93
- color: var(--color-text-tertiary, #a3a3a3);
94
- flex-shrink: 0;
95
- }
96
- `],
97
- template: `
98
- <div class="file-avatar" [class.pdf]="variant() === 'pdf'" [class.doc]="variant() === 'doc'">
99
- <ds-avatar
100
- type="icon"
101
- [iconName]="getIconName()"
102
- size="lg"
103
- />
104
- </div>
105
-
106
- <div class="file-info">
107
- <div class="file-name">{{ fileName() }}</div>
108
- @if (fileSize()) {
109
- <div class="file-meta">{{ getFileTypeLabel() }} · {{ fileSize() }}</div>
110
- } @else {
111
- <div class="file-meta">{{ getFileTypeLabel() }}</div>
112
- }
113
- </div>
114
-
115
- <ds-icon
116
- name="remixArrowRightSLine"
117
- size="20px"
118
- class="open-icon"
119
- />
120
- `
121
- })
122
- export class DsMobileFileAttachmentComponent {
123
- /**
124
- * File name
125
- */
126
- fileName = input<string>('Document');
127
-
128
- /**
129
- * File size display (e.g., "1.2 MB")
130
- */
131
- fileSize = input<string>('');
132
-
133
- /**
134
- * File type variant
135
- * - 'pdf' - PDF document (red icon)
136
- * - 'doc' - Generic document (blue icon)
137
- */
138
- variant = input<'pdf' | 'doc'>('doc');
139
-
140
- /**
141
- * Emits when the file attachment is clicked
142
- */
143
- fileClick = output<void>();
144
-
145
- /**
146
- * Get the appropriate icon name based on variant
147
- */
148
- getIconName(): string {
149
- return this.variant() === 'pdf' ? 'remixFileTextLine' : 'remixAttachmentLine';
150
- }
151
-
152
- /**
153
- * Get the file type label based on variant
154
- */
155
- getFileTypeLabel(): string {
156
- return this.variant() === 'pdf' ? 'PDF' : 'DOC';
157
- }
158
-
159
- handleClick(event: Event): void {
160
- event.stopPropagation();
161
- this.fileClick.emit();
162
- }
163
- }
164
-
@@ -1,2 +0,0 @@
1
- export { DsMobileFileAttachmentComponent } from './ds-mobile-file-attachment';
2
-