@myissue/vue-website-page-builder 3.0.18 → 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 +4 -3
- 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
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
interface ComponentHelper {
|
|
2
|
+
html_code: string
|
|
3
|
+
id: string | null
|
|
4
|
+
title: string
|
|
5
|
+
icon: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const componentHelpers: ComponentHelper[] = [
|
|
9
|
+
{
|
|
10
|
+
html_code: `
|
|
11
|
+
<section>
|
|
12
|
+
<div class="relative py-4">
|
|
13
|
+
<div class="mx-auto max-w-7xl lg:px-4 px-2">
|
|
14
|
+
<div>
|
|
15
|
+
<p><strong>Text</strong></p><p>Tempus imperdiet nulla malesuada pellentesque elit eget gravida cum sociis. Erat nam at lectus urna duis convallis convallis. Congue mauris rhoncus aenean vel elit scelerisque.
|
|
16
|
+
Turpis tincidunt id aliquet risus feugiat in ante. Tincidunt dui ut ornare lectus sit. Ipsum dolor sit amet consectetur. Viverra ipsum nunc aliquet bibendum enim facilisis gravida neque convallis.<br><br>Dignissim sodales ut eu sem integer vitae justo eget magna.
|
|
17
|
+
Ac turpis egestas maecenas pharetra convallis. Mauris sit amet massa vitae. Ut tellus elementum sagittis vitae et. Sed risus ultricies tristique nulla aliquet enim tortor. Nunc mattis enim ut tellus elementum sagittis vitae et leo. Quis vel eros donec ac odio tempor.
|
|
18
|
+
Faucibus scelerisque eleifend donec pretium. <br><br>Adipiscing bibendum est ultricies integer quis auctor elit. Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget. Gravida dictum fusce ut placerat orci nulla.
|
|
19
|
+
Consequat mauris nunc congue nisi vitae suscipit tellus mauris. <br><br></p><p><strong>List</strong></p><ul><li><p>Integer enim neque volutpat ac tincidunt vitae semper quis. Sit amet consectetur adipiscing elit pellentesque.</p></li><li><p>Urna cursus eget nunc scelerisque viverra.
|
|
20
|
+
Cursus metus aliquam eleifend mi in nulla posuere. Lobortis elementum nibh tellus molestie nunc non blandit massa.</p></li><li><p>Sodales ut eu sem integer vitae justo eget magna. Scelerisque felis imperdiet proin fermentum leo vel orci. Nunc id cursus metus aliquam eleifend.</p></li></ul>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</section>`,
|
|
25
|
+
id: null,
|
|
26
|
+
title: 'Text',
|
|
27
|
+
icon: `
|
|
28
|
+
<span class="material-symbols-outlined">
|
|
29
|
+
text_fields
|
|
30
|
+
</span>
|
|
31
|
+
`,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
html_code: `<section><div class="relative py-4"><div class="mx-auto max-w-7xl lg:px-4 px-2"><div class="break-words"><h2>Consequat mauris nunc congue</h2></div></div></div></section>`,
|
|
35
|
+
id: null,
|
|
36
|
+
title: 'Header H2',
|
|
37
|
+
icon: `
|
|
38
|
+
<span class="material-symbols-outlined">
|
|
39
|
+
format_h2
|
|
40
|
+
</span>
|
|
41
|
+
`,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
html_code: `<section><div class="relative py-4"><div class="mx-auto max-w-7xl lg:px-4 px-2"><div class="break-words"><h3>Consequat mauris nunc congue</h3></div></div></div></section>`,
|
|
45
|
+
id: null,
|
|
46
|
+
title: 'Header H3',
|
|
47
|
+
icon: `
|
|
48
|
+
<span class="material-symbols-outlined">
|
|
49
|
+
format_h3
|
|
50
|
+
</span>
|
|
51
|
+
`,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
html_code: `
|
|
55
|
+
<section>
|
|
56
|
+
<div class="py-4">
|
|
57
|
+
<div class="mx-auto max-w-7xl lg:px-4 px-2">
|
|
58
|
+
<div id="youtube-video" class="w-full aspect-video bg-slate-100 border border-slate-200 rounded-xl lg:p-8 md:p-6 p-4">
|
|
59
|
+
|
|
60
|
+
<iframe
|
|
61
|
+
frameborder="0"
|
|
62
|
+
allowfullscreen
|
|
63
|
+
class="w-full aspect-video bg-gray-600 border border-slate-800 rounded-xl"
|
|
64
|
+
src=""
|
|
65
|
+
allow="accelerometer; autoplay; clipboard-write;" allowfullscreen>
|
|
66
|
+
</iframe>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</section>`,
|
|
71
|
+
id: null,
|
|
72
|
+
title: 'YouTube Video',
|
|
73
|
+
icon: `
|
|
74
|
+
<span class="material-symbols-outlined">
|
|
75
|
+
play_circle
|
|
76
|
+
</span>
|
|
77
|
+
`,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
html_code: `<section><div class="relative py-8"><div class="absolute inset-0 flex items-center" aria-hidden="true"><div class="w-full border-4 border-gray-800 leading-none"></div></div><div class="relative flex justify-start"></div></div></section>`,
|
|
81
|
+
id: null,
|
|
82
|
+
title: 'Break Divider',
|
|
83
|
+
icon: `
|
|
84
|
+
<span class="material-symbols-outlined">
|
|
85
|
+
horizontal_rule
|
|
86
|
+
</span>
|
|
87
|
+
`,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
html_code: `<section>\n<div class=\"w-full md:pt-2 md:pb-2 pt-4 pb-4 lg:px-4 px-2\">\n<div class=\"mx-auto max-w-7xl\">\n<div id=\"linktree\"\nclass=\"border-2 border-gray-600 flex items-centre justify-start rounded-md font-medium text-black\">\n<p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://www.google.com\">Link to landing page</a>\n</p>\n</div>\n</div>\n</div>\n</section>`,
|
|
91
|
+
id: null,
|
|
92
|
+
title: 'Link',
|
|
93
|
+
icon: `
|
|
94
|
+
<span class="material-symbols-outlined">
|
|
95
|
+
horizontal_rule
|
|
96
|
+
</span>
|
|
97
|
+
`,
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
export default componentHelpers
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import Modal from '@/Components/Modals/Modal.vue'
|
|
3
|
-
import DynamicModal from '@/Components/Modals/DynamicModal.vue'
|
|
4
|
-
import PageBuilder from '@/composables/PageBuilder.ts'
|
|
5
|
-
import { delay } from '@/composables/delay'
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
Dialog,
|
|
9
|
-
DialogOverlay,
|
|
10
|
-
DialogTitle,
|
|
11
|
-
TransitionChild,
|
|
12
|
-
TransitionRoot,
|
|
13
|
-
} from '@headlessui/vue'
|
|
14
|
-
import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/vue'
|
|
15
|
-
import { computed, onMounted, ref } from 'vue'
|
|
16
|
-
import { usePageBuilderStateStore } from '@/stores/page-builder-state'
|
|
17
|
-
import { useUserStore } from '@/stores/user'
|
|
18
|
-
import { useMediaLibraryStore } from '@/stores/media-library'
|
|
19
|
-
|
|
20
|
-
const mediaLibraryStore = useMediaLibraryStore()
|
|
21
|
-
const userStore = useUserStore()
|
|
22
|
-
const pageBuilderStateStore = usePageBuilderStateStore()
|
|
23
|
-
|
|
24
|
-
defineProps({
|
|
25
|
-
show: {
|
|
26
|
-
type: Boolean,
|
|
27
|
-
default: false,
|
|
28
|
-
required: true,
|
|
29
|
-
},
|
|
30
|
-
updateOrCreate: {
|
|
31
|
-
required: true,
|
|
32
|
-
},
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
const pageBuilder = new PageBuilder(pageBuilderStateStore, mediaLibraryStore)
|
|
36
|
-
|
|
37
|
-
const hideDraftButton = ref(true)
|
|
38
|
-
|
|
39
|
-
const showModalConfirmClosePageBuilder = ref(false)
|
|
40
|
-
//
|
|
41
|
-
// use dynamic model
|
|
42
|
-
const typeModal = ref('')
|
|
43
|
-
const gridColumnModal = ref(Number(1))
|
|
44
|
-
const titleModal = ref('')
|
|
45
|
-
const descriptionModal = ref('')
|
|
46
|
-
const firstButtonModal = ref('')
|
|
47
|
-
const secondButtonModal = ref(null)
|
|
48
|
-
const thirdButtonModal = ref(null)
|
|
49
|
-
// set dynamic modal handle functions
|
|
50
|
-
const firstModalButtonFunction = ref(null)
|
|
51
|
-
const secondModalButtonFunction = ref(null)
|
|
52
|
-
const thirdModalButtonFunction = ref(null)
|
|
53
|
-
|
|
54
|
-
const emit = defineEmits([
|
|
55
|
-
'pageBuilderPrimaryHandler',
|
|
56
|
-
'pageBuilderSecondaryHandler',
|
|
57
|
-
'handleDraftForUpdate',
|
|
58
|
-
])
|
|
59
|
-
|
|
60
|
-
const firstButton = function () {
|
|
61
|
-
showModalConfirmClosePageBuilder.value = true
|
|
62
|
-
typeModal.value = 'danger'
|
|
63
|
-
gridColumnModal.value = 3
|
|
64
|
-
titleModal.value = 'Close page builder without save?'
|
|
65
|
-
descriptionModal.value =
|
|
66
|
-
'Are you sure you want to close the page builder without saving? Any changes will be lost.'
|
|
67
|
-
firstButtonModal.value = 'Close'
|
|
68
|
-
secondButtonModal.value = null
|
|
69
|
-
thirdButtonModal.value = 'Exit Page Builder'
|
|
70
|
-
|
|
71
|
-
// handle click
|
|
72
|
-
firstModalButtonFunction.value = function () {
|
|
73
|
-
showModalConfirmClosePageBuilder.value = false
|
|
74
|
-
}
|
|
75
|
-
// handle click
|
|
76
|
-
secondModalButtonFunction.value = function () {
|
|
77
|
-
secondButton()
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// handle click
|
|
81
|
-
thirdModalButtonFunction.value = async function () {
|
|
82
|
-
showModalConfirmClosePageBuilder.value = false
|
|
83
|
-
emit('pageBuilderPrimaryHandler')
|
|
84
|
-
|
|
85
|
-
pageBuilder.removeHoveredAndSelected()
|
|
86
|
-
userStore.setIsLoading(true)
|
|
87
|
-
await delay()
|
|
88
|
-
userStore.setIsLoading(false)
|
|
89
|
-
}
|
|
90
|
-
//
|
|
91
|
-
// end modal
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const handleEscapeKey = function () {
|
|
95
|
-
firstButton()
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// first button function
|
|
99
|
-
const secondButton = function () {
|
|
100
|
-
emit('pageBuilderSecondaryHandler')
|
|
101
|
-
pageBuilder.removeHoveredAndSelected()
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
const getLocalStorageItemNameUpdate = computed(() => {
|
|
107
|
-
return pageBuilderStateStore.getLocalStorageItemNameUpdate
|
|
108
|
-
})
|
|
109
|
-
//
|
|
110
|
-
const handleDraftForUpdate = function () {
|
|
111
|
-
hideDraftButton.value = false
|
|
112
|
-
emit('handleDraftForUpdate')
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
onMounted(() => {
|
|
116
|
-
const item = localStorage.getItem(getLocalStorageItemNameUpdate.value)
|
|
117
|
-
if (item) {
|
|
118
|
-
const parsedValue = JSON.parse(item)
|
|
119
|
-
|
|
120
|
-
if (Array.isArray(parsedValue) && parsedValue.length === 0) {
|
|
121
|
-
hideDraftButton.value = false
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (!item) {
|
|
125
|
-
hideDraftButton.value = false
|
|
126
|
-
}
|
|
127
|
-
})
|
|
128
|
-
</script>
|
|
129
|
-
|
|
130
|
-
<template>
|
|
131
|
-
<teleport to="body">
|
|
132
|
-
<TransitionRoot :show="show" as="template">
|
|
133
|
-
<Dialog
|
|
134
|
-
@close="firstButton"
|
|
135
|
-
@keydown.escape.prevent="handleEscapeKey"
|
|
136
|
-
as="div"
|
|
137
|
-
class="fixed z-30 inset-0 overflow-y-auto focus:outline-none"
|
|
138
|
-
tabindex="0"
|
|
139
|
-
>
|
|
140
|
-
<div class="flex items-end justify-center pb-20 text-center sm:block sm:p-0 bg-white">
|
|
141
|
-
<TransitionChild
|
|
142
|
-
as="template"
|
|
143
|
-
enter="ease-out duration-100"
|
|
144
|
-
enter-from="opacity-0"
|
|
145
|
-
enter-to="opacity-100"
|
|
146
|
-
leave="ease-in duration-200"
|
|
147
|
-
leave-from="opacity-100"
|
|
148
|
-
leave-to="opacity-0"
|
|
149
|
-
>
|
|
150
|
-
<DialogOverlay class="fixed inset-0 bg-white bg-opacity-75 transition-opacity" />
|
|
151
|
-
</TransitionChild>
|
|
152
|
-
|
|
153
|
-
<!-- This element is to trick the browser into centering the modal contents. -->
|
|
154
|
-
<span aria-hidden="true" class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
|
155
|
-
>​</span
|
|
156
|
-
>
|
|
157
|
-
<TransitionChild
|
|
158
|
-
as="template"
|
|
159
|
-
enter="ease-out duration-100"
|
|
160
|
-
enter-from="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
|
161
|
-
enter-to="opacity-100 translate-y-0 sm:scale-100"
|
|
162
|
-
leave="ease-in duration-200"
|
|
163
|
-
leave-from="opacity-100 translate-y-0 sm:scale-100"
|
|
164
|
-
leave-to="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
|
165
|
-
>
|
|
166
|
-
<div
|
|
167
|
-
class="bg-red-100 inline-block align-bottom text-left transform transition-all sm:align-middle w-full overflow-hidden h-[100vh] top-0 left-0 right-0 absolute"
|
|
168
|
-
>
|
|
169
|
-
<DynamicModal
|
|
170
|
-
:show="showModalConfirmClosePageBuilder"
|
|
171
|
-
:type="typeModal"
|
|
172
|
-
:gridColumnAmount="gridColumnModal"
|
|
173
|
-
:title="titleModal"
|
|
174
|
-
:description="descriptionModal"
|
|
175
|
-
:firstButtonText="firstButtonModal"
|
|
176
|
-
:secondButtonText="secondButtonModal"
|
|
177
|
-
:thirdButtonText="thirdButtonModal"
|
|
178
|
-
@firstModalButtonFunction="firstModalButtonFunction"
|
|
179
|
-
@secondModalButtonFunction="secondModalButtonFunction"
|
|
180
|
-
@thirdModalButtonFunction="thirdModalButtonFunction"
|
|
181
|
-
>
|
|
182
|
-
<header></header>
|
|
183
|
-
<main></main>
|
|
184
|
-
</DynamicModal>
|
|
185
|
-
<div
|
|
186
|
-
@click="pageBuilderStateStore.setComponent(null)"
|
|
187
|
-
class="px-4 px-4 lg:h-[10vh] h-[16vh] flex items-center justify-between border-b border-gray-200 bg-white"
|
|
188
|
-
>
|
|
189
|
-
<div class="flex items-center justify-start divide-x divide-gray-200">
|
|
190
|
-
<button type="button" @click="firstButton" class="border-r border-gray-200 pr-6">
|
|
191
|
-
<img class="h-6" src="/logo/logo.svg" alt="Logo" />
|
|
192
|
-
</button>
|
|
193
|
-
<button
|
|
194
|
-
class="myPrimaryButton lg:text-sm text-[10px] lg:py-2 py-2 min-h-2 ml-4"
|
|
195
|
-
@click="secondButton"
|
|
196
|
-
type="button"
|
|
197
|
-
>
|
|
198
|
-
<span class="material-symbols-outlined text-[18px]"> save </span>
|
|
199
|
-
Save & Close
|
|
200
|
-
</button>
|
|
201
|
-
<button
|
|
202
|
-
v-if="updateOrCreate === 'update' && hideDraftButton"
|
|
203
|
-
class="mySecondaryButton lg:text-sm text-[10px] lg:py-2 py-2 min-h-2 ml-2"
|
|
204
|
-
@click="handleDraftForUpdate"
|
|
205
|
-
type="button"
|
|
206
|
-
>
|
|
207
|
-
<span class="material-symbols-outlined text-[18px]">
|
|
208
|
-
settings_backup_restore
|
|
209
|
-
</span>
|
|
210
|
-
Use Draft
|
|
211
|
-
</button>
|
|
212
|
-
</div>
|
|
213
|
-
<button
|
|
214
|
-
type="button"
|
|
215
|
-
@click="firstButton"
|
|
216
|
-
class="flex items-center justify-center gap-1 cursor-pointer"
|
|
217
|
-
>
|
|
218
|
-
<span class="myPrimaryParagraph font-medium"> Close Builder </span>
|
|
219
|
-
<div
|
|
220
|
-
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"
|
|
221
|
-
>
|
|
222
|
-
<span class="material-symbols-outlined"> close </span>
|
|
223
|
-
</div>
|
|
224
|
-
</button>
|
|
225
|
-
</div>
|
|
226
|
-
<slot></slot>
|
|
227
|
-
</div>
|
|
228
|
-
</TransitionChild>
|
|
229
|
-
</div>
|
|
230
|
-
</Dialog>
|
|
231
|
-
</TransitionRoot>
|
|
232
|
-
</teleport>
|
|
233
|
-
</template>
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
interface ComponentHelper {
|
|
2
|
-
html_code: string
|
|
3
|
-
id: string | null
|
|
4
|
-
title: string
|
|
5
|
-
icon: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
const componentHelpers: ComponentHelper[] = [
|
|
9
|
-
{
|
|
10
|
-
html_code: `
|
|
11
|
-
<section>
|
|
12
|
-
<div class="relative py-4">
|
|
13
|
-
<div class="mx-auto max-w-7xl lg:px-4 px-2">
|
|
14
|
-
<div>
|
|
15
|
-
<p><strong>Text</strong></p><p>Tempus imperdiet nulla malesuada pellentesque elit eget gravida cum sociis. Erat nam at lectus urna duis convallis convallis. Congue mauris rhoncus aenean vel elit scelerisque.
|
|
16
|
-
Turpis tincidunt id aliquet risus feugiat in ante. Tincidunt dui ut ornare lectus sit. Ipsum dolor sit amet consectetur. Viverra ipsum nunc aliquet bibendum enim facilisis gravida neque convallis.<br><br>Dignissim sodales ut eu sem integer vitae justo eget magna.
|
|
17
|
-
Ac turpis egestas maecenas pharetra convallis. Mauris sit amet massa vitae. Ut tellus elementum sagittis vitae et. Sed risus ultricies tristique nulla aliquet enim tortor. Nunc mattis enim ut tellus elementum sagittis vitae et leo. Quis vel eros donec ac odio tempor.
|
|
18
|
-
Faucibus scelerisque eleifend donec pretium. <br><br>Adipiscing bibendum est ultricies integer quis auctor elit. Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget. Gravida dictum fusce ut placerat orci nulla.
|
|
19
|
-
Consequat mauris nunc congue nisi vitae suscipit tellus mauris. <br><br></p><p><strong>List</strong></p><ul><li><p>Integer enim neque volutpat ac tincidunt vitae semper quis. Sit amet consectetur adipiscing elit pellentesque.</p></li><li><p>Urna cursus eget nunc scelerisque viverra.
|
|
20
|
-
Cursus metus aliquam eleifend mi in nulla posuere. Lobortis elementum nibh tellus molestie nunc non blandit massa.</p></li><li><p>Sodales ut eu sem integer vitae justo eget magna. Scelerisque felis imperdiet proin fermentum leo vel orci. Nunc id cursus metus aliquam eleifend.</p></li></ul>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
</section>`,
|
|
25
|
-
id: null,
|
|
26
|
-
title: 'Text',
|
|
27
|
-
icon: `
|
|
28
|
-
<span class="material-symbols-outlined">
|
|
29
|
-
text_fields
|
|
30
|
-
</span>
|
|
31
|
-
`,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
html_code: `<section><div class="relative py-4"><div class="mx-auto max-w-7xl lg:px-4 px-2"><div class="break-words"><h2>Consequat mauris nunc congue</h2></div></div></div></section>`,
|
|
35
|
-
id: null,
|
|
36
|
-
title: 'Header H2',
|
|
37
|
-
icon: `
|
|
38
|
-
<span class="material-symbols-outlined">
|
|
39
|
-
format_h2
|
|
40
|
-
</span>
|
|
41
|
-
`,
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
html_code: `<section><div class="relative py-4"><div class="mx-auto max-w-7xl lg:px-4 px-2"><div class="break-words"><h3>Consequat mauris nunc congue</h3></div></div></div></section>`,
|
|
45
|
-
id: null,
|
|
46
|
-
title: 'Header H3',
|
|
47
|
-
icon: `
|
|
48
|
-
<span class="material-symbols-outlined">
|
|
49
|
-
format_h3
|
|
50
|
-
</span>
|
|
51
|
-
`,
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
html_code: `
|
|
55
|
-
<section>
|
|
56
|
-
<div class="py-4">
|
|
57
|
-
<div class="mx-auto max-w-7xl lg:px-4 px-2">
|
|
58
|
-
<div id="youtube-video" class="w-full aspect-video bg-slate-100 border border-slate-200 rounded-xl lg:p-8 md:p-6 p-4">
|
|
59
|
-
|
|
60
|
-
<iframe
|
|
61
|
-
frameborder="0"
|
|
62
|
-
allowfullscreen
|
|
63
|
-
class="w-full aspect-video bg-gray-600 border border-slate-800 rounded-xl"
|
|
64
|
-
src=""
|
|
65
|
-
allow="accelerometer; autoplay; clipboard-write;" allowfullscreen>
|
|
66
|
-
</iframe>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
</section>`,
|
|
71
|
-
id: null,
|
|
72
|
-
title: 'YouTube Video',
|
|
73
|
-
icon: `
|
|
74
|
-
<span class="material-symbols-outlined">
|
|
75
|
-
play_circle
|
|
76
|
-
</span>
|
|
77
|
-
`,
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
html_code: `<section><div class="relative py-8"><div class="absolute inset-0 flex items-center" aria-hidden="true"><div class="w-full border-4 border-gray-800 leading-none"></div></div><div class="relative flex justify-start"></div></div></section>`,
|
|
81
|
-
id: null,
|
|
82
|
-
title: 'Break Divider',
|
|
83
|
-
icon: `
|
|
84
|
-
<span class="material-symbols-outlined">
|
|
85
|
-
horizontal_rule
|
|
86
|
-
</span>
|
|
87
|
-
`,
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
html_code: `<section>\n<div class=\"w-full md:pt-2 md:pb-2 pt-4 pb-4 lg:px-4 px-2\">\n<div class=\"mx-auto max-w-7xl\">\n<div id=\"linktree\"\nclass=\"border-2 border-gray-600 flex items-centre justify-start rounded-md font-medium text-black\">\n<p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://www.google.com\">Link to landing page</a>\n</p>\n</div>\n</div>\n</div>\n</section>`,
|
|
91
|
-
id: null,
|
|
92
|
-
title: 'Link',
|
|
93
|
-
icon: `
|
|
94
|
-
<span class="material-symbols-outlined">
|
|
95
|
-
horizontal_rule
|
|
96
|
-
</span>
|
|
97
|
-
`,
|
|
98
|
-
},
|
|
99
|
-
]
|
|
100
|
-
|
|
101
|
-
export default componentHelpers
|