@myissue/vue-website-page-builder 3.0.17 → 3.0.19
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/README.md +79 -76
- package/dist/page-builder/2-images-text.png +0 -0
- package/dist/page-builder/3-images-text.png +0 -0
- package/dist/page-builder/3-vertical-images.png +0 -0
- package/dist/page-builder/4-images-text.png +0 -0
- package/dist/vue-website-page-builder.css +1 -1
- package/dist/vue-website-page-builder.js +7168 -7261
- package/dist/vue-website-page-builder.umd.cjs +146 -81
- package/package.json +5 -4
- package/src/App.vue +4 -115
- package/src/Components/Homepage/HomeSection.vue +70 -162
- package/src/Components/MediaLibrary/SidebarUnsplash.vue +9 -16
- package/src/Components/MediaLibrary/Unsplash.vue +51 -91
- package/src/Components/Modals/MediaLibraryModal.vue +56 -318
- package/src/Components/Modals/PageBuilderPreviewModal.vue +22 -40
- package/src/Components/PageBuilder/AdvancedPageBuilderSettings.vue +7 -0
- package/src/Components/PageBuilder/DropdownsPlusToggles/OptionsDropdown.vue +165 -110
- package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +9 -16
- package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +18 -18
- package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +16 -21
- package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +12 -12
- package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +10 -9
- package/src/Components/PageBuilder/EditorMenu/Editables/DeleteElement.vue +9 -9
- package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +144 -136
- package/src/Components/PageBuilder/EditorMenu/Editables/ElementEditor.vue +9 -10
- package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +31 -27
- package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +20 -14
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +9 -10
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +9 -10
- package/src/Components/PageBuilder/EditorMenu/Editables/PaddingPlusMargin.vue +16 -16
- package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +9 -16
- package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +22 -20
- package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +25 -27
- package/src/Components/PageBuilder/NoneCustomMediaLibraryComponent.vue +3 -0
- package/src/Components/PageBuilder/NoneCustomSearchComponent.vue +91 -0
- package/src/Components/PageBuilder/PageBuilderSettings.vue +8 -0
- package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +31 -72
- package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +32 -36
- package/src/Components/Search/SearchComponents.vue +11 -199
- package/src/Components/TipTap/TipTap.vue +8 -7
- package/src/Components/TipTap/TipTapInput.vue +136 -134
- package/src/PageBuilder/PageBuilder.vue +220 -32
- package/src/composables/{PageBuilder.ts → PageBuilderClass.ts} +223 -142
- package/src/composables/usePageBuilderModal.ts +25 -0
- package/src/index.ts +8 -2
- package/src/stores/media-library.ts +1 -5
- package/src/stores/page-builder-state.ts +52 -36
- package/src/stores/user.ts +8 -6
- package/src/types/global.d.ts +6 -44
- package/src/types/index.ts +169 -0
- package/src/utils/html-elements/component.ts +88 -0
- package/src/utils/html-elements/componentHelpers.ts +101 -0
- package/src/Components/Modals/PageBuilderModal.vue +0 -233
- package/src/utils/builder/html-elements/componentHelpers.ts +0 -101
|
@@ -1,44 +1,13 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { computed, onMounted, ref, watch } from 'vue';
|
|
3
2
|
import {
|
|
4
3
|
Dialog,
|
|
5
4
|
DialogOverlay,
|
|
6
5
|
DialogTitle,
|
|
7
6
|
TransitionChild,
|
|
8
7
|
TransitionRoot,
|
|
9
|
-
} from '@headlessui/vue'
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
// new version
|
|
13
|
-
import DynamicModal from '@/Components/Modals/DynamicModal.vue';
|
|
14
|
-
import SidebarUnsplash from '@/Components/MediaLibrary/SidebarUnsplash.vue';
|
|
15
|
-
import Unsplash from '@/Components/MediaLibrary/Unsplash.vue';
|
|
16
|
-
import SmallUniversalSpinner from '@/Components/Loaders/SmallUniversalSpinner.vue';
|
|
17
|
-
|
|
18
|
-
import { useMediaLibraryStore } from '@/stores/media-library';
|
|
19
|
-
|
|
20
|
-
const mediaLibraryStore = useMediaLibraryStore();
|
|
21
|
-
|
|
22
|
-
const getCurrentImage = computed(() => {
|
|
23
|
-
return mediaLibraryStore.getCurrentImage;
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const selected = ref('Unsplash');
|
|
27
|
-
|
|
28
|
-
const tabs = ref([
|
|
29
|
-
{
|
|
30
|
-
name: 'Upload',
|
|
31
|
-
current: false,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: 'Media library',
|
|
35
|
-
current: false,
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
name: 'Unsplash',
|
|
39
|
-
current: true,
|
|
40
|
-
},
|
|
41
|
-
]);
|
|
8
|
+
} from '@headlessui/vue'
|
|
9
|
+
import { provide } from 'vue'
|
|
10
|
+
import NoneCustomMediaLibraryComponent from '@/Components/PageBuilder/NoneCustomMediaLibraryComponent.vue'
|
|
42
11
|
|
|
43
12
|
const props = defineProps({
|
|
44
13
|
title: {
|
|
@@ -60,46 +29,44 @@ const props = defineProps({
|
|
|
60
29
|
open: {
|
|
61
30
|
required: true,
|
|
62
31
|
},
|
|
63
|
-
|
|
32
|
+
customMediaComponent: {
|
|
33
|
+
type: Object,
|
|
34
|
+
default: null,
|
|
35
|
+
},
|
|
36
|
+
})
|
|
64
37
|
|
|
65
38
|
const emit = defineEmits([
|
|
66
39
|
'firstMediaButtonFunction',
|
|
67
40
|
'secondMediaButtonFunction',
|
|
68
41
|
'thirdMediaButtonFunction',
|
|
69
|
-
])
|
|
42
|
+
])
|
|
70
43
|
|
|
71
44
|
// first button function
|
|
72
45
|
const firstButton = function () {
|
|
73
|
-
emit('firstMediaButtonFunction')
|
|
74
|
-
}
|
|
46
|
+
emit('firstMediaButtonFunction')
|
|
47
|
+
}
|
|
75
48
|
|
|
76
49
|
// second button function
|
|
77
50
|
const secondButton = function () {
|
|
78
|
-
emit('secondMediaButtonFunction')
|
|
79
|
-
}
|
|
51
|
+
emit('secondMediaButtonFunction')
|
|
52
|
+
}
|
|
80
53
|
|
|
81
54
|
// third button function
|
|
82
55
|
const thirdButton = function () {
|
|
83
|
-
emit('thirdMediaButtonFunction')
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
//
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
}
|
|
56
|
+
emit('thirdMediaButtonFunction')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Provide close function for custom components
|
|
60
|
+
const closeMediaLibraryModal = () => {
|
|
61
|
+
firstButton() // This triggers the close by emitting to parent
|
|
62
|
+
}
|
|
63
|
+
provide('closeMediaLibraryModal', closeMediaLibraryModal)
|
|
90
64
|
</script>
|
|
91
65
|
|
|
92
66
|
<template>
|
|
93
67
|
<teleport to="body">
|
|
94
|
-
<TransitionRoot
|
|
95
|
-
:
|
|
96
|
-
as="template"
|
|
97
|
-
>
|
|
98
|
-
<Dialog
|
|
99
|
-
as="div"
|
|
100
|
-
class="fixed z-30 inset-0 overflow-y-auto sm:px-4"
|
|
101
|
-
@close="firstButton"
|
|
102
|
-
>
|
|
68
|
+
<TransitionRoot :show="open" as="template">
|
|
69
|
+
<Dialog as="div" class="fixed z-30 inset-0 overflow-y-auto sm:px-4" @close="firstButton">
|
|
103
70
|
<div class="flex items-end justify-center text-center sm:block sm:p-0">
|
|
104
71
|
<TransitionChild
|
|
105
72
|
as="template"
|
|
@@ -110,15 +77,11 @@ const changeSelectedMenuTab = function (clicked) {
|
|
|
110
77
|
leave-from="opacity-100"
|
|
111
78
|
leave-to="opacity-0"
|
|
112
79
|
>
|
|
113
|
-
<DialogOverlay
|
|
114
|
-
class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"
|
|
115
|
-
/>
|
|
80
|
+
<DialogOverlay class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" />
|
|
116
81
|
</TransitionChild>
|
|
117
82
|
|
|
118
83
|
<!-- This element is to trick the browser into centering the modal contents. -->
|
|
119
|
-
<span
|
|
120
|
-
aria-hidden="true"
|
|
121
|
-
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
|
84
|
+
<span aria-hidden="true" class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
|
122
85
|
>​</span
|
|
123
86
|
>
|
|
124
87
|
<TransitionChild
|
|
@@ -136,10 +99,7 @@ const changeSelectedMenuTab = function (clicked) {
|
|
|
136
99
|
<div
|
|
137
100
|
class="flex gap-2 justify-between items-center border-b border-gray-200 p-4 mb-2"
|
|
138
101
|
>
|
|
139
|
-
<DialogTitle
|
|
140
|
-
as="h3"
|
|
141
|
-
class="tertiaryHeader my-0 py-0"
|
|
142
|
-
>
|
|
102
|
+
<DialogTitle as="h3" class="tertiaryHeader my-0 py-0">
|
|
143
103
|
{{ title }}
|
|
144
104
|
</DialogTitle>
|
|
145
105
|
|
|
@@ -155,260 +115,38 @@ const changeSelectedMenuTab = function (clicked) {
|
|
|
155
115
|
</div>
|
|
156
116
|
</div>
|
|
157
117
|
|
|
158
|
-
<div class="
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
<div class="pb-4 max-w-7xl mx-auto w-full">
|
|
167
|
-
<!-- Tabs -->
|
|
168
|
-
<div class="mb-4">
|
|
169
|
-
<!-- Tabs Mobile -->
|
|
170
|
-
<div class="sm:hidden">
|
|
171
|
-
<label
|
|
172
|
-
for="tabs"
|
|
173
|
-
class="sr-only"
|
|
174
|
-
>Select a tab</label
|
|
175
|
-
>
|
|
176
|
-
<!-- Use an "onChange" listener to redirect the user to the selected tab URL. -->
|
|
177
|
-
|
|
178
|
-
<select
|
|
179
|
-
v-model="selected"
|
|
180
|
-
id="tabs"
|
|
181
|
-
class="block w-full pl-3 pr-10 py-2 text-base border-gray-300 focus:outline-none focus:ring-myPrimaryLinkColor focus:border-myPrimaryLinkColor sm:text-sm rounded-md"
|
|
182
|
-
>
|
|
183
|
-
<option>Upload</option>
|
|
184
|
-
<option>Media library</option>
|
|
185
|
-
<option>Unsplash</option>
|
|
186
|
-
</select>
|
|
187
|
-
</div>
|
|
188
|
-
<div class="hidden sm:block">
|
|
189
|
-
<div
|
|
190
|
-
class="flex myPrimaryGap items-center overflow-x-auto bg-myPrimaryLightGrayColor px-2 pt-3 pb-2 rounded-full"
|
|
191
|
-
>
|
|
192
|
-
<nav
|
|
193
|
-
class="flex-1 -mb-px flex space-x-2 xl:space-x-4"
|
|
194
|
-
aria-label="Tabs"
|
|
195
|
-
>
|
|
196
|
-
<button
|
|
197
|
-
@click="changeSelectedMenuTab(tab.name)"
|
|
198
|
-
v-for="tab in tabs"
|
|
199
|
-
:key="tab.name"
|
|
200
|
-
:aria-current="tab.current ? 'page' : undefined"
|
|
201
|
-
class="py-2 px-3 my-1 text-xs cursor-pointer font-medium"
|
|
202
|
-
:class="[
|
|
203
|
-
tab.name === selected
|
|
204
|
-
? 'myPrimaryButton'
|
|
205
|
-
: 'mySecondaryButton',
|
|
206
|
-
'whitespace-nowrap',
|
|
207
|
-
]"
|
|
208
|
-
>
|
|
209
|
-
<span
|
|
210
|
-
v-if="tab.name === 'Upload'"
|
|
211
|
-
class="material-symbols-outlined"
|
|
212
|
-
>
|
|
213
|
-
cloud_upload
|
|
214
|
-
</span>
|
|
215
|
-
<span
|
|
216
|
-
v-if="tab.name === 'Media library'"
|
|
217
|
-
class="myMediumIcon material-symbols-outlined"
|
|
218
|
-
>
|
|
219
|
-
perm_media
|
|
220
|
-
</span>
|
|
221
|
-
<span
|
|
222
|
-
v-if="tab.name === 'Unsplash'"
|
|
223
|
-
class="myMediumIcon material-symbols-outlined"
|
|
224
|
-
>
|
|
225
|
-
filter_hdr
|
|
226
|
-
</span>
|
|
227
|
-
<span>
|
|
228
|
-
{{ tab.name }}
|
|
229
|
-
</span>
|
|
230
|
-
</button>
|
|
231
|
-
</nav>
|
|
232
|
-
</div>
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
235
|
-
|
|
236
|
-
<template v-if="selected === 'Upload'">
|
|
237
|
-
<!-- image upload - start -->
|
|
238
|
-
<div class="w-full">
|
|
239
|
-
<div
|
|
240
|
-
class="overflow-y-scroll pr-1 border border-gray-200 rounded-lg md:min-h-[25rem] md:max-h-[25em] min-h-[20rem] max-h-[20rem]"
|
|
241
|
-
>
|
|
242
|
-
<div class="myInputGroup p-4 mt-4">
|
|
243
|
-
<div class="col-span-3 mb-4">
|
|
244
|
-
<div
|
|
245
|
-
class="relativeflex flex-col items-center justify-center"
|
|
246
|
-
>
|
|
247
|
-
<label
|
|
248
|
-
class="myPrimaryInputLabel myPrimaryParagraph text-center w-full inset-0 block text-base cursor-pointer"
|
|
249
|
-
for="images"
|
|
250
|
-
>
|
|
251
|
-
<header>
|
|
252
|
-
<div
|
|
253
|
-
class="p-2 rounded-full border-2 border-dashed border-myPrimaryLinkColor hover:border-2 hover:border-opacity-50 hover:border-dashed hover:border-myPrimaryLinkColor"
|
|
254
|
-
>
|
|
255
|
-
<div
|
|
256
|
-
class="myPrimaryParagraph rounded-full bg-myPrimaryLightGrayColor text-center w-full inset-0 text-base pt-6 pb-6 px-2 flex items-center justify-center p-2"
|
|
257
|
-
>
|
|
258
|
-
<div
|
|
259
|
-
class="myPrimaryButton hover:shadow gap-3"
|
|
260
|
-
>
|
|
261
|
-
<span
|
|
262
|
-
class="material-symbols-outlined"
|
|
263
|
-
>
|
|
264
|
-
cloud_upload </span
|
|
265
|
-
><span> PNG, JPG, up to 2MB </span>
|
|
266
|
-
</div>
|
|
267
|
-
</div>
|
|
268
|
-
</div>
|
|
269
|
-
</header></label
|
|
270
|
-
><input
|
|
271
|
-
id="images"
|
|
272
|
-
type="file"
|
|
273
|
-
multiple=""
|
|
274
|
-
class="sr-only"
|
|
275
|
-
/>
|
|
276
|
-
</div>
|
|
277
|
-
</div>
|
|
278
|
-
<div
|
|
279
|
-
class="min-h-[1.5rem] flex items-center justify-start"
|
|
280
|
-
>
|
|
281
|
-
<p
|
|
282
|
-
class="myPrimaryInputError mt-2 mb-0 py-0 self-start"
|
|
283
|
-
></p>
|
|
284
|
-
</div>
|
|
285
|
-
</div>
|
|
286
|
-
</div>
|
|
287
|
-
</div>
|
|
288
|
-
<!-- image upload - end -->
|
|
289
|
-
</template>
|
|
290
|
-
<template v-if="selected === 'Media library'">
|
|
291
|
-
<!-- image gallary - start -->
|
|
292
|
-
<div class="w-full">
|
|
293
|
-
<div
|
|
294
|
-
class="overflow-y-scroll pr-1 border border-gray-200 rounded-lg md:min-h-[25rem] md:max-h-[25em] min-h-[20rem] max-h-[20rem]"
|
|
295
|
-
>
|
|
296
|
-
<div class="myInputGroup p-4 mt-4">
|
|
297
|
-
<div class="col-span-3 mb-4">
|
|
298
|
-
<p class="myPrimaryParagraph my-0 py-0">
|
|
299
|
-
Media Library
|
|
300
|
-
</p>
|
|
301
|
-
</div>
|
|
302
|
-
</div>
|
|
303
|
-
</div>
|
|
304
|
-
</div>
|
|
305
|
-
<!-- image gallary - end -->
|
|
306
|
-
</template>
|
|
307
|
-
<template v-if="selected === 'Unsplash'">
|
|
308
|
-
<!-- image gallary - start -->
|
|
309
|
-
<div
|
|
310
|
-
class="w-full border border-gray-200 rounded-lg py-4 px-2"
|
|
311
|
-
>
|
|
312
|
-
<Unsplash></Unsplash>
|
|
313
|
-
</div>
|
|
314
|
-
<!-- image gallary - end -->
|
|
315
|
-
</template>
|
|
316
|
-
</div>
|
|
317
|
-
|
|
318
|
-
<!-- Main content - end-->
|
|
319
|
-
|
|
320
|
-
<!-- Details sidebar - upload start-->
|
|
321
|
-
<aside
|
|
322
|
-
v-if="selected === 'Upload'"
|
|
323
|
-
aria-label="sidebar"
|
|
324
|
-
class="md:w-72"
|
|
325
|
-
>
|
|
326
|
-
<div
|
|
327
|
-
class="pt-4 px-2 rounded-lg md:w-72 md:min-h-[42.5rem] md:max-h-[42.5rem] min-h-[15rem] max-h-[15rem] overflow-y-scroll bg-white border border-gray-200"
|
|
328
|
-
>
|
|
329
|
-
No image has been selected.
|
|
330
|
-
</div>
|
|
331
|
-
</aside>
|
|
332
|
-
<!-- Details sidebar - media library start-->
|
|
333
|
-
<aside
|
|
334
|
-
v-if="selected === 'Media library'"
|
|
335
|
-
aria-label="sidebar"
|
|
336
|
-
class="md:w-72"
|
|
337
|
-
>
|
|
338
|
-
<div
|
|
339
|
-
class="pt-4 px-2 rounded-lg md:w-72 md:min-h-[42.5rem] md:max-h-[42.5rem] min-h-[15rem] max-h-[15rem] overflow-y-scroll bg-white border border-gray-200"
|
|
340
|
-
>
|
|
341
|
-
No image has been selected.
|
|
342
|
-
</div>
|
|
343
|
-
</aside>
|
|
344
|
-
<!-- Details sidebar - media library end-->
|
|
345
|
-
<!-- Details sidebar - unsplash start-->
|
|
346
|
-
<aside
|
|
347
|
-
v-if="selected === 'Unsplash'"
|
|
348
|
-
aria-label="sidebar"
|
|
349
|
-
class="md:w-72"
|
|
350
|
-
>
|
|
351
|
-
<div
|
|
352
|
-
class="pt-4 px-2 rounded-lg md:w-72 md:min-h-[42.5rem] md:max-h-[42.5rem] min-h-[15rem] max-h-[15rem] overflow-y-scroll bg-white border border-gray-200"
|
|
353
|
-
>
|
|
354
|
-
<SidebarUnsplash></SidebarUnsplash>
|
|
355
|
-
</div>
|
|
356
|
-
</aside>
|
|
357
|
-
<!-- Details sidebar - unsplash end-->
|
|
358
|
-
|
|
359
|
-
<!-- Details sidebar end-->
|
|
360
|
-
</div>
|
|
361
|
-
<!--content media library - end-->
|
|
362
|
-
|
|
363
|
-
<!-- Actions # start -->
|
|
364
|
-
<template v-if="selected === 'Unsplash'">
|
|
365
|
-
<div
|
|
366
|
-
v-if="getCurrentImage && getCurrentImage.file"
|
|
367
|
-
class="bg-slate-50 px-2 py-4 flex sm:justify-end justify-center"
|
|
368
|
-
>
|
|
369
|
-
<div
|
|
370
|
-
class="sm:grid-cols-3 sm:items-end justify-end flex sm:flex-row myPrimaryGap sm:w-5/6 w-full"
|
|
371
|
-
>
|
|
372
|
-
<div v-if="firstButtonText">
|
|
373
|
-
<button
|
|
374
|
-
ref="firstButtonRef"
|
|
375
|
-
class="mySecondaryButton"
|
|
376
|
-
type="button"
|
|
377
|
-
@click="firstButton"
|
|
378
|
-
>
|
|
379
|
-
{{ firstButtonText }}
|
|
380
|
-
</button>
|
|
381
|
-
</div>
|
|
382
|
-
|
|
383
|
-
<div v-if="secondButtonText">
|
|
384
|
-
<button
|
|
385
|
-
class="myPrimaryButton"
|
|
386
|
-
type="button"
|
|
387
|
-
@click="secondButton"
|
|
388
|
-
>
|
|
389
|
-
{{ secondButtonText }}
|
|
390
|
-
</button>
|
|
391
|
-
</div>
|
|
392
|
-
|
|
393
|
-
<div
|
|
394
|
-
v-if="thirdButtonText"
|
|
395
|
-
class="w-full"
|
|
396
|
-
>
|
|
397
|
-
<button
|
|
398
|
-
class="myPrimaryDeleteButton"
|
|
399
|
-
type="button"
|
|
400
|
-
@click="thirdButton"
|
|
401
|
-
>
|
|
402
|
-
{{ thirdButtonText }}
|
|
403
|
-
</button>
|
|
404
|
-
</div>
|
|
405
|
-
</div>
|
|
406
|
-
</div>
|
|
407
|
-
<!-- Actions # end -->
|
|
408
|
-
</template>
|
|
409
|
-
<!-- Actions # end -->
|
|
118
|
+
<div class="p-4">
|
|
119
|
+
<!-- Show only custom media component if provided -->
|
|
120
|
+
<div v-if="customMediaComponent" class="w-full">
|
|
121
|
+
<component :is="customMediaComponent" />
|
|
122
|
+
</div>
|
|
123
|
+
<div v-else>
|
|
124
|
+
<NoneCustomMediaLibraryComponent />
|
|
410
125
|
</div>
|
|
411
126
|
</div>
|
|
127
|
+
|
|
128
|
+
<!-- Actions footer to ensure focusable elements -->
|
|
129
|
+
<div
|
|
130
|
+
v-if="firstButtonText || secondButtonText"
|
|
131
|
+
class="bg-slate-50 px-4 py-3 flex justify-end gap-2"
|
|
132
|
+
>
|
|
133
|
+
<button
|
|
134
|
+
v-if="firstButtonText"
|
|
135
|
+
@click="firstButton"
|
|
136
|
+
class="mySecondaryButton focus:ring-2 focus:ring-blue-500"
|
|
137
|
+
type="button"
|
|
138
|
+
>
|
|
139
|
+
{{ firstButtonText }}
|
|
140
|
+
</button>
|
|
141
|
+
<button
|
|
142
|
+
v-if="secondButtonText"
|
|
143
|
+
@click="secondButton"
|
|
144
|
+
class="myPrimaryButton focus:ring-2 focus:ring-blue-500"
|
|
145
|
+
type="button"
|
|
146
|
+
>
|
|
147
|
+
{{ secondButtonText }}
|
|
148
|
+
</button>
|
|
149
|
+
</div>
|
|
412
150
|
</div>
|
|
413
151
|
</TransitionChild>
|
|
414
152
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import
|
|
3
|
-
import { delay } from '@/composables/delay'
|
|
2
|
+
import { computed, inject } from 'vue'
|
|
3
|
+
import { delay } from '@/composables/delay'
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
Dialog,
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
DialogTitle,
|
|
9
9
|
TransitionChild,
|
|
10
10
|
TransitionRoot,
|
|
11
|
-
} from '@headlessui/vue'
|
|
12
|
-
import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/vue'
|
|
13
|
-
import { useUserStore } from '@/stores/user';
|
|
11
|
+
} from '@headlessui/vue'
|
|
12
|
+
import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/vue'
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
// Get stores from parent PageBuilder component
|
|
15
|
+
const userStore = inject('userStore')
|
|
16
16
|
|
|
17
17
|
defineProps({
|
|
18
18
|
show: {
|
|
@@ -20,30 +20,27 @@ defineProps({
|
|
|
20
20
|
default: false,
|
|
21
21
|
required: true,
|
|
22
22
|
},
|
|
23
|
-
})
|
|
23
|
+
})
|
|
24
24
|
|
|
25
|
-
const emit = defineEmits(['firstPageBuilderPreviewModalButton'])
|
|
25
|
+
const emit = defineEmits(['firstPageBuilderPreviewModalButton'])
|
|
26
26
|
|
|
27
27
|
// first button function
|
|
28
28
|
const firstButton = async function () {
|
|
29
|
-
emit('firstPageBuilderPreviewModalButton')
|
|
29
|
+
emit('firstPageBuilderPreviewModalButton')
|
|
30
30
|
|
|
31
|
-
userStore.setIsLoading(true)
|
|
32
|
-
await delay()
|
|
33
|
-
userStore.setIsLoading(false)
|
|
34
|
-
}
|
|
31
|
+
userStore.setIsLoading(true)
|
|
32
|
+
await delay()
|
|
33
|
+
userStore.setIsLoading(false)
|
|
34
|
+
}
|
|
35
35
|
|
|
36
36
|
const handleEscapeKey = function () {
|
|
37
|
-
firstButton()
|
|
38
|
-
}
|
|
37
|
+
firstButton()
|
|
38
|
+
}
|
|
39
39
|
</script>
|
|
40
40
|
|
|
41
41
|
<template>
|
|
42
42
|
<teleport to="body">
|
|
43
|
-
<TransitionRoot
|
|
44
|
-
:show="show"
|
|
45
|
-
as="template"
|
|
46
|
-
>
|
|
43
|
+
<TransitionRoot :show="show" as="template">
|
|
47
44
|
<Dialog
|
|
48
45
|
@close="firstButton"
|
|
49
46
|
@keydown.escape.prevent="handleEscapeKey"
|
|
@@ -51,9 +48,7 @@ const handleEscapeKey = function () {
|
|
|
51
48
|
class="fixed z-30 inset-0 overflow-y-auto focus:outline-none"
|
|
52
49
|
tabindex="0"
|
|
53
50
|
>
|
|
54
|
-
<div
|
|
55
|
-
class="flex items-end justify-center pb-20 text-center sm:block sm:p-0 bg-white"
|
|
56
|
-
>
|
|
51
|
+
<div class="flex items-end justify-center pb-20 text-center sm:block sm:p-0 bg-white">
|
|
57
52
|
<TransitionChild
|
|
58
53
|
as="template"
|
|
59
54
|
enter="ease-out duration-100"
|
|
@@ -63,15 +58,11 @@ const handleEscapeKey = function () {
|
|
|
63
58
|
leave-from="opacity-100"
|
|
64
59
|
leave-to="opacity-100"
|
|
65
60
|
>
|
|
66
|
-
<DialogOverlay
|
|
67
|
-
class="fixed inset-0 bg-opacity-75 transition-opacity"
|
|
68
|
-
/>
|
|
61
|
+
<DialogOverlay class="fixed inset-0 bg-opacity-75 transition-opacity" />
|
|
69
62
|
</TransitionChild>
|
|
70
63
|
|
|
71
64
|
<!-- This element is to trick the browser into centering the modal contents. -->
|
|
72
|
-
<span
|
|
73
|
-
aria-hidden="true"
|
|
74
|
-
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
|
65
|
+
<span aria-hidden="true" class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
|
75
66
|
>​</span
|
|
76
67
|
>
|
|
77
68
|
<TransitionChild
|
|
@@ -89,23 +80,14 @@ const handleEscapeKey = function () {
|
|
|
89
80
|
<div
|
|
90
81
|
class="px-4 px-4 lg:h-[10vh] h-[16vh] flex items-center justify-between border-b border-gray-200 bg-white"
|
|
91
82
|
>
|
|
92
|
-
<button
|
|
93
|
-
|
|
94
|
-
@click="firstButton"
|
|
95
|
-
>
|
|
96
|
-
<img
|
|
97
|
-
class="h-6"
|
|
98
|
-
src="/logo/logo.svg"
|
|
99
|
-
alt="Logo"
|
|
100
|
-
/>
|
|
83
|
+
<button type="button" @click="firstButton">
|
|
84
|
+
<img class="h-6" src="/logo/logo.svg" alt="Logo" />
|
|
101
85
|
</button>
|
|
102
86
|
<div
|
|
103
87
|
@click="firstButton"
|
|
104
88
|
class="flex items-center justify-center gap-1 cursor-pointer"
|
|
105
89
|
>
|
|
106
|
-
<span class="myPrimaryParagraph font-medium">
|
|
107
|
-
Close Preview
|
|
108
|
-
</span>
|
|
90
|
+
<span class="myPrimaryParagraph font-medium"> Close Preview </span>
|
|
109
91
|
<div
|
|
110
92
|
class="h-10 w-10 cursor-pointer rounded-full flex items-center border-none justify-center bg-gray-50 aspect-square hover:bg-myPrimaryLinkColor hover:text-white focus-visible:ring-0"
|
|
111
93
|
>
|