@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,273 @@
1
+ import { Component, signal, computed, ViewChild } from '@angular/core';
2
+ import { NavController } from '@ionic/angular/standalone';
3
+ import { DsMobilePageMainComponent } from '../components/page-main';
4
+ import { DsMobileSectionComponent } from '../components/section';
5
+ import { DsMobileIllustrationComponent } from '../components/illustration';
6
+ import { DsMobileInteractiveListItemInquiryComponent } from '../components/interactive-list-item-inquiry';
7
+ import { DsMobileFabComponent } from '../components/fab';
8
+ import { DsMobileOfflineBannerComponent } from '../components/offline-banner';
9
+ import { DsMobileNewInquiryModalService, NewInquiryData } from '../components/new-inquiry-modal';
10
+ import { UserService } from '../services/user.service';
11
+ import { customPageTransition } from '../animations/page-transitions';
12
+ import { DsMobileInlineTabsComponent, type InlineTabItem } from '../components/inline-tabs';
13
+
14
+ interface Inquiry {
15
+ id: string;
16
+ title: string;
17
+ description: string;
18
+ status: 'open' | 'closed';
19
+ timestamp: string;
20
+ category: 'maintenance' | 'plumbing' | 'electrical' | 'heating' | 'security' | 'appliance' | 'other';
21
+ }
22
+
23
+ @Component({
24
+ selector: 'app-mobile-inquiries-page',
25
+ standalone: true,
26
+ imports: [
27
+ DsMobilePageMainComponent,
28
+ DsMobileSectionComponent,
29
+ DsMobileIllustrationComponent,
30
+ DsMobileInteractiveListItemInquiryComponent,
31
+ DsMobileInlineTabsComponent,
32
+ DsMobileOfflineBannerComponent,
33
+ DsMobileFabComponent
34
+ ],
35
+ host: {
36
+ class: 'ion-page'
37
+ },
38
+ styles: [`
39
+ .inquiry-list-wrapper {
40
+ display: flex;
41
+ flex-direction: column;
42
+ margin-top: -12px;
43
+ }
44
+
45
+ .empty-state {
46
+ display: flex;
47
+ flex-direction: column;
48
+ align-items: center;
49
+ justify-content: center;
50
+ padding: 60px 20px;
51
+ text-align: center;
52
+ }
53
+
54
+ .empty-state-title {
55
+ font-family: 'Brockmann', sans-serif;
56
+ font-size: var(--font-size-base);
57
+ font-weight: 600;
58
+ color: var(--color-text-primary);
59
+ margin-top: -16px;
60
+ z-index: 4;
61
+ }
62
+
63
+ .empty-state-description {
64
+ font-family: 'Brockmann', sans-serif;
65
+ font-size: var(--font-size-sm);
66
+ color: var(--color-text-secondary);
67
+ margin: 0;
68
+ }
69
+ `],
70
+ template: `
71
+ <ds-mobile-page-main
72
+ #pageComponent
73
+ title="Henvendelser"
74
+ [avatarInitials]="userService.avatarInitials()"
75
+ [avatarType]="userService.avatarType()"
76
+ (refresh)="handleRefresh($event)">
77
+
78
+ <!-- Offline indicator -->
79
+ @if (pageComponent.isOffline()) {
80
+ <ds-mobile-offline-banner
81
+ offline-indicator
82
+ title="Ingen internetforbindelse"
83
+ message="Nogle funktioner kan være utilgængelige">
84
+ </ds-mobile-offline-banner>
85
+ }
86
+
87
+ <!-- Filter tabs in header -->
88
+ <div header-content>
89
+ <ds-mobile-inline-tabs
90
+ [tabs]="tabItems"
91
+ [activeTab]="filterStatus()"
92
+ (tabChange)="setFilter($any($event))">
93
+ </ds-mobile-inline-tabs>
94
+ </div>
95
+
96
+ <ds-mobile-section>
97
+ @if (filteredInquiries().length > 0) {
98
+ <div class="inquiry-list-wrapper">
99
+ @for (inquiry of filteredInquiries(); track inquiry.id) {
100
+ <ds-mobile-interactive-list-item-inquiry
101
+ [title]="inquiry.title"
102
+ [description]="inquiry.description"
103
+ [status]="inquiry.status"
104
+ [timestamp]="inquiry.timestamp"
105
+ [iconName]="getInquiryIcon(inquiry.category)"
106
+ [clickable]="true"
107
+ [showChevron]="false"
108
+ [enableLongPress]="false"
109
+ (inquiryClick)="openInquiryDetail(inquiry.id)">
110
+ </ds-mobile-interactive-list-item-inquiry>
111
+ }
112
+ </div>
113
+ } @else {
114
+ <!-- Empty state -->
115
+ <div class="empty-state">
116
+ <ds-mobile-illustration variant="inquiry" alt="No inquiries" />
117
+ <h3 class="empty-state-title">Ingen henvendelser endnu</h3>
118
+ <p class="empty-state-description">
119
+ @if (filterStatus() === 'open') {
120
+ Du har ingen åbne henvendelser
121
+ } @else if (filterStatus() === 'closed') {
122
+ Du har ingen lukkede henvendelser
123
+ } @else {
124
+ Du har ikke oprettet nogen henvendelser endnu
125
+ }
126
+ </p>
127
+ </div>
128
+ }
129
+ </ds-mobile-section>
130
+ </ds-mobile-page-main>
131
+
132
+ <!-- FAB for creating new inquiry -->
133
+ <ds-mobile-fab
134
+ icon="remixAddLine"
135
+ position="bottom-right"
136
+ ariaLabel="Create new inquiry"
137
+ (fabClick)="createNewInquiry()">
138
+ </ds-mobile-fab>
139
+ `
140
+ })
141
+ export class MobileInquiriesPageComponent {
142
+ @ViewChild('pageComponent') pageComponent!: DsMobilePageMainComponent;
143
+
144
+ constructor(
145
+ public userService: UserService,
146
+ private navCtrl: NavController,
147
+ private newInquiryModal: DsMobileNewInquiryModalService
148
+ ) {}
149
+
150
+ filterStatus = signal<'all' | 'open' | 'closed'>('all');
151
+
152
+ tabItems: InlineTabItem[] = [
153
+ { id: 'all', label: 'Alle' },
154
+ { id: 'open', label: 'Åben' },
155
+ { id: 'closed', label: 'Lukket' }
156
+ ];
157
+
158
+ inquiries = signal<Inquiry[]>([
159
+ {
160
+ id: '1',
161
+ title: 'Tørretumbler virker ikke',
162
+ description: 'I de sidste tre dage har jeg oplevet vedvarende problemer med tørretumbleren. Den starter, men stopper efter få minutter.',
163
+ status: 'open',
164
+ timestamp: '12 dage siden',
165
+ category: 'appliance'
166
+ },
167
+ {
168
+ id: '2',
169
+ title: 'Problem med vandtryk',
170
+ description: 'Lavt vandtryk i badeværelseshåndvasken. Det er blevet gradvist værre i løbet af den sidste uge.',
171
+ status: 'open',
172
+ timestamp: '5 dage siden',
173
+ category: 'plumbing'
174
+ },
175
+ {
176
+ id: '3',
177
+ title: 'Varme virker ikke ordentligt',
178
+ description: 'Varmesystemet holder ikke den indstillede temperatur. Lejligheden er meget koldere, end den burde være.',
179
+ status: 'closed',
180
+ timestamp: '2 måneder siden',
181
+ category: 'heating'
182
+ }
183
+ ]);
184
+
185
+ // Computed signals that automatically update when dependencies change
186
+ filteredInquiries = computed(() => {
187
+ const all = this.inquiries();
188
+ const status = this.filterStatus();
189
+
190
+ if (status === 'all') {
191
+ return all;
192
+ } else if (status === 'open') {
193
+ return all.filter(i => i.status === 'open');
194
+ } else {
195
+ return all.filter(i => i.status === 'closed');
196
+ }
197
+ });
198
+
199
+ openInquiries = computed(() => {
200
+ return this.inquiries().filter(i => i.status === 'open');
201
+ });
202
+
203
+ closedInquiries = computed(() => {
204
+ return this.inquiries().filter(i => i.status === 'closed');
205
+ });
206
+
207
+ setFilter(status: 'all' | 'open' | 'closed'): void {
208
+ this.filterStatus.set(status);
209
+ }
210
+
211
+ getInquiryIcon(category: string): string {
212
+ return 'remixTodoLine';
213
+ }
214
+
215
+ openInquiryDetail(inquiryId: string): void {
216
+ console.log('Opening inquiry:', inquiryId);
217
+ // Navigate to inquiry detail page with custom transition (absolute path outside tabs for animations)
218
+ this.navCtrl.navigateForward([`/inquiry-detail/${inquiryId}`], {
219
+ animation: customPageTransition
220
+ });
221
+ }
222
+
223
+ showInquiryActions(inquiryId: string): void {
224
+ console.log('Showing actions for inquiry:', inquiryId);
225
+ // Show bottom sheet with actions (edit, delete, etc.)
226
+ }
227
+
228
+ handleRefresh(event: any): void {
229
+ console.log('Pull-to-refresh triggered on inquiries page');
230
+
231
+ // Check if offline and complete immediately
232
+ if (this.pageComponent?.isOffline()) {
233
+ console.log('Cannot refresh while offline');
234
+ event.target.complete();
235
+ return;
236
+ }
237
+
238
+ // Simulate loading data
239
+ setTimeout(() => {
240
+ console.log('Refresh complete');
241
+ event.target.complete();
242
+ }, 1000);
243
+ }
244
+
245
+ async createNewInquiry(): Promise<void> {
246
+ console.log('Opening new inquiry modal...');
247
+
248
+ await this.newInquiryModal.open({
249
+ onSubmit: async (data: NewInquiryData) => {
250
+ console.log('New inquiry submitted:', data);
251
+
252
+ // In a real app, call your API to create the inquiry
253
+ // await this.inquiryService.createInquiry(data);
254
+
255
+ // Add the new inquiry to the list (mock for now)
256
+ const newInquiry: Inquiry = {
257
+ id: `inquiry-${Date.now()}`,
258
+ title: data.title,
259
+ description: data.description,
260
+ status: 'open',
261
+ timestamp: 'Just now',
262
+ category: 'other'
263
+ };
264
+
265
+ this.inquiries.update(inquiries => [newInquiry, ...inquiries]);
266
+
267
+ // Close the modal
268
+ await this.newInquiryModal.close();
269
+ }
270
+ });
271
+ }
272
+ }
273
+
@@ -0,0 +1,189 @@
1
+ /* ============================================
2
+ PAGE-SPECIFIC STYLES
3
+ Note: All base styles (ion-header, ion-content, refresher,
4
+ header-expandable, content-wrapper) are imported from
5
+ mobile-page-base.css
6
+ ============================================ */
7
+
8
+ /* ============================================
9
+ TAB CONTENT
10
+ ============================================ */
11
+
12
+ .activity-list {
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: 12px;
16
+ position: relative;
17
+ }
18
+
19
+ /* Vertical connecting lines in leading content slot */
20
+ .activity-list ds-mobile-list-item:not(:last-child) [content-leading]::after {
21
+ content: '';
22
+ position: absolute;
23
+ top: calc(32px + 8px);
24
+ left: 50%;
25
+ transform: translateX(-50%);
26
+ width: 1px;
27
+ height: calc(100% - 2px);
28
+ background: var(--border-color-default, #e5e5e5);
29
+ z-index: 0;
30
+ }
31
+
32
+ .activity-icon-wrapper {
33
+ width: 100%;
34
+ height: 100%;
35
+ border-radius: 8px;
36
+ background: var(--color-background-neutral-secondary, #f5f5f5);
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ flex-shrink: 0;
41
+ position: relative;
42
+ z-index: 1;
43
+ }
44
+
45
+ .avatar-wrapper {
46
+ position: relative;
47
+ display: flex;
48
+ align-items: start;
49
+ justify-content: center;
50
+ flex-shrink: 0;
51
+ width: 100%;
52
+ height: 100%;
53
+ z-index: 1;
54
+ }
55
+
56
+ .avatar-badge {
57
+ position: absolute;
58
+ bottom: -6px;
59
+ right: -6px;
60
+ width: 20px;
61
+ height: 20px;
62
+ border-radius: 8px;
63
+ background: var(--color-brand-secondary, #5d5fef);
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ border: 2px solid var(--color-background-primary, #ffffff);
68
+ }
69
+
70
+ .avatar-badge svg {
71
+ width: 10px;
72
+ position: relative;
73
+ top: 1px;
74
+ fill: white;
75
+ }
76
+
77
+ .activity-content {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 4px;
81
+ }
82
+
83
+ .activity-title {
84
+ font-family: 'Brockmann', sans-serif;
85
+ font-size: var(--font-size-sm);
86
+ font-weight: 500;
87
+ line-height: 20px;
88
+ letter-spacing: -0.3px;
89
+ color: var(--text-color-default-primary, #202227);
90
+ margin: 0;
91
+ }
92
+
93
+ .activity-title .actor-name {
94
+ font-weight: 600;
95
+ color: var(--text-color-default-primary, #202227);
96
+ }
97
+
98
+ .activity-title .activity-text {
99
+ color: var(--text-color-default-secondary, #545B66);
100
+ font-weight: 400;
101
+ }
102
+
103
+ .activity-description {
104
+ font-family: 'Brockmann', sans-serif;
105
+ font-size: var(--font-size-sm);
106
+ font-weight: 400;
107
+ line-height: 20px;
108
+ letter-spacing: -0.3px;
109
+ color: var(--text-color-default-secondary, #545B66);
110
+ margin: 0;
111
+ }
112
+
113
+ .activity-timestamp {
114
+ font-family: 'Brockmann', sans-serif;
115
+ font-size: var(--font-size-xs);
116
+ font-weight: 400;
117
+ line-height: 1.2;
118
+ letter-spacing: -0.26px;
119
+ color: var(--text-color-default-tertiary, #737373);
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 4px;
123
+ margin-top: 2px;
124
+ }
125
+
126
+ .detail-label {
127
+ font-family: 'Brockmann', sans-serif;
128
+ font-size: var(--font-size-xs);
129
+ font-weight: 400;
130
+ line-height: 1.2;
131
+ letter-spacing: -0.26px;
132
+ color: var(--text-color-default-tertiary, #737373);
133
+ }
134
+
135
+ .detail-value {
136
+ font-family: 'Brockmann', sans-serif;
137
+ font-size: var(--font-size-sm);
138
+ font-weight: 400;
139
+ line-height: 24px;
140
+ letter-spacing: -0.3px;
141
+ color: var(--text-color-default-primary, #202227);
142
+ }
143
+
144
+ .detail-value.description-text {
145
+ padding: 0 0 8px 0;
146
+ }
147
+
148
+ .detail-tag {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ padding: 4px 12px;
152
+ border-radius: 12px;
153
+ background: var(--color-background-neutral-secondary, #f5f5f5);
154
+ font-family: 'Brockmann', sans-serif;
155
+ font-size: var(--font-size-sm);
156
+ font-weight: 500;
157
+ color: var(--text-color-default-secondary, #525866);
158
+ margin-top: 4px;
159
+ margin-bottom: 10px;
160
+ width: -moz-fit-content;
161
+ width: fit-content;
162
+ }
163
+
164
+ .photo-grid {
165
+ display: grid;
166
+ grid-template-columns: repeat(6, 1fr);
167
+ gap: 8px;
168
+ }
169
+
170
+ .photo-add {
171
+ width: 100%;
172
+ aspect-ratio: 1;
173
+ border-radius: 12px;
174
+ border: 1px dashed var(--border-color-default, #e5e5e5);
175
+ background: var(--color-background-neutral-secondary, #f5f5f5);
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ cursor: pointer;
180
+ }
181
+
182
+ .photo-item {
183
+ width: 100%;
184
+ aspect-ratio: 1;
185
+ border-radius: 12px;
186
+ -o-object-fit: cover;
187
+ object-fit: cover;
188
+ }
189
+