@myissue/vue-website-page-builder 3.4.20 → 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 +22 -24
  2. package/dist/vue-website-page-builder.js +1 -1
  3. package/dist/vue-website-page-builder.umd.cjs +1 -1
  4. package/package.json +2 -3
  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 -341
  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,368 +0,0 @@
1
- <script setup>
2
- import { computed, ref, watch, nextTick } from 'vue'
3
- import { sharedPageBuilderStore } from '../../../stores/shared-store'
4
- import ClassEditor from './Editables/ClassEditor.vue'
5
- import StyleEditor from './Editables/StyleEditor.vue'
6
- import ImageEditor from './Editables/ImageEditor.vue'
7
- import OpacityEditor from './Editables/OpacityEditor.vue'
8
- import Typography from './Editables/Typography.vue'
9
- import Padding from './Editables/Padding.vue'
10
- import Margin from './Editables/Margin.vue'
11
- import BorderRadius from './Editables/BorderRadius.vue'
12
- import BackgroundColorEditor from './Editables/BackgroundColorEditor.vue'
13
- import TextColorEditor from './Editables/TextColorEditor.vue'
14
- import Borders from './Editables/Borders.vue'
15
- import LinkEditor from './Editables/LinkEditor.vue'
16
- import TipTap from '../../TipTap/TipTap.vue'
17
- import EditGetElement from './Editables/EditGetElement.vue'
18
- import HTMLEditor from './Editables/HTMLEditor.vue'
19
- import { getPageBuilder } from '../../../composables/builderInstance'
20
- import EditorAccordion from '../EditorMenu/EditorAccordion.vue'
21
- import fullHTMLContent from '../../../utils/builder/html-doc-declaration-with-components'
22
- import ModalBuilder from '../../../Components/Modals/ModalBuilder.vue'
23
- import { extractCleanHTMLFromPageBuilder } from '../../../composables/extractCleanHTMLFromPageBuilder'
24
- import { useTranslations } from '../../../composables/useTranslations'
25
-
26
- const { translate } = useTranslations()
27
-
28
- const pageBuilderService = getPageBuilder()
29
- const pageBuilderStateStore = sharedPageBuilderStore
30
-
31
- defineEmits(['closeEditor'])
32
-
33
- const isLoadingPageStyles = ref(null)
34
- const getComponents = computed(() => {
35
- return pageBuilderStateStore.getComponents
36
- })
37
- const getElement = computed(() => {
38
- return pageBuilderStateStore.getElement
39
- })
40
-
41
- const elementTag = computed(() => {
42
- return getElement.value?.tagName
43
- })
44
-
45
- const isHeadingElement = computed(() => {
46
- return (
47
- (getElement.value instanceof HTMLElement && getElement.value.innerText.trim() !== ' ') ||
48
- getElement.value instanceof HTMLImageElement
49
- )
50
- })
51
-
52
- const scrollContainer = ref(null)
53
- let lastScrollTop = 0
54
-
55
- // Watch for changes that cause re-render (e.g. dropdown value in store)
56
- watch(
57
- // or the specific value that triggers re-render
58
- () => pageBuilderStateStore.getElement,
59
- () => {
60
- // Restore scroll after DOM updates
61
- nextTick(() => {
62
- if (scrollContainer.value) {
63
- scrollContainer.value.scrollTop = lastScrollTop
64
- }
65
- })
66
- },
67
- )
68
-
69
- // Save scroll position before update
70
- function onScroll() {
71
- if (scrollContainer.value) {
72
- lastScrollTop = scrollContainer.value.scrollTop
73
- }
74
- }
75
-
76
- const generateHTML = function (filename, HTML) {
77
- // Extract existing styles from the page
78
- const existingStyles = Array.from(document.querySelectorAll('style, link[rel="stylesheet"]'))
79
- .map((style) => {
80
- if (style.tagName === 'STYLE') {
81
- return style.outerHTML // Inline styles
82
- } else if (style.tagName === 'LINK') {
83
- return `<link rel="stylesheet" href="${style.href}">` // External stylesheets
84
- }
85
- return ''
86
- })
87
- .join('\n')
88
-
89
- // Add your custom CSS
90
- const customCSS = `
91
- <style>
92
- #pagebuilder blockquote,
93
- #pagebuilder dl,
94
- #pagebuilder dd,
95
- #pagebuilder pre,
96
- #pagebuilder hr,
97
- #pagebuilder figure,
98
- #pagebuilder p,
99
- #pagebuilder h1,
100
- #pagebuilder h2,
101
- #pagebuilder h3,
102
- #pagebuilder h4,
103
- #pagebuilder h5,
104
- #pagebuilder h6,
105
- #pagebuilder ul,
106
- #pagebuilder ol,
107
- #pagebuilder li {
108
- margin: 0;
109
- padding: 0; /* Often useful for ul/ol too */
110
- }
111
- </style>
112
- `
113
-
114
- // Combine existing styles and custom CSS
115
- const css = `${existingStyles}\n${customCSS}`
116
-
117
- // Generate the full HTML
118
- const fullHTML = `
119
- <!DOCTYPE html>
120
- <html lang="en">
121
- <head>
122
- <meta charset="UTF-8">
123
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
124
- <title>Downloaded HTML</title>
125
- ${css}
126
- </head>
127
- <body>
128
- <div id="pagebuilder" class="pbx-font-sans pbx-text-black">
129
- ${HTML}
130
- </div>
131
- </body>
132
- </html>
133
- `
134
-
135
- // Create and trigger the download
136
- const element = document.createElement('a')
137
- element.setAttribute('href', 'data:text/html;charset=utf-8,' + encodeURIComponent(fullHTML))
138
- element.setAttribute('download', filename)
139
-
140
- element.style.display = 'none'
141
- document.body.appendChild(element)
142
-
143
- element.click()
144
-
145
- document.body.removeChild(element)
146
- }
147
-
148
- const handleDownloadHTML = function () {
149
- const pagebuilder = document.getElementById('pagebuilder')
150
- if (!pagebuilder) {
151
- return
152
- }
153
-
154
- // Extract clean HTML
155
- let html = extractCleanHTMLFromPageBuilder(pagebuilder)
156
-
157
- // Create a temporary DOM element to manipulate the HTML
158
- const tempDiv = document.createElement('div')
159
- tempDiv.innerHTML = html
160
-
161
- // Remove 'hovered' and 'selected' attributes
162
- tempDiv.querySelectorAll('[hovered], [selected]').forEach((el) => {
163
- el.removeAttribute('hovered')
164
- el.removeAttribute('selected')
165
- })
166
-
167
- // Get the cleaned HTML back
168
- html = tempDiv.innerHTML
169
-
170
- generateHTML('downloaded_html.html', html)
171
- }
172
- const showModalGlobalPageStyles = ref(null)
173
-
174
- const handleUpdatePageStyles = async function () {
175
- showModalGlobalPageStyles.value = true
176
-
177
- await pageBuilderService.globalPageStyles()
178
- }
179
-
180
- const handleCloseGlobalPageStyles = async function () {
181
- isLoadingPageStyles.value = true
182
- await pageBuilderService.handleManualSave()
183
-
184
- // Remove global highlight if present
185
- const pagebuilder = document.querySelector('#pagebuilder')
186
- if (pagebuilder) {
187
- pagebuilder.removeAttribute('data-global-selected')
188
- }
189
-
190
- showModalGlobalPageStyles.value = false
191
- isLoadingPageStyles.value = false
192
- }
193
- </script>
194
-
195
- <template>
196
- <div class="pbx-flex pbx-h-full pbx-flex-col">
197
- <div
198
- class="pbx-flex pbx-flex-row pbx-justify-between pbx-pt-7 pbx-pr-4 pbx-pl-4 pbx-items-center pbx-mb-3"
199
- >
200
- <button
201
- type="button"
202
- @click="$emit('closeEditor')"
203
- class="pbx-h-10 pbx-w-10 pbx-cursor-pointer pbx-rounded-full pbx-flex pbx-items-center pbx-border-none pbx-justify-center pbx-bg-gray-50 pbx-aspect-square hover:pbx-bg-myPrimaryLinkColor hover:pbx-text-white focus-visible:pbx-ring-0 pbx-text-black hover:pbx-text-white"
204
- >
205
- <span class="material-symbols-outlined"> close </span>
206
- </button>
207
- <p class="pbx-font-medium pbx-text-sm">
208
- {{ translate('Editing') }}
209
- <span class="pbx-lowercase">&lt;{{ elementTag }}&gt;</span>
210
- </p>
211
- </div>
212
-
213
- <div
214
- v-if="!showModalGlobalPageStyles"
215
- ref="scrollContainer"
216
- @scroll="onScroll"
217
- class="pbx-pl-3 pbx-pr-3 pbx-mb-4 pbx-overflow-y-scroll"
218
- >
219
- <div v-show="getElement && pageBuilderService.isEditableElement(getElement)">
220
- <article class="pbx-mb-1">
221
- <ImageEditor> </ImageEditor>
222
- </article>
223
- <article class="pbx-mb-1">
224
- <TipTap></TipTap>
225
- </article>
226
- <article class="pbx-my-1">
227
- <Typography></Typography>
228
- </article>
229
-
230
- <article class="pbx-my-1">
231
- <OpacityEditor> </OpacityEditor>
232
- </article>
233
- <article class="pbx-my-1">
234
- <Padding> </Padding>
235
- </article>
236
- <article class="pbx-my-1">
237
- <Margin> </Margin>
238
- </article>
239
- <article class="pbx-my-1">
240
- <BorderRadius></BorderRadius>
241
- </article>
242
- <article class="pbx-my-1">
243
- <Borders></Borders>
244
- </article>
245
- <article class="pbx-my-1">
246
- <ClassEditor></ClassEditor>
247
- </article>
248
- <article class="pbx-my-1">
249
- <StyleEditor></StyleEditor>
250
- </article>
251
- <article class="pbx-my-1">
252
- <HTMLEditor></HTMLEditor>
253
- </article>
254
- </div>
255
-
256
- <!-- Global Page Styles -->
257
- <article class="pbx-my-1">
258
- <EditorAccordion>
259
- <template #title>{{ translate('Global Page Styles') }}</template>
260
- <template #content>
261
- <p class="pbx-myPrimaryInputLabel pbx-my-4">
262
- {{
263
- translate(
264
- 'Apply styles that affect the entire page. These settings include global font family, text color, background color, and other universal styles that apply to all sections.',
265
- )
266
- }}
267
- </p>
268
-
269
- <hr />
270
- <div class="pbx-my-2 pbx-py-2">
271
- <button @click="handleUpdatePageStyles" type="button" class="pbx-myPrimaryButton">
272
- {{ translate('Update Page Styles') }}
273
- </button>
274
- </div>
275
- </template>
276
- </EditorAccordion>
277
- </article>
278
- <!-- Global Page Styles -->
279
-
280
- <!-- Download Layout HTML -->
281
- <article v-if="Array.isArray(getComponents) && getComponents.length >= 1" class="pbx-my-1">
282
- <EditorAccordion>
283
- <template #title>{{ translate('Download HTML') }}</template>
284
- <template #content>
285
- <p class="pbx-myPrimaryInputLabel pbx-my-4">
286
- {{
287
- translate(
288
- 'Export the entire page as a standalone HTML file. This includes all sections, content, and applied styles, making it ready for use or integration elsewhere.',
289
- )
290
- }}
291
- </p>
292
- <hr />
293
- <div class="pbx-my-2 pbx-py-2">
294
- <button @click="handleDownloadHTML" type="button" class="pbx-myPrimaryButton">
295
- {{ translate('Download HTML file') }}
296
- </button>
297
- </div>
298
- </template>
299
- </EditorAccordion>
300
- <!-- Download Layout HTML -->
301
- </article>
302
- </div>
303
-
304
- <ModalBuilder
305
- maxWidth="md"
306
- minHeight="pbx-min-h-[65vh] pbx-max-h-[65vh]"
307
- :showModalBuilder="showModalGlobalPageStyles"
308
- :title="translate('Global Page Styles')"
309
- @closeMainModalBuilder="handleCloseGlobalPageStyles"
310
- >
311
- <div id="pagebuilder-right-menu" class="pbx-flex pbx-flex-col pbx-gap-2 pbx-pt-4 pbx-pb-2">
312
- <div v-if="isLoadingPageStyles">
313
- <div class="pbx-flex pbx-items-center pbx-my-2 pbx-py-4 pbx-px-2 pbx-justify-center">
314
- <div
315
- class="pbx-inline-block pbx-h-8 pbx-w-8 pbx-animate-spin pbx-rounded-full pbx-border-4 pbx-border-solid pbx-border-current pbx-border-r-transparent pbx-align-[-0.125em] motion-reduce:pbx-animate-[spin_1.5s_linear_infinite]"
316
- >
317
- <span
318
- class="!pbx-absolute !pbx-m-px !pbx-h-px !pbx-w-px !pbx-overflow-hidden !pbx-whitespace-nowrap !pbx-border-0 !pbx-p-0 !pbx-[clip:rect(0,0,0,0)]"
319
- >{{ translate('Loading...') }}</span
320
- >
321
- </div>
322
- </div>
323
- </div>
324
- <div v-if="!isLoadingPageStyles && showModalGlobalPageStyles" class="pbx-pb-12">
325
- <div>
326
- <p class="pbx-myPrimaryParagraph">
327
- {{
328
- translate(
329
- 'Apply styles that affect the entire page. These settings include global font family, text color, background color, and other universal styles that apply to all sections.',
330
- )
331
- }}
332
- </p>
333
- <article class="pbx-my-1">
334
- <Typography></Typography>
335
- </article>
336
- <article class="pbx-my-1">
337
- <TextColorEditor :globalPageLayout="true"></TextColorEditor>
338
- </article>
339
- <article class="pbx-my-1">
340
- <BackgroundColorEditor :globalPageLayout="true"></BackgroundColorEditor>
341
- </article>
342
- <article class="pbx-my-1">
343
- <Padding> </Padding>
344
- </article>
345
- <article class="pbx-my-1">
346
- <Margin> </Margin>
347
- </article>
348
- <article class="pbx-my-1">
349
- <BorderRadius></BorderRadius>
350
- </article>
351
- <article class="pbx-my-1">
352
- <Borders></Borders>
353
- </article>
354
- <article class="pbx-my-1">
355
- <ClassEditor></ClassEditor>
356
- </article>
357
- <article class="pbx-my-1">
358
- <StyleEditor></StyleEditor>
359
- </article>
360
- <article class="pbx-my-1">
361
- <HTMLEditor :globalPage="true"></HTMLEditor>
362
- </article>
363
- </div>
364
- </div>
365
- </div>
366
- </ModalBuilder>
367
- </div>
368
- </template>