@propbinder/mobile-design 0.0.1 → 0.0.2

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 (123) hide show
  1. package/ng-package.json +7 -0
  2. package/package.json +12 -39
  3. package/src/animations/page-transitions.ts +86 -0
  4. package/src/assets/fonts/Brockmann-Bold.otf +0 -0
  5. package/src/assets/fonts/Brockmann-BoldItalic.otf +0 -0
  6. package/src/assets/fonts/Brockmann-Medium.otf +0 -0
  7. package/src/assets/fonts/Brockmann-MediumItalic.otf +0 -0
  8. package/src/assets/fonts/Brockmann-Regular.otf +0 -0
  9. package/src/assets/fonts/Brockmann-RegularItalic.otf +0 -0
  10. package/src/assets/fonts/Brockmann-SemiBold.otf +0 -0
  11. package/src/assets/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  12. package/src/assets/fonts/Brockmann_desktop_license.pdf +0 -0
  13. package/src/assets/fonts/brockmann-medium-webfont.woff2 +0 -0
  14. package/src/assets/fonts/brockmann-regular-webfont.woff2 +0 -0
  15. package/src/assets/fonts/brockmann-semibold-webfont.woff2 +0 -0
  16. package/src/components/action-list-item/ds-mobile-action-list-item.ts +83 -0
  17. package/src/components/action-list-item/index.ts +2 -0
  18. package/src/components/app-layout/ds-mobile-app-layout.css +343 -0
  19. package/src/components/app-layout/ds-mobile-app-layout.ts +271 -0
  20. package/src/components/app-layout/index.ts +2 -0
  21. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +130 -0
  22. package/src/components/avatar-with-badge/index.ts +2 -0
  23. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +273 -0
  24. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +110 -0
  25. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +167 -0
  26. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +656 -0
  27. package/src/components/bottom-sheet/index.ts +3 -0
  28. package/src/components/comment/ds-mobile-comment.ts +516 -0
  29. package/src/components/comment/index.ts +2 -0
  30. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +182 -0
  31. package/src/components/contact-list-item/index.ts +2 -0
  32. package/src/components/content/ds-mobile-content.ts +158 -0
  33. package/src/components/content/index.ts +2 -0
  34. package/src/components/ds-mobile-tabs.css +372 -0
  35. package/src/components/ds-mobile-tabs.ts +217 -0
  36. package/src/components/file-attachment/ds-mobile-file-attachment.ts +164 -0
  37. package/src/components/file-attachment/index.ts +2 -0
  38. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +98 -0
  39. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +514 -0
  40. package/src/components/handbook-detail-modal/index.ts +3 -0
  41. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +130 -0
  42. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +444 -0
  43. package/src/components/handbook-folder/index.ts +4 -0
  44. package/src/components/header-content/ds-mobile-header-content.ts +211 -0
  45. package/src/components/header-content/index.ts +2 -0
  46. package/src/components/index.ts +45 -0
  47. package/src/components/inline-photo/ds-mobile-inline-photo.ts +269 -0
  48. package/src/components/inline-photo/index.ts +1 -0
  49. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.css +60 -0
  50. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +280 -0
  51. package/src/components/interactive-list-item-inquiry/index.ts +2 -0
  52. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +197 -0
  53. package/src/components/interactive-list-item-message/index.ts +2 -0
  54. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.css +70 -0
  55. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +594 -0
  56. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +124 -0
  57. package/src/components/interactive-list-item-post/index.ts +13 -0
  58. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +331 -0
  59. package/src/components/lightbox/ds-mobile-lightbox-header.ts +173 -0
  60. package/src/components/lightbox/ds-mobile-lightbox-image.ts +464 -0
  61. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +375 -0
  62. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +374 -0
  63. package/src/components/lightbox/ds-mobile-lightbox.css +587 -0
  64. package/src/components/lightbox/ds-mobile-lightbox.service.ts +293 -0
  65. package/src/components/lightbox/ds-mobile-lightbox.ts +529 -0
  66. package/src/components/lightbox/index.ts +22 -0
  67. package/src/components/list-item/ds-mobile-list-item.ts +499 -0
  68. package/src/components/list-item/index.ts +2 -0
  69. package/src/components/list-item-static/ds-mobile-list-item-static.ts +133 -0
  70. package/src/components/list-item-static/index.ts +2 -0
  71. package/src/components/logo/ds-logo.ts +85 -0
  72. package/src/components/logo/index.ts +2 -0
  73. package/src/components/modal/ds-mobile-modal.css +163 -0
  74. package/src/components/modal/ds-mobile-modal.service.ts +329 -0
  75. package/src/components/modal/index.ts +8 -0
  76. package/src/components/page-details/ds-mobile-page-details.css +285 -0
  77. package/src/components/page-details/ds-mobile-page-details.ts +128 -0
  78. package/src/components/page-details/index.ts +2 -0
  79. package/src/components/page-main/ds-mobile-page-main.css +346 -0
  80. package/src/components/page-main/ds-mobile-page-main.ts +331 -0
  81. package/src/components/page-main/index.ts +2 -0
  82. package/src/components/post-card/ds-mobile-post-card.ts +685 -0
  83. package/src/components/post-card/ds-mobile-post-pdf-attachment.ts +124 -0
  84. package/src/components/post-card/index.ts +11 -0
  85. package/src/components/post-composer/ds-mobile-post-composer.ts +140 -0
  86. package/src/components/post-composer/index.ts +2 -0
  87. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +104 -0
  88. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +1273 -0
  89. package/src/components/post-detail-modal/index.ts +9 -0
  90. package/src/components/shared/directives/index.ts +2 -0
  91. package/src/components/shared/directives/long-press.directive.ts +208 -0
  92. package/src/components/shared/index.ts +3 -0
  93. package/src/components/shared/mobile-common.css +94 -0
  94. package/src/components/shared/mobile-page-base.css +315 -0
  95. package/src/components/shared/mobile-page-base.ts +70 -0
  96. package/src/components/swiper/ds-mobile-swiper.ts +123 -0
  97. package/src/components/swiper/index.ts +2 -0
  98. package/src/components/tab-bar/ds-mobile-tab-bar.ts +132 -0
  99. package/src/components/tab-bar/index.ts +2 -0
  100. package/src/components/tabs/ds-mobile-tabs.css +405 -0
  101. package/src/components/tabs/ds-mobile-tabs.ts +204 -0
  102. package/src/components/tabs/index.ts +2 -0
  103. package/src/pages/community.page.ts +768 -0
  104. package/src/pages/handbook.page.ts +298 -0
  105. package/src/pages/home.page.ts +192 -0
  106. package/src/pages/index.ts +9 -0
  107. package/src/pages/inquiries.example.ts +212 -0
  108. package/src/pages/inquiry-detail.example.css +434 -0
  109. package/src/pages/inquiry-detail.example.ts +416 -0
  110. package/src/pages/mobile-tabs-example.component.ts +146 -0
  111. package/src/pages/post-create.page.ts +311 -0
  112. package/src/pages/post-detail.page.ts +295 -0
  113. package/src/pages/whitelabel-demo.page.ts +548 -0
  114. package/src/public-api.ts +5 -0
  115. package/src/services/user.service.ts +35 -0
  116. package/src/services/whitelabel.service.ts +171 -0
  117. package/src/styles/ionic.css +673 -0
  118. package/tsconfig.lib.json +17 -0
  119. package/tsconfig.lib.prod.json +9 -0
  120. package/tsconfig.spec.json +13 -0
  121. package/fesm2022/propbinder-mobile-design.mjs +0 -8294
  122. package/fesm2022/propbinder-mobile-design.mjs.map +0 -1
  123. package/index.d.ts +0 -2860
@@ -0,0 +1,13 @@
1
+ // Export the main component and shared post components without the indent
2
+ export {
3
+ DsMobileInteractiveListItemPostComponent,
4
+ PostContentComponent,
5
+ PostTextComponent,
6
+ PostMediaComponent,
7
+ PostAttachmentsComponent,
8
+ PostActionsComponent,
9
+ ActionLikeComponent,
10
+ ActionCommentComponent
11
+ } from './ds-mobile-interactive-list-item-post';
12
+ export { PostPdfAttachmentComponent } from './ds-mobile-post-pdf-attachment';
13
+
@@ -0,0 +1,331 @@
1
+ import { Component, input, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DsIconButtonComponent } from '@propbinder/design-system';
4
+
5
+ /**
6
+ * DsMobileLightboxFooterComponent
7
+ *
8
+ * Shared footer component for all lightbox types (image, PDF, etc.)
9
+ * Displays navigation controls (for multiple images) and action buttons.
10
+ */
11
+ @Component({
12
+ selector: 'ds-mobile-lightbox-footer',
13
+ standalone: true,
14
+ imports: [CommonModule, DsIconButtonComponent],
15
+ template: `
16
+ <div class="lightbox-footer">
17
+ <!-- Navigation controls (only shown for multiple images) -->
18
+ @if (showNavigation() && totalImages() > 1) {
19
+ <div class="footer-navigation">
20
+ <button
21
+ class="nav-button prev"
22
+ (click)="prevClick.emit()"
23
+ [disabled]="currentIndex() === 0"
24
+ aria-label="Previous image">
25
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
26
+ <path d="M15 18L9 12L15 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
27
+ </svg>
28
+ </button>
29
+
30
+ <div class="counter">
31
+ {{ currentIndex() + 1 }} / {{ totalImages() }}
32
+ </div>
33
+
34
+ <button
35
+ class="nav-button next"
36
+ (click)="nextClick.emit()"
37
+ [disabled]="currentIndex() === totalImages() - 1"
38
+ aria-label="Next image">
39
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
40
+ <path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
41
+ </svg>
42
+ </button>
43
+ </div>
44
+ }
45
+
46
+ <!-- Action buttons -->
47
+ <div class="footer-actions">
48
+ <div class="action-buttons-left">
49
+ <!-- Like button -->
50
+ <ds-icon-button
51
+ [icon]="isLiked() ? 'remixHeart3Fill' : 'remixHeart3Line'"
52
+ variant="ghost"
53
+ size="md"
54
+ (click)="likeClick.emit()"
55
+ [attr.data-liked]="isLiked()"
56
+ class="action-button-like"
57
+ [ariaLabel]="'Like'">
58
+ </ds-icon-button>
59
+
60
+ <!-- Comment button -->
61
+ <ds-icon-button
62
+ icon="remixChat3Line"
63
+ variant="ghost"
64
+ size="md"
65
+ (click)="commentClick.emit()"
66
+ class="action-button-comment"
67
+ [ariaLabel]="'Comment'">
68
+ </ds-icon-button>
69
+ </div>
70
+
71
+ <ds-icon-button
72
+ icon="remixShare2Line"
73
+ variant="ghost"
74
+ size="md"
75
+ (click)="shareClick.emit()"
76
+ class="action-button-share"
77
+ [ariaLabel]="'Share'">
78
+ </ds-icon-button>
79
+ </div>
80
+ </div>
81
+ `,
82
+ styles: [`
83
+ .lightbox-footer {
84
+ position: fixed;
85
+ bottom: 0;
86
+ left: 0;
87
+ right: 0;
88
+ z-index: 100;
89
+ padding: 16px 20px 20px 20px;
90
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.6) 50%, rgba(0, 0, 0, 0.4) 75%, transparent 100%);
91
+ pointer-events: none;
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: 12px;
95
+ }
96
+
97
+ /* Navigation controls */
98
+ .footer-navigation {
99
+ display: flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ gap: 24px;
103
+ pointer-events: auto;
104
+ }
105
+
106
+ .nav-button {
107
+ background: rgba(255, 255, 255, 0.1);
108
+ border: 1px solid rgba(255, 255, 255, 0.2);
109
+ border-radius: 50%;
110
+ color: white;
111
+ width: 40px;
112
+ height: 40px;
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ cursor: pointer;
117
+ transition: all 0.2s ease;
118
+ backdrop-filter: blur(10px);
119
+ -webkit-backdrop-filter: blur(10px);
120
+ padding: 0;
121
+ }
122
+
123
+ .nav-button:hover:not(:disabled) {
124
+ background: rgba(255, 255, 255, 0.2);
125
+ transform: scale(1.05);
126
+ }
127
+
128
+ .nav-button:active:not(:disabled) {
129
+ transform: scale(0.95);
130
+ }
131
+
132
+ .nav-button:disabled {
133
+ opacity: 0.3;
134
+ cursor: not-allowed;
135
+ }
136
+
137
+ .nav-button svg {
138
+ width: 24px;
139
+ height: 24px;
140
+ flex-shrink: 0;
141
+ }
142
+
143
+ .counter {
144
+ background: rgba(255, 255, 255, 0.1);
145
+ border: 1px solid rgba(255, 255, 255, 0.2);
146
+ backdrop-filter: blur(10px);
147
+ -webkit-backdrop-filter: blur(10px);
148
+ border-radius: 100px;
149
+ padding: 8px 16px;
150
+ color: white;
151
+ font-family: 'Brockmann', sans-serif;
152
+ font-size: var(--font-size-sm);
153
+ font-weight: 500;
154
+ line-height: 1;
155
+ letter-spacing: -0.3px;
156
+ pointer-events: auto;
157
+ user-select: none;
158
+ }
159
+
160
+ .footer-actions {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: space-between;
164
+ gap: 16px;
165
+ pointer-events: auto;
166
+ }
167
+
168
+ .action-buttons-left {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 16px;
172
+ }
173
+
174
+ /* Style the action buttons to match the ghost/transparent look */
175
+ .action-button-like::ng-deep button,
176
+ .action-button-comment::ng-deep button,
177
+ .action-button-share::ng-deep button {
178
+ background: rgba(255, 255, 255, 0.1) !important;
179
+ border: 1px solid rgba(255, 255, 255, 0.2) !important;
180
+ color: white !important;
181
+ backdrop-filter: blur(10px);
182
+ -webkit-backdrop-filter: blur(10px);
183
+ transition: all 0.2s ease;
184
+ }
185
+
186
+ .action-button-like::ng-deep button:hover,
187
+ .action-button-comment::ng-deep button:hover,
188
+ .action-button-share::ng-deep button:hover {
189
+ background: rgba(255, 255, 255, 0.2) !important;
190
+ transform: scale(1.02);
191
+ }
192
+
193
+ .action-button-like::ng-deep button:active,
194
+ .action-button-comment::ng-deep button:active,
195
+ .action-button-share::ng-deep button:active {
196
+ transform: scale(0.98);
197
+ }
198
+
199
+ /* Icon and label colors */
200
+ .action-button-like::ng-deep button svg,
201
+ .action-button-comment::ng-deep button svg,
202
+ .action-button-share::ng-deep button svg,
203
+ .action-button-like::ng-deep button .btn__icon,
204
+ .action-button-comment::ng-deep button .btn__icon,
205
+ .action-button-share::ng-deep button .btn__icon,
206
+ .action-button-like::ng-deep button .btn__content,
207
+ .action-button-comment::ng-deep button .btn__content {
208
+ color: white !important;
209
+ fill: white !important;
210
+ }
211
+
212
+ /* Make sure icons are visible */
213
+ .action-button-like::ng-deep button .btn__icon svg,
214
+ .action-button-comment::ng-deep button .btn__icon svg,
215
+ .action-button-share::ng-deep button .btn__icon svg {
216
+ color: white !important;
217
+ fill: white !important;
218
+ display: block !important;
219
+ opacity: 1 !important;
220
+ visibility: visible !important;
221
+ width: 20px !important;
222
+ height: 20px !important;
223
+ }
224
+
225
+ /* Ensure icon wrapper is visible */
226
+ .action-button-like::ng-deep button .btn__icon,
227
+ .action-button-comment::ng-deep button .btn__icon,
228
+ .action-button-share::ng-deep button .btn__icon {
229
+ display: flex !important;
230
+ align-items: center !important;
231
+ justify-content: center !important;
232
+ flex-shrink: 0 !important;
233
+ }
234
+
235
+ /* Like button active state (pink heart) */
236
+ .action-button-like[data-liked="true"]::ng-deep button svg {
237
+ fill: #f91880 !important;
238
+ color: #f91880 !important;
239
+ }
240
+
241
+ .action-button-like[data-liked="true"]::ng-deep button {
242
+ border-color: rgba(249, 24, 128, 0.3) !important;
243
+ }
244
+
245
+ /* All action buttons should have same circular styling */
246
+ .action-button-like,
247
+ .action-button-comment,
248
+ .action-button-share {
249
+ flex-shrink: 0;
250
+ border-radius: 50%;
251
+ }
252
+
253
+ .action-button-like::ng-deep button,
254
+ .action-button-comment::ng-deep button,
255
+ .action-button-share::ng-deep button {
256
+ border-radius: 50% !important;
257
+ width: 44px !important;
258
+ height: 44px !important;
259
+ min-width: 44px !important;
260
+ min-height: 44px !important;
261
+ padding: 0 !important;
262
+ display: flex !important;
263
+ align-items: center !important;
264
+ justify-content: center !important;
265
+ }
266
+
267
+ /* Safe area support for footer */
268
+ @supports (padding-bottom: env(safe-area-inset-bottom)) {
269
+ .lightbox-footer {
270
+ padding-bottom: calc(20px + env(safe-area-inset-bottom));
271
+ }
272
+ }
273
+ `]
274
+ })
275
+ export class DsMobileLightboxFooterComponent {
276
+ /**
277
+ * Whether to show navigation controls
278
+ */
279
+ showNavigation = input<boolean>(false);
280
+
281
+ /**
282
+ * Current image index (0-based)
283
+ */
284
+ currentIndex = input<number>(0);
285
+
286
+ /**
287
+ * Total number of images
288
+ */
289
+ totalImages = input<number>(1);
290
+
291
+ /**
292
+ * Whether the content is liked
293
+ */
294
+ isLiked = input<boolean>(false);
295
+
296
+ /**
297
+ * Number of likes
298
+ */
299
+ likeCount = input<number>(0);
300
+
301
+ /**
302
+ * Number of comments
303
+ */
304
+ commentCount = input<number>(0);
305
+
306
+ /**
307
+ * Emitted when previous button is clicked
308
+ */
309
+ prevClick = output<void>();
310
+
311
+ /**
312
+ * Emitted when next button is clicked
313
+ */
314
+ nextClick = output<void>();
315
+
316
+ /**
317
+ * Emitted when like button is clicked
318
+ */
319
+ likeClick = output<void>();
320
+
321
+ /**
322
+ * Emitted when comment button is clicked
323
+ */
324
+ commentClick = output<void>();
325
+
326
+ /**
327
+ * Emitted when share button is clicked
328
+ */
329
+ shareClick = output<void>();
330
+ }
331
+
@@ -0,0 +1,173 @@
1
+ import { Component, input, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DsIconButtonComponent } from '@propbinder/design-system';
4
+ import { DsAvatarComponent } from '@propbinder/design-system';
5
+ import type { LightboxAuthor } from './ds-mobile-lightbox.service';
6
+
7
+ /**
8
+ * DsMobileLightboxHeaderComponent
9
+ *
10
+ * Shared header component for all lightbox types (image, PDF, etc.)
11
+ * Displays author information and close button with consistent styling.
12
+ */
13
+ @Component({
14
+ selector: 'ds-mobile-lightbox-header',
15
+ standalone: true,
16
+ imports: [CommonModule, DsIconButtonComponent, DsAvatarComponent],
17
+ styleUrls: ['../shared/mobile-common.css'],
18
+ template: `
19
+ @if (author()) {
20
+ <div class="lightbox-header lightbox-context">
21
+ <div class="header-content">
22
+ <!-- Post author info -->
23
+ <div class="post-author-info">
24
+ <ds-avatar
25
+ [initials]="author()!.avatarInitials ?? ''"
26
+ [type]="author()!.avatarType ?? 'initials'"
27
+ [src]="author()!.avatarSrc ?? ''"
28
+ size="md"
29
+ />
30
+ <div class="author-details">
31
+ <div class="author-name">{{ author()!.name }}</div>
32
+ <div class="author-meta">
33
+ @if (author()!.role) {
34
+ <span>{{ author()!.role }}</span>
35
+ }
36
+ @if (author()!.role && author()!.timestamp) {
37
+ <span class="separator">·</span>
38
+ }
39
+ @if (author()!.timestamp) {
40
+ <span>{{ author()!.timestamp }}</span>
41
+ }
42
+ </div>
43
+ </div>
44
+ </div>
45
+
46
+ <!-- Close button -->
47
+ <ds-icon-button
48
+ icon="remixCloseLine"
49
+ variant="ghost"
50
+ size="md"
51
+ (click)="closeClick.emit()"
52
+ class="close-button"
53
+ [ariaLabel]="'Close'">
54
+ </ds-icon-button>
55
+ </div>
56
+ </div>
57
+ }
58
+ `,
59
+ styles: [`
60
+ .lightbox-header {
61
+ position: fixed;
62
+ top: 0;
63
+ left: 0;
64
+ right: 0;
65
+ z-index: 1000;
66
+ padding: 0 16px;
67
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.4) 80%, transparent 100%);
68
+ pointer-events: none;
69
+ }
70
+
71
+ .header-content {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: space-between;
75
+ gap: 12px;
76
+ pointer-events: auto;
77
+ }
78
+
79
+ .post-author-info {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 12px;
83
+ flex: 1;
84
+ min-width: 0;
85
+ }
86
+
87
+ .author-details {
88
+ display: flex;
89
+ flex-direction: column;
90
+ min-width: 0;
91
+ flex: 1;
92
+ }
93
+
94
+ .author-name {
95
+ color: white;
96
+ font-family: 'Brockmann', sans-serif;
97
+ font-size: var(--font-size-sm);
98
+ font-weight: 600;
99
+ line-height: 20px;
100
+ letter-spacing: -0.3px;
101
+ }
102
+
103
+ .author-meta {
104
+ color: rgba(255, 255, 255, 0.7);
105
+ font-family: 'Brockmann', sans-serif;
106
+ font-size: var(--font-size-xs);
107
+ font-weight: 400;
108
+ line-height: 1.2;
109
+ letter-spacing: -0.26px;
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 6px;
113
+ }
114
+
115
+ .author-meta .separator {
116
+ color: rgba(255, 255, 255, 0.5);
117
+ }
118
+
119
+ .close-button {
120
+ pointer-events: auto;
121
+ flex-shrink: 0;
122
+ border-radius: 50%;
123
+ }
124
+
125
+ .close-button::ng-deep button {
126
+ color: white !important;
127
+ background: rgba(255, 255, 255, 0.1) !important;
128
+ border-radius: 50%;
129
+ transition: background 0.2s ease;
130
+ border: none;
131
+ width: 36px !important;
132
+ height: 36px !important;
133
+ min-width: 36px !important;
134
+ min-height: 36px !important;
135
+ padding: 0 !important;
136
+ display: flex !important;
137
+ align-items: center !important;
138
+ justify-content: center !important;
139
+ }
140
+
141
+ .close-button::ng-deep button:hover {
142
+ background: rgba(255, 255, 255, 0.15) !important;
143
+ }
144
+
145
+ .close-button::ng-deep button:active {
146
+ background: rgba(255, 255, 255, 0.15) !important;
147
+ }
148
+
149
+ .close-button::ng-deep svg {
150
+ color: white !important;
151
+ fill: white !important;
152
+ }
153
+
154
+ /* Safe area support for notched devices */
155
+ @supports (padding-top: env(safe-area-inset-top)) {
156
+ .lightbox-header {
157
+ padding-top: calc(16px + env(safe-area-inset-top));
158
+ }
159
+ }
160
+ `]
161
+ })
162
+ export class DsMobileLightboxHeaderComponent {
163
+ /**
164
+ * Author information to display
165
+ */
166
+ author = input<LightboxAuthor>();
167
+
168
+ /**
169
+ * Emitted when close button is clicked
170
+ */
171
+ closeClick = output<void>();
172
+ }
173
+