@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.
Files changed (221) hide show
  1. package/fesm2022/propbinder-mobile-design.mjs +26206 -0
  2. package/fesm2022/propbinder-mobile-design.mjs.map +1 -0
  3. package/index.d.ts +8193 -0
  4. package/package.json +39 -3
  5. package/ng-package.json +0 -24
  6. package/src/animations/page-transitions.ts +0 -165
  7. package/src/components/action-list-item/ds-mobile-action-list-item.ts +0 -102
  8. package/src/components/action-list-item/index.ts +0 -2
  9. package/src/components/app-icon/ds-app-icon.ts +0 -133
  10. package/src/components/app-icon/index.ts +0 -2
  11. package/src/components/attachment-preview/ds-mobile-attachment-preview.css +0 -139
  12. package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +0 -164
  13. package/src/components/attachment-preview/index.ts +0 -1
  14. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +0 -142
  15. package/src/components/avatar-with-badge/index.ts +0 -2
  16. package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +0 -71
  17. package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +0 -121
  18. package/src/components/booking-modal/ds-mobile-booking-modal.ts +0 -598
  19. package/src/components/booking-modal/ds-mobile-booking-summary.ts +0 -161
  20. package/src/components/booking-modal/index.ts +0 -4
  21. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +0 -266
  22. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +0 -146
  23. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +0 -156
  24. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +0 -101
  25. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +0 -169
  26. package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +0 -211
  27. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +0 -578
  28. package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +0 -614
  29. package/src/components/bottom-sheet/index.ts +0 -8
  30. package/src/components/bottom-sheet/modal-shadow-fix.ts +0 -42
  31. package/src/components/card-inline/ds-mobile-card-inline.ts +0 -301
  32. package/src/components/card-inline/index.ts +0 -2
  33. package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +0 -118
  34. package/src/components/card-inline-banner/index.ts +0 -1
  35. package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +0 -120
  36. package/src/components/card-inline-contact/index.ts +0 -1
  37. package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +0 -141
  38. package/src/components/card-inline-file/index.ts +0 -1
  39. package/src/components/chat-modal/ds-mobile-chat-modal.css +0 -159
  40. package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +0 -105
  41. package/src/components/chat-modal/ds-mobile-chat-modal.ts +0 -918
  42. package/src/components/chat-modal/index.ts +0 -8
  43. package/src/components/comment/ds-mobile-comment.ts +0 -568
  44. package/src/components/comment/index.ts +0 -2
  45. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +0 -182
  46. package/src/components/contact-list-item/index.ts +0 -2
  47. package/src/components/content/ds-mobile-content.ts +0 -139
  48. package/src/components/content/index.ts +0 -2
  49. package/src/components/dropdown/ds-mobile-dropdown.css +0 -199
  50. package/src/components/dropdown/ds-mobile-dropdown.ts +0 -340
  51. package/src/components/dropdown/index.ts +0 -2
  52. package/src/components/ds-mobile-tabs.css +0 -407
  53. package/src/components/ds-mobile-tabs.ts +0 -216
  54. package/src/components/empty-state/ds-mobile-empty-state.ts +0 -120
  55. package/src/components/empty-state/index.ts +0 -2
  56. package/src/components/fab/ds-mobile-fab.ts +0 -315
  57. package/src/components/fab/index.ts +0 -1
  58. package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +0 -121
  59. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +0 -189
  60. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +0 -135
  61. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +0 -656
  62. package/src/components/facility-creation-modal/index.ts +0 -9
  63. package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +0 -105
  64. package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +0 -188
  65. package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +0 -460
  66. package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +0 -134
  67. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +0 -69
  68. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +0 -379
  69. package/src/components/facility-detail-modal/index.ts +0 -2
  70. package/src/components/file-attachment/ds-mobile-file-attachment.ts +0 -164
  71. package/src/components/file-attachment/index.ts +0 -2
  72. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +0 -214
  73. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +0 -84
  74. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +0 -424
  75. package/src/components/handbook-detail-modal/index.ts +0 -3
  76. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +0 -175
  77. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +0 -533
  78. package/src/components/handbook-folder/index.ts +0 -4
  79. package/src/components/header-content/ds-mobile-header-content.ts +0 -222
  80. package/src/components/header-content/index.ts +0 -2
  81. package/src/components/illustration/ds-mobile-illustration.ts +0 -124
  82. package/src/components/illustration/index.ts +0 -2
  83. package/src/components/index.ts +0 -124
  84. package/src/components/inline-photo/ds-mobile-inline-photo.ts +0 -361
  85. package/src/components/inline-photo/index.ts +0 -1
  86. package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +0 -132
  87. package/src/components/inline-tabs/index.ts +0 -2
  88. package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +0 -350
  89. package/src/components/interactive-list-item-booking/index.ts +0 -1
  90. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +0 -321
  91. package/src/components/interactive-list-item-inquiry/index.ts +0 -2
  92. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +0 -237
  93. package/src/components/interactive-list-item-message/index.ts +0 -2
  94. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +0 -549
  95. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +0 -124
  96. package/src/components/interactive-list-item-post/index.ts +0 -13
  97. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +0 -315
  98. package/src/components/lightbox/ds-mobile-lightbox-header.ts +0 -202
  99. package/src/components/lightbox/ds-mobile-lightbox-image.ts +0 -484
  100. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +0 -377
  101. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +0 -374
  102. package/src/components/lightbox/ds-mobile-lightbox.css +0 -587
  103. package/src/components/lightbox/ds-mobile-lightbox.service.ts +0 -296
  104. package/src/components/lightbox/ds-mobile-lightbox.ts +0 -529
  105. package/src/components/lightbox/index.ts +0 -22
  106. package/src/components/list-item/ds-mobile-list-item.ts +0 -603
  107. package/src/components/list-item/index.ts +0 -2
  108. package/src/components/list-item-static/ds-mobile-list-item-static.ts +0 -133
  109. package/src/components/list-item-static/index.ts +0 -2
  110. package/src/components/loader-overlay/ds-mobile-loader-overlay.css +0 -49
  111. package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +0 -77
  112. package/src/components/loader-overlay/index.ts +0 -1
  113. package/src/components/logo/ds-logo.ts +0 -95
  114. package/src/components/logo/index.ts +0 -2
  115. package/src/components/message-bubble/ds-mobile-message-bubble.ts +0 -633
  116. package/src/components/message-bubble/index.ts +0 -7
  117. package/src/components/message-composer/ds-mobile-message-composer.ts +0 -1146
  118. package/src/components/message-composer/index.ts +0 -7
  119. package/src/components/modal/ds-mobile-modal.css +0 -163
  120. package/src/components/modal/ds-mobile-modal.service.ts +0 -329
  121. package/src/components/modal/index.ts +0 -8
  122. package/src/components/modal-base/ds-mobile-modal-base.css +0 -378
  123. package/src/components/modal-base/ds-mobile-modal-base.ts +0 -261
  124. package/src/components/modal-base/index.ts +0 -2
  125. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +0 -112
  126. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +0 -93
  127. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +0 -442
  128. package/src/components/new-inquiry-modal/index.ts +0 -4
  129. package/src/components/offline-banner/ds-mobile-offline-banner.ts +0 -135
  130. package/src/components/offline-banner/index.ts +0 -1
  131. package/src/components/page-details/ds-mobile-page-details.css +0 -83
  132. package/src/components/page-details/ds-mobile-page-details.ts +0 -282
  133. package/src/components/page-details/index.ts +0 -2
  134. package/src/components/page-main/ds-mobile-page-main.css +0 -68
  135. package/src/components/page-main/ds-mobile-page-main.ts +0 -421
  136. package/src/components/page-main/index.ts +0 -2
  137. package/src/components/post-composer/ds-mobile-post-composer.ts +0 -140
  138. package/src/components/post-composer/index.ts +0 -2
  139. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +0 -390
  140. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +0 -108
  141. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +0 -722
  142. package/src/components/post-detail-modal/index.ts +0 -9
  143. package/src/components/property-banner/ds-mobile-property-banner.ts +0 -95
  144. package/src/components/property-banner/index.ts +0 -2
  145. package/src/components/section/ds-mobile-section.ts +0 -263
  146. package/src/components/section/index.ts +0 -2
  147. package/src/components/shared/directives/index.ts +0 -2
  148. package/src/components/shared/directives/long-press.directive.ts +0 -212
  149. package/src/components/shared/index.ts +0 -3
  150. package/src/components/shared/mobile-modal-base.ts +0 -457
  151. package/src/components/shared/mobile-page-base.ts +0 -204
  152. package/src/components/swiper/ds-mobile-swiper-with-nav.ts +0 -160
  153. package/src/components/swiper/ds-mobile-swiper.ts +0 -327
  154. package/src/components/swiper/index.ts +0 -3
  155. package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +0 -129
  156. package/src/components/system-message-banner/index.ts +0 -2
  157. package/src/components/tab-bar/ds-mobile-tab-bar.css +0 -533
  158. package/src/components/tab-bar/ds-mobile-tab-bar.ts +0 -735
  159. package/src/components/tab-bar/index.ts +0 -2
  160. package/src/components/tabs/ds-mobile-tabs.css +0 -25
  161. package/src/components/tabs/ds-mobile-tabs.ts +0 -89
  162. package/src/components/tabs/index.ts +0 -2
  163. package/src/components/text-input/ds-text-input.ts +0 -287
  164. package/src/components/text-input/index.ts +0 -2
  165. package/src/examples/booking.page.ts +0 -434
  166. package/src/examples/community.page.ts +0 -776
  167. package/src/examples/handbook.page.ts +0 -324
  168. package/src/examples/home.page.ts +0 -347
  169. package/src/examples/index.ts +0 -12
  170. package/src/examples/inquiries.example.ts +0 -273
  171. package/src/examples/inquiry-detail.example.css +0 -189
  172. package/src/examples/inquiry-detail.example.ts +0 -415
  173. package/src/examples/mobile-tabs-example.component.ts +0 -208
  174. package/src/examples/post-create.page.ts +0 -311
  175. package/src/examples/post-detail.page.ts +0 -296
  176. package/src/examples/sign-in.page.ts +0 -291
  177. package/src/examples/whitelabel-demo-modal.component.ts +0 -1094
  178. package/src/examples/whitelabel-demo-modal.service.ts +0 -77
  179. package/src/models/index.ts +0 -7
  180. package/src/models/post.model.ts +0 -41
  181. package/src/pages/community.page.ts +0 -769
  182. package/src/pages/handbook.page.ts +0 -388
  183. package/src/pages/home.page.ts +0 -303
  184. package/src/pages/index.ts +0 -11
  185. package/src/pages/inquiries.example.ts +0 -273
  186. package/src/pages/inquiry-detail.example.css +0 -189
  187. package/src/pages/inquiry-detail.example.ts +0 -415
  188. package/src/pages/mobile-tabs-example.component.ts +0 -179
  189. package/src/pages/post-create.page.ts +0 -311
  190. package/src/pages/post-detail.page.ts +0 -296
  191. package/src/pages/sign-in.page.ts +0 -291
  192. package/src/pages/whitelabel-demo-modal.component.ts +0 -1094
  193. package/src/pages/whitelabel-demo-modal.service.ts +0 -77
  194. package/src/public-api.ts +0 -6
  195. package/src/services/base-modal.service.ts +0 -101
  196. package/src/services/index.ts +0 -11
  197. package/src/services/posts.service.ts +0 -542
  198. package/src/services/tracking-permission.service.ts +0 -88
  199. package/src/services/user.service.ts +0 -60
  200. package/src/services/whitelabel.service.ts +0 -675
  201. package/tsconfig.lib.json +0 -17
  202. package/tsconfig.lib.prod.json +0 -9
  203. package/tsconfig.spec.json +0 -13
  204. /package/{src/assets → assets}/fonts/Brockmann-Bold.otf +0 -0
  205. /package/{src/assets → assets}/fonts/Brockmann-BoldItalic.otf +0 -0
  206. /package/{src/assets → assets}/fonts/Brockmann-Medium.otf +0 -0
  207. /package/{src/assets → assets}/fonts/Brockmann-MediumItalic.otf +0 -0
  208. /package/{src/assets → assets}/fonts/Brockmann-Regular.otf +0 -0
  209. /package/{src/assets → assets}/fonts/Brockmann-RegularItalic.otf +0 -0
  210. /package/{src/assets → assets}/fonts/Brockmann-SemiBold.otf +0 -0
  211. /package/{src/assets → assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  212. /package/{src/assets → assets}/fonts/Brockmann_desktop_license.pdf +0 -0
  213. /package/{src/assets → assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
  214. /package/{src/assets → assets}/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
  215. /package/{src/assets → assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
  216. /package/{src/assets → assets}/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
  217. /package/{src/assets → assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
  218. /package/{src/assets → assets}/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
  219. /package/{src/styles → styles}/ionic.css +0 -0
  220. /package/{src/components/shared → styles}/mobile-common.css +0 -0
  221. /package/{src/components/shared → styles}/mobile-page-base.css +0 -0
@@ -1,7 +0,0 @@
1
- export { DsMobileMessageComposerComponent } from './ds-mobile-message-composer';
2
-
3
-
4
-
5
-
6
-
7
-
@@ -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
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Mobile Modal Module
3
- *
4
- * Generic service for opening any component as a modal
5
- */
6
-
7
- export * from './ds-mobile-modal.service';
8
-