@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,296 @@
1
+ import { Injectable, ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injector } from '@angular/core';
2
+ import { DsMobileLightboxImageComponent } from './ds-mobile-lightbox-image';
3
+ import { DsMobileLightboxPdfComponent } from './ds-mobile-lightbox-pdf';
4
+
5
+ /**
6
+ * Media file types supported by the lightbox
7
+ */
8
+ export type LightboxMediaType = 'image' | 'pdf';
9
+
10
+ /**
11
+ * Base media file interface
12
+ */
13
+ export interface LightboxMediaFile {
14
+ /** File source URL */
15
+ src: string;
16
+ /** Media type - determines which viewer to use */
17
+ type: LightboxMediaType;
18
+ /** File title */
19
+ title?: string;
20
+ /** File description */
21
+ description?: string;
22
+ }
23
+
24
+ /**
25
+ * Image data for lightbox display
26
+ */
27
+ export interface LightboxImage extends LightboxMediaFile {
28
+ type: 'image';
29
+ /** Alt text for accessibility */
30
+ alt?: string;
31
+ /** Thumbnail URL for faster loading (optional) */
32
+ thumbnail?: string;
33
+ /** Whether the image is liked */
34
+ isLiked?: boolean;
35
+ /** Number of likes */
36
+ likeCount?: number;
37
+ /** Number of comments */
38
+ commentCount?: number;
39
+ }
40
+
41
+ /**
42
+ * PDF document data for lightbox display
43
+ */
44
+ export interface LightboxPdf extends LightboxMediaFile {
45
+ type: 'pdf';
46
+ /** File size in bytes (optional, for display) */
47
+ fileSize?: number;
48
+ /** Number of pages (optional, for display) */
49
+ pageCount?: number;
50
+ }
51
+
52
+ /**
53
+ * Author metadata for the lightbox
54
+ */
55
+ export interface LightboxAuthor {
56
+ /** Author name */
57
+ name: string;
58
+ /** Author role/subtitle */
59
+ role?: string;
60
+ /** Author avatar URL */
61
+ avatarSrc?: string;
62
+ /** Author avatar initials (if no photo) */
63
+ avatarInitials?: string;
64
+ /** Avatar type */
65
+ avatarType?: 'photo' | 'initials';
66
+ /** Timestamp */
67
+ timestamp?: string;
68
+ }
69
+
70
+ /**
71
+ * Configuration options for image lightbox
72
+ */
73
+ export interface LightboxImageOptions {
74
+ /** Array of images to display */
75
+ images: LightboxImage[];
76
+ /** Author information to display in header */
77
+ author?: LightboxAuthor;
78
+ /** Initial image index to show (0-based) */
79
+ initialIndex?: number;
80
+ /** Enable pinch-to-zoom and double-tap zoom */
81
+ enableZoom?: boolean;
82
+ /** Show navigation controls (arrows, counter) */
83
+ showControls?: boolean;
84
+ /** Enable swipe gestures to navigate between images */
85
+ enableSwipe?: boolean;
86
+ /** Show image info (title, description) */
87
+ showInfo?: boolean;
88
+ /** Show like & comment action buttons */
89
+ showActions?: boolean;
90
+ /** Animation type for opening */
91
+ animation?: 'fade' | 'zoom' | 'slide';
92
+ }
93
+
94
+ /**
95
+ * Configuration options for PDF lightbox
96
+ */
97
+ export interface LightboxPdfOptions {
98
+ /** PDF document to display */
99
+ pdf: LightboxPdf;
100
+ /** Author information to display */
101
+ author?: LightboxAuthor;
102
+ }
103
+
104
+ /**
105
+ * Generic lightbox options (for backward compatibility)
106
+ */
107
+ export type LightboxOptions = LightboxImageOptions;
108
+
109
+ /**
110
+ * DsMobileLightboxService
111
+ *
112
+ * Service for displaying media files (images and PDFs) in full-screen viewers.
113
+ * - Images: Full-screen modal with gestures (pinch-zoom, swipe navigation)
114
+ * - PDFs: Native device PDF viewer (iOS/Android)
115
+ *
116
+ * Features:
117
+ * - Full-screen image viewing with gestures
118
+ * - Native PDF viewing
119
+ * - Swipe navigation between images
120
+ * - Pinch-to-zoom and double-tap zoom for images
121
+ * - Mobile-optimized touch gestures
122
+ * - Share functionality
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * constructor(private lightbox: DsMobileLightboxService) {}
127
+ *
128
+ * // Open images
129
+ * async openImages() {
130
+ * const modal = await this.lightbox.openImages({
131
+ * images: [
132
+ * {
133
+ * type: 'image',
134
+ * src: 'https://example.com/image1.jpg',
135
+ * title: 'Beautiful Sunset'
136
+ * }
137
+ * ]
138
+ * });
139
+ *
140
+ * // Listen for when lightbox is dismissed
141
+ * const { data } = await modal.onDidDismiss();
142
+ * if (data?.action === 'comment') {
143
+ * // Open post detail modal with comment focus
144
+ * this.openPostDetail({ focusComment: true });
145
+ * }
146
+ * }
147
+ *
148
+ * // Open PDF
149
+ * async openPdf() {
150
+ * await this.lightbox.openPdf({
151
+ * pdf: {
152
+ * type: 'pdf',
153
+ * src: 'https://example.com/document.pdf',
154
+ * title: 'Document'
155
+ * }
156
+ * });
157
+ * }
158
+ * ```
159
+ */
160
+ @Injectable({
161
+ providedIn: 'root'
162
+ })
163
+ export class DsMobileLightboxService {
164
+ private currentLightbox: ComponentRef<any> | null = null;
165
+
166
+ constructor(
167
+ private appRef: ApplicationRef,
168
+ private injector: EnvironmentInjector
169
+ ) {}
170
+
171
+ /**
172
+ * Open the lightbox with images (backward compatible method)
173
+ *
174
+ * @param options Configuration options for the image lightbox
175
+ * @returns Promise that resolves to a dismiss function
176
+ */
177
+ async open(options: LightboxOptions): Promise<() => void> {
178
+ return this.openImages(options);
179
+ }
180
+
181
+ /**
182
+ * Open the image lightbox with one or more images
183
+ *
184
+ * @param options Configuration options for the image lightbox
185
+ * @returns Promise that resolves to a dismiss function
186
+ */
187
+ async openImages(options: LightboxImageOptions): Promise<() => void> {
188
+ console.log('[Lightbox] Opening images with options:', options);
189
+
190
+ // Close any existing lightbox
191
+ if (this.currentLightbox) {
192
+ this.close();
193
+ }
194
+
195
+ // Create the component
196
+ const componentRef = createComponent(DsMobileLightboxImageComponent, {
197
+ environmentInjector: this.injector
198
+ });
199
+
200
+ // Set component props
201
+ componentRef.instance.images = options.images;
202
+ componentRef.instance.author = options.author;
203
+ componentRef.instance.initialIndex = options.initialIndex ?? 0;
204
+ componentRef.instance.enableZoom = options.enableZoom !== false;
205
+ componentRef.instance.showControls = options.showControls !== false;
206
+ componentRef.instance.enableSwipe = options.enableSwipe !== false;
207
+ componentRef.instance.showInfo = options.showInfo !== false;
208
+ componentRef.instance.showActions = options.showActions ?? false;
209
+ componentRef.instance.animation = options.animation ?? 'fade';
210
+
211
+ // Set up close callback
212
+ componentRef.instance.onCloseRequested = () => {
213
+ this.close();
214
+ };
215
+
216
+ // Attach to application
217
+ this.appRef.attachView(componentRef.hostView);
218
+
219
+ // Append to body
220
+ const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;
221
+ document.body.appendChild(domElem);
222
+
223
+ // Store reference
224
+ this.currentLightbox = componentRef;
225
+
226
+ console.log('[Lightbox] Image lightbox rendered');
227
+
228
+ // Return dismiss function
229
+ return () => this.close();
230
+ }
231
+
232
+ /**
233
+ * Open the PDF lightbox (opens native PDF viewer)
234
+ *
235
+ * @param options Configuration options for the PDF lightbox
236
+ * @returns Promise that resolves to a dismiss function
237
+ */
238
+ async openPdf(options: LightboxPdfOptions): Promise<() => void> {
239
+ console.log('[Lightbox] Opening PDF with options:', options);
240
+
241
+ // Close any existing lightbox
242
+ if (this.currentLightbox) {
243
+ this.close();
244
+ }
245
+
246
+ // Create the component
247
+ const componentRef = createComponent(DsMobileLightboxPdfComponent, {
248
+ environmentInjector: this.injector
249
+ });
250
+
251
+ // Set component props
252
+ componentRef.instance.pdf = options.pdf;
253
+ componentRef.instance.author = options.author;
254
+
255
+ // Set up close callback
256
+ componentRef.instance.onCloseRequested = () => {
257
+ this.close();
258
+ };
259
+
260
+ // Attach to application
261
+ this.appRef.attachView(componentRef.hostView);
262
+
263
+ // Append to body
264
+ const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;
265
+ document.body.appendChild(domElem);
266
+
267
+ // Store reference
268
+ this.currentLightbox = componentRef;
269
+
270
+ console.log('[Lightbox] PDF lightbox rendered');
271
+
272
+ // Return dismiss function
273
+ return () => this.close();
274
+ }
275
+
276
+ /**
277
+ * Close the currently open lightbox
278
+ */
279
+ close(): void {
280
+ if (this.currentLightbox) {
281
+ const domElem = (this.currentLightbox.hostView as any).rootNodes[0] as HTMLElement;
282
+ domElem.remove();
283
+ this.appRef.detachView(this.currentLightbox.hostView);
284
+ this.currentLightbox.destroy();
285
+ this.currentLightbox = null;
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Check if a lightbox is currently open
291
+ */
292
+ isOpen(): boolean {
293
+ return this.currentLightbox !== null;
294
+ }
295
+ }
296
+