@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
@@ -0,0 +1,614 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+ @layer components {
5
+ /*
6
+ |--------------------------------------------------------------------------
7
+ | Widgets
8
+ |--------------------------------------------------------------------------
9
+ */
10
+ .myPrimaryWidget {
11
+ @apply py-8 px-4 border border-myPrimaryLightGrayColor rounded-md bg-white;
12
+ }
13
+
14
+ /*
15
+ |--------------------------------------------------------------------------
16
+ | Modules
17
+ |--------------------------------------------------------------------------
18
+ */
19
+
20
+ .myModulePyMargin {
21
+ @apply md:mb-0 mb-0;
22
+ }
23
+ .myModulePadding {
24
+ @apply md:py-28 py-16;
25
+ }
26
+
27
+ .myPrimaryWidthScreenModule {
28
+ @apply myModulePyMargin myModulePadding;
29
+ }
30
+ .myPrimaryModule {
31
+ @apply max-w-7xl mx-auto myModulePyMargin myModulePadding;
32
+ }
33
+ .myPrimaryContentSection {
34
+ @apply max-w-7xl mx-auto md:px-4 px-4 lg:pb-10 md:pb-8 pb-6;
35
+ }
36
+
37
+ /*
38
+ |--------------------------------------------------------------------------
39
+ | Helpers
40
+ |--------------------------------------------------------------------------
41
+ */
42
+ .myPrimarySection {
43
+ @apply lg:pb-8 lg:pt-20 md:py-8 py-8;
44
+ }
45
+
46
+ .myPrimaryWarningAlertMessage {
47
+ @apply myPrimarySection myTertiaryHeader text-yellow-400 text-center;
48
+ }
49
+ .myFocus {
50
+ @apply focus-within:border-2 focus-within:border-myPrimaryBrandColor;
51
+ }
52
+ .myActiveLinkColor {
53
+ @apply text-myPrimaryBrandColor;
54
+ }
55
+
56
+ /*
57
+ |--------------------------------------------------------------------------
58
+ | Tags
59
+ |--------------------------------------------------------------------------
60
+ */
61
+ .myPrimaryTag {
62
+ @apply min-h-[3rem] my-2 px-3 py-2
63
+ text-xs break-all
64
+ inline-flex gap-1 items-center justify-center
65
+ rounded-full border border-transparent
66
+ text-myPrimaryDarkGrayColor bg-myPrimaryLightMediumGrayColor
67
+ sm:w-auto shadow-sm hover:shadow;
68
+ }
69
+ /*
70
+ |--------------------------------------------------------------------------
71
+ | Thumbnail
72
+ |--------------------------------------------------------------------------
73
+ */
74
+ .myPrimarythumbnailLogo {
75
+ @apply mx-auto block mt-2 mb-6 w-40 transition-all rounded-md object-cover cursor-pointer;
76
+ }
77
+ .myPrimarythumbnailInsertPreview {
78
+ @apply block md:h-16 md:w-16 h-16 w-16 hover:shadow-sm transition-all cursor-pointer rounded-full object-cover;
79
+ }
80
+ /*
81
+ |--------------------------------------------------------------------------
82
+ | Primary paragraphs
83
+ |--------------------------------------------------------------------------
84
+ */
85
+ .myPrimaryParagraph {
86
+ @apply font-normal text-myPrimaryDarkGrayColor lg:text-base text-sm;
87
+ }
88
+
89
+ .myPrimaryParagraphError {
90
+ @apply myPrimaryParagraph mt-1 italic text-myPrimaryErrorColor;
91
+ }
92
+
93
+ /*
94
+ |--------------------------------------------------------------------------
95
+ | Headers
96
+ |--------------------------------------------------------------------------
97
+ */
98
+
99
+ .myPrimaryHeader {
100
+ @apply lg:text-7xl md:text-6xl text-5xl font-medium break-words lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor;
101
+ }
102
+
103
+ .mySecondaryHeader {
104
+ @apply font-['Cormorant'] font-medium break-words lg:text-5xl md:text-4xl text-3xl lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor;
105
+ }
106
+
107
+ .myTertiaryHeader {
108
+ @apply font-medium break-words lg:text-3xl md:text-2xl text-2xl lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor;
109
+ }
110
+
111
+ .myQuaternaryHeader {
112
+ @apply font-medium break-words lg:text-xl md:text-lg text-base lg:mb-4 md:mb-2 mb-2 text-myPrimaryDarkGrayColor;
113
+ }
114
+
115
+ .video-background {
116
+ position: absolute;
117
+ top: 0;
118
+ left: 0;
119
+ width: 100%;
120
+ height: 100%;
121
+ overflow: hidden;
122
+ z-index: -1;
123
+ }
124
+
125
+ .video-background video {
126
+ min-width: 100%;
127
+ min-height: 100%;
128
+ width: auto;
129
+ height: auto;
130
+ position: absolute;
131
+ top: 50%;
132
+ left: 50%;
133
+ transform: translate(-50%, -50%);
134
+ }
135
+
136
+ /*
137
+ |--------------------------------------------------------------------------
138
+ | Links
139
+ |--------------------------------------------------------------------------
140
+ */
141
+ .myPrimaryLink {
142
+ @apply text-myPrimaryLinkColor
143
+ focus:outline-none
144
+ focus:ring-0 focus:ring-myPrimaryLinkColor
145
+ focus-visible:ring-0 focus-visible:ring-myPrimaryLinkColor cursor-pointer;
146
+ }
147
+
148
+ .myPrimaryActiveLink {
149
+ @apply text-red-600 text-sm
150
+ focus:outline-none
151
+ focus:ring-0 focus:ring-red-500
152
+ focus-visible:ring-0 focus-visible:ring-red-500;
153
+ }
154
+
155
+ /*
156
+ |--------------------------------------------------------------------------
157
+ | Buttons
158
+ |--------------------------------------------------------------------------
159
+ */
160
+
161
+ .myPrimaryMenuTextButton {
162
+ @apply lg:flex lg:gap-2 lg:items-center focus:outline-none cursor-pointer rounded-full px-1.5 py-1.5 font-medium;
163
+ }
164
+ .myRadio {
165
+ @apply w-5 h-5 text-myPrimaryBrandColor bg-myPrimaryLightGrayColor border-gray-300 focus:ring-myPrimaryBrandColor dark:focus:ring-myPrimaryBrandColor dark:ring-offset-gray-800 focus:ring-2 dark:bg-myPrimaryDarkGrayColor dark:border-gray-600;
166
+ }
167
+
168
+ .myPrimaryButton {
169
+ @apply min-h-[3rem] lg:px-4 lg:py-3 px-3 py-3
170
+ sm:text-sm text-xs whitespace-nowrap break-keep font-medium inline-flex gap-1 items-center justify-center rounded-full border border-transparent bg-myPrimaryLinkColor text-white shadow-sm hover:bg-myPrimaryLinkColor sm:w-auto
171
+ focus:outline-none focus:ring-2 focus:ring-myPrimaryLinkColor focus:ring-offset-2
172
+ focus-visible:ring-2 focus-visible:ring-myPrimaryLinkColor;
173
+ }
174
+
175
+ .mySecondaryButton {
176
+ @apply myPrimaryButton bg-myPrimaryLightMediumGrayColor hover:bg-myPrimaryLightMediumGrayColor hover:bg-opacity-90 focus:ring-myPrimaryLightGrayColor text-myPrimaryDarkGrayColor hover:text-myPrimaryDarkGrayColor shadow-sm;
177
+ }
178
+
179
+ .myPrimaryDeleteButton {
180
+ @apply myPrimaryButton bg-myPrimaryErrorColor hover:bg-myPrimaryErrorColor focus:ring-myPrimaryErrorColor;
181
+ }
182
+
183
+ .myPrimaryToggleButton {
184
+ @apply w-full inline-flex items-center justify-center px-4 py-2 sm:text-sm text-sm font-semibold text-myPrimaryDarkGrayColor shadow-sm focus:outline-none focus:ring-2 focus:ring-myPrimaryBrandColor focus:ring-offset-2 bg-myPrimaryLightGrayColor hover:bg-myPrimaryBrandColor hover:text-white;
185
+ }
186
+ /*
187
+ |--------------------------------------------------------------------------
188
+ | Buttons With no background
189
+ |--------------------------------------------------------------------------
190
+ */
191
+
192
+ .myPrimaryButtonNoBackground {
193
+ @apply myPrimaryParagraph font-medium text-myPrimaryBrandColor
194
+ focus:outline-none cursor-pointer;
195
+ }
196
+ /*
197
+ |--------------------------------------------------------------------------
198
+ | Icons
199
+ |--------------------------------------------------------------------------
200
+ */
201
+ .mySmallIcon {
202
+ @apply shrink-0 h-4 w-4 m-2 stroke-[1.5px] flex justify-center items-center;
203
+ }
204
+ .myMediumIcon {
205
+ @apply shrink-0 h-6 w-6 stroke-[1.5px] flex justify-center items-center;
206
+ }
207
+
208
+ /*
209
+ |--------------------------------------------------------------------------
210
+ | Tables
211
+ |--------------------------------------------------------------------------
212
+ */
213
+
214
+ .myTableContainerPlusScrollButton {
215
+ @apply relative p-2 border-gray-400 border rounded;
216
+ }
217
+ .myScrollButtonContainer {
218
+ @apply sticky z-10 h-12 top-16 left-0 right-0 flex items-center justify-center myPrimaryGap bg-myPrimaryLightGrayColor bg-opacity-50;
219
+ }
220
+ .myTableContainer {
221
+ @apply overflow-x-auto myPrimarySection py-0 px-0;
222
+ }
223
+ .myTableSubContainer {
224
+ @apply min-w-full align-middle;
225
+ }
226
+ .myPrimaryTable {
227
+ @apply text-sm divide-y divide-myPrimaryLightGrayColor table-fixed min-w-full text-left mb-20;
228
+ }
229
+ .myPrimaryTableCaption {
230
+ @apply bg-white myPrimaryParagraph py-4;
231
+ }
232
+ .myPrimaryTableTHead {
233
+ @apply bg-gray-50;
234
+ }
235
+ .myPrimaryTableTr {
236
+ @apply divide-x divide-gray-300;
237
+ }
238
+ .myPrimaryTableTh {
239
+ @apply px-6 py-4 font-normal text-gray-900;
240
+ }
241
+ .myPrimaryTableTBody {
242
+ @apply divide-y divide-gray-100 border-t border-gray-100 bg-white;
243
+ }
244
+ .myPrimaryTableTBodyTr {
245
+ @apply divide-x myPrimaryParagraph bg-white hover:bg-red-50;
246
+ }
247
+ .myPrimaryTableTBodyTd {
248
+ @apply px-6 py-4 whitespace-pre myPrimaryParagraph;
249
+ }
250
+ .myPrimaryResourceTableBodyTdTitle {
251
+ @apply whitespace-normal;
252
+ }
253
+
254
+ /*
255
+ |--------------------------------------------------------------------------
256
+ | Grid
257
+ |--------------------------------------------------------------------------
258
+ */
259
+ .myPrimaryGap {
260
+ @apply gap-4;
261
+ }
262
+
263
+ /*
264
+ |--------------------------------------------------------------------------
265
+ | Breadcrumbs
266
+ |--------------------------------------------------------------------------
267
+ */
268
+
269
+ .myBreadcrumbsContainer {
270
+ @apply flex items-center justify-start gap-1 py-2 pl-4 pr-2 font-medium;
271
+ }
272
+
273
+ /*
274
+ |--------------------------------------------------------------------------
275
+ | Search Bars
276
+ |--------------------------------------------------------------------------
277
+ */
278
+
279
+ .mysearchBarWithOptions {
280
+ @apply flex gap-2 pl-4 rounded-full border border-gray-200 bg-myPrimaryLightGrayColor;
281
+ }
282
+
283
+ .myPrimarySearchInput {
284
+ @apply myPrimaryInput text-sm py-4 border-none outline-none pl-10 h-full bg-transparent focus:ring-0 focus:ring-offset-0 focus:border-none focus:bg-transparent focus:outline-none shadow-none;
285
+ }
286
+
287
+ .myPrimarySearchButton {
288
+ @apply rounded-r-full text-sm lg:pl-8 lg:pr-10 pl-4 pr-4 text-center border-l border-gray-300 font-medium hover:bg-gray-200;
289
+ }
290
+
291
+ /*
292
+ |--------------------------------------------------------------------------
293
+ | Forms
294
+ |--------------------------------------------------------------------------
295
+ */
296
+ .myPrimaryFormWithActions {
297
+ @apply flex flex-col myPrimaryGap md:pb-4 px-2 rounded;
298
+ }
299
+ .myPrimaryContentLayout {
300
+ @apply md:flex md:flex-row flex flex-col myPrimaryGap;
301
+ }
302
+
303
+ .myPrimaryFormTitleDescription {
304
+ @apply flex flex-col w-full;
305
+ }
306
+
307
+ .myPrimaryFormMain {
308
+ @apply md:w-8/12 flex flex-col myPrimaryGap;
309
+ }
310
+ .myPrimaryFormSidebar {
311
+ @apply md:w-4/12 flex flex-col myPrimaryGap;
312
+ }
313
+ .myPrimaryActions {
314
+ @apply px-4 py-6 rounded bg-myPrimaryLightGrayColor shadow-sm;
315
+ }
316
+
317
+ .myInputsOrganization {
318
+ @apply px-4 pt-4 pb-4 bg-white rounded-lg border border-gray-200;
319
+ }
320
+
321
+ .myPrimaryFormOrganizationHeaderDescriptionSection {
322
+ @apply mb-4;
323
+ }
324
+ .myPrimaryFormOrganizationHeader {
325
+ @apply myQuaternaryHeader m-0 pt-4;
326
+ }
327
+
328
+ .myInputsFamily {
329
+ @apply flex items-center myPrimaryGap;
330
+ }
331
+
332
+ .myInputGroup {
333
+ @apply w-full self-start mb-2;
334
+ }
335
+ .myDoActionButtonSection {
336
+ @apply px-4 py-4 border border-myPrimaryLightGrayColor rounded sm:px-6 text-right mt-1 bg-gray-50;
337
+ }
338
+
339
+ .myPrimaryInputLabel {
340
+ @apply my-0 block text-sm font-normal text-myPrimaryDarkGrayColor text-left mb-2;
341
+ }
342
+
343
+ .myPrimaryFormFocus {
344
+ @apply focus:ring-2 focus:ring-myPrimaryLinkColor focus:ring-offset-2 focus:border focus:border-gray-200;
345
+ }
346
+ .myPrimaryInput {
347
+ @apply block pr-8 text-left bg-white w-full sm:text-sm font-normal text-myPrimaryDarkGrayColor placeholder:font-normal placeholder:accent-gray-300 focus:bg-white rounded-md py-3 px-3 border border-gray-300 shadow-sm focus:outline-none myPrimaryFormFocus h-full;
348
+ }
349
+ .myPrimaryInputNoBorder {
350
+ @apply myPrimaryInput placeholder:accent-gray-300 focus:bg-none rounded-md py-3 px-3 border-none focus:outline-none focus:ring-0 focus:ring-offset-0 focus:border-none shadow-none;
351
+ }
352
+ .myPrimaryInputReadonly {
353
+ @apply myPrimaryInput bg-gray-50 focus:ring-0 focus:bg-myPrimaryLightGrayColor focus:border-myPrimaryMediumGrayColor;
354
+ }
355
+
356
+ .myPrimaryInputError {
357
+ @apply mt-1 myPrimaryParagraph block font-normal text-myPrimaryErrorColor text-left;
358
+ }
359
+
360
+ .myPrimaryHiddenInputField {
361
+ @apply px-0;
362
+ }
363
+
364
+ .myPrimaryTextArea {
365
+ @apply block w-full sm:text-sm font-normal text-myPrimaryDarkGrayColor placeholder:font-normal placeholder:accent-gray-400 bg-gray-50 focus:bg-white rounded-md py-3 px-3 border border-gray-300 shadow-sm focus:outline-none focus:ring-2 focus:ring-myPrimaryLinkColor focus:border-transparent;
366
+ }
367
+
368
+ .myPrimaryCheckbox {
369
+ @apply focus:ring-myPrimaryBrandColor h-5 w-5 text-myPrimaryBrandColor border-gray-400 rounded-md;
370
+ }
371
+
372
+ .myPrimarySelect {
373
+ @apply relative myPrimaryInput w-full;
374
+ }
375
+ .myPrimaryFakeSelect {
376
+ @apply hover:ring-myPrimaryLinkColor border border-gray-300 flex flex-row justify-between items-center myPrimaryGap py-2.5 pl-3 pr-1 cursor-pointer hover:border-transparent hover:ring-2 rounded-md;
377
+ }
378
+ .myPrimaryFakeSelectNoHover {
379
+ @apply myPrimaryFakeSelect focus:outline-none focus:border-transparent hover:border-transparent;
380
+ }
381
+
382
+ .myPrimaryColorPreview {
383
+ @apply aspect-square border border-gray-200 cursor-pointer min-h-[1.5rem] rounded-sm;
384
+ }
385
+ }
386
+
387
+ /* CSS styles for VueQuill - start */
388
+ .ql-toolbar.ql-snow {
389
+ border-top-right-radius: 10px 10px;
390
+ border-top-left-radius: 10px 10px;
391
+ }
392
+
393
+ .ql-editor {
394
+ min-height: 200px;
395
+ }
396
+
397
+ /* example 1 */
398
+ /* table transitions */
399
+ .table-enter-active,
400
+ .table-leave-active {
401
+ transition: opacity 0.3s ease;
402
+ }
403
+
404
+ .table-enter-from,
405
+ .table-leave-to {
406
+ opacity: 0;
407
+ }
408
+
409
+ /* example 2 */
410
+ /* tags transitions */
411
+ .tags-enter-from {
412
+ opacity: 0.6;
413
+ transform: translateX(10px);
414
+ }
415
+
416
+ .tags-enter-active {
417
+ /*animation: wobble 0.5s ease;*/
418
+ transition: all 0.2s ease;
419
+ }
420
+
421
+ .tags-leave-to {
422
+ opacity: 0.1;
423
+ transform: translateX(5px);
424
+ }
425
+
426
+ .tags-leave-active {
427
+ transition: all 0.1s ease;
428
+ position: absolute; /* for move transition after item leaves */
429
+ }
430
+
431
+ .tags-move {
432
+ transition: all 0.1s ease;
433
+ }
434
+
435
+ /* Scrollbar Styles - start */
436
+ /* Firefox */
437
+ * {
438
+ scrollbar-width: thin;
439
+ scrollbar-color: black transparent;
440
+ }
441
+
442
+ *::-webkit-scrollbar-track {
443
+ background: transparent;
444
+ border-radius: 25px;
445
+ }
446
+
447
+ /* Chrome, Edge, and Safari */
448
+ *::-webkit-scrollbar {
449
+ width: 6px;
450
+ height: 6px; /* Add height for horizontal scrollbar */
451
+ }
452
+
453
+ *::-webkit-scrollbar-thumb {
454
+ background-color: black;
455
+ border-radius: 25px;
456
+ border: none;
457
+ }
458
+
459
+ /* Add overflow-x property to enable horizontal scrollbar */
460
+ .scrollable {
461
+ overflow-x: auto;
462
+ overflow-y: auto;
463
+ /* Add any other desired styles for the scrollable element */
464
+ }
465
+ /* Scrollbar Styles - end */
466
+
467
+ .tailwind-pagination-package {
468
+ box-shadow: none !important;
469
+ display: flex;
470
+ flex-direction: row;
471
+ flex-wrap: wrap;
472
+ gap: 6px 0px;
473
+ justify-content: center;
474
+ }
475
+ .tailwind-pagination-package > :first-child,
476
+ .tailwind-pagination-package > :last-child {
477
+ border-radius: 100%;
478
+ }
479
+
480
+ .smooth-transition {
481
+ transition: opacity 0.3s ease-in-out;
482
+ }
483
+
484
+ /* Manage P, Link, H1, H2 # start */
485
+ p {
486
+ @apply font-normal lg:text-base text-base;
487
+ }
488
+
489
+ a {
490
+ @apply text-myPrimaryLinkColor;
491
+ }
492
+
493
+ h2 {
494
+ @apply text-3xl mt-4 mb-3 font-medium;
495
+ }
496
+ h3 {
497
+ @apply text-2xl mt-4 mb-3 font-medium;
498
+ }
499
+ /* Manage P, Link, H1, H2 # end */
500
+
501
+ /* CSS for content inside page builder # start */
502
+ #page-builder-editor-editable-area a {
503
+ pointer-events: none;
504
+ /* display: block;
505
+ width: 100%; */
506
+ }
507
+
508
+ #page-builder-editor-editable-area #youtube-video::before {
509
+ content: 'Select video element';
510
+ font-family: 'Jost';
511
+ display: inline-block;
512
+ margin-right: 8px;
513
+ vertical-align: middle;
514
+ }
515
+ #page-builder-editor-editable-area #youtube-video:hover::before {
516
+ text-decoration: underline;
517
+ cursor: pointer;
518
+ }
519
+
520
+ #page-builder-editor a,
521
+ #page-builder-editor-editable-area a {
522
+ text-decoration: underline;
523
+ }
524
+
525
+ #page-builder-editor #linktree p,
526
+ #page-builder-editor-editable-area #linktree p {
527
+ width: 100%;
528
+ }
529
+
530
+ #page-builder-editor #linktree a,
531
+ #page-builder-editor-editable-area #linktree a {
532
+ @apply py-4 px-2 block w-full;
533
+ }
534
+
535
+ #page-builder-editor #linktree a,
536
+ #page-builder-editor-editable-area #linktree a {
537
+ text-decoration: none;
538
+ font-weight: 500;
539
+ color: inherit !important;
540
+ width: 100%;
541
+ cursor: pointer;
542
+ }
543
+ #page-builder-editor strong,
544
+ #page-builder-editor-editable-area strong {
545
+ font-weight: 500;
546
+ }
547
+
548
+ #page-builder-editor ol,
549
+ #page-builder-editor-editable-area ol,
550
+ #page-builder-editor ul,
551
+ #page-builder-editor-editable-area ul {
552
+ list-style: disc !important;
553
+ padding: 1rem 0rem;
554
+ }
555
+
556
+ #page-builder-editor li,
557
+ #page-builder-editor-editable-area li {
558
+ line-height: 2.2rem;
559
+ margin-left: 1.5em; /* Adjust this value as needed */
560
+ }
561
+ /* CSS for content inside page builder #end*/
562
+
563
+ /* CSS for Vue datepicker # start */
564
+ :root {
565
+ /*General*/
566
+ --dp-font-family: 'Jost', blinkmacsystemfont, 'Segoe UI', roboto, oxygen,
567
+ ubuntu, cantarell, 'Open Sans', 'Helvetica Neue', sans-serif !important;
568
+ --dp-border-radius: 40px; /*Configurable border-radius*/
569
+ --dp-cell-border-radius: 4px; /*Specific border radius for the calendar cell*/
570
+ --dp-common-transition: all 0.1s ease-in; /*Generic transition applied on buttons and calendar cells*/
571
+ }
572
+
573
+ .dp__action_row {
574
+ display: flex !important;
575
+ align-items: center !important;
576
+ justify-content: center;
577
+ margin: 0 0 10px 0;
578
+ }
579
+ .dp__today {
580
+ background: transparent !important;
581
+ border: 2px solid #ff5252 !important;
582
+ color: #ff5252 !important;
583
+ border-radius: 100% !important;
584
+ }
585
+
586
+ .dp__active_date {
587
+ background: #ff5252 !important;
588
+ border: #ff5252 !important;
589
+ color: #fff !important;
590
+ border-radius: 100% !important;
591
+ }
592
+
593
+ .dp__date_hover:hover {
594
+ background: #f1f1f1 !important;
595
+ border: #f1f1f1 !important;
596
+ color: #000 !important;
597
+ border-radius: 100% !important;
598
+ }
599
+
600
+ .dp__action_button {
601
+ background: #ff5252 !important;
602
+ border: #000 !important;
603
+ color: #fff !important;
604
+ border-radius: 8px !important;
605
+ padding: 1rem 1rem !important;
606
+ font-weight: 500;
607
+ }
608
+ .dp__overlay_cell_active {
609
+ background: #ff5252 !important;
610
+ border: #000 !important;
611
+ color: #fff !important;
612
+ }
613
+
614
+ /* CSS for Vue datepicker # end */
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ // Main Page Builder Components
2
+ export { default as PageBuilder } from './PageBuilder/PageBuilder.vue'
3
+ export { default as Preview } from './PageBuilder/Preview.vue'
4
+
5
+ // Export stores
6
+ export { usePageBuilderStateStore } from './stores/page-builder-state'
7
+ export { useMediaLibraryStore } from './stores/media-library'
8
+
9
+ // Export PageBuilder composable/class
10
+ export { default as PageBuilderComposable } from './composables/PageBuilder'
11
+
12
+ // Export Pinia for convenience (same version as package uses)
13
+ export { createPinia } from 'pinia'
14
+
15
+ // Export CSS (users will need to import this separately)
16
+ import './css/app.css'
package/src/main.ts ADDED
@@ -0,0 +1,11 @@
1
+ import './css/app.css'
2
+
3
+ import { createApp } from 'vue'
4
+ import { createPinia } from 'pinia'
5
+ import App from './App.vue'
6
+
7
+ const app = createApp(App)
8
+
9
+ app.use(createPinia())
10
+
11
+ app.mount('#app')
@@ -0,0 +1,34 @@
1
+ import { defineStore } from 'pinia'
2
+
3
+ interface MediaLibraryState {
4
+ currentImage: ImageObject
5
+ currentPreviewImage: string | null
6
+ }
7
+
8
+ interface ImageObject {
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ [key: string]: any
11
+ }
12
+
13
+ export const useMediaLibraryStore = defineStore('mediaLibrary', {
14
+ state: (): MediaLibraryState => ({
15
+ currentImage: {},
16
+ currentPreviewImage: null,
17
+ }),
18
+ getters: {
19
+ getCurrentImage(state: MediaLibraryState): ImageObject {
20
+ return state.currentImage
21
+ },
22
+ getCurrentPreviewImage(state: MediaLibraryState): string | null {
23
+ return state.currentPreviewImage
24
+ },
25
+ },
26
+ actions: {
27
+ setCurrentImage(payload: ImageObject): void {
28
+ this.currentImage = payload
29
+ },
30
+ setCurrentPreviewImage(payload: string | null): void {
31
+ this.currentPreviewImage = payload
32
+ },
33
+ },
34
+ })