@propbinder/mobile-design 0.0.2 → 0.0.22

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/fesm2022/propbinder-mobile-design.mjs +12604 -0
  2. package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
  3. package/index.d.ts +3214 -0
  4. package/package.json +39 -12
  5. package/ng-package.json +0 -7
  6. package/src/animations/page-transitions.ts +0 -86
  7. package/src/assets/fonts/Brockmann-Bold.otf +0 -0
  8. package/src/assets/fonts/Brockmann-BoldItalic.otf +0 -0
  9. package/src/assets/fonts/Brockmann-Medium.otf +0 -0
  10. package/src/assets/fonts/Brockmann-MediumItalic.otf +0 -0
  11. package/src/assets/fonts/Brockmann-Regular.otf +0 -0
  12. package/src/assets/fonts/Brockmann-RegularItalic.otf +0 -0
  13. package/src/assets/fonts/Brockmann-SemiBold.otf +0 -0
  14. package/src/assets/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  15. package/src/assets/fonts/Brockmann_desktop_license.pdf +0 -0
  16. package/src/assets/fonts/brockmann-medium-webfont.woff2 +0 -0
  17. package/src/assets/fonts/brockmann-regular-webfont.woff2 +0 -0
  18. package/src/assets/fonts/brockmann-semibold-webfont.woff2 +0 -0
  19. package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -83
  20. package/src/components/action-list-item/index.ts +0 -2
  21. package/src/components/app-layout/ds-mobile-app-layout.css +0 -343
  22. package/src/components/app-layout/ds-mobile-app-layout.ts +0 -271
  23. package/src/components/app-layout/index.ts +0 -2
  24. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -130
  25. package/src/components/avatar-with-badge/index.ts +0 -2
  26. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -273
  27. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -110
  28. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -167
  29. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -656
  30. package/src/components/bottom-sheet/index.ts +0 -3
  31. package/src/components/comment/ds-mobile-comment.ts +0 -516
  32. package/src/components/comment/index.ts +0 -2
  33. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +0 -182
  34. package/src/components/contact-list-item/index.ts +0 -2
  35. package/src/components/content/ds-mobile-content.ts +0 -158
  36. package/src/components/content/index.ts +0 -2
  37. package/src/components/ds-mobile-tabs.css +0 -372
  38. package/src/components/ds-mobile-tabs.ts +0 -217
  39. package/src/components/file-attachment/ds-mobile-file-attachment.ts +0 -164
  40. package/src/components/file-attachment/index.ts +0 -2
  41. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -98
  42. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -514
  43. package/src/components/handbook-detail-modal/index.ts +0 -3
  44. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -130
  45. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -444
  46. package/src/components/handbook-folder/index.ts +0 -4
  47. package/src/components/header-content/ds-mobile-header-content.ts +0 -211
  48. package/src/components/header-content/index.ts +0 -2
  49. package/src/components/index.ts +0 -45
  50. package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -269
  51. package/src/components/inline-photo/index.ts +0 -1
  52. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.css +0 -60
  53. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -280
  54. package/src/components/interactive-list-item-inquiry/index.ts +0 -2
  55. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +0 -197
  56. package/src/components/interactive-list-item-message/index.ts +0 -2
  57. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.css +0 -70
  58. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -594
  59. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +0 -124
  60. package/src/components/interactive-list-item-post/index.ts +0 -13
  61. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +0 -331
  62. package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -173
  63. package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -464
  64. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -375
  65. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +0 -374
  66. package/src/components/lightbox/ds-mobile-lightbox.css +0 -587
  67. package/src/components/lightbox/ds-mobile-lightbox.service.ts +0 -293
  68. package/src/components/lightbox/ds-mobile-lightbox.ts +0 -529
  69. package/src/components/lightbox/index.ts +0 -22
  70. package/src/components/list-item/ds-mobile-list-item.ts +0 -499
  71. package/src/components/list-item/index.ts +0 -2
  72. package/src/components/list-item-static/ds-mobile-list-item-static.ts +0 -133
  73. package/src/components/list-item-static/index.ts +0 -2
  74. package/src/components/logo/ds-logo.ts +0 -85
  75. package/src/components/logo/index.ts +0 -2
  76. package/src/components/modal/ds-mobile-modal.css +0 -163
  77. package/src/components/modal/ds-mobile-modal.service.ts +0 -329
  78. package/src/components/modal/index.ts +0 -8
  79. package/src/components/page-details/ds-mobile-page-details.css +0 -285
  80. package/src/components/page-details/ds-mobile-page-details.ts +0 -128
  81. package/src/components/page-details/index.ts +0 -2
  82. package/src/components/page-main/ds-mobile-page-main.css +0 -346
  83. package/src/components/page-main/ds-mobile-page-main.ts +0 -331
  84. package/src/components/page-main/index.ts +0 -2
  85. package/src/components/post-card/ds-mobile-post-card.ts +0 -685
  86. package/src/components/post-card/ds-mobile-post-pdf-attachment.ts +0 -124
  87. package/src/components/post-card/index.ts +0 -11
  88. package/src/components/post-composer/ds-mobile-post-composer.ts +0 -140
  89. package/src/components/post-composer/index.ts +0 -2
  90. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -104
  91. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -1273
  92. package/src/components/post-detail-modal/index.ts +0 -9
  93. package/src/components/shared/directives/index.ts +0 -2
  94. package/src/components/shared/directives/long-press.directive.ts +0 -208
  95. package/src/components/shared/index.ts +0 -3
  96. package/src/components/shared/mobile-common.css +0 -94
  97. package/src/components/shared/mobile-page-base.css +0 -315
  98. package/src/components/shared/mobile-page-base.ts +0 -70
  99. package/src/components/swiper/ds-mobile-swiper.ts +0 -123
  100. package/src/components/swiper/index.ts +0 -2
  101. package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -132
  102. package/src/components/tab-bar/index.ts +0 -2
  103. package/src/components/tabs/ds-mobile-tabs.css +0 -405
  104. package/src/components/tabs/ds-mobile-tabs.ts +0 -204
  105. package/src/components/tabs/index.ts +0 -2
  106. package/src/pages/community.page.ts +0 -768
  107. package/src/pages/handbook.page.ts +0 -298
  108. package/src/pages/home.page.ts +0 -192
  109. package/src/pages/index.ts +0 -9
  110. package/src/pages/inquiries.example.ts +0 -212
  111. package/src/pages/inquiry-detail.example.css +0 -434
  112. package/src/pages/inquiry-detail.example.ts +0 -416
  113. package/src/pages/mobile-tabs-example.component.ts +0 -146
  114. package/src/pages/post-create.page.ts +0 -311
  115. package/src/pages/post-detail.page.ts +0 -295
  116. package/src/pages/whitelabel-demo.page.ts +0 -548
  117. package/src/public-api.ts +0 -5
  118. package/src/services/user.service.ts +0 -35
  119. package/src/services/whitelabel.service.ts +0 -171
  120. package/src/styles/ionic.css +0 -673
  121. package/tsconfig.lib.json +0 -17
  122. package/tsconfig.lib.prod.json +0 -9
  123. package/tsconfig.spec.json +0 -13
@@ -1,269 +0,0 @@
1
- import { Component, Input, output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { DsMobileLightboxService, LightboxImage } from '../lightbox/ds-mobile-lightbox.service';
4
-
5
- /**
6
- * DsMobileInlinePhotoComponent
7
- *
8
- * Displays one or multiple photos in a grid layout optimized for social feeds.
9
- * Supports up to 5 visible images with automatic grid layouts.
10
- *
11
- * Features:
12
- * - Automatic grid layouts for 1-5 images
13
- * - Shows "+N more" overlay if more than 5 images
14
- * - Opens lightbox with all images (including hidden ones) when clicked
15
- * - Optimized layouts: 1 full, 2 split, 3 masonry, 4 grid, 5 grid
16
- *
17
- * @example
18
- * ```html
19
- * <ds-mobile-inline-photo
20
- * [images]="['img1.jpg', 'img2.jpg', 'img3.jpg']"
21
- * [author]="authorInfo"
22
- * />
23
- * ```
24
- */
25
- @Component({
26
- selector: 'ds-mobile-inline-photo',
27
- standalone: true,
28
- imports: [CommonModule],
29
- template: `
30
- <div
31
- class="photo-grid"
32
- [attr.data-count]="visibleImages.length"
33
- [class.has-more]="hiddenCount > 0">
34
- @for (image of visibleImages; track image; let i = $index) {
35
- <div
36
- class="photo-item"
37
- [class.last]="i === visibleImages.length - 1"
38
- (click)="openLightbox(i, $event)">
39
- <img
40
- [src]="image"
41
- [alt]="'Photo ' + (i + 1)"
42
- loading="lazy">
43
-
44
- <!-- Show "+N more" overlay on last image if there are hidden images -->
45
- @if (i === visibleImages.length - 1 && hiddenCount > 0) {
46
- <div class="more-overlay">
47
- <span class="more-text">+{{ hiddenCount }}</span>
48
- </div>
49
- }
50
- </div>
51
- }
52
- </div>
53
- `,
54
- styles: [`
55
- :host {
56
- display: block;
57
- }
58
-
59
- .photo-grid {
60
- display: grid;
61
- gap: 4px;
62
- border-radius: 8px;
63
- overflow: hidden;
64
- background: var(--ds-color-neutral-100);
65
- width: 100%;
66
- }
67
-
68
- .photo-item {
69
- position: relative;
70
- overflow: hidden;
71
- cursor: pointer;
72
- background: var(--ds-color-neutral-200);
73
- aspect-ratio: 1;
74
- }
75
-
76
- .photo-item img {
77
- width: 100%;
78
- height: 100%;
79
- object-fit: cover;
80
- display: block;
81
- transition: transform 0.2s ease;
82
- }
83
-
84
- .photo-item:active img {
85
- transform: scale(0.98);
86
- }
87
-
88
- .more-overlay {
89
- position: absolute;
90
- inset: 0;
91
- background: rgba(0, 0, 0, 0.6);
92
- display: flex;
93
- align-items: center;
94
- justify-content: center;
95
- pointer-events: none;
96
- }
97
-
98
- .more-text {
99
- color: white;
100
- font-size: 32px;
101
- font-weight: 600;
102
- font-family: var(--ds-font-family-medium);
103
- }
104
-
105
- /* 1 image: full width, 4:3 ratio */
106
- .photo-grid[data-count="1"] {
107
- grid-template-columns: 1fr;
108
- }
109
-
110
- .photo-grid[data-count="1"] .photo-item {
111
- aspect-ratio: 4/3;
112
- }
113
-
114
- /* 2 images: side by side */
115
- .photo-grid[data-count="2"] {
116
- grid-template-columns: 1fr 1fr;
117
- }
118
-
119
- /* 3 images: 1 large left, 2 stacked right */
120
- .photo-grid[data-count="3"] {
121
- grid-template-columns: 2fr 1fr;
122
- grid-auto-rows: 1fr;
123
- }
124
-
125
- .photo-grid[data-count="3"] .photo-item:first-child {
126
- grid-row: 1 / 3;
127
- aspect-ratio: auto;
128
- }
129
-
130
- /* Right side images remain 1:1 squares */
131
- .photo-grid[data-count="3"] .photo-item:nth-child(2),
132
- .photo-grid[data-count="3"] .photo-item:nth-child(3) {
133
- aspect-ratio: 1;
134
- }
135
-
136
- /* 4 images: 2x2 grid */
137
- .photo-grid[data-count="4"] {
138
- grid-template-columns: 1fr 1fr;
139
- grid-template-rows: 1fr 1fr;
140
- }
141
-
142
- /* 5 images: 2 on top, 3 on bottom */
143
- .photo-grid[data-count="5"] {
144
- grid-template-columns: repeat(6, 1fr);
145
- grid-template-rows: auto auto;
146
- }
147
-
148
- .photo-grid[data-count="5"] .photo-item {
149
- aspect-ratio: 1;
150
- width: 100%;
151
- }
152
-
153
- .photo-grid[data-count="5"] .photo-item:nth-child(1) {
154
- grid-column: 1 / 4;
155
- grid-row: 1;
156
- }
157
-
158
- .photo-grid[data-count="5"] .photo-item:nth-child(2) {
159
- grid-column: 4 / 7;
160
- grid-row: 1;
161
- }
162
-
163
- .photo-grid[data-count="5"] .photo-item:nth-child(3) {
164
- grid-column: 1 / 3;
165
- grid-row: 2;
166
- }
167
-
168
- .photo-grid[data-count="5"] .photo-item:nth-child(4) {
169
- grid-column: 3 / 5;
170
- grid-row: 2;
171
- }
172
-
173
- .photo-grid[data-count="5"] .photo-item:nth-child(5) {
174
- grid-column: 5 / 7;
175
- grid-row: 2;
176
- }
177
-
178
- /* Round bottom corners for 5-image layout */
179
- .photo-grid[data-count="5"] .photo-item:nth-child(3) {
180
- border-bottom-left-radius: 8px;
181
- overflow: hidden;
182
- }
183
-
184
- .photo-grid[data-count="5"] .photo-item:nth-child(5) {
185
- border-bottom-right-radius: 8px;
186
- overflow: hidden;
187
- }
188
- `]
189
- })
190
- export class DsMobileInlinePhotoComponent {
191
- /**
192
- * Array of image URLs to display
193
- */
194
- @Input() images: string[] = [];
195
-
196
- /**
197
- * Author information (passed to lightbox)
198
- */
199
- @Input() author?: {
200
- name: string;
201
- role?: string;
202
- avatarSrc?: string;
203
- avatarInitials?: string;
204
- avatarType?: 'photo' | 'initials';
205
- timestamp?: string;
206
- };
207
-
208
- /**
209
- * Maximum number of images to show inline (default: 5)
210
- * Remaining images shown in lightbox only
211
- */
212
- @Input() maxVisible: number = 5;
213
-
214
- /**
215
- * Event emitted when lightbox is opened
216
- */
217
- photoClick = output<{ index: number; totalImages: number }>();
218
-
219
- constructor(private lightboxService: DsMobileLightboxService) {}
220
-
221
- /**
222
- * Get the first N images to display inline
223
- */
224
- get visibleImages(): string[] {
225
- return this.images.slice(0, this.maxVisible);
226
- }
227
-
228
- /**
229
- * Calculate how many images are hidden
230
- */
231
- get hiddenCount(): number {
232
- return Math.max(0, this.images.length - this.maxVisible);
233
- }
234
-
235
- /**
236
- * Open lightbox with all images, starting at the clicked index
237
- */
238
- openLightbox(index: number, event?: Event): void {
239
- // Stop event propagation to prevent triggering parent click handlers
240
- if (event) {
241
- event.stopPropagation();
242
- event.preventDefault();
243
- }
244
-
245
- // Emit event
246
- this.photoClick.emit({
247
- index,
248
- totalImages: this.images.length
249
- });
250
-
251
- // Convert image URLs to LightboxImage format
252
- const lightboxImages: LightboxImage[] = this.images.map((src, i) => ({
253
- type: 'image',
254
- src,
255
- alt: `Photo ${i + 1}`
256
- }));
257
-
258
- // Open lightbox with all images (not just visible ones)
259
- this.lightboxService.openImages({
260
- images: lightboxImages,
261
- initialIndex: index,
262
- author: this.author,
263
- enableZoom: true,
264
- showControls: true,
265
- enableSwipe: true
266
- });
267
- }
268
- }
269
-
@@ -1 +0,0 @@
1
- export * from './ds-mobile-inline-photo';
@@ -1,60 +0,0 @@
1
- /**
2
- * Interactive List Item Inquiry Styles
3
- * Typography styles specific to inquiry list items
4
- */
5
-
6
- /* Inquiry Name (matches author-name styling) */
7
- :root .inquiry-name,
8
- .inquiry-name {
9
- font-family: 'Brockmann', sans-serif;
10
- font-size: var(--font-size-sm);
11
- font-weight: 600;
12
- line-height: 20px;
13
- letter-spacing: -0.3px;
14
- color: var(--text-color-default-primary, #202227);
15
- white-space: nowrap;
16
- overflow: hidden;
17
- text-overflow: ellipsis;
18
- }
19
-
20
- /* Inquiry Meta (matches author-meta styling) */
21
- :root .inquiry-meta,
22
- .inquiry-meta {
23
- font-family: 'Brockmann', sans-serif;
24
- font-size: var(--font-size-xs);
25
- font-weight: 400;
26
- line-height: 1.2;
27
- letter-spacing: -0.26px;
28
- color: var(--text-color-default-tertiary, #626B78);
29
- display: flex;
30
- align-items: center;
31
- gap: 6px;
32
- }
33
-
34
- :root .inquiry-meta .separator,
35
- .inquiry-meta .separator {
36
- color: var(--text-color-default-tertiary, #626B78);
37
- }
38
-
39
- /* Variants for lightbox/overlay contexts (white text on dark bg) */
40
- :root .lightbox-context .inquiry-name,
41
- .lightbox-context .inquiry-name,
42
- :root .overlay-context .inquiry-name,
43
- .overlay-context .inquiry-name {
44
- color: rgba(255, 255, 255, 0.95);
45
- }
46
-
47
- :root .lightbox-context .inquiry-meta,
48
- .lightbox-context .inquiry-meta,
49
- :root .overlay-context .inquiry-meta,
50
- .overlay-context .inquiry-meta {
51
- color: rgba(255, 255, 255, 0.7);
52
- }
53
-
54
- :root .lightbox-context .inquiry-meta .separator,
55
- .lightbox-context .inquiry-meta .separator,
56
- :root .overlay-context .inquiry-meta .separator,
57
- .overlay-context .inquiry-meta .separator {
58
- color: rgba(255, 255, 255, 0.5);
59
- }
60
-
@@ -1,280 +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 { DsShapeIndicatorComponent } from '@propbinder/design-system';
5
- import { DsMobileListItemComponent } from '../list-item';
6
-
7
- /**
8
- * DsMobileInteractiveListItemInquiryComponent
9
- *
10
- * Specialized interactive list item for displaying inquiries/tickets.
11
- * Built on top of ds-mobile-interactive-list-item base component.
12
- * Displays inquiry title, description, status, and timestamp.
13
- *
14
- * @example
15
- * ```html
16
- * <ds-mobile-interactive-list-item-inquiry
17
- * [title]="'Tumble dryer is not working'"
18
- * [description]="'For the past three days, I have been experiencing...'"
19
- * [status]="'open'"
20
- * [timestamp]="'12 days ago'"
21
- * [iconName]="'remixCalendarLine'"
22
- * [clickable]="true"
23
- * (inquiryClick)="openInquiry()">
24
- * </ds-mobile-interactive-list-item-inquiry>
25
- * ```
26
- */
27
- @Component({
28
- selector: 'ds-mobile-interactive-list-item-inquiry',
29
- standalone: true,
30
- imports: [CommonModule, DsIconComponent, DsShapeIndicatorComponent, DsMobileListItemComponent],
31
- styleUrls: ['./ds-mobile-interactive-list-item-inquiry.css'],
32
- styles: [`
33
- :host {
34
- display: block;
35
- }
36
-
37
- /* Hide divider on last child */
38
- :host:last-child {
39
- --divider-display: none;
40
- --item-padding-bottom: 0;
41
- }
42
-
43
- .inquiry-icon {
44
- width: 32px;
45
- height: 32px;
46
- border-radius: 8px;
47
- background: var(--color-background-neutral-secondary, #f5f5f5);
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- flex-shrink: 0;
52
- }
53
-
54
- .inquiry-content {
55
- display: flex;
56
- flex-direction: column;
57
- gap: 4px;
58
- flex: 1;
59
- min-width: 0;
60
- }
61
-
62
- .inquiry-title {
63
- font-family: 'Brockmann', sans-serif;
64
- font-size: var(--font-size-sm);
65
- font-weight: 600;
66
- line-height: 20px;
67
- letter-spacing: -0.3px;
68
- color: var(--text-color-default-primary, #202227);
69
- margin: 0;
70
- white-space: nowrap;
71
- overflow: hidden;
72
- text-overflow: ellipsis;
73
- }
74
-
75
- .inquiry-description {
76
- font-family: 'Brockmann', sans-serif;
77
- font-size: var(--font-size-sm);
78
- font-weight: 400;
79
- line-height: 20px;
80
- letter-spacing: -0.3px;
81
- color: var(--text-color-default-secondary, #545B66);
82
- margin: 0;
83
- display: -webkit-box;
84
- -webkit-line-clamp: 2;
85
- -webkit-box-orient: vertical;
86
- overflow: hidden;
87
- }
88
-
89
- .inquiry-meta {
90
- font-family: 'Brockmann', sans-serif;
91
- font-size: var(--font-size-xs);
92
- font-weight: 400;
93
- line-height: 1.2;
94
- letter-spacing: -0.26px;
95
- color: var(--text-color-default-secondary, #545B66);
96
- display: flex;
97
- align-items: center;
98
- gap: 8px;
99
- margin-top: 4px;
100
- }
101
-
102
- .inquiry-status {
103
- display: flex;
104
- align-items: center;
105
- gap: 6px;
106
- font-family: 'Brockmann', sans-serif;
107
- font-size: var(--font-size-xs);
108
- font-weight: 500;
109
- line-height: 1.2;
110
- letter-spacing: -0.26px;
111
- color: var(--text-color-default-secondary, #545B66);
112
- }
113
-
114
- .inquiry-status.open {
115
- color: var(--color-brand-primary, #5d5fef);
116
- }
117
-
118
- .inquiry-status.closed {
119
- color: var(--text-color-default-tertiary, #737373);
120
- }
121
-
122
- .inquiry-timestamp {
123
- display: flex;
124
- align-items: center;
125
- gap: 4px;
126
- font-family: 'Brockmann', sans-serif;
127
- font-size: var(--font-size-xs);
128
- font-weight: 400;
129
- line-height: 1.2;
130
- letter-spacing: -0.26px;
131
- color: var(--text-color-default-secondary, #545B66);
132
- }
133
-
134
- .inquiry-trailing {
135
- display: flex;
136
- align-items: center;
137
- color: var(--color-text-tertiary, #a3a3a3);
138
- }
139
- `],
140
- template: `
141
- <ds-mobile-list-item
142
- [leadingSize]="'32px'"
143
- [variant]="variant()"
144
- [interactive]="clickable()"
145
- (itemClick)="handleInquiryClick()"
146
- (longPress)="handleLongPress()"
147
- (moreButtonClick)="handleMoreButtonClick($event)">
148
-
149
- <div content-leading>
150
- <div class="inquiry-icon">
151
- <ds-icon
152
- [name]="iconName()"
153
- size="20px"
154
- [color]="iconColor()" />
155
- </div>
156
- </div>
157
-
158
- <div content-main>
159
- <div class="inquiry-content">
160
- <h3 class="inquiry-title">{{ title() }}</h3>
161
-
162
- @if (description()) {
163
- <p class="inquiry-description">{{ description() }}</p>
164
- }
165
-
166
- <div class="inquiry-meta">
167
- <div class="inquiry-status" [class.open]="status() === 'open'" [class.closed]="status() === 'closed'">
168
- <ds-shape-indicator
169
- shape="circle"
170
- [variant]="status() === 'open' ? 'brand' : 'grey'">
171
- </ds-shape-indicator>
172
- <span>{{ computedStatusLabel() }}</span>
173
- </div>
174
-
175
- <div class="inquiry-timestamp">
176
- <ds-icon name="remixTimeLine" size="14px" color="--color-text-secondary" />
177
- <span>{{ timestamp() }}</span>
178
- </div>
179
- </div>
180
- </div>
181
- </div>
182
-
183
- @if (showChevron()) {
184
- <div content-trailing>
185
- <div class="inquiry-trailing">
186
- <ds-icon name="remixArrowRightSLine" size="20px" />
187
- </div>
188
- </div>
189
- }
190
- </ds-mobile-list-item>
191
- `
192
- })
193
- export class DsMobileInteractiveListItemInquiryComponent {
194
- /**
195
- * Inquiry title
196
- */
197
- title = input.required<string>();
198
-
199
- /**
200
- * Inquiry description/preview text
201
- */
202
- description = input<string>('');
203
-
204
- /**
205
- * Inquiry status
206
- */
207
- status = input<'open' | 'closed'>('open');
208
-
209
- /**
210
- * Status label (defaults to capitalized status)
211
- */
212
- statusLabel = input<string>('');
213
-
214
- /**
215
- * Timestamp text (e.g., "12 days ago", "2 months ago")
216
- */
217
- timestamp = input.required<string>();
218
-
219
- /**
220
- * Icon name for the leading icon
221
- */
222
- iconName = input<string>('remixTodoLine');
223
-
224
- /**
225
- * Icon color
226
- */
227
- iconColor = input<string>('secondary');
228
-
229
- /**
230
- * Display variant
231
- * - 'feed' - Standard feed display (default)
232
- * - 'detail' - Full detail view
233
- * - 'compact' - Compact display
234
- */
235
- variant = input<'feed' | 'detail' | 'compact'>('feed');
236
-
237
- /**
238
- * Whether the inquiry item is clickable
239
- */
240
- clickable = input<boolean>(true);
241
-
242
- /**
243
- * Whether to show chevron icon
244
- */
245
- showChevron = input<boolean>(true);
246
-
247
- /**
248
- * Emits when the inquiry item is clicked (if clickable)
249
- */
250
- inquiryClick = output<void>();
251
-
252
- /**
253
- * Emits when the inquiry item is long-pressed
254
- */
255
- longPress = output<void>();
256
-
257
- /**
258
- * Get computed status label
259
- */
260
- computedStatusLabel(): string {
261
- if (this.statusLabel()) {
262
- return this.statusLabel();
263
- }
264
- return this.status() === 'open' ? 'Åben' : 'Lukket';
265
- }
266
-
267
- handleInquiryClick(): void {
268
- this.inquiryClick.emit();
269
- }
270
-
271
- handleLongPress(): void {
272
- this.longPress.emit();
273
- }
274
-
275
- handleMoreButtonClick(event: Event): void {
276
- // Desktop more button click - trigger the same action as long press
277
- this.longPress.emit();
278
- }
279
- }
280
-
@@ -1,2 +0,0 @@
1
- export { DsMobileInteractiveListItemInquiryComponent } from './ds-mobile-interactive-list-item-inquiry';
2
-