@myissue/vue-website-page-builder 3.2.86 → 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.
Files changed (58) hide show
  1. package/README.md +46 -3
  2. package/dist/vue-website-page-builder.css +1 -1
  3. package/dist/vue-website-page-builder.js +9217 -9022
  4. package/dist/vue-website-page-builder.umd.cjs +38 -38
  5. package/package.json +2 -2
  6. package/src/Components/Homepage/Footer.vue +9 -7
  7. package/src/Components/Homepage/Navbar.vue +6 -4
  8. package/src/Components/Layouts/FullWidthElement.vue +6 -6
  9. package/src/Components/Modals/BuilderComponents.vue +12 -6
  10. package/src/Components/Modals/DynamicModalBuilder.vue +39 -47
  11. package/src/Components/Modals/MediaLibraryModal.vue +2 -2
  12. package/src/Components/Modals/ModalBuilder.vue +23 -19
  13. package/src/Components/PageBuilder/DefaultComponents/DefaultBuilderComponents.vue +29 -17
  14. package/src/Components/PageBuilder/DefaultComponents/DefaultMediaLibraryComponent.vue +2 -2
  15. package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +22 -20
  16. package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +17 -17
  17. package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +28 -26
  18. package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +13 -11
  19. package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +5 -5
  20. package/src/Components/PageBuilder/EditorMenu/Editables/DeleteElement.vue +4 -4
  21. package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +22 -19
  22. package/src/Components/PageBuilder/EditorMenu/Editables/ElementEditor.vue +11 -11
  23. package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +4 -4
  24. package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +74 -66
  25. package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +26 -21
  26. package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +26 -21
  27. package/src/Components/PageBuilder/EditorMenu/Editables/Margin.vue +101 -0
  28. package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +2 -3
  29. package/src/Components/PageBuilder/EditorMenu/Editables/{PaddingPlusMargin.vue → Padding.vue} +8 -41
  30. package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +22 -20
  31. package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +63 -58
  32. package/src/Components/PageBuilder/EditorMenu/EditorAccordion.vue +7 -4
  33. package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +24 -19
  34. package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +132 -98
  35. package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +216 -146
  36. package/src/Components/PageBuilder/ToolbarOption/ToolbarOption.vue +14 -14
  37. package/src/Components/TipTap/TipTap.vue +4 -4
  38. package/src/Components/TipTap/TipTapInput.vue +39 -33
  39. package/src/DemoComponents/DemoBuilderComponents.vue +1 -1
  40. package/src/DemoComponents/DemoUnsplash.vue +79 -56
  41. package/src/DemoComponents/HomeSection.vue +20 -16
  42. package/src/PageBuilder/PageBuilder.vue +62 -57
  43. package/src/PageBuilder/Preview.vue +4 -20
  44. package/src/composables/PageBuilderClass.ts +66 -120
  45. package/src/css/app.css +161 -448
  46. package/src/css/dev-global.css +137 -0
  47. package/src/main.ts +1 -0
  48. package/src/tailwind-safelist.html +1 -1
  49. package/src/utils/builder/tailwaind-colors.ts +488 -488
  50. package/src/utils/builder/tailwind-border-radius.ts +40 -40
  51. package/src/utils/builder/tailwind-border-style-width-color.ts +231 -231
  52. package/src/utils/builder/tailwind-font-sizes.ts +56 -57
  53. package/src/utils/builder/tailwind-font-styles.ts +44 -11
  54. package/src/utils/builder/tailwind-opacities.ts +30 -30
  55. package/src/utils/builder/tailwind-padding-margin.ts +136 -136
  56. package/dist/components.json +0 -36
  57. package/src/Components/Loaders/FullScreenSpinner.vue +0 -9
  58. package/src/Components/Loaders/SmallUniversalSpinner.vue +0 -26
@@ -1,23 +1,11 @@
1
1
  // Type definitions
2
- import type {
3
- ComponentObject,
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
- handleFontSize(userSelectedFontSize?: string): void {
659
- if (!userSelectedFontSize) return
660
- if (!this.getElement.value) return
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
- this.pageBuilderStateStore.setFontMobile(userSelectedFontSize)
753
- }
754
- this.pageBuilderStateStore.setElement(this.getElement.value)
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.handleFontSize(undefined)
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