@myissue/vue-website-page-builder 3.2.85 → 3.2.90
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 +116 -16
- package/dist/vue-website-page-builder.css +1 -1
- package/dist/vue-website-page-builder.js +9217 -9022
- package/dist/vue-website-page-builder.umd.cjs +38 -38
- package/package.json +2 -2
- package/src/Components/Homepage/Footer.vue +9 -7
- package/src/Components/Homepage/Navbar.vue +6 -4
- package/src/Components/Layouts/FullWidthElement.vue +6 -6
- package/src/Components/Modals/BuilderComponents.vue +12 -6
- package/src/Components/Modals/DynamicModalBuilder.vue +39 -47
- package/src/Components/Modals/MediaLibraryModal.vue +2 -2
- package/src/Components/Modals/ModalBuilder.vue +23 -19
- package/src/Components/PageBuilder/DefaultComponents/DefaultBuilderComponents.vue +29 -17
- package/src/Components/PageBuilder/DefaultComponents/DefaultMediaLibraryComponent.vue +2 -2
- package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +22 -20
- package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +17 -17
- package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +28 -26
- package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +13 -11
- package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +5 -5
- package/src/Components/PageBuilder/EditorMenu/Editables/DeleteElement.vue +4 -4
- package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +22 -19
- package/src/Components/PageBuilder/EditorMenu/Editables/ElementEditor.vue +11 -11
- package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +4 -4
- package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +74 -66
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +26 -21
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +26 -21
- package/src/Components/PageBuilder/EditorMenu/Editables/Margin.vue +101 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +2 -3
- package/src/Components/PageBuilder/EditorMenu/Editables/{PaddingPlusMargin.vue → Padding.vue} +8 -41
- package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +22 -20
- package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +63 -58
- package/src/Components/PageBuilder/EditorMenu/EditorAccordion.vue +7 -4
- package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +24 -19
- package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +132 -98
- package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +216 -146
- package/src/Components/PageBuilder/ToolbarOption/ToolbarOption.vue +14 -14
- package/src/Components/TipTap/TipTap.vue +4 -4
- package/src/Components/TipTap/TipTapInput.vue +39 -33
- package/src/DemoComponents/DemoBuilderComponents.vue +1 -1
- package/src/DemoComponents/DemoUnsplash.vue +79 -56
- package/src/DemoComponents/HomeSection.vue +20 -16
- package/src/PageBuilder/PageBuilder.vue +62 -57
- package/src/PageBuilder/Preview.vue +4 -20
- package/src/composables/PageBuilderClass.ts +66 -120
- package/src/css/app.css +161 -448
- package/src/css/dev-global.css +137 -0
- package/src/main.ts +1 -0
- package/src/tailwind-safelist.html +1 -1
- package/src/utils/builder/tailwaind-colors.ts +488 -488
- package/src/utils/builder/tailwind-border-radius.ts +40 -40
- package/src/utils/builder/tailwind-border-style-width-color.ts +231 -231
- package/src/utils/builder/tailwind-font-sizes.ts +56 -57
- package/src/utils/builder/tailwind-font-styles.ts +44 -11
- package/src/utils/builder/tailwind-opacities.ts +30 -30
- package/src/utils/builder/tailwind-padding-margin.ts +136 -136
- package/dist/components.json +0 -36
- package/src/Components/Loaders/FullScreenSpinner.vue +0 -9
- package/src/Components/Loaders/SmallUniversalSpinner.vue +0 -26
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
// Type definitions
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
ImageObject,
|
|
5
|
-
TimerHandle,
|
|
6
|
-
MutationObserver as MutationObserverType,
|
|
7
|
-
TailwindColors,
|
|
8
|
-
TailwindOpacities,
|
|
9
|
-
TailwindFontSizes,
|
|
10
|
-
TailwindFontStyles,
|
|
11
|
-
TailwindPaddingAndMargin,
|
|
12
|
-
TailwindBorderRadius,
|
|
13
|
-
TailwindBorderStyleWidthColor,
|
|
14
|
-
PageBuilderConfig,
|
|
15
|
-
} from '../types'
|
|
2
|
+
import type { ComponentObject, ImageObject, PageBuilderConfig } from '../types'
|
|
3
|
+
|
|
16
4
|
import type { usePageBuilderStateStore } from '../stores/page-builder-state'
|
|
17
5
|
|
|
6
|
+
import tailwindFontSizes from '../utils/builder/tailwind-font-sizes'
|
|
18
7
|
import tailwindColors from '../utils/builder/tailwaind-colors'
|
|
19
8
|
import tailwindOpacities from '../utils/builder/tailwind-opacities'
|
|
20
|
-
import tailwindFontSizes from '../utils/builder/tailwind-font-sizes'
|
|
21
9
|
import tailwindFontStyles from '../utils/builder/tailwind-font-styles'
|
|
22
10
|
import tailwindPaddingAndMargin from '../utils/builder/tailwind-padding-margin'
|
|
23
11
|
import tailwindBorderRadius from '../utils/builder/tailwind-border-radius'
|
|
@@ -31,6 +19,7 @@ class PageBuilderClass {
|
|
|
31
19
|
// Class properties with types
|
|
32
20
|
private nextTick: Promise<void>
|
|
33
21
|
private containsPagebuilder: Element | null
|
|
22
|
+
// private pageBuilder: Element | null
|
|
34
23
|
private pageBuilderStateStore: ReturnType<typeof usePageBuilderStateStore>
|
|
35
24
|
private getTextAreaVueModel: ComputedRef<string | null>
|
|
36
25
|
private getLocalStorageItemName: ComputedRef<string | null>
|
|
@@ -45,16 +34,13 @@ class PageBuilderClass {
|
|
|
45
34
|
private getComponentArrayAddMethod: ComputedRef<string | null>
|
|
46
35
|
private NoneListernesTags: string[]
|
|
47
36
|
private delay: (ms?: number) => Promise<void>
|
|
48
|
-
private observer?: MutationObserverType
|
|
49
37
|
private hasStartedEditing: boolean = false
|
|
50
38
|
|
|
51
39
|
constructor(pageBuilderStateStore: ReturnType<typeof usePageBuilderStateStore>) {
|
|
52
40
|
this.nextTick = nextTick()
|
|
53
41
|
|
|
54
42
|
this.hasStartedEditing = false
|
|
55
|
-
|
|
56
43
|
this.containsPagebuilder = document.querySelector('#contains-pagebuilder')
|
|
57
|
-
|
|
58
44
|
this.pageBuilderStateStore = pageBuilderStateStore
|
|
59
45
|
|
|
60
46
|
this.getTextAreaVueModel = computed(() => this.pageBuilderStateStore.getTextAreaVueModel)
|
|
@@ -391,6 +377,14 @@ class PageBuilderClass {
|
|
|
391
377
|
// Add the component id to the section element
|
|
392
378
|
const section = doc.querySelector('section')
|
|
393
379
|
if (section) {
|
|
380
|
+
// Prefix all classes inside the section
|
|
381
|
+
section.querySelectorAll('[class]').forEach((el) => {
|
|
382
|
+
el.setAttribute(
|
|
383
|
+
'class',
|
|
384
|
+
this.#addTailwindPrefixToClasses(el.getAttribute('class') || '', 'pbx-'),
|
|
385
|
+
)
|
|
386
|
+
})
|
|
387
|
+
|
|
394
388
|
// Generate a unique ID using uuidv4() and assign it to the section
|
|
395
389
|
section.dataset.componentid = uuidv4()
|
|
396
390
|
|
|
@@ -655,104 +649,30 @@ class PageBuilderClass {
|
|
|
655
649
|
}
|
|
656
650
|
// border radius / end
|
|
657
651
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
let fontBase = tailwindFontSizes.fontBase.find((size: string) => {
|
|
663
|
-
return this.getElement.value?.classList.contains(size)
|
|
664
|
-
})
|
|
665
|
-
if (fontBase === undefined) {
|
|
666
|
-
fontBase = 'base:none'
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
let fontDesktop = tailwindFontSizes.fontDesktop.find((size: string) => {
|
|
670
|
-
return this.getElement.value?.classList.contains(size)
|
|
671
|
-
})
|
|
672
|
-
if (fontDesktop === undefined) {
|
|
673
|
-
fontDesktop = 'lg:none'
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
let fontTablet = tailwindFontSizes.fontTablet.find((size: string) => {
|
|
677
|
-
return this.getElement.value?.classList.contains(size)
|
|
678
|
-
})
|
|
679
|
-
if (fontTablet === undefined) {
|
|
680
|
-
fontTablet = 'md:none'
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
let fontMobile = tailwindFontSizes.fontMobile.find((size: string) => {
|
|
684
|
-
return this.getElement.value?.classList.contains(size)
|
|
685
|
-
})
|
|
686
|
-
if (fontMobile === undefined) {
|
|
687
|
-
fontMobile = 'sm:none'
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
// set fonts
|
|
691
|
-
this.pageBuilderStateStore.setFontBase(fontBase)
|
|
692
|
-
this.pageBuilderStateStore.setFontDesktop(fontDesktop)
|
|
693
|
-
this.pageBuilderStateStore.setFontTablet(fontTablet)
|
|
694
|
-
this.pageBuilderStateStore.setFontMobile(fontMobile)
|
|
695
|
-
|
|
696
|
-
const getFontBase = computed(() => {
|
|
697
|
-
return this.pageBuilderStateStore.getFontBase
|
|
698
|
-
})
|
|
699
|
-
const getFontDesktop = computed(() => {
|
|
700
|
-
return this.pageBuilderStateStore.getFontDesktop
|
|
701
|
-
})
|
|
702
|
-
const getFontTablet = computed(() => {
|
|
703
|
-
return this.pageBuilderStateStore.getFontTablet
|
|
704
|
-
})
|
|
705
|
-
const getFontMobile = computed(() => {
|
|
706
|
-
return this.pageBuilderStateStore.getFontMobile
|
|
707
|
-
})
|
|
708
|
-
|
|
709
|
-
if (userSelectedFontSize !== undefined && this.getElement.value) {
|
|
710
|
-
if (
|
|
711
|
-
!userSelectedFontSize.includes('sm:') &&
|
|
712
|
-
!userSelectedFontSize.includes('md:') &&
|
|
713
|
-
!userSelectedFontSize.includes('lg:')
|
|
714
|
-
) {
|
|
715
|
-
if (getFontBase.value) {
|
|
716
|
-
this.getElement.value.classList.remove(getFontBase.value)
|
|
717
|
-
}
|
|
718
|
-
if (!userSelectedFontSize.includes('base:none')) {
|
|
719
|
-
this.getElement.value.classList.add(userSelectedFontSize)
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
this.pageBuilderStateStore.setFontBase(userSelectedFontSize)
|
|
723
|
-
}
|
|
724
|
-
if (userSelectedFontSize.includes('lg:')) {
|
|
725
|
-
if (getFontDesktop.value) {
|
|
726
|
-
this.getElement.value.classList.remove(getFontDesktop.value)
|
|
727
|
-
}
|
|
728
|
-
if (!userSelectedFontSize.includes('lg:none')) {
|
|
729
|
-
this.getElement.value.classList.add(userSelectedFontSize)
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
this.pageBuilderStateStore.setFontDesktop(userSelectedFontSize)
|
|
733
|
-
}
|
|
734
|
-
if (userSelectedFontSize.includes('md:')) {
|
|
735
|
-
if (getFontTablet.value) {
|
|
736
|
-
this.getElement.value.classList.remove(getFontTablet.value)
|
|
737
|
-
}
|
|
738
|
-
if (!userSelectedFontSize.includes('md:none')) {
|
|
739
|
-
this.getElement.value.classList.add(userSelectedFontSize)
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
this.pageBuilderStateStore.setFontTablet(userSelectedFontSize)
|
|
743
|
-
}
|
|
744
|
-
if (userSelectedFontSize.includes('sm:')) {
|
|
745
|
-
if (getFontMobile.value) {
|
|
746
|
-
this.getElement.value.classList.remove(getFontMobile.value)
|
|
747
|
-
}
|
|
748
|
-
if (!userSelectedFontSize.includes('sm:none')) {
|
|
749
|
-
this.getElement.value.classList.add(userSelectedFontSize)
|
|
750
|
-
}
|
|
652
|
+
handleFontSizeBase(userSelectedFontSize?: string): void {
|
|
653
|
+
this.#applyElementClassChanges(userSelectedFontSize, tailwindFontSizes.fontBase, 'setFontBase')
|
|
654
|
+
}
|
|
751
655
|
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
656
|
+
handleFontSizeDesktop(userSelectedFontSize?: string): void {
|
|
657
|
+
this.#applyElementClassChanges(
|
|
658
|
+
userSelectedFontSize,
|
|
659
|
+
tailwindFontSizes.fontDesktop,
|
|
660
|
+
'setFontDesktop',
|
|
661
|
+
)
|
|
662
|
+
}
|
|
663
|
+
handleFontSizeTablet(userSelectedFontSize?: string): void {
|
|
664
|
+
this.#applyElementClassChanges(
|
|
665
|
+
userSelectedFontSize,
|
|
666
|
+
tailwindFontSizes.fontTablet,
|
|
667
|
+
'setFontTablet',
|
|
668
|
+
)
|
|
669
|
+
}
|
|
670
|
+
handleFontSizeMobile(userSelectedFontSize?: string): void {
|
|
671
|
+
this.#applyElementClassChanges(
|
|
672
|
+
userSelectedFontSize,
|
|
673
|
+
tailwindFontSizes.fontMobile,
|
|
674
|
+
'setFontMobile',
|
|
675
|
+
)
|
|
756
676
|
}
|
|
757
677
|
|
|
758
678
|
handleBackgroundOpacity(opacity?: string): void {
|
|
@@ -1525,6 +1445,25 @@ class PageBuilderClass {
|
|
|
1525
1445
|
}
|
|
1526
1446
|
}
|
|
1527
1447
|
|
|
1448
|
+
/**
|
|
1449
|
+
* Automatically add Tailwind pbx- prefix to Tailwind classes in imported HTML (if not already present),
|
|
1450
|
+
* process each element’s class attribute and update the classes accordingly.
|
|
1451
|
+
*/
|
|
1452
|
+
|
|
1453
|
+
#addTailwindPrefixToClasses(classList: string, prefix = 'pbx-'): string {
|
|
1454
|
+
return classList
|
|
1455
|
+
.split(/\s+/)
|
|
1456
|
+
.map((cls) => {
|
|
1457
|
+
if (!cls || cls.startsWith(prefix)) return cls
|
|
1458
|
+
const parts = cls.split(':')
|
|
1459
|
+
const base = parts.pop()!
|
|
1460
|
+
if (base.startsWith(prefix)) return cls
|
|
1461
|
+
// Always prefix if not already prefixed
|
|
1462
|
+
return [...parts, prefix + base].join(':')
|
|
1463
|
+
})
|
|
1464
|
+
.join(' ')
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1528
1467
|
/**
|
|
1529
1468
|
* Parse and set components from JSON or HTML data
|
|
1530
1469
|
*
|
|
@@ -1557,15 +1496,11 @@ class PageBuilderClass {
|
|
|
1557
1496
|
try {
|
|
1558
1497
|
const parsedData = JSON.parse(jsonData)
|
|
1559
1498
|
let componentsArray: ComponentObject[] = []
|
|
1560
|
-
let pageBuilderContentSavedAt: string | undefined = undefined
|
|
1561
|
-
|
|
1562
1499
|
// Support both old and new structure
|
|
1563
1500
|
if (Array.isArray(parsedData)) {
|
|
1564
1501
|
componentsArray = parsedData
|
|
1565
1502
|
} else if (parsedData && Array.isArray(parsedData.components)) {
|
|
1566
1503
|
componentsArray = parsedData.components
|
|
1567
|
-
|
|
1568
|
-
pageBuilderContentSavedAt = parsedData.pageBuilderContentSavedAt
|
|
1569
1504
|
}
|
|
1570
1505
|
|
|
1571
1506
|
let savedCurrentDesign: ComponentObject[] = []
|
|
@@ -1577,6 +1512,14 @@ class PageBuilderClass {
|
|
|
1577
1512
|
const section = doc.querySelector('section')
|
|
1578
1513
|
|
|
1579
1514
|
if (section) {
|
|
1515
|
+
// Process all elements inside section to add prefix to classes
|
|
1516
|
+
section.querySelectorAll('[class]').forEach((el) => {
|
|
1517
|
+
el.setAttribute(
|
|
1518
|
+
'class',
|
|
1519
|
+
this.#addTailwindPrefixToClasses(el.getAttribute('class') || '', 'pbx-'),
|
|
1520
|
+
)
|
|
1521
|
+
})
|
|
1522
|
+
|
|
1580
1523
|
// Ensure data-componentid exists
|
|
1581
1524
|
if (!section.hasAttribute('data-componentid')) {
|
|
1582
1525
|
const newId = uuidv4()
|
|
@@ -1730,7 +1673,10 @@ class PageBuilderClass {
|
|
|
1730
1673
|
// border radius
|
|
1731
1674
|
this.handleBorderRadiusBottomRight(undefined)
|
|
1732
1675
|
// handle font size
|
|
1733
|
-
this.
|
|
1676
|
+
this.handleFontSizeBase(undefined)
|
|
1677
|
+
this.handleFontSizeDesktop(undefined)
|
|
1678
|
+
this.handleFontSizeTablet(undefined)
|
|
1679
|
+
this.handleFontSizeMobile(undefined)
|
|
1734
1680
|
// handle font weight
|
|
1735
1681
|
this.handleFontWeight(undefined)
|
|
1736
1682
|
// handle font family
|