@xenknight/framework7-vue 0.0.2

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 (199) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +33 -0
  3. package/components/accordion-content.d.ts +46 -0
  4. package/components/accordion-content.js +22 -0
  5. package/components/accordion-item.d.ts +51 -0
  6. package/components/accordion-item.js +77 -0
  7. package/components/accordion-toggle.d.ts +46 -0
  8. package/components/accordion-toggle.js +22 -0
  9. package/components/accordion.d.ts +50 -0
  10. package/components/accordion.js +23 -0
  11. package/components/actions-button.d.ts +56 -0
  12. package/components/actions-button.js +58 -0
  13. package/components/actions-group.d.ts +46 -0
  14. package/components/actions-group.js +22 -0
  15. package/components/actions-label.d.ts +51 -0
  16. package/components/actions-label.js +36 -0
  17. package/components/actions.d.ts +109 -0
  18. package/components/actions.js +157 -0
  19. package/components/app.d.ts +310 -0
  20. package/components/app.js +267 -0
  21. package/components/area-chart.d.ts +88 -0
  22. package/components/area-chart.js +364 -0
  23. package/components/badge.d.ts +54 -0
  24. package/components/badge.js +29 -0
  25. package/components/block-footer.d.ts +46 -0
  26. package/components/block-footer.js +22 -0
  27. package/components/block-header.d.ts +46 -0
  28. package/components/block-header.js +22 -0
  29. package/components/block-title.d.ts +54 -0
  30. package/components/block-title.js +35 -0
  31. package/components/block.d.ts +163 -0
  32. package/components/block.js +123 -0
  33. package/components/breadcrumbs-collapsed.d.ts +19 -0
  34. package/components/breadcrumbs-collapsed.js +21 -0
  35. package/components/breadcrumbs-item.d.ts +22 -0
  36. package/components/breadcrumbs-item.js +24 -0
  37. package/components/breadcrumbs-separator.d.ts +19 -0
  38. package/components/breadcrumbs-separator.js +20 -0
  39. package/components/breadcrumbs.d.ts +19 -0
  40. package/components/breadcrumbs.js +20 -0
  41. package/components/button.d.ts +371 -0
  42. package/components/button.js +182 -0
  43. package/components/card-content.d.ts +51 -0
  44. package/components/card-content.js +28 -0
  45. package/components/card-footer.d.ts +46 -0
  46. package/components/card-footer.js +22 -0
  47. package/components/card-header.d.ts +46 -0
  48. package/components/card-header.js +22 -0
  49. package/components/card.d.ts +145 -0
  50. package/components/card.js +192 -0
  51. package/components/checkbox.d.ts +72 -0
  52. package/components/checkbox.js +70 -0
  53. package/components/chip.d.ts +107 -0
  54. package/components/chip.js +81 -0
  55. package/components/fab-backdrop.d.ts +46 -0
  56. package/components/fab-backdrop.js +22 -0
  57. package/components/fab-button.d.ts +67 -0
  58. package/components/fab-button.js +52 -0
  59. package/components/fab-buttons.d.ts +51 -0
  60. package/components/fab-buttons.js +26 -0
  61. package/components/fab.d.ts +76 -0
  62. package/components/fab.js +78 -0
  63. package/components/gauge.d.ts +91 -0
  64. package/components/gauge.js +151 -0
  65. package/components/icon.d.ts +78 -0
  66. package/components/icon.js +100 -0
  67. package/components/input.d.ts +226 -0
  68. package/components/input.js +409 -0
  69. package/components/link.d.ts +287 -0
  70. package/components/link.js +129 -0
  71. package/components/list-button.d.ts +239 -0
  72. package/components/list-button.js +71 -0
  73. package/components/list-group.d.ts +71 -0
  74. package/components/list-group.js +53 -0
  75. package/components/list-index.d.ts +81 -0
  76. package/components/list-index.js +96 -0
  77. package/components/list-input.d.ts +245 -0
  78. package/components/list-input.js +415 -0
  79. package/components/list-item.d.ts +370 -0
  80. package/components/list-item.js +451 -0
  81. package/components/list.d.ts +236 -0
  82. package/components/list.js +222 -0
  83. package/components/login-screen-title.d.ts +46 -0
  84. package/components/login-screen-title.js +22 -0
  85. package/components/login-screen.d.ts +61 -0
  86. package/components/login-screen.js +104 -0
  87. package/components/message.d.ts +116 -0
  88. package/components/message.js +169 -0
  89. package/components/messagebar-attachment.d.ts +56 -0
  90. package/components/messagebar-attachment.js +52 -0
  91. package/components/messagebar-attachments.d.ts +46 -0
  92. package/components/messagebar-attachments.js +22 -0
  93. package/components/messagebar-sheet-image.d.ts +55 -0
  94. package/components/messagebar-sheet-image.js +48 -0
  95. package/components/messagebar-sheet-item.d.ts +46 -0
  96. package/components/messagebar-sheet-item.js +22 -0
  97. package/components/messagebar-sheet.d.ts +46 -0
  98. package/components/messagebar-sheet.js +22 -0
  99. package/components/messagebar.d.ts +117 -0
  100. package/components/messagebar.js +193 -0
  101. package/components/messages-title.d.ts +46 -0
  102. package/components/messages-title.js +22 -0
  103. package/components/messages.d.ts +116 -0
  104. package/components/messages.js +134 -0
  105. package/components/nav-left.d.ts +68 -0
  106. package/components/nav-left.js +66 -0
  107. package/components/nav-right.d.ts +50 -0
  108. package/components/nav-right.js +25 -0
  109. package/components/nav-title-large.d.ts +46 -0
  110. package/components/nav-title-large.js +25 -0
  111. package/components/nav-title.d.ts +58 -0
  112. package/components/nav-title.js +31 -0
  113. package/components/navbar.d.ts +110 -0
  114. package/components/navbar.js +248 -0
  115. package/components/page-content.d.ts +113 -0
  116. package/components/page-content.js +147 -0
  117. package/components/page.d.ts +150 -0
  118. package/components/page.js +331 -0
  119. package/components/panel.d.ts +139 -0
  120. package/components/panel.js +198 -0
  121. package/components/photo-browser.d.ts +164 -0
  122. package/components/photo-browser.js +181 -0
  123. package/components/pie-chart.d.ts +37 -0
  124. package/components/pie-chart.js +172 -0
  125. package/components/popover.d.ts +101 -0
  126. package/components/popover.js +157 -0
  127. package/components/popup.d.ts +99 -0
  128. package/components/popup.js +161 -0
  129. package/components/preloader.d.ts +50 -0
  130. package/components/preloader.js +65 -0
  131. package/components/progressbar.d.ts +54 -0
  132. package/components/progressbar.js +44 -0
  133. package/components/radio.d.ts +68 -0
  134. package/components/radio.js +59 -0
  135. package/components/range.d.ts +141 -0
  136. package/components/range.js +139 -0
  137. package/components/routable-modals.d.ts +19 -0
  138. package/components/routable-modals.js +58 -0
  139. package/components/searchbar.d.ts +182 -0
  140. package/components/searchbar.js +285 -0
  141. package/components/segmented.d.ts +87 -0
  142. package/components/segmented.js +53 -0
  143. package/components/sheet.d.ts +132 -0
  144. package/components/sheet.js +213 -0
  145. package/components/skeleton-avatar.d.ts +6 -0
  146. package/components/skeleton-avatar.js +3 -0
  147. package/components/skeleton-block.d.ts +6 -0
  148. package/components/skeleton-block.js +3 -0
  149. package/components/skeleton-image.d.ts +6 -0
  150. package/components/skeleton-image.js +3 -0
  151. package/components/skeleton-text.d.ts +6 -0
  152. package/components/skeleton-text.js +3 -0
  153. package/components/stepper.d.ts +197 -0
  154. package/components/stepper.js +230 -0
  155. package/components/subnavbar.d.ts +59 -0
  156. package/components/subnavbar.js +40 -0
  157. package/components/swipeout-actions.d.ts +58 -0
  158. package/components/swipeout-actions.js +33 -0
  159. package/components/swipeout-button.d.ts +75 -0
  160. package/components/swipeout-button.js +48 -0
  161. package/components/tab.d.ts +51 -0
  162. package/components/tab.js +128 -0
  163. package/components/tabs.d.ts +63 -0
  164. package/components/tabs.js +59 -0
  165. package/components/text-editor.d.ts +95 -0
  166. package/components/text-editor.js +147 -0
  167. package/components/toggle.d.ts +80 -0
  168. package/components/toggle.js +89 -0
  169. package/components/toolbar.d.ts +108 -0
  170. package/components/toolbar.js +135 -0
  171. package/components/treeview-item.d.ts +265 -0
  172. package/components/treeview-item.js +140 -0
  173. package/components/treeview.d.ts +46 -0
  174. package/components/treeview.js +22 -0
  175. package/components/use-icon.d.ts +19 -0
  176. package/components/use-icon.js +27 -0
  177. package/components/view.d.ts +296 -0
  178. package/components/view.js +373 -0
  179. package/components/views.d.ts +50 -0
  180. package/components/views.js +25 -0
  181. package/framework7-vue-bundle.js +190 -0
  182. package/framework7-vue.d.ts +121 -0
  183. package/framework7-vue.js +108 -0
  184. package/package.json +65 -0
  185. package/shared/components-router.js +203 -0
  186. package/shared/f7.js +71 -0
  187. package/shared/get-router-initial-component.js +35 -0
  188. package/shared/mixins.js +233 -0
  189. package/shared/modal-state-classes.js +10 -0
  190. package/shared/plugin.js +37 -0
  191. package/shared/router-open-in.js +105 -0
  192. package/shared/use-icon.js +37 -0
  193. package/shared/use-route-props.js +18 -0
  194. package/shared/use-smart-select.js +24 -0
  195. package/shared/use-store.js +24 -0
  196. package/shared/use-tab.js +24 -0
  197. package/shared/use-theme.js +11 -0
  198. package/shared/use-tooltip.js +43 -0
  199. package/shared/utils.js +110 -0
@@ -0,0 +1,331 @@
1
+ import { computed, ref, onMounted, onBeforeUnmount, h } from 'vue';
2
+ import { classNames } from '../shared/utils.js';
3
+ import { colorClasses, colorProps } from '../shared/mixins.js';
4
+ import { f7ready, f7 } from '../shared/f7.js';
5
+ import f7PageContent from './page-content.js';
6
+ export default {
7
+ name: 'f7-page',
8
+ props: {
9
+ name: String,
10
+ withSubnavbar: {
11
+ type: Boolean,
12
+ default: undefined
13
+ },
14
+ subnavbar: {
15
+ type: Boolean,
16
+ default: undefined
17
+ },
18
+ withNavbarLarge: {
19
+ type: Boolean,
20
+ default: undefined
21
+ },
22
+ navbarLarge: {
23
+ type: Boolean,
24
+ default: undefined
25
+ },
26
+ noNavbar: Boolean,
27
+ noToolbar: Boolean,
28
+ tabs: Boolean,
29
+ pageContent: {
30
+ type: Boolean,
31
+ default: true
32
+ },
33
+ noSwipeback: Boolean,
34
+ // Page Content Props
35
+ ptr: Boolean,
36
+ ptrDistance: Number,
37
+ ptrPreloader: {
38
+ type: Boolean,
39
+ default: true
40
+ },
41
+ ptrBottom: Boolean,
42
+ ptrMousewheel: Boolean,
43
+ infinite: Boolean,
44
+ infiniteTop: Boolean,
45
+ infiniteDistance: Number,
46
+ infinitePreloader: {
47
+ type: Boolean,
48
+ default: true
49
+ },
50
+ hideBarsOnScroll: Boolean,
51
+ hideNavbarOnScroll: Boolean,
52
+ hideToolbarOnScroll: Boolean,
53
+ messagesContent: Boolean,
54
+ loginScreen: Boolean,
55
+ ...colorProps
56
+ },
57
+ emits: ['page:mounted', 'page:init', 'page:reinit', 'page:beforein', 'page:beforeout', 'page:afterout', 'page:afterin', 'page:beforeremove', 'page:beforeunmount', 'page:tabshow', 'page:tabhide', 'ptr:pullstart', 'ptr:pullmove', 'ptr:pullend', 'ptr:refresh', 'ptr:done', 'infinite'],
58
+ setup(props, _ref) {
59
+ let {
60
+ emit,
61
+ slots
62
+ } = _ref;
63
+ let hasSubnavbar = false;
64
+ let hasNavbarLarge = false;
65
+ let hasNavbarLargeCollapsed = false;
66
+ let hasCardExpandableOpened = false;
67
+ let routerPositionClass = '';
68
+ let routerPageRole = null;
69
+ let routerPageRoleDetailRoot = false;
70
+ let routerPageMasterStack = false;
71
+ const elRef = ref(null);
72
+
73
+ // Main Page Events
74
+ const onPageMounted = page => {
75
+ if (elRef.value !== page.el) return;
76
+ emit('page:mounted', page);
77
+ };
78
+ const onPageInit = page => {
79
+ if (elRef.value !== page.el) return;
80
+ if (typeof props.withSubnavbar === 'undefined' && typeof props.subnavbar === 'undefined') {
81
+ if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length || page.$el.children('.navbar').find('.subnavbar').length) {
82
+ hasSubnavbar = true;
83
+ }
84
+ }
85
+ if (typeof props.withNavbarLarge === 'undefined' && typeof props.navbarLarge === 'undefined') {
86
+ if (page.$navbarEl && page.$navbarEl.hasClass('navbar-large')) {
87
+ hasNavbarLarge = true;
88
+ }
89
+ }
90
+ emit('page:init', page);
91
+ };
92
+ const onPageReinit = page => {
93
+ if (elRef.value !== page.el) return;
94
+ emit('page:reinit', page);
95
+ };
96
+ const onPageBeforeIn = page => {
97
+ if (elRef.value !== page.el) return;
98
+ if (!page.swipeBack) {
99
+ if (page.from === 'next') {
100
+ routerPositionClass = 'page-next';
101
+ }
102
+ if (page.from === 'previous') {
103
+ routerPositionClass = 'page-previous';
104
+ }
105
+ }
106
+ emit('page:beforein', page);
107
+ };
108
+ const onPageBeforeOut = page => {
109
+ if (elRef.value !== page.el) return;
110
+ emit('page:beforeout', page);
111
+ };
112
+ const onPageAfterOut = page => {
113
+ if (elRef.value !== page.el) return;
114
+ if (page.to === 'next') {
115
+ routerPositionClass = 'page-next';
116
+ }
117
+ if (page.to === 'previous') {
118
+ routerPositionClass = 'page-previous';
119
+ }
120
+ emit('page:afterout', page);
121
+ };
122
+ const onPageAfterIn = page => {
123
+ if (elRef.value !== page.el) return;
124
+ routerPositionClass = 'page-current';
125
+ emit('page:afterin', page);
126
+ };
127
+ const onPageBeforeRemove = page => {
128
+ if (elRef.value !== page.el) return;
129
+ emit('page:beforeremove', page);
130
+ };
131
+ const onPageBeforeUnmount = page => {
132
+ if (elRef.value !== page.el) return;
133
+ emit('page:beforeunmount', page);
134
+ };
135
+ const onPagePosition = (pageEl, position) => {
136
+ if (elRef.value !== pageEl) return;
137
+ routerPositionClass = `page-${position}`;
138
+ };
139
+ const onPageRole = (pageEl, rolesData) => {
140
+ if (elRef.value !== pageEl) return;
141
+ routerPageRole = rolesData.role;
142
+ routerPageRoleDetailRoot = rolesData.detailRoot;
143
+ };
144
+ const onPageMasterStack = pageEl => {
145
+ if (elRef.value !== pageEl) return;
146
+ routerPageMasterStack = true;
147
+ };
148
+ const onPageMasterUnstack = pageEl => {
149
+ if (elRef.value !== pageEl) return;
150
+ routerPageMasterStack = false;
151
+ };
152
+ const onPageNavbarLargeCollapsed = pageEl => {
153
+ if (elRef.value !== pageEl) return;
154
+ hasNavbarLargeCollapsed = true;
155
+ };
156
+ const onPageNavbarLargeExpanded = pageEl => {
157
+ if (elRef.value !== pageEl) return;
158
+ hasNavbarLargeCollapsed = false;
159
+ };
160
+ const onCardOpened = (cardEl, pageEl) => {
161
+ if (elRef.value !== pageEl) return;
162
+ hasCardExpandableOpened = true;
163
+ };
164
+ const onCardClose = (cardEl, pageEl) => {
165
+ if (elRef.value !== pageEl) return;
166
+ hasCardExpandableOpened = false;
167
+ };
168
+ const onPageTabShow = pageEl => {
169
+ if (elRef.value !== pageEl) return;
170
+ emit('page:tabshow');
171
+ };
172
+ const onPageTabHide = pageEl => {
173
+ if (elRef.value !== pageEl) return;
174
+ emit('page:tabhide');
175
+ };
176
+ const onPtrPullStart = () => {
177
+ emit('ptr:pullstart');
178
+ };
179
+ const onPtrPullMove = () => {
180
+ emit('ptr:pullmove');
181
+ };
182
+ const onPtrPullEnd = () => {
183
+ emit('ptr:pullend');
184
+ };
185
+ const onPtrRefresh = done => {
186
+ emit('ptr:refresh', done);
187
+ };
188
+ const onPtrDone = () => {
189
+ emit('ptr:done');
190
+ };
191
+ const onInfinite = () => {
192
+ emit('infinite');
193
+ };
194
+ onMounted(() => {
195
+ f7ready(() => {
196
+ f7.on('pageMounted', onPageMounted);
197
+ f7.on('pageInit', onPageInit);
198
+ f7.on('pageReinit', onPageReinit);
199
+ f7.on('pageBeforeIn', onPageBeforeIn);
200
+ f7.on('pageBeforeOut', onPageBeforeOut);
201
+ f7.on('pageAfterOut', onPageAfterOut);
202
+ f7.on('pageAfterIn', onPageAfterIn);
203
+ f7.on('pageBeforeRemove', onPageBeforeRemove);
204
+ f7.on('pageBeforeUnmount', onPageBeforeUnmount);
205
+ f7.on('pagePosition', onPagePosition);
206
+ f7.on('pageRole', onPageRole);
207
+ f7.on('pageMasterStack', onPageMasterStack);
208
+ f7.on('pageMasterUnstack', onPageMasterUnstack);
209
+ f7.on('pageNavbarLargeCollapsed', onPageNavbarLargeCollapsed);
210
+ f7.on('pageNavbarLargeExpanded', onPageNavbarLargeExpanded);
211
+ f7.on('cardOpened', onCardOpened);
212
+ f7.on('cardClose', onCardClose);
213
+ f7.on('pageTabShow', onPageTabShow);
214
+ f7.on('pageTabHide', onPageTabHide);
215
+ });
216
+ });
217
+ onBeforeUnmount(() => {
218
+ if (!f7) return;
219
+ f7.off('pageMounted', onPageMounted);
220
+ f7.off('pageInit', onPageInit);
221
+ f7.off('pageReinit', onPageReinit);
222
+ f7.off('pageBeforeIn', onPageBeforeIn);
223
+ f7.off('pageBeforeOut', onPageBeforeOut);
224
+ f7.off('pageAfterOut', onPageAfterOut);
225
+ f7.off('pageAfterIn', onPageAfterIn);
226
+ f7.off('pageBeforeRemove', onPageBeforeRemove);
227
+ f7.off('pageBeforeUnmount', onPageBeforeUnmount);
228
+ f7.off('pagePosition', onPagePosition);
229
+ f7.off('pageRole', onPageRole);
230
+ f7.off('pageMasterStack', onPageMasterStack);
231
+ f7.off('pageMasterUnstack', onPageMasterUnstack);
232
+ f7.off('pageNavbarLargeCollapsed', onPageNavbarLargeCollapsed);
233
+ f7.off('pageNavbarLargeExpanded', onPageNavbarLargeExpanded);
234
+ f7.off('cardOpened', onCardOpened);
235
+ f7.off('cardClose', onCardClose);
236
+ f7.off('pageTabShow', onPageTabShow);
237
+ f7.off('pageTabHide', onPageTabHide);
238
+ });
239
+ const classes = computed(() => classNames('page', routerPositionClass, {
240
+ tabs: props.tabs,
241
+ 'page-with-subnavbar': props.subnavbar || props.withSubnavbar,
242
+ 'page-with-navbar-large': props.navbarLarge || props.withNavbarLarge,
243
+ 'no-navbar': props.noNavbar,
244
+ 'no-toolbar': props.noToolbar,
245
+ 'no-swipeback': props.noSwipeback,
246
+ 'page-master': routerPageRole === 'master',
247
+ 'page-master-detail': routerPageRole === 'detail',
248
+ 'page-master-detail-root': routerPageRoleDetailRoot === true,
249
+ 'page-master-stacked': routerPageMasterStack === true,
250
+ 'page-with-navbar-large-collapsed': hasNavbarLargeCollapsed === true,
251
+ 'page-with-card-opened': hasCardExpandableOpened === true,
252
+ 'login-screen-page': props.loginScreen
253
+ }, colorClasses(props)));
254
+ const fixedTags = 'navbar toolbar tabbar subnavbar searchbar messagebar fab list-index panel'.split(' ').map(tagName => `f7-${tagName}`);
255
+ return () => {
256
+ const fixedList = [];
257
+ const staticList = [];
258
+ const {
259
+ static: slotsStatic,
260
+ fixed: slotsFixed,
261
+ default: slotsDefault
262
+ } = slots;
263
+ let hasSubnavbarComputed = false;
264
+ let hasNavbarLargeComputed = false;
265
+ let hasMessages = props.messagesContent;
266
+ const slotsDefaultRendered = slotsDefault && slotsDefault();
267
+ if (slotsDefaultRendered) {
268
+ slotsDefaultRendered.forEach(vnode => {
269
+ if (typeof vnode === 'undefined') return;
270
+ const tag = vnode.type && vnode.type.name ? vnode.type.name : vnode.type;
271
+ let isFixedTag = false;
272
+ if (!tag) {
273
+ if (props.pageContent || props.pageContent === '') staticList.push(vnode);
274
+ return;
275
+ }
276
+ if (tag === 'f7-subnavbar') hasSubnavbarComputed = true;
277
+ if (tag === 'f7-navbar') {
278
+ if (vnode.props && (vnode.props.large || vnode.props.large === '')) hasNavbarLargeComputed = true;
279
+ }
280
+ if (typeof hasMessages === 'undefined' && tag === 'f7-messages') hasMessages = true;
281
+ if (fixedTags.indexOf(tag) >= 0) {
282
+ isFixedTag = true;
283
+ }
284
+ if (props.pageContent) {
285
+ if (isFixedTag) fixedList.push(vnode);else staticList.push(vnode);
286
+ }
287
+ });
288
+ }
289
+ let classesValue = classes.value;
290
+ if ((hasSubnavbarComputed || hasSubnavbar) && typeof props.subnavbar === 'undefined' && typeof props.withSubnavbar === 'undefined' && classesValue.indexOf('page-with-subnavbar') < 0) {
291
+ classesValue += ' page-with-subnavbar';
292
+ }
293
+ if ((hasNavbarLargeComputed || hasNavbarLarge) && typeof props.navbarLarge === 'undefined' && typeof props.withNavbarLarge === 'undefined' && classesValue.indexOf('page-with-navbar-large') < 0) {
294
+ classesValue += ' page-with-navbar-large';
295
+ }
296
+ if (!props.pageContent) {
297
+ return h('div', {
298
+ class: classesValue,
299
+ ref: elRef,
300
+ 'data-name': props.name
301
+ }, [slotsFixed && slotsFixed(), slotsStatic && slotsStatic(), slotsDefault && slotsDefaultRendered]);
302
+ }
303
+ return h('div', {
304
+ class: classesValue,
305
+ ref: elRef,
306
+ 'data-name': props.name
307
+ }, [fixedList, slotsFixed && slotsFixed(), h(f7PageContent, {
308
+ ptr: props.ptr,
309
+ ptrDistance: props.ptrDistance,
310
+ ptrPreloader: props.ptrPreloader,
311
+ ptrBottom: props.ptrBottom,
312
+ ptrMousewheel: props.ptrMousewheel,
313
+ infinite: props.infinite,
314
+ infiniteTop: props.infiniteTop,
315
+ infiniteDistance: props.infiniteDistance,
316
+ infinitePreloader: props.infinitePreloader,
317
+ hideBarsOnScroll: props.hideBarsOnScroll,
318
+ hideNavbarOnScroll: props.hideNavbarOnScroll,
319
+ hideToolbarOnScroll: props.hideToolbarOnScroll,
320
+ messagesContent: props.messagesContent || hasMessages,
321
+ loginScreen: props.loginScreen,
322
+ onPtrPullStart,
323
+ onPtrPullMove,
324
+ onPtrPullEnd,
325
+ onPtrRefresh,
326
+ onPtrDone,
327
+ onInfinite
328
+ }, () => [slotsStatic && slotsStatic(), staticList])]);
329
+ };
330
+ }
331
+ };
@@ -0,0 +1,139 @@
1
+
2
+ import { ComponentOptionsMixin, DefineComponent, PropType } from 'vue';
3
+
4
+
5
+ declare const Panel: DefineComponent<
6
+ {
7
+
8
+ side: {
9
+ type: StringConstructor;
10
+ },
11
+
12
+ effect: {
13
+ type: StringConstructor;
14
+ },
15
+
16
+ cover: {
17
+ type: BooleanConstructor;
18
+ },
19
+
20
+ reveal: {
21
+ type: BooleanConstructor;
22
+ },
23
+
24
+ push: {
25
+ type: BooleanConstructor;
26
+ },
27
+
28
+ floating: {
29
+ type: BooleanConstructor;
30
+ },
31
+
32
+ left: {
33
+ type: BooleanConstructor;
34
+ },
35
+
36
+ right: {
37
+ type: BooleanConstructor;
38
+ },
39
+
40
+ opened: {
41
+ type: BooleanConstructor;
42
+ },
43
+
44
+ resizable: {
45
+ type: BooleanConstructor;
46
+ },
47
+
48
+ swipe: {
49
+ type: BooleanConstructor;
50
+ },
51
+
52
+ swipeNoFollow: {
53
+ type: BooleanConstructor;
54
+ },
55
+
56
+ swipeOnlyClose: {
57
+ type: BooleanConstructor;
58
+ },
59
+
60
+ backdrop: {
61
+ type: BooleanConstructor;
62
+ default: boolean;
63
+ },
64
+
65
+ backdropEl: {
66
+ type: StringConstructor;
67
+ default: undefined;
68
+ },
69
+
70
+ containerEl: {
71
+ type: StringConstructor;
72
+ default: undefined;
73
+ },
74
+
75
+ closeByBackdropClick: {
76
+ type: BooleanConstructor;
77
+ default: undefined;
78
+ },
79
+
80
+ visibleBreakpoint: {
81
+ type: NumberConstructor;
82
+ default: undefined;
83
+ },
84
+
85
+ collapsedBreakpoint: {
86
+ type: NumberConstructor;
87
+ default: undefined;
88
+ },
89
+
90
+ swipeActiveArea: {
91
+ type: NumberConstructor;
92
+ default: number;
93
+ },
94
+
95
+ swipeThreshold: {
96
+ type: NumberConstructor;
97
+ default: number;
98
+ },
99
+
100
+ color: {
101
+ type: StringConstructor;
102
+ },
103
+
104
+ colorTheme: {
105
+ type: StringConstructor;
106
+ },
107
+
108
+ textColor: {
109
+ type: StringConstructor;
110
+ },
111
+
112
+ bgColor: {
113
+ type: StringConstructor;
114
+ },
115
+
116
+ borderColor: {
117
+ type: StringConstructor;
118
+ },
119
+
120
+ rippleColor: {
121
+ type: StringConstructor;
122
+ },
123
+
124
+ dark: {
125
+ type: BooleanConstructor;
126
+ }
127
+ },
128
+ () => JSX.Element,
129
+ unknown,
130
+ {},
131
+ {},
132
+ ComponentOptionsMixin,
133
+ ComponentOptionsMixin,
134
+ ("panel:open" | "panel:opened" | "panel:close" | "panel:closed" | "click" | "panel:backdropclick" | "panel:swipe" | "panel:swipeopen" | "panel:breakpoint" | "panel:collapsedbreakpoint" | "panel:resize" | "update:opened")[],
135
+ "panel:open" | "panel:opened" | "panel:close" | "panel:closed" | "click" | "panel:backdropclick" | "panel:swipe" | "panel:swipeopen" | "panel:breakpoint" | "panel:collapsedbreakpoint" | "panel:resize" | "update:opened"
136
+ >;
137
+
138
+ export default Panel;
139
+
@@ -0,0 +1,198 @@
1
+ import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from "vue";
2
+ const _hoisted_1 = {
3
+ key: 0,
4
+ class: "panel-resize-handler"
5
+ };
6
+ function render(_ctx, _cache) {
7
+ return _openBlock(), _createElementBlock("div", {
8
+ ref: "elRef",
9
+ class: _normalizeClass(_ctx.classes)
10
+ }, [_renderSlot(_ctx.$slots, "default"), _ctx.resizable ? (_openBlock(), _createElementBlock("div", _hoisted_1)) : _createCommentVNode("", true)], 2);
11
+ }
12
+ import { computed, ref, watch, onMounted, onBeforeUnmount } from 'vue';
13
+ import { classNames, noUndefinedProps } from '../shared/utils.js';
14
+ import { colorClasses, colorProps } from '../shared/mixins.js';
15
+ import { f7ready, f7 } from '../shared/f7.js';
16
+ export default {
17
+ name: 'f7-panel',
18
+ render,
19
+ props: {
20
+ side: String,
21
+ effect: String,
22
+ cover: Boolean,
23
+ reveal: Boolean,
24
+ push: Boolean,
25
+ floating: Boolean,
26
+ left: Boolean,
27
+ right: Boolean,
28
+ opened: Boolean,
29
+ resizable: Boolean,
30
+ backdrop: {
31
+ type: Boolean,
32
+ default: true
33
+ },
34
+ backdropEl: {
35
+ type: String,
36
+ default: undefined
37
+ },
38
+ containerEl: {
39
+ type: String,
40
+ default: undefined
41
+ },
42
+ closeByBackdropClick: {
43
+ type: Boolean,
44
+ default: undefined
45
+ },
46
+ visibleBreakpoint: {
47
+ type: Number,
48
+ default: undefined
49
+ },
50
+ collapsedBreakpoint: {
51
+ type: Number,
52
+ default: undefined
53
+ },
54
+ swipe: Boolean,
55
+ swipeNoFollow: Boolean,
56
+ swipeOnlyClose: Boolean,
57
+ swipeActiveArea: {
58
+ type: Number,
59
+ default: 0
60
+ },
61
+ swipeThreshold: {
62
+ type: Number,
63
+ default: 0
64
+ },
65
+ ...colorProps
66
+ },
67
+ emits: ['panel:open', 'panel:opened', 'panel:close', 'panel:closed', 'click', 'panel:backdropclick', 'panel:swipe', 'panel:swipeopen', 'panel:breakpoint', 'panel:collapsedbreakpoint', 'panel:resize', 'update:opened'],
68
+ setup(props, _ref) {
69
+ let {
70
+ emit
71
+ } = _ref;
72
+ let f7Panel = null;
73
+ const elRef = ref(null);
74
+ let isOpened = false;
75
+ let isClosing = false;
76
+ let isCollapsed = false;
77
+ let isBreakpoint = false;
78
+ const onOpen = event => {
79
+ isOpened = true;
80
+ isClosing = false;
81
+ emit('panel:open', event);
82
+ emit('update:opened', true);
83
+ };
84
+ const onOpened = event => {
85
+ emit('panel:opened', event);
86
+ };
87
+ const onClose = event => {
88
+ isOpened = false;
89
+ isClosing = true;
90
+ emit('panel:close', event);
91
+ };
92
+ const onClosed = event => {
93
+ isClosing = false;
94
+ emit('panel:closed', event);
95
+ emit('update:opened', false);
96
+ };
97
+ const onBackdropClick = event => {
98
+ emit('click', event);
99
+ emit('panel:backdropclick', event);
100
+ };
101
+ const onSwipe = event => {
102
+ emit('panel:swipe', event);
103
+ };
104
+ const onSwipeOpen = event => {
105
+ emit('panel:swipeopen', event);
106
+ };
107
+ const onBreakpoint = event => {
108
+ isBreakpoint = true;
109
+ isCollapsed = false;
110
+ emit('panel:breakpoint', event);
111
+ };
112
+ const onCollapsedBreakpoint = event => {
113
+ isBreakpoint = false;
114
+ isCollapsed = true;
115
+ emit('panel:collapsedbreakpoint', event);
116
+ };
117
+ const onResize = function () {
118
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
119
+ args[_key] = arguments[_key];
120
+ }
121
+ emit('panel:resize', ...args);
122
+ };
123
+ watch(() => props.resizable, newValue => {
124
+ if (!f7Panel) return;
125
+ if (newValue) f7Panel.enableResizable();else f7Panel.disableResizable();
126
+ });
127
+ watch(() => props.opened, newValue => {
128
+ if (!f7Panel) return;
129
+ if (newValue) {
130
+ f7Panel.open();
131
+ } else {
132
+ f7Panel.close();
133
+ }
134
+ });
135
+ onMounted(() => {
136
+ f7ready(() => {
137
+ const $ = f7.$;
138
+ if (!$) return;
139
+ if ($('.panel-backdrop').length === 0) {
140
+ $('<div class="panel-backdrop"></div>').insertBefore(elRef.value);
141
+ }
142
+ const params = noUndefinedProps({
143
+ el: elRef.value,
144
+ resizable: props.resizable,
145
+ backdrop: props.backdrop,
146
+ backdropEl: props.backdropEl,
147
+ containerEl: props.containerEl,
148
+ closeByBackdropClick: props.containerEl,
149
+ visibleBreakpoint: props.visibleBreakpoint,
150
+ collapsedBreakpoint: props.collapsedBreakpoint,
151
+ swipe: props.swipe,
152
+ swipeNoFollow: props.swipeNoFollow,
153
+ swipeOnlyClose: props.swipeOnlyClose,
154
+ swipeActiveArea: props.swipeActiveArea,
155
+ swipeThreshold: props.swipeThreshold,
156
+ on: {
157
+ open: onOpen,
158
+ opened: onOpened,
159
+ close: onClose,
160
+ closed: onClosed,
161
+ backdropClick: onBackdropClick,
162
+ swipe: onSwipe,
163
+ swipeOpen: onSwipeOpen,
164
+ collapsedBreakpoint: onCollapsedBreakpoint,
165
+ breakpoint: onBreakpoint,
166
+ resize: onResize
167
+ }
168
+ });
169
+ f7Panel = f7.panel.create(params);
170
+ if (props.opened) {
171
+ f7Panel.open(false);
172
+ }
173
+ });
174
+ });
175
+ onBeforeUnmount(() => {
176
+ if (f7Panel && f7Panel.destroy) {
177
+ f7Panel.destroy();
178
+ }
179
+ f7Panel = null;
180
+ });
181
+ const classes = computed(() => {
182
+ const sideComputed = props.side || (props.left ? 'left' : 'right');
183
+ const effectComputed = props.effect || (props.reveal ? 'reveal' : props.push ? 'push' : props.floating ? 'floating' : 'cover'); // eslint-disable-line
184
+ return classNames('panel', {
185
+ 'panel-in': isOpened && !isClosing && !isBreakpoint,
186
+ 'panel-in-breakpoint': isBreakpoint,
187
+ 'panel-in-collapsed': isCollapsed,
188
+ 'panel-resizable': props.resizable,
189
+ [`panel-${sideComputed}`]: sideComputed,
190
+ [`panel-${effectComputed}`]: effectComputed
191
+ }, colorClasses(props));
192
+ });
193
+ return {
194
+ elRef,
195
+ classes
196
+ };
197
+ }
198
+ };