@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.
- package/LICENSE +21 -0
- package/README.md +470 -0
- package/dist/android-chrome-192x192.png +0 -0
- package/dist/android-chrome-512x512.png +0 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/browserconfig.xml +9 -0
- package/dist/components.json +36 -0
- package/dist/favicon-16x16.png +0 -0
- package/dist/favicon-32x32.png +0 -0
- package/dist/favicon.ico +0 -0
- package/dist/home/features.jpg +0 -0
- package/dist/home/page-builder-example.jpg +0 -0
- package/dist/logo/logo.svg +49 -0
- package/dist/mstile-310x150.png +0 -0
- package/dist/mstile-310x310.png +0 -0
- package/dist/page-builder/2-images-text-top.png +0 -0
- package/dist/page-builder/2-images.png +0 -0
- package/dist/page-builder/3-images.png +0 -0
- package/dist/page-builder/6-images.png +0 -0
- package/dist/page-builder/image.png +0 -0
- package/dist/page-builder/placeholder.jpg +0 -0
- package/dist/page-builder/two-vertical-images.png +0 -0
- package/dist/placeholder_image.jpg +0 -0
- package/dist/robots.txt +2 -0
- package/dist/vue-website-page-builder.css +1 -0
- package/dist/vue-website-page-builder.js +24794 -0
- package/dist/vue-website-page-builder.umd.cjs +195 -0
- package/package.json +99 -0
- package/src/App.vue +122 -0
- package/src/Components/Homepage/Footer.vue +42 -0
- package/src/Components/Homepage/HomeSection.vue +540 -0
- package/src/Components/Homepage/Navbar.vue +30 -0
- package/src/Components/Layouts/FullWidthElement.vue +34 -0
- package/src/Components/Loaders/FullScreenSpinner.vue +13 -0
- package/src/Components/Loaders/SmallUniversalSpinner.vue +26 -0
- package/src/Components/MediaLibrary/SidebarUnsplash.vue +40 -0
- package/src/Components/MediaLibrary/Unsplash.vue +306 -0
- package/src/Components/Modals/DynamicModal.vue +476 -0
- package/src/Components/Modals/MediaLibraryModal.vue +418 -0
- package/src/Components/Modals/Modal.vue +102 -0
- package/src/Components/Modals/PageBuilderModal.vue +233 -0
- package/src/Components/Modals/PageBuilderPreviewModal.vue +123 -0
- package/src/Components/PageBuilder/DropdownsPlusToggles/OptionsDropdown.vue +202 -0
- package/src/Components/PageBuilder/DropdownsPlusToggles/SaveDesign.vue +7 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +91 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +163 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +164 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +80 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ComponentTopMenu.vue +93 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/DeleteElement.vue +42 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/EditGetElement.vue +338 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ElementEditor.vue +58 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ImageEditor.vue +82 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/LinkEditor.vue +301 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +109 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +107 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +16 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/PaddingPlusMargin.vue +134 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/TextColorEditor.vue +91 -0
- package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +199 -0
- package/src/Components/PageBuilder/EditorMenu/EditorAccordion.vue +42 -0
- package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +113 -0
- package/src/Components/PageBuilder/Settings/AdvancedPageBuilderSettings.vue +229 -0
- package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +101 -0
- package/src/Components/PageBuilder/Slidebars/SlideOverRight.vue +91 -0
- package/src/Components/PageBuilder/Slidebars/SlideOverRightParent.vue +91 -0
- package/src/Components/Search/SearchComponents.vue +259 -0
- package/src/Components/TipTap/TipTap.vue +32 -0
- package/src/Components/TipTap/TipTapInput.vue +325 -0
- package/src/PageBuilder/PageBuilder.vue +347 -0
- package/src/PageBuilder/Preview.vue +24 -0
- package/src/composables/PageBuilder.ts +1483 -0
- package/src/composables/delay.ts +5 -0
- package/src/composables/extract-text-content-html.ts +34 -0
- package/src/composables/isObject.ts +6 -0
- package/src/composables/usePromise.ts +10 -0
- package/src/composables/vueFetch.ts +278 -0
- package/src/css/app.css +614 -0
- package/src/index.ts +16 -0
- package/src/main.ts +11 -0
- package/src/stores/media-library.ts +34 -0
- package/src/stores/page-builder-state.ts +461 -0
- package/src/stores/unsplash.ts +107 -0
- package/src/stores/user.ts +30 -0
- package/src/types/global.d.ts +49 -0
- package/src/utils/builder/compiledCSS.ts +2205 -0
- package/src/utils/builder/html-doc-declaration-with-components.ts +7 -0
- package/src/utils/builder/html-elements/componentHelpers.ts +101 -0
- package/src/utils/builder/tailwaind-colors.ts +503 -0
- package/src/utils/builder/tailwind-border-radius.ts +67 -0
- package/src/utils/builder/tailwind-border-style-width-color.ts +272 -0
- package/src/utils/builder/tailwind-font-sizes.ts +76 -0
- package/src/utils/builder/tailwind-font-styles.ts +24 -0
- package/src/utils/builder/tailwind-opacities.ts +45 -0
- 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>
|