@myissue/vue-website-page-builder 3.3.68 → 3.3.71

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 (37) hide show
  1. package/README.md +1 -66
  2. package/dist/vue-website-page-builder.js +11682 -14535
  3. package/dist/vue-website-page-builder.umd.cjs +57 -78
  4. package/package.json +1 -1
  5. package/src/Components/PageBuilder/EditorMenu/Editables/BackgroundColorEditor.vue +2 -2
  6. package/src/Components/PageBuilder/EditorMenu/Editables/BorderRadius.vue +13 -19
  7. package/src/Components/PageBuilder/EditorMenu/Editables/Borders.vue +7 -9
  8. package/src/Components/PageBuilder/EditorMenu/Editables/ClassEditor.vue +7 -8
  9. package/src/Components/PageBuilder/EditorMenu/Editables/ManageBackgroundOpacity.vue +3 -7
  10. package/src/Components/PageBuilder/EditorMenu/Editables/ManageOpacity.vue +3 -5
  11. package/src/Components/PageBuilder/EditorMenu/Editables/Margin.vue +5 -9
  12. package/src/Components/PageBuilder/EditorMenu/Editables/OpacityEditor.vue +1 -1
  13. package/src/Components/PageBuilder/EditorMenu/Editables/Padding.vue +5 -9
  14. package/src/Components/PageBuilder/EditorMenu/Editables/StyleEditor.vue +7 -8
  15. package/src/Components/PageBuilder/EditorMenu/Editables/Typography.vue +9 -25
  16. package/src/Components/PageBuilder/EditorMenu/RightSidebarEditor.vue +12 -9
  17. package/src/Components/PageBuilder/Settings/PageBuilderSettings.vue +3 -3
  18. package/src/Components/PageBuilder/ToolbarOption/ToolbarOption.vue +4 -4
  19. package/src/PageBuilder/PageBuilder.vue +10 -76
  20. package/src/composables/builderInstance.ts +2 -3
  21. package/src/main.ts +5 -10
  22. package/src/services/PageBuilderService.ts +28 -120
  23. package/src/stores/page-builder-state.ts +6 -0
  24. package/src/tests/PageBuilderTest.vue +53 -21
  25. package/src/tests/pageBuilderService.test.ts +1 -7
  26. package/src/types/index.ts +1 -1
  27. package/src/i18n.ts +0 -28
  28. package/src/locales/ar.json +0 -136
  29. package/src/locales/de.json +0 -136
  30. package/src/locales/en.json +0 -136
  31. package/src/locales/es.json +0 -136
  32. package/src/locales/fr.json +0 -136
  33. package/src/locales/hi.json +0 -136
  34. package/src/locales/ja.json +0 -136
  35. package/src/locales/pt.json +0 -136
  36. package/src/locales/ru.json +0 -136
  37. package/src/locales/zh-Hans.json +0 -136
@@ -13,8 +13,6 @@ import { useDebounce } from '../composables/useDebounce.ts'
13
13
  import DynamicModalBuilder from '../Components/Modals/DynamicModalBuilder.vue'
14
14
  import GlobalLoader from '../Components/Loaders/GlobalLoader.vue'
15
15
  import { getPageBuilder } from '../composables/builderInstance'
16
- import { useI18n } from 'vue-i18n'
17
-
18
16
  const pageBuilderService = getPageBuilder()
19
17
  /**
20
18
  * Props for PageBuilder component
@@ -71,6 +69,10 @@ const closeAddComponentModal = () => {
71
69
  }
72
70
  provide('closeAddComponentModal', closeAddComponentModal)
73
71
 
72
+ const getCurrentLanguage = computed(() => {
73
+ return pageBuilderStateStore.getCurrentLanguage
74
+ })
75
+
74
76
  const getBuilderStarted = computed(() => {
75
77
  return pageBuilderStateStore.getBuilderStarted
76
78
  })
@@ -151,28 +153,6 @@ const getHasLocalDraftForUpdate = computed(() => {
151
153
  return pageBuilderStateStore.getHasLocalDraftForUpdate
152
154
  })
153
155
 
154
- const { locale } = useI18n()
155
-
156
- watch(locale, (newLocale) => {
157
- const config = pageBuilderStateStore.getPageBuilderConfig
158
- if (config && config.userSettings && config.userSettings.language) {
159
- // Update the store with a full config (if you want to update the store)
160
- const updatedConfig = {
161
- ...config,
162
- userSettings: {
163
- ...config.userSettings,
164
- language: {
165
- ...config.userSettings.language,
166
- default: newLocale,
167
- },
168
- },
169
- }
170
-
171
- pageBuilderStateStore.setPageBuilderConfig(updatedConfig)
172
- pageBuilderService.saveBuilderConfigToLocalStorage(updatedConfig)
173
- }
174
- })
175
-
176
156
  watch(getHasLocalDraftForUpdate, (newVal) => {
177
157
  if (newVal) {
178
158
  handlerRumeEditingForUpdate()
@@ -563,7 +543,7 @@ onMounted(async () => {
563
543
  ></span>
564
544
  </span>
565
545
  </div>
566
- <div>{{ $t('button.save') }}</div>
546
+ <div>Save</div>
567
547
  </button>
568
548
  <!-- Save End -->
569
549
 
@@ -606,7 +586,7 @@ onMounted(async () => {
606
586
  </span>
607
587
  </div>
608
588
  <div class="lg:pbx-block pbx-hidden">
609
- <span>{{ $t('button.resetPage') }}</span>
589
+ <span> Reset Page </span>
610
590
  </div>
611
591
  </button>
612
592
  </template>
@@ -643,9 +623,7 @@ onMounted(async () => {
643
623
  class="pbx-flex pbx-items-center pbx-justify-center pbx-gap-2 pbx-border-gray-200"
644
624
  >
645
625
  <span class="lg:pbx-block pbx-hidden">
646
- <div class="pbx-whitespace-nowrap pbx-cursor-pointer">
647
- {{ $t('button.addComponents') }}
648
- </div>
626
+ <div class="pbx-whitespace-nowrap pbx-cursor-pointer">Add new Components</div>
649
627
  </span>
650
628
  <span
651
629
  class="pbx-h-10 pbx-w-10 pbx-cursor-pointer pbx-rounded-full pbx-flex pbx-items-center pbx-border-none pbx-justify-center pbx-bg-gray-50 pbx-aspect-square hover:pbx-bg-myPrimaryLinkColor hover:pbx-text-white focus-visible:pbx-ring-0"
@@ -724,62 +702,18 @@ onMounted(async () => {
724
702
  }
725
703
  "
726
704
  >
727
- {{ $t('button.publish') }}
705
+ Publish
728
706
  </button>
729
707
  </div>
730
708
  </template>
731
- <!-- Select language -->
732
709
  <template
733
710
  v-if="
734
711
  getPageBuilderConfig &&
735
712
  getPageBuilderConfig.userSettings &&
736
- getPageBuilderConfig.userSettings.language &&
737
- !getPageBuilderConfig.userSettings.language.disableLanguageDropDown
713
+ getPageBuilderConfig.userSettings.language
738
714
  "
739
715
  >
740
- <template
741
- v-if="
742
- getPageBuilderConfig &&
743
- getPageBuilderConfig.userSettings &&
744
- getPageBuilderConfig.userSettings.language
745
- "
746
- >
747
- <div class="pbx-flex pbx-justify-center pbx-items-center pbx-ml-2">
748
- <select
749
- class="pbx-myPrimarySelect pbx-min-w-20 pbx-max-w-2pbx-min-w-20 pbx-w-max"
750
- v-model="$i18n.locale"
751
- >
752
- <template
753
- v-if="
754
- Array.isArray(getPageBuilderConfig.userSettings.language.enable) &&
755
- getPageBuilderConfig.userSettings.language.enable.length >= 1
756
- "
757
- >
758
- <template
759
- v-for="lang in pageBuilderService
760
- .availableLanguage()
761
- .filter((l) => getPageBuilderConfig.userSettings.language.enable.includes(l))"
762
- :key="lang"
763
- >
764
- <option :value="lang">{{ lang }}</option>
765
- </template>
766
- </template>
767
- <template
768
- v-if="
769
- !getPageBuilderConfig.userSettings.language.enable ||
770
- (Array.isArray(getPageBuilderConfig.userSettings.language.enable) &&
771
- getPageBuilderConfig.userSettings.language.enable.length === 0)
772
- "
773
- >
774
- <template v-for="lang in pageBuilderService.availableLanguage()" :key="lang">
775
- <option :value="lang">{{ lang }}</option>
776
- </template>
777
- </template>
778
- </select>
779
- </div>
780
- </template>
781
716
  </template>
782
-
783
717
  <template v-if="showCloseButton">
784
718
  <div class="pbx-ml-2">
785
719
  <button
@@ -932,7 +866,7 @@ onMounted(async () => {
932
866
  class="pbx-flex pbx-items-center pbx-justify-center pbx-gap-2 pbx-cursor-pointer"
933
867
  >
934
868
  <span class="lg:pbx-block pbx-hidden">
935
- <div class="pbx-whitespace-nowrap">{{ $t('button.addComponentsToBottom') }}</div>
869
+ <div class="pbx-whitespace-nowrap">Add to the bottom</div>
936
870
  </span>
937
871
  <div class="pbx-flex pbx-gap-2 pbx-items-center pbx-justify-center">
938
872
  <button
@@ -1,16 +1,15 @@
1
1
  // builderInstance.ts
2
2
  import { PageBuilderService } from '../services/PageBuilderService'
3
- import type { I18n } from 'vue-i18n'
4
3
  import { sharedPageBuilderStore } from '../stores/shared-store'
5
4
 
6
5
  // Singleton instance
7
6
  let instance: PageBuilderService | null = null
8
7
 
9
8
  // Used to create and store the single instance
10
- export function initPageBuilder(i18n: I18n): PageBuilderService {
9
+ export function initPageBuilder(): PageBuilderService {
11
10
  if (!instance) {
12
11
  const pageBuilderStateStore = sharedPageBuilderStore
13
- instance = new PageBuilderService(pageBuilderStateStore, i18n)
12
+ instance = new PageBuilderService(pageBuilderStateStore)
14
13
  }
15
14
  return instance
16
15
  }
package/src/main.ts CHANGED
@@ -5,16 +5,11 @@ import { initPageBuilder } from './composables/builderInstance'
5
5
  import { createApp } from 'vue'
6
6
  import { createPinia } from 'pinia'
7
7
  import App from './App.vue'
8
- import { setupI18n } from './i18n'
9
8
 
10
- async function bootstrap() {
11
- const i18n = await setupI18n()
12
- initPageBuilder(i18n)
9
+ initPageBuilder()
13
10
 
14
- const app = createApp(App)
15
- app.use(createPinia())
16
- app.use(i18n)
17
- app.mount('#app')
18
- }
11
+ const app = createApp(App)
19
12
 
20
- bootstrap()
13
+ app.use(createPinia())
14
+
15
+ app.mount('#app')
@@ -7,7 +7,6 @@ import type {
7
7
  StartBuilderResult,
8
8
  } from '../types'
9
9
  import type { usePageBuilderStateStore } from '../stores/page-builder-state'
10
- // import { i18n } from '../i18n' // i18n is now async and must be passed in, not imported
11
10
 
12
11
  import tailwindFontSizes from '../utils/builder/tailwind-font-sizes'
13
12
  import tailwindColors from '../utils/builder/tailwaind-colors'
@@ -49,10 +48,7 @@ export const AVAILABLE_LANGUAGES: AvailableLanguage[] = [
49
48
  'hi',
50
49
  ]
51
50
 
52
- import type { I18n } from 'vue-i18n'
53
-
54
51
  export class PageBuilderService {
55
- private i18n: I18n
56
52
  // Class properties with types
57
53
  private fontSizeRegex =
58
54
  /^(sm:|md:|lg:|xl:|2xl:)?pbx-text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/
@@ -77,8 +73,7 @@ export class PageBuilderService {
77
73
  private pendingMountComponents: BuilderResourceData | null = null
78
74
  private isPageBuilderMissingOnStart: boolean = false
79
75
 
80
- constructor(pageBuilderStateStore: ReturnType<typeof usePageBuilderStateStore>, i18n: I18n) {
81
- this.i18n = i18n
76
+ constructor(pageBuilderStateStore: ReturnType<typeof usePageBuilderStateStore>) {
82
77
  this.hasStartedEditing = false
83
78
  this.pageBuilderStateStore = pageBuilderStateStore
84
79
  this.getApplyImageToSelection = computed(
@@ -269,55 +264,6 @@ export class PageBuilderService {
269
264
  return
270
265
  }
271
266
 
272
- private ensureLanguage(config: PageBuilderConfig): void {
273
- // Set default language config if missing, empty, or language missing/empty
274
- const defaultLang = 'en'
275
- const defaultEnable = ['en', 'zh-Hans', 'fr', 'ja', 'ru', 'es', 'pt', 'de', 'ar', 'hi'] as const
276
-
277
- let needsDefault = false
278
- const userSettings = config.userSettings
279
- const language = userSettings && userSettings.language
280
-
281
- if (!userSettings || isEmptyObject(userSettings)) {
282
- needsDefault = true
283
- } else if (!language || isEmptyObject(language)) {
284
- needsDefault = true
285
- }
286
-
287
- if (needsDefault) {
288
- const updatedLanguage = {
289
- ...config,
290
- userSettings: {
291
- ...userSettings,
292
- language: {
293
- default: defaultLang,
294
- enable: defaultEnable as typeof defaultEnable,
295
- },
296
- },
297
- } as const
298
- this.pageBuilderStateStore.setPageBuilderConfig(updatedLanguage)
299
- return
300
- }
301
-
302
- // Ensure default is in enable array
303
- if (language && Array.isArray(language.enable) && language.default) {
304
- if (!language.enable.includes(language.default)) {
305
- const updatedEnable = [...language.enable, language.default]
306
- const updatedLanguage = {
307
- ...config,
308
- userSettings: {
309
- ...userSettings,
310
- language: {
311
- ...language,
312
- enable: updatedEnable,
313
- },
314
- },
315
- } as const
316
- this.pageBuilderStateStore.setPageBuilderConfig(updatedLanguage)
317
- }
318
- }
319
- }
320
-
321
267
  private validateConfig(config: PageBuilderConfig): void {
322
268
  const defaultConfigValues = {
323
269
  updateOrCreate: {
@@ -334,52 +280,6 @@ export class PageBuilderService {
334
280
  if (config && Object.keys(config).length !== 0 && config.constructor === Object) {
335
281
  this.ensureUpdateOrCreateConfig(config)
336
282
  }
337
-
338
- this.ensureLanguage(config)
339
- }
340
-
341
- public saveBuilderConfigToLocalStorage(specificConfig: PageBuilderConfig) {
342
- // Only save userSettings to localStorage
343
- if (specificConfig && specificConfig.userSettings) {
344
- localStorage.setItem(
345
- 'pageBuilderConfig',
346
- JSON.stringify({ userSettings: specificConfig.userSettings }),
347
- )
348
- }
349
- }
350
-
351
- private checkBuilderConfigToLocalStorage(currentConfig: PageBuilderConfig) {
352
- const savedConfigRaw = localStorage.getItem('pageBuilderConfig')
353
-
354
- if (savedConfigRaw) {
355
- try {
356
- const savedConfig = JSON.parse(savedConfigRaw)
357
- // Deep merge: prefer all keys from savedConfig, fallback to currentConfig
358
- const mergedConfig = {
359
- ...currentConfig,
360
- ...savedConfig,
361
- userSettings: {
362
- ...currentConfig.userSettings,
363
- ...savedConfig.userSettings,
364
- },
365
- }
366
-
367
- this.pageBuilderStateStore.setPageBuilderConfig(mergedConfig)
368
-
369
- const saveLang =
370
- this.pageBuilderStateStore.getPageBuilderConfig &&
371
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings &&
372
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings.language &&
373
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings.language.default
374
-
375
- if (saveLang) {
376
- this.i18n.global.locale = saveLang
377
- }
378
- return
379
- } catch (e) {
380
- console.warn('Failed to parse saved pageBuilderConfig from localStorage:', e)
381
- }
382
- }
383
283
  }
384
284
 
385
285
  /**
@@ -408,20 +308,6 @@ export class PageBuilderService {
408
308
  // Validate and normalize the config (ensure required fields are present)
409
309
  this.validateConfig(config)
410
310
 
411
- if (
412
- this.pageBuilderStateStore.getPageBuilderConfig &&
413
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings &&
414
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings.language &&
415
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings.language.default
416
- ) {
417
- this.i18n.global.locale =
418
- this.pageBuilderStateStore.getPageBuilderConfig.userSettings.language.default
419
- }
420
-
421
- if (this.pageBuilderStateStore.getPageBuilderConfig) {
422
- this.checkBuilderConfigToLocalStorage(this.pageBuilderStateStore.getPageBuilderConfig)
423
- }
424
-
425
311
  validation = this.validateUserProvidedComponents(passedComponentsArray)
426
312
 
427
313
  // Update the localStorage key name based on the config/resource
@@ -549,7 +435,7 @@ export class PageBuilderService {
549
435
  }
550
436
 
551
437
  if (!passedComponentsArray && !localStorageData && this.isPageBuilderMissingOnStart) {
552
- console.log('XXXX:', internalPageBuilderCall)
438
+ console.log('10000:', internalPageBuilderCall)
553
439
  await this.completeMountProcess(JSON.stringify(this.pendingMountComponents), true)
554
440
  this.saveDomComponentsToLocalStorage()
555
441
  return
@@ -913,11 +799,33 @@ export class PageBuilderService {
913
799
 
914
800
  public handleManualSave = async () => {
915
801
  this.startEditing()
802
+ const passedConfig = this.pageBuilderStateStore.getPageBuilderConfig
916
803
 
917
- this.pageBuilderStateStore.setIsSaving(true)
918
- this.saveDomComponentsToLocalStorage()
919
- await delay(400)
920
- this.pageBuilderStateStore.setIsSaving(false)
804
+ // Check if config is set
805
+ if (passedConfig && passedConfig.userSettings) {
806
+ //
807
+ //
808
+ // Enabled auto save
809
+ if (
810
+ (typeof passedConfig.userSettings.autoSave === 'boolean' &&
811
+ !passedConfig.userSettings.autoSave) ||
812
+ (typeof passedConfig.userSettings.autoSave === 'boolean' &&
813
+ passedConfig.userSettings.autoSave)
814
+ ) {
815
+ this.pageBuilderStateStore.setIsSaving(true)
816
+ this.saveDomComponentsToLocalStorage()
817
+ await delay(400)
818
+
819
+ this.pageBuilderStateStore.setIsSaving(false)
820
+ }
821
+ }
822
+ if (passedConfig && !passedConfig.userSettings) {
823
+ this.pageBuilderStateStore.setIsSaving(true)
824
+ this.saveDomComponentsToLocalStorage()
825
+ await delay(400)
826
+
827
+ this.pageBuilderStateStore.setIsSaving(false)
828
+ }
921
829
  }
922
830
 
923
831
  public cloneCompObjForDOMInsertion(componentObject: ComponentObject): ComponentObject {
@@ -67,6 +67,7 @@ interface PageBuilderState {
67
67
  hasLocalDraftForUpdate: boolean
68
68
  isResumeEditing: boolean
69
69
  isRestoring: boolean
70
+ currentLanguage: string
70
71
  }
71
72
 
72
73
  export const usePageBuilderStateStore = defineStore('pageBuilderState', {
@@ -129,6 +130,7 @@ export const usePageBuilderStateStore = defineStore('pageBuilderState', {
129
130
  hasLocalDraftForUpdate: false,
130
131
  isResumeEditing: false,
131
132
  isRestoring: false,
133
+ currentLanguage: 'en',
132
134
  }),
133
135
  getters: {
134
136
  // Core Page Builder Getters
@@ -284,6 +286,7 @@ export const usePageBuilderStateStore = defineStore('pageBuilderState', {
284
286
  getHasLocalDraftForUpdate: (state: PageBuilderState): boolean => state.hasLocalDraftForUpdate,
285
287
  getIsLoadingResumeEditing: (state: PageBuilderState): boolean => state.isResumeEditing,
286
288
  getIsRestoring: (state: PageBuilderState): boolean => state.isRestoring,
289
+ getCurrentLanguage: (state: PageBuilderState): string => state.currentLanguage,
287
290
  },
288
291
  actions: {
289
292
  setComponentArrayAddMethod(payload: string | null): void {
@@ -489,5 +492,8 @@ export const usePageBuilderStateStore = defineStore('pageBuilderState', {
489
492
  setIsRestoring(payload: boolean): void {
490
493
  this.isRestoring = payload
491
494
  },
495
+ setCurrentLanguage(payload: string): void {
496
+ this.currentLanguage = payload
497
+ },
492
498
  },
493
499
  })
@@ -6,19 +6,49 @@ import DemoBuilderComponentsTest from '../tests/TestComponents/DemoBuilderCompon
6
6
  import { onMounted } from 'vue'
7
7
  import componentsArray from '../tests/componentsArray.test.json'
8
8
  import { getPageBuilder } from '../composables/builderInstance'
9
- import { useI18n } from 'vue-i18n'
10
9
  const pageBuilderService = getPageBuilder()
11
- const { t } = useI18n()
12
10
 
13
11
  const features = [
14
- { key: 'liveDragDropBuilder' },
15
- { key: 'trueVisualEditing' },
16
- { key: 'features' },
17
- { key: 'technologies' },
18
- { key: 'setBrandAndLinkColors' },
19
- { key: 'mobileFirstApproach' },
20
- { key: 'mediaLibrary' },
21
- { key: 'minimalIntuitiveDesign' },
12
+ {
13
+ name: 'Live Drag & Drop Builder',
14
+ description:
15
+ 'Click & Drop content on a page and watch your pages come to life. Bring your vision to life and create impressive pages using a click & drop Page Builder',
16
+ },
17
+ {
18
+ name: 'True Visual Editing',
19
+ description:
20
+ 'See your changes in real-time as you make them. Elevate your creative vision and create pages using an intuitive click & drop page builder. Break free from design limitations and turn your visions into reality.',
21
+ },
22
+ {
23
+ name: 'Features',
24
+ description:
25
+ 'Click & Drop, Reordering, True Visual Editing, Responsive Editing, Font Customization, Undo & Redo, Text Editing, Media Library, Unsplash Integration, YouTube Videos.',
26
+ },
27
+ {
28
+ name: 'Technologies',
29
+ description:
30
+ 'Developed with TypeScript, Vue 3, Composition API, Pinia, CSS, Tailwind CSS and HTML.',
31
+ },
32
+ {
33
+ name: 'Set Brand and Link Colors one place',
34
+ description:
35
+ 'Global Styles for fonts, designs, & colors. Set Brand and Link Colors once and apply them across the entire Platform with ease.',
36
+ },
37
+ {
38
+ name: 'Mobile-First Approach',
39
+ description:
40
+ 'Developed with Mobile-First approach. The Page Builder even works on mobile phones.',
41
+ },
42
+ {
43
+ name: 'Media Library',
44
+ description:
45
+ 'A beautiful and user-friendly media library that allows you to change and update images. Unsplash Integration is included.',
46
+ },
47
+ {
48
+ name: 'Minimal and Intuitive Design',
49
+ description:
50
+ 'Beautiful, elegant and intuitive design. Enhance user engagement with amazing visual experience.',
51
+ },
22
52
  ]
23
53
 
24
54
  const publishPageBuilder = function () {}
@@ -30,7 +60,7 @@ const htmlString =
30
60
  '</div>'
31
61
 
32
62
  // Parse as HTML (not JSON)
33
- const { /* components, */ pageSettings } = pageBuilderService.parsePageBuilderHTML(htmlString)
63
+ const { components, pageSettings } = pageBuilderService.parsePageBuilderHTML(htmlString)
34
64
 
35
65
  const configPageBuilder = {
36
66
  userForPageBuilder: {
@@ -52,10 +82,8 @@ const configPageBuilder = {
52
82
  theme: 'light',
53
83
  language: {
54
84
  default: 'en',
55
- enable: ['en', 'zh-Hans', 'fr', 'ja', 'ru', 'es', 'pt', 'de', 'ar', 'hi'],
56
- disableLanguageDropDown: false,
85
+ disable: ['fr', 'es'],
57
86
  },
58
- autoSave: true,
59
87
  },
60
88
  settings: {
61
89
  brandColor: '#DB93B0',
@@ -64,7 +92,7 @@ const configPageBuilder = {
64
92
  } as const
65
93
 
66
94
  onMounted(async () => {
67
- const result = await pageBuilderService.startBuilder(configPageBuilder)
95
+ const result = await pageBuilderService.startBuilder(configPageBuilder, components)
68
96
  console.log('Page Builder inspect the result for message, status, or error::', result)
69
97
  })
70
98
  </script>
@@ -74,15 +102,19 @@ onMounted(async () => {
74
102
  <div class="pbx-myPrimaryWidthScreenModule pbx-bg-red-50 lg:pbx-block">
75
103
  <div class="pbx-myPrimaryContentSection">
76
104
  <h2 class="pbx-mySecondaryHeader">
77
- {{ $t('branding.mainHeader') }}
105
+ Bring your vision to life and create impressive pages using a click & drop Page Builder
78
106
  </h2>
79
107
  <p class="pbx-myPrimaryParagraph pbx-font-normal">
80
- {{ $t('branding.description') }}
108
+ The web builder for stunning pages. Enable users to design and publish modern pages at any
109
+ scale. Build responsive pages like listings, jobs or blog posts and manage content easily
110
+ using the free click & drop Page Builder. Developed with TypeScript, Vue 3, Composition
111
+ API, Pinia, CSS, Tailwind CSS and HTML.
112
+
81
113
  <br />
82
114
  </p>
83
115
  <div class="pbx-mt-4">
84
116
  <p class="pbx-myPrimaryParagraph pbx-font-normal">
85
- {{ $t('branding.downloadDescription') }}
117
+ Download or install our powerful, flexible, and easy-to-use free Vue 3 Page Builder via
86
118
  <br />
87
119
  <strong> npm:</strong>
88
120
  <a
@@ -120,16 +152,16 @@ onMounted(async () => {
120
152
  >
121
153
  <div
122
154
  v-for="feature in features"
123
- :key="feature.key"
155
+ :key="feature.name"
124
156
  class="pbx-bg-red-200 pbx-bg-opacity-20 hover:pbx-bg-opacity-10 pbx-w-full lg:pbx-min-h-[20rem] pbx-min-h-[12rem] pbx-relative pbx-col-span-1 pbx-flex pbx-flex-col pbx-text-center pbx-rounded-lg pbx-shadow-sm pbx-outline pbx-outline-2 pbx-outline-offset-8 pbx-outline-yellow-400"
125
157
  >
126
158
  <div
127
159
  class="pbx-bg-black/0 pbx-absolute pbx-top-0 pbx-left-0 pbx-w-full pbx-h-full pbx-rounded-lg"
128
160
  ></div>
129
161
  <div class="pbx-px-2 pbx-pt-8 pbx-absolute pbx-top-0 pbx-w-full">
130
- <p class="pbx-myTertiaryHeader">{{ t(`features.${feature.key}.name`) }}</p>
162
+ <p class="pbx-myTertiaryHeader">{{ feature.name }}</p>
131
163
  <p class="pbx-myPrimaryParagraph pbx-font-medium pbx-drop-shadow-sm">
132
- {{ t(`features.${feature.key}.description`) }}
164
+ {{ feature.description }}
133
165
  </p>
134
166
  </div>
135
167
  </div>
@@ -47,13 +47,7 @@ describe('PageBuilderService', () => {
47
47
  typeof (fn as { mockClear?: () => void }).mockClear === 'function' &&
48
48
  (fn as { mockClear: () => void }).mockClear(),
49
49
  )
50
- // Provide a minimal i18n mock for tests
51
- const mockI18n = {
52
- global: {
53
- locale: 'en',
54
- },
55
- } as any
56
- service = new PageBuilderService(mockStore, mockI18n)
50
+ service = new PageBuilderService(mockStore)
57
51
  })
58
52
 
59
53
  it('should start builder and return a success message', async () => {
@@ -229,7 +229,7 @@ export interface PageBuilderConfig {
229
229
  theme?: 'light' | 'dark' | 'auto'
230
230
  language?: {
231
231
  default: 'en' | 'zh-Hans' | 'fr' | 'ja' | 'ru' | 'es' | 'pt' | 'de' | 'ar' | 'hi'
232
- enable?: ReadonlyArray<
232
+ disable?: ReadonlyArray<
233
233
  'en' | 'zh-Hans' | 'fr' | 'ja' | 'ru' | 'es' | 'pt' | 'de' | 'ar' | 'hi'
234
234
  >
235
235
  }
package/src/i18n.ts DELETED
@@ -1,28 +0,0 @@
1
- import { createI18n } from 'vue-i18n'
2
-
3
- // Function to load all locale messages from JSON files
4
- async function loadLocaleMessages() {
5
- const locales = import.meta.glob('./locales/*.json')
6
- const messages: Record<string, object> = {}
7
- for (const path in locales) {
8
- const matched = path.match(/([A-Za-z0-9-_]+)\.json$/i)
9
- if (matched && matched.length > 1) {
10
- const locale = matched[1]
11
- const module = (await locales[path]()) as { default: object }
12
- messages[locale] = module.default
13
- }
14
- }
15
- return messages
16
- }
17
-
18
- // Use this in main.ts: const i18n = await setupI18n()
19
- export async function setupI18n() {
20
- const messages = await loadLocaleMessages()
21
- return createI18n({
22
- legacy: false, // you must set `false`, to use Composition API
23
- locale: 'en', // set locale
24
- fallbackLocale: 'en', // set fallback locale
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- messages: messages as any, // typecast to satisfy vue-i18n
27
- })
28
- }