@myissue/vue-website-page-builder 3.4.19 → 3.4.21

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 (89) hide show
  1. package/README.md +32 -26
  2. package/dist/vue-website-page-builder.js +1263 -1259
  3. package/dist/vue-website-page-builder.umd.cjs +46 -46
  4. package/package.json +3 -5
  5. package/src/App.vue +0 -28
  6. package/src/Components/Homepage/Footer.vue +0 -32
  7. package/src/Components/Homepage/Navbar.vue +0 -25
  8. package/src/Components/Layouts/FullWidthElement.vue +0 -34
  9. package/src/Components/Loaders/GlobalLoader.vue +0 -18
  10. package/src/Components/Modals/BuilderComponents.vue +0 -53
  11. package/src/Components/Modals/DynamicModalBuilder.vue +0 -209
  12. package/src/Components/Modals/MediaLibraryModal.vue +0 -61
  13. package/src/Components/Modals/ModalBuilder.vue +0 -117
  14. package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +0 -121
  15. package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +0 -188
  16. package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +0 -176
  17. package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +0 -112
  18. package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +0 -108
  19. package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +0 -541
  20. package/src/Components/PageBuilder/EditorMenu/Editables/HTMLEditor.vue +0 -203
  21. package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +0 -96
  22. package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +0 -315
  23. package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +0 -107
  24. package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +0 -106
  25. package/src/Components/PageBuilder/EditorMenu/Editables/Margin.vue +0 -116
  26. package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +0 -19
  27. package/src/Components/PageBuilder/EditorMenu/Editables/Padding.vue +0 -117
  28. package/src/Components/PageBuilder/EditorMenu/Editables/StyleEditor.vue +0 -123
  29. package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +0 -123
  30. package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +0 -237
  31. package/src/Components/PageBuilder/EditorMenu/EditorAccordion.vue +0 -46
  32. package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +0 -368
  33. package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +0 -476
  34. package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +0 -581
  35. package/src/Components/PageBuilder/ToolbarOption/ToolbarOption.vue +0 -248
  36. package/src/Components/PageBuilder/UndoRedo/UndoRedo.vue +0 -90
  37. package/src/Components/TipTap/TipTap.vue +0 -25
  38. package/src/Components/TipTap/TipTapInput.vue +0 -340
  39. package/src/PageBuilder/PageBuilder.vue +0 -1025
  40. package/src/PageBuilder/Preview.vue +0 -64
  41. package/src/composables/builderInstance.ts +0 -47
  42. package/src/composables/delay.ts +0 -5
  43. package/src/composables/extractCleanHTMLFromPageBuilder.ts +0 -59
  44. package/src/composables/preloadImage.ts +0 -8
  45. package/src/composables/useDebounce.ts +0 -8
  46. package/src/composables/usePageBuilderModal.ts +0 -25
  47. package/src/composables/useTranslations.ts +0 -28
  48. package/src/css/dev-global.css +0 -24
  49. package/src/css/style.css +0 -600
  50. package/src/helpers/isEmptyObject.ts +0 -5
  51. package/src/index.ts +0 -28
  52. package/src/locales/ar.json +0 -170
  53. package/src/locales/de.json +0 -171
  54. package/src/locales/en.json +0 -171
  55. package/src/locales/es.json +0 -171
  56. package/src/locales/fr.json +0 -171
  57. package/src/locales/hi.json +0 -172
  58. package/src/locales/ja.json +0 -171
  59. package/src/locales/pt.json +0 -171
  60. package/src/locales/ru.json +0 -171
  61. package/src/locales/zh-Hans.json +0 -171
  62. package/src/main.ts +0 -14
  63. package/src/plugin.ts +0 -16
  64. package/src/services/LocalStorageManager.ts +0 -25
  65. package/src/services/PageBuilderService.ts +0 -3191
  66. package/src/stores/page-builder-state.ts +0 -498
  67. package/src/stores/shared-store.ts +0 -13
  68. package/src/tailwind-safelist.html +0 -3
  69. package/src/tests/DefaultComponents/DefaultBuilderComponents.vue +0 -284
  70. package/src/tests/DefaultComponents/DefaultMediaLibraryComponent.vue +0 -10
  71. package/src/tests/PageBuilderTest.vue +0 -82
  72. package/src/tests/TestComponents/DemoBuilderComponentsTest.vue +0 -5
  73. package/src/tests/TestComponents/DemoMediaLibraryComponentTest.vue +0 -8
  74. package/src/tests/TestComponents/DemoUnsplash.vue +0 -389
  75. package/src/tests/componentsArray.test.json +0 -62
  76. package/src/tests/pageBuilderService.test.ts +0 -165
  77. package/src/types/global.d.ts +0 -11
  78. package/src/types/index.ts +0 -306
  79. package/src/utils/builder/html-doc-declaration-with-components.ts +0 -7
  80. package/src/utils/builder/tailwaind-colors.ts +0 -503
  81. package/src/utils/builder/tailwind-border-radius.ts +0 -67
  82. package/src/utils/builder/tailwind-border-style-width-color.ts +0 -272
  83. package/src/utils/builder/tailwind-font-sizes.ts +0 -75
  84. package/src/utils/builder/tailwind-font-styles.ts +0 -56
  85. package/src/utils/builder/tailwind-opacities.ts +0 -45
  86. package/src/utils/builder/tailwind-padding-margin.ts +0 -159
  87. package/src/utils/html-elements/component.ts +0 -485
  88. package/src/utils/html-elements/componentHelpers.ts +0 -98
  89. package/src/utils/html-elements/themes.ts +0 -85
@@ -1,340 +0,0 @@
1
- <script setup>
2
- import { useEditor, EditorContent } from '@tiptap/vue-3'
3
- import StarterKit from '@tiptap/starter-kit'
4
- import { computed, onBeforeMount, onMounted, ref, watch } from 'vue'
5
- import Link from '@tiptap/extension-link'
6
- import DynamicModalBuilder from '../Modals/DynamicModalBuilder.vue'
7
- import { sharedPageBuilderStore } from '../../stores/shared-store'
8
- import { getPageBuilder } from '../../composables/builderInstance'
9
- import { useTranslations } from '../../composables/useTranslations'
10
- const pageBuilderService = getPageBuilder()
11
-
12
- const { translate } = useTranslations()
13
-
14
- // Use shared store instance
15
- const pageBuilderStateStore = sharedPageBuilderStore
16
-
17
- const showModalUrl = ref(false)
18
-
19
- // use dynamic model
20
- const typeModal = ref('')
21
- const gridColumnModal = ref(Number(1))
22
- const titleModal = ref('')
23
- const descriptionModal = ref('')
24
- const firstButtonModal = ref('')
25
- const secondButtonModal = ref(null)
26
- const thirdButtonModal = ref(null)
27
- // set dynamic modal handle functions
28
- const firstModalButtonFunctionDynamicModalBuilder = ref(null)
29
- const secondModalButtonFunctionDynamicModalBuilder = ref(null)
30
- const thirdModalButtonFunctionDynamicModalBuilder = ref(null)
31
-
32
- const getElement = computed(() => {
33
- return pageBuilderStateStore.getElement
34
- })
35
- const textContentVueModel = ref('')
36
-
37
- const textContent = computed(() => {
38
- if (editor.value) {
39
- return editor.value.getHTML()
40
- }
41
- return null
42
- })
43
-
44
- const getElementtextContentLength = ref(0)
45
-
46
- watch(getElement, (newVal) => {
47
- const tempContainer = document.createElement('div')
48
-
49
- if (newVal) {
50
- tempContainer.innerHTML = newVal
51
- const textContent = tempContainer.textContent
52
- getElementtextContentLength.value = textContent.length
53
- }
54
- })
55
-
56
- // Check if any of the child elements have the tagName "IMG"
57
-
58
- const editor = useEditor({
59
- content: '',
60
- extensions: [
61
- StarterKit,
62
- Link.configure({
63
- openOnClick: false,
64
- }),
65
- ],
66
- editorProps: {
67
- attributes: {
68
- class: 'prose-sm sm:prose-sm lg:prose-sm focus:outline-none',
69
- },
70
- },
71
- })
72
-
73
- // watch for changes in textContent and update store and textContentVueModel
74
- watch(textContent, async (newValue) => {
75
- if (!pageBuilderService.isSelectedElementValidText()) return
76
-
77
- if (getElement.value) {
78
- pageBuilderStateStore.setTextAreaVueModel(newValue)
79
-
80
- if (typeof newValue === 'string' && newValue !== textContentVueModel.value) {
81
- await pageBuilderService.handleTextInput(newValue)
82
- }
83
- }
84
- })
85
-
86
- const TipTapSetContent = function () {
87
- if (!pageBuilderService.isSelectedElementValidText()) return
88
-
89
- if (editor.value) {
90
- editor.value.commands.setContent(getElement.value.innerHTML)
91
- }
92
- }
93
-
94
- watch(getElement, () => {
95
- TipTapSetContent()
96
- })
97
-
98
- // Manage URL
99
- const urlEnteret = ref('')
100
- const newUpdatedExistingURL = ref('')
101
- const urlError = ref(null)
102
-
103
- watch(urlEnteret, (newVal) => {
104
- newUpdatedExistingURL.value = newVal
105
- })
106
- const handleURL = function () {
107
- urlEnteret.value = editor.value.getAttributes('link').href
108
-
109
- showModalUrl.value = true
110
- typeModal.value = 'success'
111
- gridColumnModal.value = 2
112
- titleModal.value = translate('Enter URL')
113
- descriptionModal.value = translate(
114
- 'Add a valid URL to transform the selected text into a clickable hyperlink that directs users to the specified web address.',
115
- )
116
- firstButtonModal.value = translate('Close')
117
- secondButtonModal.value = urlEnteret.value ? 'Remove url' : null
118
- thirdButtonModal.value = translate('Save')
119
-
120
- // handle click
121
- firstModalButtonFunctionDynamicModalBuilder.value = function () {
122
- showModalUrl.value = false
123
- urlError.value = null
124
- }
125
-
126
- // handle click
127
- secondModalButtonFunctionDynamicModalBuilder.value = function () {
128
- editor.value.chain().focus().extendMarkRange('link').unsetLink().run()
129
- showModalUrl.value = false
130
- }
131
-
132
- // handle click
133
- thirdModalButtonFunctionDynamicModalBuilder.value = function () {
134
- const isNotValidated = validateURL()
135
- if (isNotValidated) {
136
- return
137
- }
138
- if (!isNotValidated) {
139
- setEnteretURL()
140
- }
141
- showModalUrl.value = false
142
- }
143
- // end modal
144
- }
145
-
146
- //
147
- //
148
- const validateURL = function () {
149
- // initial value
150
- urlError.value = null
151
-
152
- // url validation
153
- const urlRegex = /^https?:\/\//
154
- const isValidURL = ref(true)
155
- isValidURL.value = urlRegex.test(newUpdatedExistingURL.value)
156
-
157
- // cancelled
158
- if (isValidURL.value === false) {
159
- urlError.value =
160
- "The provided URL is invalid. Please ensure that it begins with 'https://' for proper formatting and security."
161
- return true
162
- }
163
-
164
- return false
165
- }
166
- const setEnteretURL = function () {
167
- // update link
168
- editor.value
169
- .chain()
170
- .focus()
171
- .extendMarkRange('link')
172
- .setLink({ href: newUpdatedExistingURL.value })
173
- .run()
174
- }
175
-
176
- onBeforeMount(() => {
177
- editor.value?.destroy()
178
- })
179
-
180
- onMounted(() => {
181
- TipTapSetContent()
182
- })
183
- </script>
184
- <template>
185
- <div>
186
- <DynamicModalBuilder
187
- maxWidth="4xl"
188
- :showDynamicModalBuilder="showModalUrl"
189
- :type="typeModal"
190
- :gridColumnAmount="gridColumnModal"
191
- :title="titleModal"
192
- :description="descriptionModal"
193
- :firstButtonText="firstButtonModal"
194
- :secondButtonText="secondButtonModal"
195
- :thirdButtonText="thirdButtonModal"
196
- @firstModalButtonFunctionDynamicModalBuilder="firstModalButtonFunctionDynamicModalBuilder"
197
- @secondModalButtonFunctionDynamicModalBuilder="secondModalButtonFunctionDynamicModalBuilder"
198
- @thirdModalButtonFunctionDynamicModalBuilder="thirdModalButtonFunctionDynamicModalBuilder"
199
- >
200
- <header></header>
201
- <main>
202
- <div class="pbx-myInputGroup">
203
- <label class="pbx-myPrimaryInputLabel" for="roles"
204
- ><span>{{ translate('Enter URL') }}</span></label
205
- ><input
206
- v-model="urlEnteret"
207
- class="pbx-myPrimaryInput pbx-mt-1 pbx-w-full"
208
- type="url"
209
- placeholder="url"
210
- />
211
- <div
212
- v-if="urlError"
213
- class="pbx-min-h-[2.5rem] pbx-flex pbx-items-center pbx-justify-start"
214
- >
215
- <p class="pbx-myPrimaryInputError pbx-mt-2 pbx-mb-0 pbx-py-0 pbx-self-start">
216
- {{ urlError }}
217
- </p>
218
- </div>
219
- </div>
220
- </main>
221
- </DynamicModalBuilder>
222
-
223
- <div class="pbx-blockease-linear pbx-duration-200 pbx-block pbx-ease-linear">
224
- <div v-if="pageBuilderService.isSelectedElementValidText() && editor">
225
- <div class="pbx-relative pbx-rounded-lg">
226
- <div
227
- class="pbx-flex pbx-justify-between pbx-myPrimaryGap pbx-items-center pbx-pb-2 pbx-mb-2 pbx-px-4 pbx-overflow-x-auto pbx-border-0 pbx-border-b pbx-border-solid pbx-border-gray-200"
228
- >
229
- <div>
230
- <div>
231
- <div
232
- class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max pbx-p-1 pbx-rounded-full pbx-border-solid pbx-border pbx-border-gray-200 pbx-shadow-sm"
233
- >
234
- <button
235
- @click="pageBuilderService.toggleTipTapModal(false)"
236
- type="button"
237
- class="pbx-myPrimaryTag pbx-cursor-pointer"
238
- >
239
- <span class="material-symbols-outlined"> save </span>
240
- <span>{{ translate('Save') }}</span>
241
- </button>
242
- </div>
243
- </div>
244
- </div>
245
- <div
246
- class="pbx-flex pbx-items-center pbx-p-1 pbx-rounded-full pbx-border-solid pbx-border pbx-border-gray-200 pbx-shadow-sm"
247
- >
248
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
249
- <button
250
- @click="editor.chain().focus().setHardBreak().run()"
251
- type="button"
252
- class="pbx-myPrimaryTag pbx-cursor-pointer"
253
- >
254
- <span class="material-symbols-outlined"> keyboard_return </span>
255
- <span>{{ translate('Line break') }}</span>
256
- </button>
257
- </div>
258
-
259
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
260
- <button
261
- @click="editor.chain().focus().toggleBold().run()"
262
- type="button"
263
- class="pbx-myPrimaryTag pbx-cursor-pointer"
264
- :class="{ 'pbx-bg-myPrimaryLinkColor pbx-text-white': editor.isActive('bold') }"
265
- >
266
- <span class="material-symbols-outlined"> format_bold </span>
267
- <span>{{ translate('Bold') }}</span>
268
- </button>
269
- </div>
270
-
271
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
272
- <button
273
- @click="handleURL"
274
- type="button"
275
- class="pbx-myPrimaryTag pbx-cursor-pointer"
276
- :class="{ 'pbx-bg-myPrimaryLinkColor pbx-text-white': editor.isActive('link') }"
277
- >
278
- <span class="material-symbols-outlined"> link </span>
279
- <span>{{ translate('Link') }}</span>
280
- </button>
281
- </div>
282
-
283
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
284
- <button
285
- @click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
286
- type="button"
287
- class="pbx-myPrimaryTag pbx-cursor-pointer"
288
- :class="{
289
- 'pbx-bg-myPrimaryLinkColor pbx-text-white': editor.isActive('heading', {
290
- level: 2,
291
- }),
292
- }"
293
- >
294
- <span class="material-symbols-outlined"> titlecase </span>
295
- <span>{{ translate('Header 2') }}</span>
296
- </button>
297
- </div>
298
-
299
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
300
- <button
301
- @click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
302
- type="button"
303
- class="pbx-myPrimaryTag pbx-cursor-pointer"
304
- :class="{
305
- 'pbx-bg-myPrimaryLinkColor pbx-text-white': editor.isActive('heading', {
306
- level: 3,
307
- }),
308
- }"
309
- >
310
- <span class="material-symbols-outlined"> titlecase </span>
311
- <span>{{ translate('Header 3') }}</span>
312
- </button>
313
- </div>
314
-
315
- <div class="pbx-px-2 pbx-flex pbx-items-center pbx-justify-start pbx-gap-2 pbx-w-max">
316
- <button
317
- @click="editor.chain().focus().toggleBulletList().run()"
318
- type="button"
319
- class="pbx-myPrimaryTag pbx-cursor-pointer"
320
- :class="{
321
- 'pbx-bg-myPrimaryLinkColor pbx-text-white': editor.isActive('bulletList'),
322
- }"
323
- >
324
- <span class="material-symbols-outlined"> list </span>
325
- <span>{{ translate('List') }}</span>
326
- </button>
327
- </div>
328
- </div>
329
- </div>
330
-
331
- <editor-content
332
- id="page-builder-editor"
333
- :editor="editor"
334
- class="pbx-p-2 pbx-prounded-lg lg:pbx-min-h-[20rem] lg:pbx-max-h-[30rem] md:pbx-min-h-[20rem] md:pbx-max-h-[20rem] pbx-min-h-[20rem] pbx-max-h-[20rem] pbx-overflow-y-auto"
335
- />
336
- </div>
337
- </div>
338
- </div>
339
- </div>
340
- </template>