@propbinder/mobile-design 0.2.50 → 0.2.52
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 +26206 -0
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
- package/index.d.ts +8193 -0
- package/package.json +39 -3
- package/ng-package.json +0 -24
- package/src/animations/page-transitions.ts +0 -165
- package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -102
- package/src/components/action-list-item/index.ts +0 -2
- package/src/components/app-icon/ds-app-icon.ts +0 -133
- package/src/components/app-icon/index.ts +0 -2
- package/src/components/attachment-preview/ds-mobile-attachment-preview.css +0 -139
- package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +0 -164
- package/src/components/attachment-preview/index.ts +0 -1
- package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -142
- package/src/components/avatar-with-badge/index.ts +0 -2
- package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +0 -71
- package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +0 -121
- package/src/components/booking-modal/ds-mobile-booking-modal.ts +0 -598
- package/src/components/booking-modal/ds-mobile-booking-summary.ts +0 -161
- package/src/components/booking-modal/index.ts +0 -4
- package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -266
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +0 -146
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +0 -156
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -101
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -169
- package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +0 -211
- package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -578
- package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +0 -614
- package/src/components/bottom-sheet/index.ts +0 -8
- package/src/components/bottom-sheet/modal-shadow-fix.ts +0 -42
- package/src/components/card-inline/ds-mobile-card-inline.ts +0 -301
- package/src/components/card-inline/index.ts +0 -2
- package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +0 -118
- package/src/components/card-inline-banner/index.ts +0 -1
- package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +0 -120
- package/src/components/card-inline-contact/index.ts +0 -1
- package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +0 -141
- package/src/components/card-inline-file/index.ts +0 -1
- package/src/components/chat-modal/ds-mobile-chat-modal.css +0 -159
- package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +0 -105
- package/src/components/chat-modal/ds-mobile-chat-modal.ts +0 -918
- package/src/components/chat-modal/index.ts +0 -8
- package/src/components/comment/ds-mobile-comment.ts +0 -568
- 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 -139
- package/src/components/content/index.ts +0 -2
- package/src/components/dropdown/ds-mobile-dropdown.css +0 -199
- package/src/components/dropdown/ds-mobile-dropdown.ts +0 -340
- package/src/components/dropdown/index.ts +0 -2
- package/src/components/ds-mobile-tabs.css +0 -407
- package/src/components/ds-mobile-tabs.ts +0 -216
- package/src/components/empty-state/ds-mobile-empty-state.ts +0 -120
- package/src/components/empty-state/index.ts +0 -2
- package/src/components/fab/ds-mobile-fab.ts +0 -315
- package/src/components/fab/index.ts +0 -1
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +0 -121
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +0 -189
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +0 -135
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +0 -656
- package/src/components/facility-creation-modal/index.ts +0 -9
- package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +0 -105
- package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +0 -188
- package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +0 -460
- package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +0 -134
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +0 -69
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +0 -379
- package/src/components/facility-detail-modal/index.ts +0 -2
- 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.css +0 -214
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -84
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -424
- package/src/components/handbook-detail-modal/index.ts +0 -3
- package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -175
- package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -533
- package/src/components/handbook-folder/index.ts +0 -4
- package/src/components/header-content/ds-mobile-header-content.ts +0 -222
- package/src/components/header-content/index.ts +0 -2
- package/src/components/illustration/ds-mobile-illustration.ts +0 -124
- package/src/components/illustration/index.ts +0 -2
- package/src/components/index.ts +0 -124
- package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -361
- package/src/components/inline-photo/index.ts +0 -1
- package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +0 -132
- package/src/components/inline-tabs/index.ts +0 -2
- package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +0 -350
- package/src/components/interactive-list-item-booking/index.ts +0 -1
- package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -321
- 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 -237
- package/src/components/interactive-list-item-message/index.ts +0 -2
- package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -549
- 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 -315
- package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -202
- package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -484
- package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -377
- 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 -296
- 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 -603
- 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/loader-overlay/ds-mobile-loader-overlay.css +0 -49
- package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +0 -77
- package/src/components/loader-overlay/index.ts +0 -1
- package/src/components/logo/ds-logo.ts +0 -95
- package/src/components/logo/index.ts +0 -2
- package/src/components/message-bubble/ds-mobile-message-bubble.ts +0 -633
- package/src/components/message-bubble/index.ts +0 -7
- package/src/components/message-composer/ds-mobile-message-composer.ts +0 -1146
- package/src/components/message-composer/index.ts +0 -7
- 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/modal-base/ds-mobile-modal-base.css +0 -378
- package/src/components/modal-base/ds-mobile-modal-base.ts +0 -261
- package/src/components/modal-base/index.ts +0 -2
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +0 -112
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +0 -93
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +0 -442
- package/src/components/new-inquiry-modal/index.ts +0 -4
- package/src/components/offline-banner/ds-mobile-offline-banner.ts +0 -135
- package/src/components/offline-banner/index.ts +0 -1
- package/src/components/page-details/ds-mobile-page-details.css +0 -83
- package/src/components/page-details/ds-mobile-page-details.ts +0 -282
- package/src/components/page-details/index.ts +0 -2
- package/src/components/page-main/ds-mobile-page-main.css +0 -68
- package/src/components/page-main/ds-mobile-page-main.ts +0 -421
- package/src/components/page-main/index.ts +0 -2
- 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.css +0 -390
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -108
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -722
- package/src/components/post-detail-modal/index.ts +0 -9
- package/src/components/property-banner/ds-mobile-property-banner.ts +0 -95
- package/src/components/property-banner/index.ts +0 -2
- package/src/components/section/ds-mobile-section.ts +0 -263
- package/src/components/section/index.ts +0 -2
- package/src/components/shared/directives/index.ts +0 -2
- package/src/components/shared/directives/long-press.directive.ts +0 -212
- package/src/components/shared/index.ts +0 -3
- package/src/components/shared/mobile-modal-base.ts +0 -457
- package/src/components/shared/mobile-page-base.ts +0 -204
- package/src/components/swiper/ds-mobile-swiper-with-nav.ts +0 -160
- package/src/components/swiper/ds-mobile-swiper.ts +0 -327
- package/src/components/swiper/index.ts +0 -3
- package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +0 -129
- package/src/components/system-message-banner/index.ts +0 -2
- package/src/components/tab-bar/ds-mobile-tab-bar.css +0 -533
- package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -735
- package/src/components/tab-bar/index.ts +0 -2
- package/src/components/tabs/ds-mobile-tabs.css +0 -25
- package/src/components/tabs/ds-mobile-tabs.ts +0 -89
- package/src/components/tabs/index.ts +0 -2
- package/src/components/text-input/ds-text-input.ts +0 -287
- package/src/components/text-input/index.ts +0 -2
- package/src/examples/booking.page.ts +0 -434
- package/src/examples/community.page.ts +0 -776
- package/src/examples/handbook.page.ts +0 -324
- package/src/examples/home.page.ts +0 -347
- package/src/examples/index.ts +0 -12
- package/src/examples/inquiries.example.ts +0 -273
- package/src/examples/inquiry-detail.example.css +0 -189
- package/src/examples/inquiry-detail.example.ts +0 -415
- package/src/examples/mobile-tabs-example.component.ts +0 -208
- package/src/examples/post-create.page.ts +0 -311
- package/src/examples/post-detail.page.ts +0 -296
- package/src/examples/sign-in.page.ts +0 -291
- package/src/examples/whitelabel-demo-modal.component.ts +0 -1094
- package/src/examples/whitelabel-demo-modal.service.ts +0 -77
- package/src/models/index.ts +0 -7
- package/src/models/post.model.ts +0 -41
- package/src/pages/community.page.ts +0 -769
- package/src/pages/handbook.page.ts +0 -388
- package/src/pages/home.page.ts +0 -303
- package/src/pages/index.ts +0 -11
- package/src/pages/inquiries.example.ts +0 -273
- package/src/pages/inquiry-detail.example.css +0 -189
- package/src/pages/inquiry-detail.example.ts +0 -415
- package/src/pages/mobile-tabs-example.component.ts +0 -179
- package/src/pages/post-create.page.ts +0 -311
- package/src/pages/post-detail.page.ts +0 -296
- package/src/pages/sign-in.page.ts +0 -291
- package/src/pages/whitelabel-demo-modal.component.ts +0 -1094
- package/src/pages/whitelabel-demo-modal.service.ts +0 -77
- package/src/public-api.ts +0 -6
- package/src/services/base-modal.service.ts +0 -101
- package/src/services/index.ts +0 -11
- package/src/services/posts.service.ts +0 -542
- package/src/services/tracking-permission.service.ts +0 -88
- package/src/services/user.service.ts +0 -60
- package/src/services/whitelabel.service.ts +0 -675
- package/tsconfig.lib.json +0 -17
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
- /package/{src/assets → assets}/fonts/Brockmann-Bold.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-BoldItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-Medium.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-MediumItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-Regular.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-RegularItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-SemiBold.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
- /package/{src/assets → assets}/fonts/Brockmann_desktop_license.pdf +0 -0
- /package/{src/assets → assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
- /package/{src/assets → assets}/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
- /package/{src/styles → styles}/ionic.css +0 -0
- /package/{src/components/shared → styles}/mobile-common.css +0 -0
- /package/{src/components/shared → styles}/mobile-page-base.css +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mobile Modal Styles
|
|
3
|
-
*
|
|
4
|
-
* Global styles for modals opened via DsMobileModalService.
|
|
5
|
-
* These styles are applied to all modals and handle different presentation styles.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/* Base modal styles */
|
|
9
|
-
.ds-mobile-modal {
|
|
10
|
-
--background: var(--color-background-neutral-primary, #ffffff);
|
|
11
|
-
--border-radius: 16px;
|
|
12
|
-
--box-shadow: none;
|
|
13
|
-
--max-width: 640px;
|
|
14
|
-
--width: 100%;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.ds-mobile-modal::part(content) {
|
|
18
|
-
max-width: 640px;
|
|
19
|
-
margin: 0 auto;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* Fullscreen presentation */
|
|
23
|
-
.ds-modal-fullscreen {
|
|
24
|
-
--width: 100%;
|
|
25
|
-
--height: 100%;
|
|
26
|
-
--border-radius: 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.ds-modal-fullscreen::part(content) {
|
|
30
|
-
border-radius: 0;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/* Card presentation (default iOS modal style) */
|
|
34
|
-
.ds-modal-card {
|
|
35
|
-
--width: 100%;
|
|
36
|
-
--max-width: 640px;
|
|
37
|
-
--height: auto;
|
|
38
|
-
--max-height: 90%;
|
|
39
|
-
--border-radius: 16px 16px 0 0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.ds-modal-card::part(content) {
|
|
43
|
-
border-radius: 16px 16px 0 0;
|
|
44
|
-
box-shadow: var(--box-shadow);
|
|
45
|
-
max-width: 640px;
|
|
46
|
-
margin: 0 auto;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/* Sheet presentation (bottom sheet with breakpoints) */
|
|
50
|
-
.ds-modal-sheet {
|
|
51
|
-
--width: 100%;
|
|
52
|
-
--max-width: 640px;
|
|
53
|
-
--height: auto;
|
|
54
|
-
--border-radius: 16px 16px 0 0;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.ds-modal-sheet::part(content) {
|
|
58
|
-
border-radius: 16px 16px 0 0;
|
|
59
|
-
box-shadow: var(--box-shadow);
|
|
60
|
-
max-width: 640px;
|
|
61
|
-
margin: 0 auto;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.ds-modal-sheet::part(handle) {
|
|
65
|
-
background: var(--border-color-default);
|
|
66
|
-
width: 36px;
|
|
67
|
-
height: 4px;
|
|
68
|
-
border-radius: 2px;
|
|
69
|
-
margin: 8px auto 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/* Backdrop styles */
|
|
73
|
-
.ds-mobile-modal::part(backdrop) {
|
|
74
|
-
background: rgba(0, 0, 0, 0.4);
|
|
75
|
-
backdrop-filter: blur(4px);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/* Animations */
|
|
79
|
-
.ds-mobile-modal.modal-card-enter-active,
|
|
80
|
-
.ds-mobile-modal.modal-sheet-enter-active {
|
|
81
|
-
animation: slideUp 0.3s ease-out;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.ds-mobile-modal.modal-card-leave-active,
|
|
85
|
-
.ds-mobile-modal.modal-sheet-leave-active {
|
|
86
|
-
animation: slideDown 0.3s ease-in;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.ds-mobile-modal.modal-fullscreen-enter-active {
|
|
90
|
-
animation: fadeIn 0.2s ease-out;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.ds-mobile-modal.modal-fullscreen-leave-active {
|
|
94
|
-
animation: fadeOut 0.2s ease-in;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@keyframes slideUp {
|
|
98
|
-
from {
|
|
99
|
-
transform: translateY(100%);
|
|
100
|
-
}
|
|
101
|
-
to {
|
|
102
|
-
transform: translateY(0);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@keyframes slideDown {
|
|
107
|
-
from {
|
|
108
|
-
transform: translateY(0);
|
|
109
|
-
}
|
|
110
|
-
to {
|
|
111
|
-
transform: translateY(100%);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@keyframes fadeIn {
|
|
116
|
-
from {
|
|
117
|
-
opacity: 0;
|
|
118
|
-
}
|
|
119
|
-
to {
|
|
120
|
-
opacity: 1;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@keyframes fadeOut {
|
|
125
|
-
from {
|
|
126
|
-
opacity: 1;
|
|
127
|
-
}
|
|
128
|
-
to {
|
|
129
|
-
opacity: 0;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/* Safe area handling for notched devices */
|
|
134
|
-
@supports (padding: env(safe-area-inset-top)) {
|
|
135
|
-
.ds-modal-fullscreen::part(content) {
|
|
136
|
-
padding-top: env(safe-area-inset-top);
|
|
137
|
-
padding-bottom: env(safe-area-inset-bottom);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/* Dark mode support (if needed) */
|
|
142
|
-
@media (prefers-color-scheme: dark) {
|
|
143
|
-
.ds-mobile-modal {
|
|
144
|
-
--background: var(--color-background-neutral-primary-dark, #1a1a1a);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.ds-mobile-modal::part(backdrop) {
|
|
148
|
-
background: rgba(0, 0, 0, 0.6);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/* Accessibility: Reduced motion */
|
|
153
|
-
@media (prefers-reduced-motion: reduce) {
|
|
154
|
-
.ds-mobile-modal.modal-card-enter-active,
|
|
155
|
-
.ds-mobile-modal.modal-card-leave-active,
|
|
156
|
-
.ds-mobile-modal.modal-sheet-enter-active,
|
|
157
|
-
.ds-mobile-modal.modal-sheet-leave-active,
|
|
158
|
-
.ds-mobile-modal.modal-fullscreen-enter-active,
|
|
159
|
-
.ds-mobile-modal.modal-fullscreen-leave-active {
|
|
160
|
-
animation: none;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
import { Injectable, Type } from '@angular/core';
|
|
2
|
-
import { ModalController } from '@ionic/angular/standalone';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Configuration options for modal presentation
|
|
6
|
-
*/
|
|
7
|
-
export interface ModalOptions<T = any> {
|
|
8
|
-
/** The component to display in the modal */
|
|
9
|
-
component: Type<T>;
|
|
10
|
-
/** Props to pass to the component */
|
|
11
|
-
componentProps?: Record<string, any>;
|
|
12
|
-
/** CSS class(es) to apply to the modal */
|
|
13
|
-
cssClass?: string | string[];
|
|
14
|
-
/** Modal presentation style */
|
|
15
|
-
presentationStyle?: 'fullscreen' | 'card' | 'sheet';
|
|
16
|
-
/** Enable backdrop dismiss (tap outside to close) */
|
|
17
|
-
backdropDismiss?: boolean;
|
|
18
|
-
/** Show backdrop */
|
|
19
|
-
showBackdrop?: boolean;
|
|
20
|
-
/** Enable keyboard close (ESC key) */
|
|
21
|
-
keyboardClose?: boolean;
|
|
22
|
-
/** Enable swipe to close */
|
|
23
|
-
swipeToClose?: boolean;
|
|
24
|
-
/** Initial breakpoint (0-1) for sheet presentation */
|
|
25
|
-
initialBreakpoint?: number;
|
|
26
|
-
/** Available breakpoints for sheet presentation */
|
|
27
|
-
breakpoints?: number[];
|
|
28
|
-
/** Animation type */
|
|
29
|
-
animated?: boolean;
|
|
30
|
-
/** Mode (ios or md) */
|
|
31
|
-
mode?: 'ios' | 'md';
|
|
32
|
-
/** Whether to handle navigation back button */
|
|
33
|
-
handleNavigationBack?: boolean;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* DsMobileModalService
|
|
38
|
-
*
|
|
39
|
-
* Generic service for displaying any component as a modal.
|
|
40
|
-
* Built on Ionic's modal system with customizable presentation styles.
|
|
41
|
-
*
|
|
42
|
-
* Features:
|
|
43
|
-
* - Open any component as a modal
|
|
44
|
-
* - Fullscreen, card, or sheet presentation styles
|
|
45
|
-
* - Customizable backdrop and dismissal behavior
|
|
46
|
-
* - Native gestures and animations
|
|
47
|
-
* - Type-safe component props
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```typescript
|
|
51
|
-
* import { MobilePostDetailPageComponent } from './post-detail.page';
|
|
52
|
-
*
|
|
53
|
-
* constructor(private modal: DsMobileModalService) {}
|
|
54
|
-
*
|
|
55
|
-
* async openPostModal() {
|
|
56
|
-
* await this.modal.open({
|
|
57
|
-
* component: MobilePostDetailPageComponent,
|
|
58
|
-
* componentProps: {
|
|
59
|
-
* postId: '123',
|
|
60
|
-
* authorName: 'John Doe'
|
|
61
|
-
* },
|
|
62
|
-
* presentationStyle: 'card',
|
|
63
|
-
* backdropDismiss: true
|
|
64
|
-
* });
|
|
65
|
-
* }
|
|
66
|
-
* ```
|
|
67
|
-
*
|
|
68
|
-
* @example Sheet presentation with breakpoints
|
|
69
|
-
* ```typescript
|
|
70
|
-
* async openSheet() {
|
|
71
|
-
* await this.modal.open({
|
|
72
|
-
* component: CommentsComponent,
|
|
73
|
-
* presentationStyle: 'sheet',
|
|
74
|
-
* initialBreakpoint: 0.5,
|
|
75
|
-
* breakpoints: [0, 0.5, 0.75, 1],
|
|
76
|
-
* swipeToClose: true
|
|
77
|
-
* });
|
|
78
|
-
* }
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
@Injectable({
|
|
82
|
-
providedIn: 'root',
|
|
83
|
-
})
|
|
84
|
-
export class DsMobileModalService {
|
|
85
|
-
constructor(private modalController: ModalController) {}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Open a component as a modal
|
|
89
|
-
*
|
|
90
|
-
* @param options Configuration options for the modal
|
|
91
|
-
* @returns Promise that resolves when the modal is presented
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* ```typescript
|
|
95
|
-
* await this.modal.open({
|
|
96
|
-
* component: MyComponent,
|
|
97
|
-
* componentProps: { data: 'value' },
|
|
98
|
-
* presentationStyle: 'fullscreen'
|
|
99
|
-
* });
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
async open<T = any>(options: ModalOptions<T>): Promise<HTMLIonModalElement> {
|
|
103
|
-
// console.log('[Modal] Opening modal with options:', options);
|
|
104
|
-
|
|
105
|
-
const {
|
|
106
|
-
component,
|
|
107
|
-
componentProps,
|
|
108
|
-
cssClass,
|
|
109
|
-
presentationStyle = 'card',
|
|
110
|
-
backdropDismiss = true,
|
|
111
|
-
showBackdrop = true,
|
|
112
|
-
keyboardClose = true,
|
|
113
|
-
swipeToClose,
|
|
114
|
-
initialBreakpoint,
|
|
115
|
-
breakpoints,
|
|
116
|
-
animated = true,
|
|
117
|
-
mode = 'ios',
|
|
118
|
-
handleNavigationBack = true,
|
|
119
|
-
} = options;
|
|
120
|
-
|
|
121
|
-
// Build modal configuration
|
|
122
|
-
const modalConfig: any = {
|
|
123
|
-
component,
|
|
124
|
-
componentProps: componentProps || {},
|
|
125
|
-
cssClass: this.buildCssClasses(cssClass, presentationStyle),
|
|
126
|
-
mode,
|
|
127
|
-
backdropDismiss,
|
|
128
|
-
showBackdrop,
|
|
129
|
-
animated,
|
|
130
|
-
keyboardClose,
|
|
131
|
-
presentingElement:
|
|
132
|
-
document.querySelector('ion-router-outlet') || undefined,
|
|
133
|
-
handle: presentationStyle === 'sheet', // Show handle for sheet presentation
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// Add swipe to close for sheet presentation
|
|
137
|
-
if (swipeToClose !== undefined) {
|
|
138
|
-
modalConfig.canDismiss = swipeToClose;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Add breakpoints for sheet presentation
|
|
142
|
-
if (presentationStyle === 'sheet' && breakpoints) {
|
|
143
|
-
modalConfig.breakpoints = breakpoints;
|
|
144
|
-
if (initialBreakpoint !== undefined) {
|
|
145
|
-
modalConfig.initialBreakpoint = initialBreakpoint;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Handle navigation back button
|
|
150
|
-
if (handleNavigationBack) {
|
|
151
|
-
modalConfig.canDismiss = async () => {
|
|
152
|
-
// You can add custom logic here if needed
|
|
153
|
-
return true;
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const modal = await this.modalController.create(modalConfig);
|
|
158
|
-
|
|
159
|
-
// console.log('[Modal] Modal created, presenting...');
|
|
160
|
-
await modal.present();
|
|
161
|
-
// console.log('[Modal] Modal presented');
|
|
162
|
-
|
|
163
|
-
return modal;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Open a component as a fullscreen modal
|
|
168
|
-
*
|
|
169
|
-
* @param component Component to display
|
|
170
|
-
* @param componentProps Props to pass to the component
|
|
171
|
-
* @returns Promise that resolves when the modal is presented
|
|
172
|
-
*
|
|
173
|
-
* @example
|
|
174
|
-
* ```typescript
|
|
175
|
-
* await this.modal.openFullscreen(PostDetailPage, { postId: '123' });
|
|
176
|
-
* ```
|
|
177
|
-
*/
|
|
178
|
-
async openFullscreen<T = any>(
|
|
179
|
-
component: Type<T>,
|
|
180
|
-
componentProps?: Record<string, any>
|
|
181
|
-
): Promise<HTMLIonModalElement> {
|
|
182
|
-
return this.open({
|
|
183
|
-
component,
|
|
184
|
-
componentProps,
|
|
185
|
-
presentationStyle: 'fullscreen',
|
|
186
|
-
backdropDismiss: false,
|
|
187
|
-
showBackdrop: false,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Open a component as a card modal
|
|
193
|
-
*
|
|
194
|
-
* @param component Component to display
|
|
195
|
-
* @param componentProps Props to pass to the component
|
|
196
|
-
* @returns Promise that resolves when the modal is presented
|
|
197
|
-
*
|
|
198
|
-
* @example
|
|
199
|
-
* ```typescript
|
|
200
|
-
* await this.modal.openCard(DetailComponent, { itemId: '456' });
|
|
201
|
-
* ```
|
|
202
|
-
*/
|
|
203
|
-
async openCard<T = any>(
|
|
204
|
-
component: Type<T>,
|
|
205
|
-
componentProps?: Record<string, any>
|
|
206
|
-
): Promise<HTMLIonModalElement> {
|
|
207
|
-
return this.open({
|
|
208
|
-
component,
|
|
209
|
-
componentProps,
|
|
210
|
-
presentationStyle: 'card',
|
|
211
|
-
backdropDismiss: true,
|
|
212
|
-
showBackdrop: true,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Open a component as a bottom sheet
|
|
218
|
-
*
|
|
219
|
-
* @param component Component to display
|
|
220
|
-
* @param componentProps Props to pass to the component
|
|
221
|
-
* @param options Additional sheet options (breakpoints, etc.)
|
|
222
|
-
* @returns Promise that resolves when the modal is presented
|
|
223
|
-
*
|
|
224
|
-
* @example
|
|
225
|
-
* ```typescript
|
|
226
|
-
* await this.modal.openSheet(
|
|
227
|
-
* CommentsComponent,
|
|
228
|
-
* { postId: '789' },
|
|
229
|
-
* { initialBreakpoint: 0.5, breakpoints: [0, 0.5, 1] }
|
|
230
|
-
* );
|
|
231
|
-
* ```
|
|
232
|
-
*/
|
|
233
|
-
async openSheet<T = any>(
|
|
234
|
-
component: Type<T>,
|
|
235
|
-
componentProps?: Record<string, any>,
|
|
236
|
-
options?: {
|
|
237
|
-
initialBreakpoint?: number;
|
|
238
|
-
breakpoints?: number[];
|
|
239
|
-
swipeToClose?: boolean;
|
|
240
|
-
}
|
|
241
|
-
): Promise<HTMLIonModalElement> {
|
|
242
|
-
return this.open({
|
|
243
|
-
component,
|
|
244
|
-
componentProps,
|
|
245
|
-
presentationStyle: 'sheet',
|
|
246
|
-
backdropDismiss: true,
|
|
247
|
-
showBackdrop: true,
|
|
248
|
-
swipeToClose: options?.swipeToClose ?? true,
|
|
249
|
-
initialBreakpoint: options?.initialBreakpoint ?? 0.5,
|
|
250
|
-
breakpoints: options?.breakpoints ?? [0, 0.5, 0.75, 1],
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Close the currently open modal
|
|
256
|
-
*
|
|
257
|
-
* @param data Optional data to pass back when dismissing
|
|
258
|
-
* @param role Optional role (e.g., 'cancel', 'confirm')
|
|
259
|
-
* @returns Promise that resolves when the modal is dismissed
|
|
260
|
-
*
|
|
261
|
-
* @example
|
|
262
|
-
* ```typescript
|
|
263
|
-
* await this.modal.dismiss({ saved: true }, 'confirm');
|
|
264
|
-
* ```
|
|
265
|
-
*/
|
|
266
|
-
async dismiss(data?: any, role?: string): Promise<boolean> {
|
|
267
|
-
return this.modalController.dismiss(data, role);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Get the top-most modal if one exists
|
|
272
|
-
*
|
|
273
|
-
* @returns Promise that resolves to the modal element or undefined
|
|
274
|
-
*
|
|
275
|
-
* @example
|
|
276
|
-
* ```typescript
|
|
277
|
-
* const topModal = await this.modal.getTop();
|
|
278
|
-
* if (topModal) {
|
|
279
|
-
* await topModal.dismiss();
|
|
280
|
-
* }
|
|
281
|
-
* ```
|
|
282
|
-
*/
|
|
283
|
-
async getTop(): Promise<HTMLIonModalElement | undefined> {
|
|
284
|
-
return this.modalController.getTop();
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* Get all currently open modals
|
|
289
|
-
*
|
|
290
|
-
* @returns Promise that resolves to an array of modal elements
|
|
291
|
-
*/
|
|
292
|
-
async getAll(): Promise<HTMLIonModalElement[]> {
|
|
293
|
-
const modals: HTMLIonModalElement[] = [];
|
|
294
|
-
let modal = await this.modalController.getTop();
|
|
295
|
-
|
|
296
|
-
while (modal) {
|
|
297
|
-
modals.push(modal);
|
|
298
|
-
// Get the next modal in the stack
|
|
299
|
-
await modal.dismiss();
|
|
300
|
-
modal = await this.modalController.getTop();
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return modals;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Build CSS classes for the modal
|
|
308
|
-
*/
|
|
309
|
-
private buildCssClasses(
|
|
310
|
-
customClass?: string | string[],
|
|
311
|
-
presentationStyle?: string
|
|
312
|
-
): string[] {
|
|
313
|
-
const classes: string[] = ['ds-mobile-modal'];
|
|
314
|
-
|
|
315
|
-
if (presentationStyle) {
|
|
316
|
-
classes.push(`ds-modal-${presentationStyle}`);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
if (customClass) {
|
|
320
|
-
if (Array.isArray(customClass)) {
|
|
321
|
-
classes.push(...customClass);
|
|
322
|
-
} else {
|
|
323
|
-
classes.push(customClass);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return classes;
|
|
328
|
-
}
|
|
329
|
-
}
|