@myissue/vue-website-page-builder 3.0.1

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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +470 -0
  3. package/dist/android-chrome-192x192.png +0 -0
  4. package/dist/android-chrome-512x512.png +0 -0
  5. package/dist/apple-touch-icon.png +0 -0
  6. package/dist/browserconfig.xml +9 -0
  7. package/dist/components.json +36 -0
  8. package/dist/favicon-16x16.png +0 -0
  9. package/dist/favicon-32x32.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/home/features.jpg +0 -0
  12. package/dist/home/page-builder-example.jpg +0 -0
  13. package/dist/logo/logo.svg +49 -0
  14. package/dist/mstile-310x150.png +0 -0
  15. package/dist/mstile-310x310.png +0 -0
  16. package/dist/page-builder/2-images-text-top.png +0 -0
  17. package/dist/page-builder/2-images.png +0 -0
  18. package/dist/page-builder/3-images.png +0 -0
  19. package/dist/page-builder/6-images.png +0 -0
  20. package/dist/page-builder/image.png +0 -0
  21. package/dist/page-builder/placeholder.jpg +0 -0
  22. package/dist/page-builder/two-vertical-images.png +0 -0
  23. package/dist/placeholder_image.jpg +0 -0
  24. package/dist/robots.txt +2 -0
  25. package/dist/vue-website-page-builder.css +1 -0
  26. package/dist/vue-website-page-builder.js +24794 -0
  27. package/dist/vue-website-page-builder.umd.cjs +195 -0
  28. package/package.json +99 -0
  29. package/src/App.vue +122 -0
  30. package/src/Components/Homepage/Footer.vue +42 -0
  31. package/src/Components/Homepage/HomeSection.vue +540 -0
  32. package/src/Components/Homepage/Navbar.vue +30 -0
  33. package/src/Components/Layouts/FullWidthElement.vue +34 -0
  34. package/src/Components/Loaders/FullScreenSpinner.vue +13 -0
  35. package/src/Components/Loaders/SmallUniversalSpinner.vue +26 -0
  36. package/src/Components/MediaLibrary/SidebarUnsplash.vue +40 -0
  37. package/src/Components/MediaLibrary/Unsplash.vue +306 -0
  38. package/src/Components/Modals/DynamicModal.vue +476 -0
  39. package/src/Components/Modals/MediaLibraryModal.vue +418 -0
  40. package/src/Components/Modals/Modal.vue +102 -0
  41. package/src/Components/Modals/PageBuilderModal.vue +233 -0
  42. package/src/Components/Modals/PageBuilderPreviewModal.vue +123 -0
  43. package/src/Components/PageBuilder/DropdownsPlusToggles/OptionsDropdown.vue +202 -0
  44. package/src/Components/PageBuilder/DropdownsPlusToggles/SaveDesign.vue +7 -0
  45. package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +91 -0
  46. package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +163 -0
  47. package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +164 -0
  48. package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +80 -0
  49. package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +93 -0
  50. package/src/Components/PageBuilder/EditorMenu/Editables/DeleteElement.vue +42 -0
  51. package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +338 -0
  52. package/src/Components/PageBuilder/EditorMenu/Editables/ElementEditor.vue +58 -0
  53. package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +82 -0
  54. package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +301 -0
  55. package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +109 -0
  56. package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +107 -0
  57. package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +16 -0
  58. package/src/Components/PageBuilder/EditorMenu/Editables/PaddingPlusMargin.vue +134 -0
  59. package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +91 -0
  60. package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +199 -0
  61. package/src/Components/PageBuilder/EditorMenu/EditorAccordion.vue +42 -0
  62. package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +113 -0
  63. package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +229 -0
  64. package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +101 -0
  65. package/src/Components/PageBuilder/Slidebars/SlideOverRight.vue +91 -0
  66. package/src/Components/PageBuilder/Slidebars/SlideOverRightParent.vue +91 -0
  67. package/src/Components/Search/SearchComponents.vue +259 -0
  68. package/src/Components/TipTap/TipTap.vue +32 -0
  69. package/src/Components/TipTap/TipTapInput.vue +325 -0
  70. package/src/PageBuilder/PageBuilder.vue +347 -0
  71. package/src/PageBuilder/Preview.vue +24 -0
  72. package/src/composables/PageBuilder.ts +1483 -0
  73. package/src/composables/delay.ts +5 -0
  74. package/src/composables/extract-text-content-html.ts +34 -0
  75. package/src/composables/isObject.ts +6 -0
  76. package/src/composables/usePromise.ts +10 -0
  77. package/src/composables/vueFetch.ts +278 -0
  78. package/src/css/app.css +614 -0
  79. package/src/index.ts +16 -0
  80. package/src/main.ts +11 -0
  81. package/src/stores/media-library.ts +34 -0
  82. package/src/stores/page-builder-state.ts +461 -0
  83. package/src/stores/unsplash.ts +107 -0
  84. package/src/stores/user.ts +30 -0
  85. package/src/types/global.d.ts +49 -0
  86. package/src/utils/builder/compiledCSS.ts +2205 -0
  87. package/src/utils/builder/html-doc-declaration-with-components.ts +7 -0
  88. package/src/utils/builder/html-elements/componentHelpers.ts +101 -0
  89. package/src/utils/builder/tailwaind-colors.ts +503 -0
  90. package/src/utils/builder/tailwind-border-radius.ts +67 -0
  91. package/src/utils/builder/tailwind-border-style-width-color.ts +272 -0
  92. package/src/utils/builder/tailwind-font-sizes.ts +76 -0
  93. package/src/utils/builder/tailwind-font-styles.ts +24 -0
  94. package/src/utils/builder/tailwind-opacities.ts +45 -0
  95. package/src/utils/builder/tailwind-padding-margin.ts +159 -0
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@myissue/vue-website-page-builder",
3
+ "version": "v3.0.1",
4
+ "description": "🚧 DEVELOPMENT VERSION - Vue.js page builder component with drag & drop functionality. Not ready for production use.",
5
+ "type": "module",
6
+ "main": "./dist/vue-website-page-builder.umd.cjs",
7
+ "module": "./dist/vue-website-page-builder.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "src",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/vue-website-page-builder.js",
19
+ "require": "./dist/vue-website-page-builder.umd.cjs"
20
+ },
21
+ "./style.css": "./dist/vue-website-page-builder.css"
22
+ },
23
+ "keywords": [
24
+ "vue",
25
+ "vue3",
26
+ "page-builder",
27
+ "drag-drop",
28
+ "website-builder",
29
+ "components",
30
+ "development"
31
+ ],
32
+ "author": {
33
+ "name": "qaiswardag",
34
+ "url": "https://github.com/qaiswardag"
35
+ },
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/qaiswardag/vue-website-page-builder.git"
40
+ },
41
+ "bugs": {
42
+ "url": "https://github.com/qaiswardag/vue-website-page-builder/issues"
43
+ },
44
+ "homepage": "https://github.com/qaiswardag/vue-website-page-builder#readme",
45
+ "engines": {
46
+ "node": ">=18.0.0",
47
+ "npm": ">=8.0.0"
48
+ },
49
+ "scripts": {
50
+ "dev": "vite",
51
+ "build": "run-p type-check \"build-only {@}\" --",
52
+ "build:lib": "vite build --mode lib",
53
+ "preview": "vite preview",
54
+ "build-only": "vite build",
55
+ "type-check": "vue-tsc --build",
56
+ "lint": "eslint . --fix",
57
+ "format": "prettier --write src/",
58
+ "prepublishOnly": "npm run build:lib"
59
+ },
60
+ "dependencies": {
61
+ "@headlessui/vue": "^1.7.16",
62
+ "@tiptap/extension-bold": "^2.1.10",
63
+ "@tiptap/extension-heading": "^2.1.10",
64
+ "@tiptap/extension-link": "^2.1.10",
65
+ "@tiptap/extension-list-item": "^2.1.10",
66
+ "@tiptap/pm": "^2.1.10",
67
+ "@tiptap/starter-kit": "^2.1.10",
68
+ "@tiptap/vue-3": "^2.1.10",
69
+ "@vuepic/vue-datepicker": "^7.2.0",
70
+ "date-fns": "^2.30.0",
71
+ "pinia": "^2.1.7",
72
+ "uuid": "^9.0.0",
73
+ "vue": "^3.5.13"
74
+ },
75
+ "devDependencies": {
76
+ "@rushstack/eslint-patch": "^1.8.0",
77
+ "@tailwindcss/forms": "^0.5.8",
78
+ "@tailwindcss/typography": "^0.5.14",
79
+ "@tsconfig/node22": "^22.0.1",
80
+ "@types/node": "^22.14.0",
81
+ "@types/uuid": "^10.0.0",
82
+ "@vitejs/plugin-vue": "^5.2.3",
83
+ "@vue/eslint-config-prettier": "^10.2.0",
84
+ "@vue/eslint-config-typescript": "^14.5.0",
85
+ "@vue/tsconfig": "^0.7.0",
86
+ "autoprefixer": "^10.4.19",
87
+ "eslint": "^9.22.0",
88
+ "eslint-plugin-vue": "~10.0.0",
89
+ "jiti": "^2.4.2",
90
+ "npm-run-all2": "^7.0.2",
91
+ "postcss": "^8.4.39",
92
+ "prettier": "3.5.3",
93
+ "tailwindcss": "^3.4.6",
94
+ "typescript": "~5.8.0",
95
+ "vite": "^6.2.4",
96
+ "vite-plugin-vue-devtools": "^7.7.2",
97
+ "vue-tsc": "^2.2.8"
98
+ }
99
+ }
package/src/App.vue ADDED
@@ -0,0 +1,122 @@
1
+ <script setup>
2
+ import { ref, computed, nextTick, onBeforeMount } from 'vue'
3
+ import PageBuilderModal from '@/Components/Modals/PageBuilderModal.vue'
4
+ import HomeSection from '@/Components/Homepage/HomeSection.vue'
5
+ import Footer from '@/Components/Homepage/Footer.vue'
6
+ import Navbar from '@/Components/Homepage/Navbar.vue'
7
+ import PageBuilderView from '@/PageBuilder/PageBuilder.vue'
8
+ import PageBuilder from '@/composables/PageBuilder.ts'
9
+ import FullScreenSpinner from '@/Components/Loaders/FullScreenSpinner.vue'
10
+ import { usePageBuilderStateStore } from '@/stores/page-builder-state'
11
+ import { useUserStore } from '@/stores/user'
12
+ import { useMediaLibraryStore } from '@/stores/media-library'
13
+
14
+ const mediaLibraryStore = useMediaLibraryStore()
15
+ const pageBuilderStateStore = usePageBuilderStateStore()
16
+ const userStore = useUserStore()
17
+ const openPageBuilder = ref(false)
18
+
19
+ const pageBuilderPrimaryHandler = ref(null)
20
+ const pageBuilderSecondaryHandler = ref(null)
21
+ const pageBuilder = new PageBuilder(pageBuilderStateStore, mediaLibraryStore)
22
+ const formType = ref('create')
23
+
24
+ const getIsLoading = computed(() => {
25
+ return userStore.getIsLoading
26
+ })
27
+
28
+ const pathPageBuilderStorageCreate = `page-builder-create-post`
29
+ const pathPageBuilderStorageUpdate = `page-builder-update-post-id-1`
30
+
31
+ const handlePageBuilder = async function () {
32
+ userStore.setIsLoading(true)
33
+
34
+ await nextTick()
35
+ openPageBuilder.value = true
36
+
37
+ if (formType.value === 'create') {
38
+ pageBuilderStateStore.setComponents([])
39
+ pageBuilder.areComponentsStoredInLocalStorage()
40
+ }
41
+
42
+ // handle click
43
+ pageBuilderPrimaryHandler.value = async function () {
44
+ userStore.setIsLoading(true)
45
+
46
+ if (formType.value === 'update') {
47
+ await nextTick()
48
+ pageBuilder.saveComponentsLocalStorageUpdate()
49
+ }
50
+
51
+ openPageBuilder.value = false
52
+ userStore.setIsLoading(false)
53
+ }
54
+
55
+ // handle click
56
+ pageBuilderSecondaryHandler.value = async function () {
57
+ userStore.setIsLoading(true)
58
+
59
+ // save to local storage if new resource
60
+ if (formType.value === 'create') {
61
+ await nextTick()
62
+ pageBuilder.saveComponentsLocalStorage()
63
+ await nextTick()
64
+ }
65
+ // save to local storage if update
66
+ if (formType.value === 'update') {
67
+ await nextTick()
68
+ pageBuilder.synchronizeDOMAndComponents()
69
+ await nextTick()
70
+ }
71
+
72
+ openPageBuilder.value = false
73
+
74
+ userStore.setIsLoading(false)
75
+ }
76
+
77
+ userStore.setIsLoading(false)
78
+
79
+ // end modal
80
+ }
81
+ // Builder # End
82
+ const handleDraftForUpdate = async function () {
83
+ userStore.setIsLoading(true)
84
+
85
+ if (formType.value === 'update') {
86
+ await nextTick()
87
+ pageBuilder.areComponentsStoredInLocalStorageUpdate()
88
+ await nextTick()
89
+ pageBuilder.setEventListenersForElements()
90
+
91
+ userStore.setIsLoading(false)
92
+ }
93
+ }
94
+
95
+ onBeforeMount(() => {
96
+ // Define local storage key name before on mount
97
+ pageBuilderStateStore.setLocalStorageItemName(pathPageBuilderStorageCreate)
98
+
99
+ // Define local storage key name before on mount
100
+ pageBuilderStateStore.setLocalStorageItemNameUpdate(pathPageBuilderStorageUpdate)
101
+ })
102
+ </script>
103
+
104
+ <template>
105
+ <teleport to="body">
106
+ <FullScreenSpinner v-if="getIsLoading"></FullScreenSpinner>
107
+ </teleport>
108
+ <PageBuilderModal
109
+ :show="openPageBuilder"
110
+ updateOrCreate="create"
111
+ @pageBuilderPrimaryHandler="pageBuilderPrimaryHandler"
112
+ @pageBuilderSecondaryHandler="pageBuilderSecondaryHandler"
113
+ @handleDraftForUpdate="handleDraftForUpdate"
114
+ >
115
+ <PageBuilderView></PageBuilderView>
116
+ </PageBuilderModal>
117
+
118
+ <Navbar @handleButton="handlePageBuilder"></Navbar>
119
+ <HomeSection @handleButton="handlePageBuilder"></HomeSection>
120
+
121
+ <Footer></Footer>
122
+ </template>
@@ -0,0 +1,42 @@
1
+ <script setup>
2
+ const version = __APP_VERSION__;
3
+ </script>
4
+
5
+ <template>
6
+ <div class="flex justify-between gap-2 bg-red-100 py-10 lg:px-12 px-4">
7
+ <div>
8
+ <p class="myPrimaryParagraph">
9
+ <a
10
+ href="https://github.com/qaiswardag/vue-website-page-builder"
11
+ target="_blank"
12
+ class="myPrimaryLink text-myPrimaryDarkGrayColor"
13
+ >Qais Wardag | GitHub
14
+ </a>
15
+ </p>
16
+ <p class="myPrimaryParagraph mt-2">
17
+ <span class="text-myPrimaryDarkGrayColor text-xs">{{ version }}</span>
18
+ </p>
19
+ </div>
20
+ <div>
21
+ <a
22
+ href="https://github.com/qaiswardag/vue-website-page-builder"
23
+ target="_blank"
24
+ class="text-myPrimaryDarkGrayColor"
25
+ >
26
+ <span class="sr-only">GitHub</span>
27
+ <svg
28
+ class="h-6 w-6"
29
+ fill="currentColor"
30
+ viewBox="0 0 24 24"
31
+ aria-hidden="true"
32
+ >
33
+ <path
34
+ fill-rule="evenodd"
35
+ d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
36
+ clip-rule="evenodd"
37
+ ></path>
38
+ </svg>
39
+ </a>
40
+ </div>
41
+ </div>
42
+ </template>