@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.
- package/fesm2022/propbinder-mobile-design.mjs +12604 -0
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
- package/index.d.ts +3214 -0
- package/package.json +39 -12
- package/ng-package.json +0 -7
- package/src/animations/page-transitions.ts +0 -86
- package/src/assets/fonts/Brockmann-Bold.otf +0 -0
- package/src/assets/fonts/Brockmann-BoldItalic.otf +0 -0
- package/src/assets/fonts/Brockmann-Medium.otf +0 -0
- package/src/assets/fonts/Brockmann-MediumItalic.otf +0 -0
- package/src/assets/fonts/Brockmann-Regular.otf +0 -0
- package/src/assets/fonts/Brockmann-RegularItalic.otf +0 -0
- package/src/assets/fonts/Brockmann-SemiBold.otf +0 -0
- package/src/assets/fonts/Brockmann-SemiBoldItalic.otf +0 -0
- package/src/assets/fonts/Brockmann_desktop_license.pdf +0 -0
- package/src/assets/fonts/brockmann-medium-webfont.woff2 +0 -0
- package/src/assets/fonts/brockmann-regular-webfont.woff2 +0 -0
- package/src/assets/fonts/brockmann-semibold-webfont.woff2 +0 -0
- package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -83
- package/src/components/action-list-item/index.ts +0 -2
- package/src/components/app-layout/ds-mobile-app-layout.css +0 -343
- package/src/components/app-layout/ds-mobile-app-layout.ts +0 -271
- package/src/components/app-layout/index.ts +0 -2
- package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -130
- package/src/components/avatar-with-badge/index.ts +0 -2
- package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -273
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -110
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -167
- package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -656
- package/src/components/bottom-sheet/index.ts +0 -3
- package/src/components/comment/ds-mobile-comment.ts +0 -516
- package/src/components/comment/index.ts +0 -2
- package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +0 -182
- package/src/components/contact-list-item/index.ts +0 -2
- package/src/components/content/ds-mobile-content.ts +0 -158
- package/src/components/content/index.ts +0 -2
- package/src/components/ds-mobile-tabs.css +0 -372
- package/src/components/ds-mobile-tabs.ts +0 -217
- package/src/components/file-attachment/ds-mobile-file-attachment.ts +0 -164
- package/src/components/file-attachment/index.ts +0 -2
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -98
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -514
- package/src/components/handbook-detail-modal/index.ts +0 -3
- package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -130
- package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -444
- package/src/components/handbook-folder/index.ts +0 -4
- package/src/components/header-content/ds-mobile-header-content.ts +0 -211
- package/src/components/header-content/index.ts +0 -2
- package/src/components/index.ts +0 -45
- package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -269
- package/src/components/inline-photo/index.ts +0 -1
- package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.css +0 -60
- package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -280
- package/src/components/interactive-list-item-inquiry/index.ts +0 -2
- package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +0 -197
- package/src/components/interactive-list-item-message/index.ts +0 -2
- package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.css +0 -70
- package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -594
- package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +0 -124
- package/src/components/interactive-list-item-post/index.ts +0 -13
- package/src/components/lightbox/ds-mobile-lightbox-footer.ts +0 -331
- package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -173
- package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -464
- package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -375
- package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +0 -374
- package/src/components/lightbox/ds-mobile-lightbox.css +0 -587
- package/src/components/lightbox/ds-mobile-lightbox.service.ts +0 -293
- package/src/components/lightbox/ds-mobile-lightbox.ts +0 -529
- package/src/components/lightbox/index.ts +0 -22
- package/src/components/list-item/ds-mobile-list-item.ts +0 -499
- package/src/components/list-item/index.ts +0 -2
- package/src/components/list-item-static/ds-mobile-list-item-static.ts +0 -133
- package/src/components/list-item-static/index.ts +0 -2
- package/src/components/logo/ds-logo.ts +0 -85
- package/src/components/logo/index.ts +0 -2
- package/src/components/modal/ds-mobile-modal.css +0 -163
- package/src/components/modal/ds-mobile-modal.service.ts +0 -329
- package/src/components/modal/index.ts +0 -8
- package/src/components/page-details/ds-mobile-page-details.css +0 -285
- package/src/components/page-details/ds-mobile-page-details.ts +0 -128
- package/src/components/page-details/index.ts +0 -2
- package/src/components/page-main/ds-mobile-page-main.css +0 -346
- package/src/components/page-main/ds-mobile-page-main.ts +0 -331
- package/src/components/page-main/index.ts +0 -2
- package/src/components/post-card/ds-mobile-post-card.ts +0 -685
- package/src/components/post-card/ds-mobile-post-pdf-attachment.ts +0 -124
- package/src/components/post-card/index.ts +0 -11
- package/src/components/post-composer/ds-mobile-post-composer.ts +0 -140
- package/src/components/post-composer/index.ts +0 -2
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -104
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -1273
- package/src/components/post-detail-modal/index.ts +0 -9
- package/src/components/shared/directives/index.ts +0 -2
- package/src/components/shared/directives/long-press.directive.ts +0 -208
- package/src/components/shared/index.ts +0 -3
- package/src/components/shared/mobile-common.css +0 -94
- package/src/components/shared/mobile-page-base.css +0 -315
- package/src/components/shared/mobile-page-base.ts +0 -70
- package/src/components/swiper/ds-mobile-swiper.ts +0 -123
- package/src/components/swiper/index.ts +0 -2
- package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -132
- package/src/components/tab-bar/index.ts +0 -2
- package/src/components/tabs/ds-mobile-tabs.css +0 -405
- package/src/components/tabs/ds-mobile-tabs.ts +0 -204
- package/src/components/tabs/index.ts +0 -2
- package/src/pages/community.page.ts +0 -768
- package/src/pages/handbook.page.ts +0 -298
- package/src/pages/home.page.ts +0 -192
- package/src/pages/index.ts +0 -9
- package/src/pages/inquiries.example.ts +0 -212
- package/src/pages/inquiry-detail.example.css +0 -434
- package/src/pages/inquiry-detail.example.ts +0 -416
- package/src/pages/mobile-tabs-example.component.ts +0 -146
- package/src/pages/post-create.page.ts +0 -311
- package/src/pages/post-detail.page.ts +0 -295
- package/src/pages/whitelabel-demo.page.ts +0 -548
- package/src/public-api.ts +0 -5
- package/src/services/user.service.ts +0 -35
- package/src/services/whitelabel.service.ts +0 -171
- package/src/styles/ionic.css +0 -673
- package/tsconfig.lib.json +0 -17
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
|
@@ -1,444 +0,0 @@
|
|
|
1
|
-
import { Component, Input, signal, HostListener } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { DsIconComponent } from '@propbinder/design-system';
|
|
4
|
-
import { DsMobileHandbookDetailModalService, HandbookDetailData, HandbookItem } from '../handbook-detail-modal';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* DsMobileHandbookFolderComponent
|
|
8
|
-
*
|
|
9
|
-
* A visually rich folder component for displaying handbook categories or sections.
|
|
10
|
-
* Features a two-layer folder design with customizable colors, icon, item count, and label.
|
|
11
|
-
*
|
|
12
|
-
* Design Details:
|
|
13
|
-
* - Folder back: 72px height with a decorative notch
|
|
14
|
-
* - Folder front: 64px height overlaying the back
|
|
15
|
-
* - Item count displayed in bottom-left corner
|
|
16
|
-
* - Icon displayed in bottom-right corner
|
|
17
|
-
* - Label text centered below the folder
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```html
|
|
21
|
-
* <ds-mobile-handbook-folder
|
|
22
|
-
* [colorBase]="'#d244cf'"
|
|
23
|
-
* [colorWeak]="'#f9e6f9'"
|
|
24
|
-
* [iconName]="'remixLightbulbLine'"
|
|
25
|
-
* [itemCount]="8"
|
|
26
|
-
* [label]="'Utilities'">
|
|
27
|
-
* </ds-mobile-handbook-folder>
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
@Component({
|
|
31
|
-
selector: 'ds-mobile-handbook-folder',
|
|
32
|
-
standalone: true,
|
|
33
|
-
imports: [CommonModule, DsIconComponent],
|
|
34
|
-
styles: [`
|
|
35
|
-
:host {
|
|
36
|
-
display: inline-flex;
|
|
37
|
-
flex-direction: column;
|
|
38
|
-
align-items: center;
|
|
39
|
-
gap: 16px;
|
|
40
|
-
cursor: pointer;
|
|
41
|
-
user-select: none;
|
|
42
|
-
-webkit-tap-highlight-color: transparent;
|
|
43
|
-
padding: 16px;
|
|
44
|
-
border-radius: 16px;
|
|
45
|
-
background: var(--color-background-neutral-secondary, #f0f0f0);
|
|
46
|
-
transition: background 0.2s ease;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
:host:active {
|
|
50
|
-
background: var(--color-background-neutral-secondary-hover, #ebebeb);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@media (hover: hover) {
|
|
54
|
-
:host:hover {
|
|
55
|
-
background: var(--color-background-neutral-secondary-hover, #ebebeb);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.folder-container {
|
|
60
|
-
position: relative;
|
|
61
|
-
width: 100%;
|
|
62
|
-
display: flex;
|
|
63
|
-
flex-direction: column;
|
|
64
|
-
perspective: 800px;
|
|
65
|
-
-webkit-perspective: 800px;
|
|
66
|
-
max-width: 160px;
|
|
67
|
-
/* Safari optimization: Ensure proper 3D rendering context */
|
|
68
|
-
transform-style: preserve-3d;
|
|
69
|
-
-webkit-transform-style: preserve-3d;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.folder-container.open .page-sheet {
|
|
73
|
-
-webkit-transform: translateY(-8px);
|
|
74
|
-
transform: translateY(-8px);
|
|
75
|
-
transition-delay: 0.2s;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.folder-container.open .page-sheet:nth-child(1) {
|
|
79
|
-
-webkit-transform: scale(1) translateY(-8px) rotateX(-45deg) translateZ(0.1px);
|
|
80
|
-
transform: scale(1) translateY(-8px) rotateX(-45deg) translateZ(0.1px);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.folder-container.open .page-sheet:nth-child(2) {
|
|
84
|
-
-webkit-transform: scale(0.98) translateY(-12px) rotateX(-36deg) translateZ(0.1px);
|
|
85
|
-
transform: scale(0.98) translateY(-12px) rotateX(-36deg) translateZ(0.1px);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.folder-container.open .page-sheet:nth-child(3) {
|
|
89
|
-
-webkit-transform: scale(0.96) translateY(-16px) rotateX(-27deg) translateZ(0.1px);
|
|
90
|
-
transform: scale(0.96) translateY(-16px) rotateX(-27deg) translateZ(0.1px);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.folder-container.open .page-sheet:nth-child(4) {
|
|
94
|
-
-webkit-transform: scale(0.94) translateY(-20px) rotateX(-18deg) translateZ(0.1px);
|
|
95
|
-
transform: scale(0.94) translateY(-20px) rotateX(-18deg) translateZ(0.1px);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.folder-container.open .page-sheet:nth-child(5) {
|
|
99
|
-
-webkit-transform: scale(0.92) translateY(-24px) rotateX(-9deg) translateZ(0.1px);
|
|
100
|
-
transform: scale(0.92) translateY(-24px) rotateX(-9deg) translateZ(0.1px);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.folder-container.open .page-sheet:nth-child(6) {
|
|
104
|
-
-webkit-transform: scale(0.90) translateY(-28px) rotateX(0deg) translateZ(0.1px);
|
|
105
|
-
transform: scale(0.90) translateY(-28px) rotateX(0.1px);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.folder-container.open .folder-front {
|
|
109
|
-
-webkit-transform: translate3d(0, 0, 0) rotateX(-45deg);
|
|
110
|
-
transform: translate3d(0, 0, 0) rotateX(-45deg);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.folder-tab {
|
|
114
|
-
width: 50%;
|
|
115
|
-
height: auto;
|
|
116
|
-
display: block;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
.folder-back {
|
|
120
|
-
height: 128px;
|
|
121
|
-
border-radius: 0px 12px 12px 12px;
|
|
122
|
-
position: relative;
|
|
123
|
-
margin-top: -1px;
|
|
124
|
-
transform-style: preserve-3d;
|
|
125
|
-
-webkit-transform-style: preserve-3d;
|
|
126
|
-
backface-visibility: hidden;
|
|
127
|
-
-webkit-backface-visibility: hidden;
|
|
128
|
-
/* Safari optimization: Force GPU acceleration */
|
|
129
|
-
-webkit-transform: translateZ(0);
|
|
130
|
-
transform: translateZ(0);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.page-sheet {
|
|
134
|
-
position: absolute;
|
|
135
|
-
width: 80%;
|
|
136
|
-
height: 120px;
|
|
137
|
-
background: #ffffff;
|
|
138
|
-
border-radius: 8px;
|
|
139
|
-
box-shadow: 0 -1px 5px rgba(0, 0, 0, 0.1);
|
|
140
|
-
border: 1px solid var(--border-color-default);
|
|
141
|
-
transition: transform 0.3s ease-out;
|
|
142
|
-
-webkit-transition: -webkit-transform 0.3s ease-out;
|
|
143
|
-
left: 10%;
|
|
144
|
-
/* Safari optimization: Force hardware acceleration and proper 3D rendering */
|
|
145
|
-
-webkit-transform: translateZ(0);
|
|
146
|
-
transform: translateZ(0);
|
|
147
|
-
transform-style: preserve-3d;
|
|
148
|
-
-webkit-transform-style: preserve-3d;
|
|
149
|
-
backface-visibility: hidden;
|
|
150
|
-
-webkit-backface-visibility: hidden;
|
|
151
|
-
/* Safari optimization: Prevent subpixel rendering issues */
|
|
152
|
-
-webkit-font-smoothing: antialiased;
|
|
153
|
-
/* Safari optimization: Ensure proper layer creation */
|
|
154
|
-
will-change: transform;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.page-sheet:nth-child(1) {
|
|
158
|
-
bottom: 2px;
|
|
159
|
-
z-index: 6;
|
|
160
|
-
transform-origin: bottom center;
|
|
161
|
-
-webkit-transform-origin: bottom center;
|
|
162
|
-
-webkit-transform: scale(1) translateZ(0.1px);
|
|
163
|
-
transform: scale(1) translateZ(0.1px);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.page-sheet:nth-child(2) {
|
|
167
|
-
bottom: 8px;
|
|
168
|
-
z-index: 5;
|
|
169
|
-
transform-origin: bottom center;
|
|
170
|
-
-webkit-transform-origin: bottom center;
|
|
171
|
-
-webkit-transform: scale(0.98) translateZ(0.1px);
|
|
172
|
-
transform: scale(0.98) translateZ(0.1px);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.page-sheet:nth-child(3) {
|
|
176
|
-
bottom: 14px;
|
|
177
|
-
z-index: 4;
|
|
178
|
-
transform-origin: bottom center;
|
|
179
|
-
-webkit-transform-origin: bottom center;
|
|
180
|
-
-webkit-transform: scale(0.96) translateZ(0.1px);
|
|
181
|
-
transform: scale(0.96) translateZ(0.1px);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
.page-sheet:nth-child(4) {
|
|
185
|
-
bottom: 20px;
|
|
186
|
-
z-index: 3;
|
|
187
|
-
transform-origin: bottom center;
|
|
188
|
-
-webkit-transform-origin: bottom center;
|
|
189
|
-
-webkit-transform: scale(0.94) translateZ(0.1px);
|
|
190
|
-
transform: scale(0.94) translateZ(0.1px);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.page-sheet:nth-child(5) {
|
|
194
|
-
bottom: 26px;
|
|
195
|
-
z-index: 2;
|
|
196
|
-
transform-origin: bottom center;
|
|
197
|
-
-webkit-transform-origin: bottom center;
|
|
198
|
-
-webkit-transform: scale(0.92) translateZ(0.1px);
|
|
199
|
-
transform: scale(0.92) translateZ(0.1px);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.page-sheet:nth-child(6) {
|
|
203
|
-
bottom: 32px;
|
|
204
|
-
z-index: 1;
|
|
205
|
-
transform-origin: bottom center;
|
|
206
|
-
-webkit-transform-origin: bottom center;
|
|
207
|
-
-webkit-transform: scale(0.90) translateZ(0.1px);
|
|
208
|
-
transform: scale(0.90) translateZ(0.1px);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.folder-front {
|
|
212
|
-
position: absolute;
|
|
213
|
-
bottom: 0;
|
|
214
|
-
left: 0;
|
|
215
|
-
right: 0;
|
|
216
|
-
height: 116px;
|
|
217
|
-
border-radius: 12px;
|
|
218
|
-
display: flex;
|
|
219
|
-
align-items: center;
|
|
220
|
-
justify-content: center;
|
|
221
|
-
padding: 8px;
|
|
222
|
-
z-index: 2;
|
|
223
|
-
transform-origin: bottom center;
|
|
224
|
-
-webkit-transform-origin: bottom center;
|
|
225
|
-
transform-style: preserve-3d;
|
|
226
|
-
-webkit-transform-style: preserve-3d;
|
|
227
|
-
transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
|
|
228
|
-
-webkit-transition: -webkit-transform 0.4s ease-in-out;
|
|
229
|
-
will-change: transform;
|
|
230
|
-
backface-visibility: hidden;
|
|
231
|
-
-webkit-backface-visibility: hidden;
|
|
232
|
-
-webkit-font-smoothing: antialiased;
|
|
233
|
-
/* Safari optimization: Use more specific transform to avoid render glitches */
|
|
234
|
-
-webkit-transform: rotateX(-20deg) translateZ(0.1px);
|
|
235
|
-
transform: rotateX(-20deg) translateZ(0.1px);
|
|
236
|
-
/* Safari optimization: Force layer creation for smoother animations */
|
|
237
|
-
-webkit-transform: translate3d(0, 0, 0) rotateX(-20deg);
|
|
238
|
-
transform: translate3d(0, 0, 0) rotateX(-20deg);
|
|
239
|
-
box-shadow: inset 0 64px 48px rgba(255, 255, 255, 0.2),
|
|
240
|
-
inset 0 2px 4px rgba(255, 255, 255, 0.3),
|
|
241
|
-
inset 0 1px 1px rgba(255, 255, 255, 0.3);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
.item-count {
|
|
245
|
-
display: flex;
|
|
246
|
-
align-items: center;
|
|
247
|
-
gap: 4px;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
.item-count-label {
|
|
251
|
-
letter-spacing: 0.5px;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
.folder-icon {
|
|
255
|
-
display: flex;
|
|
256
|
-
align-items: center;
|
|
257
|
-
justify-content: center;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
.folder-label-container {
|
|
261
|
-
display: flex;
|
|
262
|
-
flex-direction: column;
|
|
263
|
-
align-items: center;
|
|
264
|
-
gap: 4px;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
.folder-label {
|
|
268
|
-
text-align: center;
|
|
269
|
-
}
|
|
270
|
-
`],
|
|
271
|
-
template: `
|
|
272
|
-
<div class="folder-container"
|
|
273
|
-
[class.open]="isOpen()">
|
|
274
|
-
<!-- Folder Tab SVG -->
|
|
275
|
-
<svg
|
|
276
|
-
class="folder-tab"
|
|
277
|
-
width="101"
|
|
278
|
-
height="24"
|
|
279
|
-
viewBox="0 0 101 24"
|
|
280
|
-
fill="none"
|
|
281
|
-
xmlns="http://www.w3.org/2000/svg">
|
|
282
|
-
<path
|
|
283
|
-
d="M100.037 23.9999L100.5 24L0 24.0001V10.7646C0 4.80853 4.91797 -0.0234985 11 -0.0196688L66.4213 -0.0322266C69.3519 -0.0115886 72.197 1.20548 74.2473 3.29947L90.6765 20.0951C93.1218 22.5925 96.5417 23.9999 100.037 23.9999Z"
|
|
284
|
-
[attr.fill]="getColorVar('strong')"/>
|
|
285
|
-
</svg>
|
|
286
|
-
|
|
287
|
-
<!-- Folder Back -->
|
|
288
|
-
<div class="folder-back" [style.background-color]="getColorVar('strong')">
|
|
289
|
-
<!-- Page Sheets -->
|
|
290
|
-
@for (sheet of getPageSheets(); track $index) {
|
|
291
|
-
<div class="page-sheet"></div>
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
<!-- Folder Front -->
|
|
295
|
-
<div
|
|
296
|
-
class="folder-front"
|
|
297
|
-
[style.--border-color]="getColorVar('strong')"
|
|
298
|
-
[style.background-color]="getColorVar('base')">
|
|
299
|
-
<!-- Icon (Centered) -->
|
|
300
|
-
<div class="folder-icon">
|
|
301
|
-
<ds-icon
|
|
302
|
-
[name]="iconName"
|
|
303
|
-
[size]="'32px'"
|
|
304
|
-
[style.color]="'white'" />
|
|
305
|
-
</div>
|
|
306
|
-
</div>
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
|
|
310
|
-
<!-- Label and Item Count -->
|
|
311
|
-
<div class="folder-label-container">
|
|
312
|
-
<div class="folder-label ui-sm-semiBold">{{ label }}</div>
|
|
313
|
-
<div class="item-count ui-sm-regular" [style.color]="'var(--color-text-secondary, #6b7280)'">
|
|
314
|
-
<span>{{ itemCount }}</span>
|
|
315
|
-
<span class="item-count-label">emner</span>
|
|
316
|
-
</div>
|
|
317
|
-
</div>
|
|
318
|
-
`
|
|
319
|
-
})
|
|
320
|
-
export class DsMobileHandbookFolderComponent {
|
|
321
|
-
/**
|
|
322
|
-
* Color variant for the folder
|
|
323
|
-
* Available variants: success, warning, destructive, blue, light-purple, pink, salmon-orange, orange, lime-green, grey
|
|
324
|
-
* Example: 'pink', 'success', 'blue'
|
|
325
|
-
*/
|
|
326
|
-
@Input() variant: string = 'light-purple';
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Icon name from the design system icon library
|
|
330
|
-
* Example: 'remixLightbulbLine', 'remixFolder3Line'
|
|
331
|
-
*/
|
|
332
|
-
@Input() iconName: string = 'remixFolder3Line';
|
|
333
|
-
|
|
334
|
-
/**
|
|
335
|
-
* Number of items in the folder
|
|
336
|
-
*/
|
|
337
|
-
@Input() itemCount: number = 0;
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* Label text displayed below the folder
|
|
341
|
-
*/
|
|
342
|
-
@Input() label: string = 'Folder';
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* Optional items data for the handbook folder
|
|
346
|
-
*/
|
|
347
|
-
@Input() items?: HandbookItem[];
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* Track open/closed state for animation
|
|
351
|
-
*/
|
|
352
|
-
isOpen = signal(false);
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Get the CSS variable name for the color variant
|
|
356
|
-
*/
|
|
357
|
-
getColorVar(suffix: 'base' | 'strong'): string {
|
|
358
|
-
const variantMap: Record<string, string> = {
|
|
359
|
-
'success': 'success',
|
|
360
|
-
'warning': 'warning',
|
|
361
|
-
'destructive': 'destructive',
|
|
362
|
-
'blue': 'blue',
|
|
363
|
-
'light-purple': 'light-purple',
|
|
364
|
-
'pink': 'pink',
|
|
365
|
-
'salmon-orange': 'salmon-orange',
|
|
366
|
-
'orange': 'orange',
|
|
367
|
-
'lime-green': 'lime-green',
|
|
368
|
-
'grey': 'grey'
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
const colorName = variantMap[this.variant] || 'light-purple';
|
|
372
|
-
return `var(--color-${colorName}-${suffix})`;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* Open folder animation
|
|
377
|
-
*/
|
|
378
|
-
@HostListener('mouseenter')
|
|
379
|
-
open(): void {
|
|
380
|
-
this.isOpen.set(true);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Close folder animation
|
|
385
|
-
*/
|
|
386
|
-
@HostListener('mouseleave')
|
|
387
|
-
close(): void {
|
|
388
|
-
this.isOpen.set(false);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* Handle touch start - open animation
|
|
393
|
-
*/
|
|
394
|
-
@HostListener('touchstart', ['$event'])
|
|
395
|
-
onTouchStart(event: TouchEvent): void {
|
|
396
|
-
this.isOpen.set(true);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* Handle touch end - close animation
|
|
401
|
-
*/
|
|
402
|
-
@HostListener('touchend')
|
|
403
|
-
onTouchEnd(): void {
|
|
404
|
-
this.isOpen.set(false);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Handle touch cancel - close animation
|
|
409
|
-
*/
|
|
410
|
-
@HostListener('touchcancel')
|
|
411
|
-
onTouchCancel(): void {
|
|
412
|
-
this.isOpen.set(false);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* Handle click - open modal
|
|
417
|
-
*/
|
|
418
|
-
@HostListener('click')
|
|
419
|
-
async onClick(): Promise<void> {
|
|
420
|
-
const handbookData: HandbookDetailData = {
|
|
421
|
-
title: this.label,
|
|
422
|
-
variant: this.variant,
|
|
423
|
-
iconName: this.iconName,
|
|
424
|
-
itemCount: this.itemCount,
|
|
425
|
-
items: this.items
|
|
426
|
-
};
|
|
427
|
-
|
|
428
|
-
await this.handbookModal.open(handbookData);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* Calculate the number of page sheets to display
|
|
433
|
-
* Max 6 sheets regardless of item count
|
|
434
|
-
*/
|
|
435
|
-
getPageSheets(): number[] {
|
|
436
|
-
const count = Math.min(this.itemCount, 6);
|
|
437
|
-
return Array(count).fill(0);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
constructor(
|
|
441
|
-
private handbookModal: DsMobileHandbookDetailModalService
|
|
442
|
-
) {}
|
|
443
|
-
}
|
|
444
|
-
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { Component, input } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* DsMobileHeaderContentComponent
|
|
6
|
-
*
|
|
7
|
-
* Container for header content tiles - displays tiles in a responsive grid.
|
|
8
|
-
* Used within the expandable header section of mobile pages to show
|
|
9
|
-
* summary information like property details, statistics, etc.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```html
|
|
13
|
-
* <ds-mobile-header-content header-content>
|
|
14
|
-
* <ds-mobile-header-content-tile>
|
|
15
|
-
* <tile-icon>
|
|
16
|
-
* <ds-icon name="remixHome4Line" />
|
|
17
|
-
* </tile-icon>
|
|
18
|
-
* <tile-content>
|
|
19
|
-
* <tile-label>Area</tile-label>
|
|
20
|
-
* <tile-value>120 m²</tile-value>
|
|
21
|
-
* </tile-content>
|
|
22
|
-
* </ds-mobile-header-content-tile>
|
|
23
|
-
* </ds-mobile-header-content>
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
@Component({
|
|
27
|
-
selector: 'ds-mobile-header-content',
|
|
28
|
-
standalone: true,
|
|
29
|
-
imports: [CommonModule],
|
|
30
|
-
styles: [`
|
|
31
|
-
:host {
|
|
32
|
-
display: grid;
|
|
33
|
-
grid-template-columns: repeat(2, 1fr);
|
|
34
|
-
gap: 12px;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@media (min-width: 768px) {
|
|
38
|
-
:host {
|
|
39
|
-
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
`],
|
|
43
|
-
template: `<ng-content select="ds-mobile-header-content-tile" />`
|
|
44
|
-
})
|
|
45
|
-
export class DsMobileHeaderContentComponent {}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* DsMobileHeaderContentTileComponent
|
|
49
|
-
*
|
|
50
|
-
* Individual tile for displaying summary information in the header.
|
|
51
|
-
* Styled with purple background to match the mobile header theme.
|
|
52
|
-
*
|
|
53
|
-
* Must contain:
|
|
54
|
-
* - `<tile-icon>` - Icon container (optional)
|
|
55
|
-
* - `<tile-content>` - Label and value container
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* ```html
|
|
59
|
-
* <ds-mobile-header-content-tile>
|
|
60
|
-
* <tile-icon>
|
|
61
|
-
* <ds-icon name="remixHome4Line" size="20px" color="#DFE4FF" />
|
|
62
|
-
* </tile-icon>
|
|
63
|
-
* <tile-content>
|
|
64
|
-
* <tile-label>Rooms</tile-label>
|
|
65
|
-
* <tile-value>3 rooms</tile-value>
|
|
66
|
-
* </tile-content>
|
|
67
|
-
* </ds-mobile-header-content-tile>
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
@Component({
|
|
71
|
-
selector: 'ds-mobile-header-content-tile',
|
|
72
|
-
standalone: true,
|
|
73
|
-
imports: [CommonModule],
|
|
74
|
-
styles: [`
|
|
75
|
-
:host {
|
|
76
|
-
background: rgba(255, 255, 255, 0.05);
|
|
77
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
78
|
-
border-radius: 12px;
|
|
79
|
-
padding: 12px;
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-direction: column;
|
|
82
|
-
gap: 16px;
|
|
83
|
-
}
|
|
84
|
-
`],
|
|
85
|
-
template: `
|
|
86
|
-
<ng-content select="tile-icon" />
|
|
87
|
-
<ng-content select="tile-content" />
|
|
88
|
-
`
|
|
89
|
-
})
|
|
90
|
-
export class DsMobileHeaderContentTileComponent {}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* TileIconComponent
|
|
94
|
-
*
|
|
95
|
-
* Semantic slot for tile icon with dark purple background.
|
|
96
|
-
* Use within `ds-mobile-header-content-tile`.
|
|
97
|
-
*/
|
|
98
|
-
@Component({
|
|
99
|
-
selector: 'tile-icon',
|
|
100
|
-
standalone: true,
|
|
101
|
-
styles: [`
|
|
102
|
-
:host {
|
|
103
|
-
background: var(--color-brand-secondary);
|
|
104
|
-
border-radius: 8px;
|
|
105
|
-
width: 32px;
|
|
106
|
-
height: 32px;
|
|
107
|
-
display: flex;
|
|
108
|
-
align-items: center;
|
|
109
|
-
justify-content: center;
|
|
110
|
-
flex-shrink: 0;
|
|
111
|
-
}
|
|
112
|
-
`],
|
|
113
|
-
template: `<ng-content />`
|
|
114
|
-
})
|
|
115
|
-
export class TileIconComponent {}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* TileContentComponent
|
|
119
|
-
*
|
|
120
|
-
* Semantic slot for tile content containing label and value.
|
|
121
|
-
* Use within `ds-mobile-header-content-tile`.
|
|
122
|
-
*
|
|
123
|
-
* Contains:
|
|
124
|
-
* - `<tile-label>` - Small label text
|
|
125
|
-
* - `<tile-value>` - Large value text
|
|
126
|
-
*/
|
|
127
|
-
@Component({
|
|
128
|
-
selector: 'tile-content',
|
|
129
|
-
standalone: true,
|
|
130
|
-
styles: [`
|
|
131
|
-
:host {
|
|
132
|
-
display: flex;
|
|
133
|
-
flex-direction: column;
|
|
134
|
-
gap: 0;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
::ng-deep tile-label {
|
|
138
|
-
font-family: 'Brockmann', sans-serif;
|
|
139
|
-
font-size: var(--font-size-sm);
|
|
140
|
-
font-weight: 400;
|
|
141
|
-
line-height: 20px;
|
|
142
|
-
letter-spacing: -0.56px;
|
|
143
|
-
color: rgba(255, 255, 255, 0.8);
|
|
144
|
-
display: block;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
::ng-deep tile-value {
|
|
148
|
-
font-family: 'Brockmann', sans-serif;
|
|
149
|
-
font-size: var(--font-size-lg);
|
|
150
|
-
font-weight: 600;
|
|
151
|
-
line-height: 26px;
|
|
152
|
-
letter-spacing: -0.72px;
|
|
153
|
-
color: #ffffff;
|
|
154
|
-
display: block;
|
|
155
|
-
}
|
|
156
|
-
`],
|
|
157
|
-
template: `
|
|
158
|
-
<ng-content select="tile-label" />
|
|
159
|
-
<ng-content select="tile-value" />
|
|
160
|
-
`
|
|
161
|
-
})
|
|
162
|
-
export class TileContentComponent {}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* TileLabelComponent
|
|
166
|
-
*
|
|
167
|
-
* Label text for tile content.
|
|
168
|
-
* Use within `tile-content` inside `ds-mobile-header-content-tile`.
|
|
169
|
-
*/
|
|
170
|
-
@Component({
|
|
171
|
-
selector: 'tile-label',
|
|
172
|
-
standalone: true,
|
|
173
|
-
styles: [`
|
|
174
|
-
:host {
|
|
175
|
-
font-family: 'Brockmann', sans-serif;
|
|
176
|
-
font-size: var(--font-size-sm);
|
|
177
|
-
font-weight: 400;
|
|
178
|
-
line-height: 20px;
|
|
179
|
-
letter-spacing: -0.56px;
|
|
180
|
-
color: rgba(255, 255, 255, 0.8);
|
|
181
|
-
display: block;
|
|
182
|
-
}
|
|
183
|
-
`],
|
|
184
|
-
template: `<ng-content />`
|
|
185
|
-
})
|
|
186
|
-
export class TileLabelComponent {}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* TileValueComponent
|
|
190
|
-
*
|
|
191
|
-
* Value text for tile content.
|
|
192
|
-
* Use within `tile-content` inside `ds-mobile-header-content-tile`.
|
|
193
|
-
*/
|
|
194
|
-
@Component({
|
|
195
|
-
selector: 'tile-value',
|
|
196
|
-
standalone: true,
|
|
197
|
-
styles: [`
|
|
198
|
-
:host {
|
|
199
|
-
font-family: 'Brockmann', sans-serif;
|
|
200
|
-
font-size: var(--font-size-lg);
|
|
201
|
-
font-weight: 600;
|
|
202
|
-
line-height: 26px;
|
|
203
|
-
letter-spacing: -0.72px;
|
|
204
|
-
color: #ffffff;
|
|
205
|
-
display: block;
|
|
206
|
-
}
|
|
207
|
-
`],
|
|
208
|
-
template: `<ng-content />`
|
|
209
|
-
})
|
|
210
|
-
export class TileValueComponent {}
|
|
211
|
-
|
package/src/components/index.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// Mobile Page Components
|
|
2
|
-
export * from './page-main';
|
|
3
|
-
export * from './page-details';
|
|
4
|
-
|
|
5
|
-
// Mobile Content Components
|
|
6
|
-
export * from './content';
|
|
7
|
-
export * from './header-content';
|
|
8
|
-
|
|
9
|
-
// Mobile Community Components
|
|
10
|
-
export * from './post-card';
|
|
11
|
-
export * from './comment';
|
|
12
|
-
export * from './post-composer';
|
|
13
|
-
|
|
14
|
-
// Mobile List Components
|
|
15
|
-
export * from './list-item';
|
|
16
|
-
export { DsMobileInteractiveListItemPostComponent, PostPdfAttachmentComponent } from './interactive-list-item-post';
|
|
17
|
-
export { DsMobileInteractiveListItemInquiryComponent } from './interactive-list-item-inquiry';
|
|
18
|
-
export { DsMobileInteractiveListItemMessageComponent } from './interactive-list-item-message';
|
|
19
|
-
export { DsMobileContactListItemComponent } from './contact-list-item';
|
|
20
|
-
|
|
21
|
-
// Mobile Layout Components
|
|
22
|
-
export { DsMobileAppLayoutComponent, type HeaderVariant } from './app-layout';
|
|
23
|
-
export { DsMobileTabsComponent, type TabConfig } from './tabs';
|
|
24
|
-
|
|
25
|
-
// Mobile Bottom Sheet Components
|
|
26
|
-
export * from './bottom-sheet';
|
|
27
|
-
|
|
28
|
-
// Mobile Lightbox Components
|
|
29
|
-
export * from './lightbox';
|
|
30
|
-
|
|
31
|
-
// Mobile Inline Photo Component
|
|
32
|
-
export * from './inline-photo';
|
|
33
|
-
|
|
34
|
-
// Mobile Modal Service
|
|
35
|
-
export * from './modal';
|
|
36
|
-
|
|
37
|
-
// Mobile Post Detail Modal
|
|
38
|
-
export * from './post-detail-modal';
|
|
39
|
-
|
|
40
|
-
// Mobile Handbook Components
|
|
41
|
-
export * from './handbook-folder';
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// Shared directives
|
|
45
|
-
export * from './shared';
|