@designcrowd/library.brand-page 5.16.28 → 5.16.29-pre-temp-13
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/lib/src/{CreatedOnBrandCrowd-de-de-C-CdtuLf.js → CreatedOnBrandCrowd-de-de-C5cvDYY0.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DrL7aiqj.js → CreatedOnBrandCrowd-en-us-D0KCSK_6.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DDJFsUyp.js → CreatedOnBrandCrowd-es-es-BtlaguF9.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-Dv8j7UDI.js → CreatedOnBrandCrowd-fr-ca-RGdnURaa.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-Dv8j7UDI.js → CreatedOnBrandCrowd-fr-fr-RGdnURaa.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-Dp52qW0V.js → CreatedOnBrandCrowd-pt-br-BJwt5ATI.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-Dp52qW0V.js → CreatedOnBrandCrowd-pt-pt-BJwt5ATI.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-Df9pkq3U.js → CreatedOnDcom-de-de-LUA5Wvy5.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-DqHPayYQ.js → CreatedOnDcom-en-us-Dd1UPBVq.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-BcyOZFjl.js → CreatedOnDcom-es-es-CD923NVo.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-DdjkYDpz.js → CreatedOnDcom-fr-ca-C6Mc--2a.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-B3v0x4gQ.js → CreatedOnDcom-fr-fr-Ffrd6Erx.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-DJe-M_Ue.js → CreatedOnDcom-pt-br-BfoY5gWJ.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-B1aOyZ5I.js → CreatedOnDcom-pt-pt-f0ywi387.js} +1 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.js +2 -5
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +4 -4
- package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +6 -0
- package/lib/src/brand-page-maker/composables/useEventTracker.js +6 -0
- package/lib/src/brand-page-maker/constants/template-constants.d.ts +1 -2
- package/lib/src/brand-page-maker/constants/template-constants.js +1 -2
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +21 -0
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +10 -2
- package/lib/src/{bundled-translations-DAA_muNW.js → bundled-translations-CMyG8Azk.js} +54 -54
- package/lib/src/{bundled-translations.de-DE-DmZSAEA4.js → bundled-translations.de-DE-BJPw07Ba.js} +36 -36
- package/lib/src/{bundled-translations.es-ES-CGUGm_zy.js → bundled-translations.es-ES-DqQ7zLxJ.js} +58 -58
- package/lib/src/{bundled-translations.fr-CA-UkcZ1_qS.js → bundled-translations.fr-CA-2dy4OokC.js} +47 -47
- package/lib/src/{bundled-translations.fr-FR-D43nbl6A.js → bundled-translations.fr-FR-Bjh3iNSg.js} +25 -25
- package/lib/src/{bundled-translations.pt-BR-B0o-8NGd.js → bundled-translations.pt-BR-BRC_B0LW.js} +13 -13
- package/lib/src/{bundled-translations.pt-PT-Cx-eIl9m.js → bundled-translations.pt-PT-Ka3E8T1F.js} +56 -56
- package/lib/src/bundles/bundled-translations.de-DE.json +13 -1
- package/lib/src/bundles/bundled-translations.es-ES.json +13 -1
- package/lib/src/bundles/bundled-translations.fr-CA.json +13 -1
- package/lib/src/bundles/bundled-translations.fr-FR.json +13 -1
- package/lib/src/bundles/bundled-translations.json +13 -1
- package/lib/src/bundles/bundled-translations.pt-BR.json +13 -1
- package/lib/src/bundles/bundled-translations.pt-PT.json +13 -1
- package/lib/src/clients/design-template-client.d.ts +2 -0
- package/lib/src/clients/fabric-render-client.d.ts +3 -0
- package/lib/src/css/library.brand-page-brandCrowd.min.css +69 -20
- package/lib/src/css/library.brand-page-brandPage.min.css +69 -20
- package/lib/src/css/library.brand-page-designCom.min.css +69 -20
- package/lib/src/css/library.brand-page-preview.min.css +69 -20
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.mjs +92 -92
- package/lib/src/{lib-5LK-vR4z.js → lib-BcLmSEKI.js} +17326 -17136
- package/lib/src/lib.js +1 -1
- package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +10 -0
- package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +10 -0
- package/lib/src/shared/logo-settings/store/editable-logo-store.d.ts +14 -0
- package/lib/src/shared/logo-settings/store/editable-logo-store.js +46 -0
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +10 -0
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +1 -0
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +33 -0
- package/lib/src/shared/template-settings/store/template-settings-store.js +57 -9
- package/package.json +2 -2
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.ts +1 -6
- package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +4 -4
- package/src/brand-page-maker/composables/useEventTracker.ts +8 -0
- package/src/brand-page-maker/constants/template-constants.ts +1 -2
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +24 -0
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +11 -2
- package/src/bundles/bundled-translations.de-DE.json +13 -1
- package/src/bundles/bundled-translations.es-ES.json +13 -1
- package/src/bundles/bundled-translations.fr-CA.json +13 -1
- package/src/bundles/bundled-translations.fr-FR.json +13 -1
- package/src/bundles/bundled-translations.json +13 -1
- package/src/bundles/bundled-translations.pt-BR.json +13 -1
- package/src/bundles/bundled-translations.pt-PT.json +13 -1
- package/src/clients/design-template-client.ts +2 -0
- package/src/clients/fabric-render-client.ts +3 -0
- package/src/lib.ts +1 -0
- package/src/shared/content-settings/components/generate-ai-modal/GenerateAiModal.vue +209 -12
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.de-DE.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.es-ES.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.fr-CA.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.fr-FR.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.pt-BR.json +13 -1
- package/src/shared/content-settings/components/generate-ai-modal/i18n/generate-ai.pt-PT.json +13 -1
- package/src/shared/logo-settings/store/editable-logo-store.ts +67 -0
- package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +46 -0
- package/src/shared/template-settings/store/template-settings-store.ts +78 -10
package/lib/src/lib.js
CHANGED
|
@@ -26,7 +26,7 @@ export { default as SensitiveContentModal } from './brand-page/components/sensit
|
|
|
26
26
|
// functions
|
|
27
27
|
export { getBrandPageViewModelFromBrandPageModel, migrateBrandPageModel, } from './brand-page/utils';
|
|
28
28
|
export * as brandPageUtils from './brand-page/utils';
|
|
29
|
-
export { getOptimalLogoSize, calculateOptimizedLogoDimensions, } from './brand-page/utils/logo.util';
|
|
29
|
+
export { getOptimalLogoSize, calculateOptimizedLogoDimensions, applyLogoImageBase64UrlToBrandPageTemplateModel, } from './brand-page/utils/logo.util';
|
|
30
30
|
export { sanitizeRTEHtml } from './brand-page-maker/utils';
|
|
31
31
|
export { getPageSlugFromPageTitle } from './brand-page-maker/utils/slug.util';
|
|
32
32
|
// stores
|
|
@@ -81,6 +81,14 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
81
81
|
variationType: string | undefined;
|
|
82
82
|
width: number;
|
|
83
83
|
height: number;
|
|
84
|
+
expiryDate?: string | undefined;
|
|
85
|
+
s3Token?: string | undefined;
|
|
86
|
+
logoTheme?: {
|
|
87
|
+
backgroundColors: string[];
|
|
88
|
+
textColors: string[];
|
|
89
|
+
textOpacities: number[];
|
|
90
|
+
textValues: any;
|
|
91
|
+
} | undefined;
|
|
84
92
|
}[];
|
|
85
93
|
logoTemplateMetadata: string;
|
|
86
94
|
isLogoDraftSaved: boolean;
|
|
@@ -105,6 +113,8 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
105
113
|
updateEditableLogoImageByVariationAsync(editableLogoVariation: import("../store/editable-logo-store").EditableLogoVariation, defaultPrimaryText?: string | undefined): Promise<import("../../../clients/fabric-render-client").ModifyLogoDataResponse | null>;
|
|
106
114
|
getDraftMetadata(logoDraftToken: string): string | undefined;
|
|
107
115
|
upsertDraftMetadata(metadata: string): void;
|
|
116
|
+
isS3TokenExpired(expiryDate: string | undefined): boolean;
|
|
117
|
+
refreshS3TokenIfExpiredAsync(logoVariation: number): Promise<boolean>;
|
|
108
118
|
postEditableLogoRequestAsync(payload: {
|
|
109
119
|
returnJson: boolean;
|
|
110
120
|
dimensionType: string;
|
|
@@ -253,6 +253,14 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
253
253
|
variationType: string | undefined;
|
|
254
254
|
width: number;
|
|
255
255
|
height: number;
|
|
256
|
+
expiryDate?: string | undefined;
|
|
257
|
+
s3Token?: string | undefined;
|
|
258
|
+
logoTheme?: {
|
|
259
|
+
backgroundColors: string[];
|
|
260
|
+
textColors: string[];
|
|
261
|
+
textOpacities: number[];
|
|
262
|
+
textValues: any;
|
|
263
|
+
} | undefined;
|
|
256
264
|
}[];
|
|
257
265
|
logoTemplateMetadata: string;
|
|
258
266
|
isLogoDraftSaved: boolean;
|
|
@@ -277,6 +285,8 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
277
285
|
updateEditableLogoImageByVariationAsync(editableLogoVariation: import("../store").EditableLogoVariation, defaultPrimaryText?: string | undefined): Promise<import("../../../clients/fabric-render-client").ModifyLogoDataResponse | null>;
|
|
278
286
|
getDraftMetadata(logoDraftToken: string): string | undefined;
|
|
279
287
|
upsertDraftMetadata(metadata: string): void;
|
|
288
|
+
isS3TokenExpired(expiryDate: string | undefined): boolean;
|
|
289
|
+
refreshS3TokenIfExpiredAsync(logoVariation: number): Promise<boolean>;
|
|
280
290
|
postEditableLogoRequestAsync(payload: {
|
|
281
291
|
returnJson: boolean;
|
|
282
292
|
dimensionType: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ModifyLogoDataResponse } from '../../../clients/fabric-render-client';
|
|
2
|
+
import { type FabricLogoTheme } from '../../../brand-page';
|
|
2
3
|
export interface GradientObject {
|
|
3
4
|
type: string;
|
|
4
5
|
angle: number | undefined;
|
|
@@ -60,6 +61,9 @@ export interface EditableLogoVariation {
|
|
|
60
61
|
variationType: string | undefined;
|
|
61
62
|
width: number;
|
|
62
63
|
height: number;
|
|
64
|
+
expiryDate?: string;
|
|
65
|
+
s3Token?: string;
|
|
66
|
+
logoTheme?: FabricLogoTheme;
|
|
63
67
|
}
|
|
64
68
|
export interface EditableLogoState {
|
|
65
69
|
enableEditMode: boolean;
|
|
@@ -151,6 +155,14 @@ export declare const useUiEditableLogoStore: import("pinia").StoreDefinition<"ui
|
|
|
151
155
|
variationType: string | undefined;
|
|
152
156
|
width: number;
|
|
153
157
|
height: number;
|
|
158
|
+
expiryDate?: string | undefined;
|
|
159
|
+
s3Token?: string | undefined;
|
|
160
|
+
logoTheme?: {
|
|
161
|
+
backgroundColors: string[];
|
|
162
|
+
textColors: string[];
|
|
163
|
+
textOpacities: number[];
|
|
164
|
+
textValues: any;
|
|
165
|
+
} | undefined;
|
|
154
166
|
}[];
|
|
155
167
|
logoTemplateMetadata: string;
|
|
156
168
|
isLogoDraftSaved: boolean;
|
|
@@ -175,6 +187,8 @@ export declare const useUiEditableLogoStore: import("pinia").StoreDefinition<"ui
|
|
|
175
187
|
updateEditableLogoImageByVariationAsync(editableLogoVariation: EditableLogoVariation, defaultPrimaryText?: string): Promise<ModifyLogoDataResponse | null>;
|
|
176
188
|
getDraftMetadata(logoDraftToken: string): string | undefined;
|
|
177
189
|
upsertDraftMetadata(metadata: string): void;
|
|
190
|
+
isS3TokenExpired(expiryDate: string | undefined): boolean;
|
|
191
|
+
refreshS3TokenIfExpiredAsync(logoVariation: number): Promise<boolean>;
|
|
178
192
|
postEditableLogoRequestAsync(payload: {
|
|
179
193
|
returnJson: boolean;
|
|
180
194
|
dimensionType: string;
|
|
@@ -19,6 +19,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
19
19
|
variationType: undefined,
|
|
20
20
|
width: 0,
|
|
21
21
|
height: 0,
|
|
22
|
+
expiryDate: undefined,
|
|
23
|
+
s3Token: undefined,
|
|
24
|
+
logoTheme: undefined,
|
|
22
25
|
},
|
|
23
26
|
{
|
|
24
27
|
variationId: LOGO_VARIATION.LOGO_WITH_BACKGROUND,
|
|
@@ -27,6 +30,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
27
30
|
variationType: undefined,
|
|
28
31
|
width: 0,
|
|
29
32
|
height: 0,
|
|
33
|
+
expiryDate: undefined,
|
|
34
|
+
s3Token: undefined,
|
|
35
|
+
logoTheme: undefined,
|
|
30
36
|
},
|
|
31
37
|
{
|
|
32
38
|
variationId: LOGO_VARIATION.LOGO_ONLY_WITH_TRANSPARENT_BACKGROUND,
|
|
@@ -35,6 +41,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
35
41
|
variationType: LOGO_VARIATION_TYPES.ICON_TRANSPARENT_BACKGROUND_ONLY,
|
|
36
42
|
width: 0,
|
|
37
43
|
height: 0,
|
|
44
|
+
expiryDate: undefined,
|
|
45
|
+
s3Token: undefined,
|
|
46
|
+
logoTheme: undefined,
|
|
38
47
|
},
|
|
39
48
|
{
|
|
40
49
|
variationId: LOGO_VARIATION.TEXT_ONLY_WITH_TRANSPARENT_BACKGROUND,
|
|
@@ -43,6 +52,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
43
52
|
variationType: LOGO_VARIATION_TYPES.TEXT_TRANSPARENT_BACKGROUND_ONLY,
|
|
44
53
|
width: 0,
|
|
45
54
|
height: 0,
|
|
55
|
+
expiryDate: undefined,
|
|
56
|
+
s3Token: undefined,
|
|
57
|
+
logoTheme: undefined,
|
|
46
58
|
},
|
|
47
59
|
],
|
|
48
60
|
logoEdits: {
|
|
@@ -254,6 +266,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
254
266
|
editableLogoVariation.base64 = result.base64;
|
|
255
267
|
editableLogoVariation.width = result.width;
|
|
256
268
|
editableLogoVariation.height = result.height;
|
|
269
|
+
editableLogoVariation.expiryDate = result.expiryDate;
|
|
270
|
+
editableLogoVariation.s3Token = result.s3Token;
|
|
271
|
+
editableLogoVariation.logoTheme = result.logoTheme;
|
|
257
272
|
return result;
|
|
258
273
|
},
|
|
259
274
|
getDraftMetadata(logoDraftToken) {
|
|
@@ -278,10 +293,41 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
|
|
|
278
293
|
});
|
|
279
294
|
}
|
|
280
295
|
},
|
|
296
|
+
isS3TokenExpired(expiryDate) {
|
|
297
|
+
if (!expiryDate) {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
const expiryTime = new Date(expiryDate).getTime();
|
|
301
|
+
const currentTime = Date.now();
|
|
302
|
+
// Add a 5-minute buffer to refresh before actual expiry
|
|
303
|
+
const bufferMs = 5 * 60 * 1000;
|
|
304
|
+
return currentTime >= expiryTime - bufferMs;
|
|
305
|
+
},
|
|
306
|
+
async refreshS3TokenIfExpiredAsync(logoVariation) {
|
|
307
|
+
const editableLogoVariation = this.editableLogoVariations[logoVariation];
|
|
308
|
+
if (!editableLogoVariation) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
const isExpired = this.isS3TokenExpired(editableLogoVariation.expiryDate);
|
|
312
|
+
if (isExpired) {
|
|
313
|
+
const logoStore = useLogoStore();
|
|
314
|
+
// Only refresh if logo template asset is available
|
|
315
|
+
if (!logoStore.logoTemplateAsset?.token) {
|
|
316
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
317
|
+
console.warn('Cannot refresh expired S3 token: logo template asset not available');
|
|
318
|
+
}
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
await this.updateEditableLogoImageUrlAsync();
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
return false;
|
|
325
|
+
},
|
|
281
326
|
async postEditableLogoRequestAsync(payload) {
|
|
282
327
|
const logoStore = useLogoStore();
|
|
283
328
|
const body = {
|
|
284
329
|
returnJson: payload?.returnJson || false,
|
|
330
|
+
generateS3Url: true,
|
|
285
331
|
dimensionsType: payload?.dimensionType,
|
|
286
332
|
variation: payload?.variationType,
|
|
287
333
|
primaryText: payload?.defaultPrimaryText,
|
|
@@ -4191,6 +4191,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4191
4191
|
variationType: string | undefined;
|
|
4192
4192
|
width: number;
|
|
4193
4193
|
height: number;
|
|
4194
|
+
expiryDate?: string | undefined;
|
|
4195
|
+
s3Token?: string | undefined;
|
|
4196
|
+
logoTheme?: {
|
|
4197
|
+
backgroundColors: string[];
|
|
4198
|
+
textColors: string[];
|
|
4199
|
+
textOpacities: number[];
|
|
4200
|
+
textValues: any;
|
|
4201
|
+
} | undefined;
|
|
4194
4202
|
}[];
|
|
4195
4203
|
logoTemplateMetadata: string;
|
|
4196
4204
|
isLogoDraftSaved: boolean;
|
|
@@ -4215,6 +4223,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4215
4223
|
updateEditableLogoImageByVariationAsync(editableLogoVariation: import("../../../logo-settings/store/editable-logo-store").EditableLogoVariation, defaultPrimaryText?: string | undefined): Promise<import("../../../../clients/fabric-render-client").ModifyLogoDataResponse | null>;
|
|
4216
4224
|
getDraftMetadata(logoDraftToken: string): string | undefined;
|
|
4217
4225
|
upsertDraftMetadata(metadata: string): void;
|
|
4226
|
+
isS3TokenExpired(expiryDate: string | undefined): boolean;
|
|
4227
|
+
refreshS3TokenIfExpiredAsync(logoVariation: number): Promise<boolean>;
|
|
4218
4228
|
postEditableLogoRequestAsync(payload: {
|
|
4219
4229
|
returnJson: boolean;
|
|
4220
4230
|
dimensionType: string;
|
|
@@ -601,6 +601,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
601
601
|
tabMenuClasses(): string;
|
|
602
602
|
visibleTabs(): any;
|
|
603
603
|
}, {
|
|
604
|
+
checkAndRefreshS3TokenIfExpired(): Promise<void>;
|
|
604
605
|
onNextClicked(): Promise<void>;
|
|
605
606
|
onPreviousClicked(): Promise<void>;
|
|
606
607
|
internalOnTemplateSelected(templateId: string): Promise<void>;
|
|
@@ -6,6 +6,8 @@ import { debounce } from '../../functions';
|
|
|
6
6
|
import { useBrandPageContainerStore, useBrandPageMakerStore, useUiStore, } from '../../../brand-page-maker/stores';
|
|
7
7
|
import { templateSettingsTr } from '../../../composables/useTranslate';
|
|
8
8
|
import { useEventTracker } from '../../../brand-page-maker/composables/useEventTracker';
|
|
9
|
+
import { useUiEditableLogoStore, useUiLogoSettingsStore, } from '../../logo-settings/store';
|
|
10
|
+
import { useLogoStore } from '../../../brand-page-maker/stores/logo-store';
|
|
9
11
|
export default defineComponent({
|
|
10
12
|
props: {
|
|
11
13
|
numColumns: {
|
|
@@ -107,6 +109,8 @@ export default defineComponent({
|
|
|
107
109
|
},
|
|
108
110
|
},
|
|
109
111
|
async mounted() {
|
|
112
|
+
// Check and refresh S3 token if expired before loading templates
|
|
113
|
+
await this.checkAndRefreshS3TokenIfExpired();
|
|
110
114
|
// load templates on mounted if it is not initialised
|
|
111
115
|
if (!this.pageCount) {
|
|
112
116
|
await this.templateSettingsStore.loadPageNo({
|
|
@@ -118,6 +122,35 @@ export default defineComponent({
|
|
|
118
122
|
this.debounceOnSearch = debounce(this.setSearchText, 500);
|
|
119
123
|
},
|
|
120
124
|
methods: {
|
|
125
|
+
async checkAndRefreshS3TokenIfExpired() {
|
|
126
|
+
const brandPageMakerContainerStore = useBrandPageContainerStore();
|
|
127
|
+
const editableLogoStore = useUiEditableLogoStore();
|
|
128
|
+
const logoStore = useLogoStore();
|
|
129
|
+
const logoSettingsStore = useUiLogoSettingsStore();
|
|
130
|
+
// Only check for non-admin (pre-purchase) and non-BYO logos
|
|
131
|
+
if (brandPageMakerContainerStore.isAdmin) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const isByo = logoStore.logoTemplateAsset?.isByo ?? false;
|
|
135
|
+
if (isByo) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const logoVariation = logoSettingsStore.selectedLogoImage.logoVariation;
|
|
139
|
+
if (logoVariation === undefined) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const wasRefreshed = await editableLogoStore.refreshS3TokenIfExpiredAsync(logoVariation);
|
|
144
|
+
if (wasRefreshed && process.env.NODE_ENV !== 'production') {
|
|
145
|
+
console.log('S3 token was expired in TemplatesSettings and has been refreshed');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
150
|
+
console.error('Error checking/refreshing S3 token:', error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
121
154
|
async onNextClicked() {
|
|
122
155
|
if (!this.isLoadMoreBtnEnabled) {
|
|
123
156
|
return;
|
|
@@ -3,12 +3,12 @@ import * as DesignTemplateClient from '../../../clients/design-template-client';
|
|
|
3
3
|
import {} from '../../../clients/models';
|
|
4
4
|
import { BP_DEFAULT_TEMPLATE_TYPE_NAME, SIDE_BAR_TAB_NAMES, } from '../../../brand-page-maker/constants';
|
|
5
5
|
import { defineStore, storeToRefs } from 'pinia';
|
|
6
|
-
import { useBrandPageContainerStore, useBrandPageMakerStore, useBrandPageMakerUserStore, useUiStore, } from '../../../brand-page-maker/stores';
|
|
6
|
+
import { useBrandPageContainerStore, useBrandPageMakerStore, useBrandPageMakerUserStore, useLogoStore, useUiStore, } from '../../../brand-page-maker/stores';
|
|
7
7
|
import { useUiSideBarStore } from '../../side-bar/store';
|
|
8
8
|
import { BrandPageModel } from '../../../brand-page/models';
|
|
9
9
|
import { migrateBrandPageModel } from '../../../brand-page/utils';
|
|
10
10
|
import { getAiContentIndexByTemplateTokenAndNumberOfVariations } from '../../../brand-page-maker/utils/ai-content-selection.util';
|
|
11
|
-
import { useUiLogoSettingsStore } from '../../logo-settings/store';
|
|
11
|
+
import { useUiEditableLogoStore, useUiLogoSettingsStore, } from '../../logo-settings/store';
|
|
12
12
|
import { templateSettingsTr, getCurrentLocale, } from '../../../composables/useTranslate';
|
|
13
13
|
import { watch } from 'vue';
|
|
14
14
|
export const DEFAULT_PAGE_SIZE = 6;
|
|
@@ -18,8 +18,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
18
18
|
const brandPageContainerStore = useBrandPageContainerStore();
|
|
19
19
|
const brandPageMakerUserStore = useBrandPageMakerUserStore();
|
|
20
20
|
// Set renderAsImage to true if not admin AND not pre-purchase
|
|
21
|
-
const renderAsImage = !brandPageMakerUserStore.isAdmin
|
|
22
|
-
!brandPageContainerStore.isPrePurchase;
|
|
21
|
+
const renderAsImage = !brandPageMakerUserStore.isAdmin;
|
|
23
22
|
return {
|
|
24
23
|
isBusy: false,
|
|
25
24
|
pageCount: 0,
|
|
@@ -144,6 +143,8 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
144
143
|
const brandPageContainerStore = useBrandPageContainerStore();
|
|
145
144
|
const brandPageMakerUserStore = useBrandPageMakerUserStore();
|
|
146
145
|
const logoSettingsStore = useUiLogoSettingsStore();
|
|
146
|
+
const logoStore = useLogoStore();
|
|
147
|
+
const editableLogoStore = useUiEditableLogoStore();
|
|
147
148
|
const designTemplateToken = brandPageContainerStore.designTemplateToken;
|
|
148
149
|
if (brandPageMakerStore.isInitialising) {
|
|
149
150
|
setTimeout(() => {
|
|
@@ -168,6 +169,20 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
168
169
|
try {
|
|
169
170
|
const designTemplateClient = DesignTemplateClient.getInstance();
|
|
170
171
|
const currentLocale = getCurrentLocale();
|
|
172
|
+
const isByo = logoStore.logoTemplateAsset?.isByo ?? false;
|
|
173
|
+
const logoTemplateToken = logoStore.logoTemplateAsset?.token ?? undefined;
|
|
174
|
+
const logoVariation = logoSettingsStore.selectedLogoImage.logoVariation;
|
|
175
|
+
// Check if S3 token is expired and refresh if needed
|
|
176
|
+
if (!isByo) {
|
|
177
|
+
const wasRefreshed = await editableLogoStore.refreshS3TokenIfExpiredAsync(logoVariation);
|
|
178
|
+
if (wasRefreshed) {
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
this.loadPageNo({ pageNo });
|
|
181
|
+
}, LOAD_PAGE_RETRY_DELAY);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const editableLogoVariation = editableLogoStore.editableLogoVariations[logoVariation];
|
|
171
186
|
const result = await designTemplateClient.getTemplateItemsByTemplateType(this.templateType, {
|
|
172
187
|
page: pageNo,
|
|
173
188
|
pageSize: DEFAULT_PAGE_SIZE,
|
|
@@ -178,6 +193,8 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
178
193
|
personalisable: this.selectedTab.key === TEMPLATE_TABS.AI,
|
|
179
194
|
selectedTemplateToken: designTemplateToken,
|
|
180
195
|
locale: currentLocale,
|
|
196
|
+
logoS3Token: !isByo ? editableLogoVariation.s3Token : undefined,
|
|
197
|
+
logoTemplateToken: isByo ? logoTemplateToken : undefined,
|
|
181
198
|
});
|
|
182
199
|
if (!result) {
|
|
183
200
|
return;
|
|
@@ -185,8 +202,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
185
202
|
this._setPageCount({ pageCount: result.pageCount });
|
|
186
203
|
const templates = await Promise.all(result.paginatedItems.map(async (item) => {
|
|
187
204
|
try {
|
|
188
|
-
if (
|
|
189
|
-
brandPageMakerUserStore.isAdmin) {
|
|
205
|
+
if (brandPageMakerUserStore.isAdmin) {
|
|
190
206
|
// Pre-purchase: full template with brandPageModel for live rendering
|
|
191
207
|
const template = await designTemplateClient.getTemplateByTemplateToken(item.designTemplateToken);
|
|
192
208
|
return this.safeMapToTemplateSettingsTemplate(template);
|
|
@@ -245,6 +261,13 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
245
261
|
templateId: payload.templateId,
|
|
246
262
|
forceApply: payload.forceApply,
|
|
247
263
|
});
|
|
264
|
+
if (payload.forceApply) {
|
|
265
|
+
await this._setTemplates({
|
|
266
|
+
templates: [],
|
|
267
|
+
});
|
|
268
|
+
await this._setPageNoLoaded({ pageNoLoaded: 0 });
|
|
269
|
+
await this.loadPageNo({ pageNo: 1 });
|
|
270
|
+
}
|
|
248
271
|
},
|
|
249
272
|
async onCategorySelected(payload) {
|
|
250
273
|
await this._setTemplates({
|
|
@@ -319,9 +342,11 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
319
342
|
*/
|
|
320
343
|
setupLogoChangeWatcher() {
|
|
321
344
|
const logoSettingsStore = useUiLogoSettingsStore();
|
|
322
|
-
const
|
|
345
|
+
const editableLogoStore = useUiEditableLogoStore();
|
|
323
346
|
const brandPageMakerUserStore = useBrandPageMakerUserStore();
|
|
324
347
|
const { selectedLogoImage } = storeToRefs(logoSettingsStore);
|
|
348
|
+
const { editableLogoVariations } = storeToRefs(editableLogoStore);
|
|
349
|
+
let s3TokenDebounceTimer = null;
|
|
325
350
|
// Watch for changes to logoImage (token or variation changes)
|
|
326
351
|
watch(() => selectedLogoImage.value, async (newLogoImage, oldLogoImage) => {
|
|
327
352
|
// Skip initial load when oldLogoImage is undefined
|
|
@@ -331,8 +356,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
331
356
|
// Only refetch for post-purchase users and when logo actually changes
|
|
332
357
|
const hasLogoChanged = newLogoImage.logoDraftToken !== oldLogoImage.logoDraftToken ||
|
|
333
358
|
newLogoImage.logoVariation !== oldLogoImage.logoVariation;
|
|
334
|
-
if (!
|
|
335
|
-
!brandPageMakerUserStore.isAdmin &&
|
|
359
|
+
if (!brandPageMakerUserStore.isAdmin &&
|
|
336
360
|
newLogoImage.logoDraftToken &&
|
|
337
361
|
hasLogoChanged) {
|
|
338
362
|
// Reset templates state and reload with new logo
|
|
@@ -343,6 +367,30 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
|
|
|
343
367
|
await this.loadPageNo({ pageNo: 1 });
|
|
344
368
|
}
|
|
345
369
|
}, { deep: true });
|
|
370
|
+
// Watch for S3 token changes (when user edits logo colors, text, etc.)
|
|
371
|
+
// Debounced to avoid excessive reloads during rapid edits
|
|
372
|
+
watch(() => editableLogoVariations.value[selectedLogoImage.value.logoVariation]
|
|
373
|
+
?.s3Token, async (newS3Token, oldS3Token) => {
|
|
374
|
+
if (s3TokenDebounceTimer) {
|
|
375
|
+
clearTimeout(s3TokenDebounceTimer);
|
|
376
|
+
}
|
|
377
|
+
if (!oldS3Token) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (newS3Token === oldS3Token) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (brandPageMakerUserStore.isAdmin) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// Debounce the reload by 500ms to avoid rapid successive reloads
|
|
387
|
+
s3TokenDebounceTimer = setTimeout(async () => {
|
|
388
|
+
await this._setTemplates({ templates: [] });
|
|
389
|
+
await this._setPageNoLoaded({ pageNoLoaded: 0 });
|
|
390
|
+
await this._setPageNo({ pageNo: 1 });
|
|
391
|
+
await this.loadPageNo({ pageNo: 1 });
|
|
392
|
+
}, 500);
|
|
393
|
+
});
|
|
346
394
|
},
|
|
347
395
|
},
|
|
348
396
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designcrowd/library.brand-page",
|
|
3
3
|
"description": "A collection of Maker/Designer applications",
|
|
4
|
-
"version": "5.16.
|
|
4
|
+
"version": "5.16.29-pre-temp-13",
|
|
5
5
|
"author": "Design.com Eng",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"type": "module",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"src"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"dev": "nuxt dev nuxtapp",
|
|
15
|
+
"dev": "export NODE_TLS_REJECT_UNAUTHORIZED=0 && nuxt dev nuxtapp",
|
|
16
16
|
"dev:dcom": "export tailwindTheme=designCom && nuxt dev nuxtapp",
|
|
17
17
|
"docker:publish": "docker build -t bp-maker:latest . --file ./build/Dockerfile.brand-page-lib-publish --build-arg NPM_TOKEN=$NPM_TOKEN --no-cache && cross-env NPM_TOKEN=",
|
|
18
18
|
"lint": "eslint . && tsc --project tsconfig.lint.json --noEmit",
|
package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.ts
CHANGED
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
DESKTOP_WIDTH,
|
|
5
5
|
MOBILE_HEIGHT,
|
|
6
6
|
MOBILE_WIDTH,
|
|
7
|
-
MOBILE_HEIGHT_POST_PURCHASE,
|
|
8
7
|
} from '../../constants';
|
|
9
8
|
import {
|
|
10
9
|
useBrandPageMakerStore,
|
|
@@ -36,11 +35,7 @@ export default defineComponent({
|
|
|
36
35
|
},
|
|
37
36
|
|
|
38
37
|
height(): number {
|
|
39
|
-
|
|
40
|
-
return DESKTOP_HEIGHT;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return this.isPrePurchase ? MOBILE_HEIGHT : MOBILE_HEIGHT_POST_PURCHASE;
|
|
38
|
+
return this.isBrandSite ? DESKTOP_HEIGHT : MOBILE_HEIGHT;
|
|
44
39
|
},
|
|
45
40
|
},
|
|
46
41
|
});
|
|
@@ -265,7 +265,7 @@ export default defineComponent({
|
|
|
265
265
|
},
|
|
266
266
|
watch: {
|
|
267
267
|
template() {
|
|
268
|
-
if (this.isAdmin
|
|
268
|
+
if (this.isAdmin) {
|
|
269
269
|
this.updateViewModel();
|
|
270
270
|
} else {
|
|
271
271
|
// Reset loading state when template changes for image-based previews
|
|
@@ -275,7 +275,7 @@ export default defineComponent({
|
|
|
275
275
|
},
|
|
276
276
|
logoTheme: {
|
|
277
277
|
handler() {
|
|
278
|
-
if (this.isAdmin
|
|
278
|
+
if (this.isAdmin) {
|
|
279
279
|
this.updateViewModel();
|
|
280
280
|
}
|
|
281
281
|
},
|
|
@@ -283,7 +283,7 @@ export default defineComponent({
|
|
|
283
283
|
},
|
|
284
284
|
previewImageUrl() {
|
|
285
285
|
// Reset loading state whenever the preview URL changes
|
|
286
|
-
if (!this.isAdmin
|
|
286
|
+
if (!this.isAdmin) {
|
|
287
287
|
this.imageLoading = true;
|
|
288
288
|
this.imageLoadError = false;
|
|
289
289
|
}
|
|
@@ -353,7 +353,7 @@ export default defineComponent({
|
|
|
353
353
|
|
|
354
354
|
async updateViewModel(forceUpdate = true) {
|
|
355
355
|
// Only update view model for admin or pre-purchase mode
|
|
356
|
-
if (!this.isAdmin
|
|
356
|
+
if (!this.isAdmin) {
|
|
357
357
|
return;
|
|
358
358
|
}
|
|
359
359
|
|
|
@@ -60,6 +60,8 @@ export const EVENTS = {
|
|
|
60
60
|
WEBSITE_MAKER_AI_STOP_GENERATION: 'website_maker_ai_stop_generation',
|
|
61
61
|
WEBSITE_SAVE_CONTACT: 'website_save_contact',
|
|
62
62
|
WEBSITE_START_FOR_FREE: 'website_start_for_free',
|
|
63
|
+
WEBSITE_MAKER_AI_CLICK_SUGGESTED_PROMPT:
|
|
64
|
+
'website_maker_ai_click_suggested_prompt',
|
|
63
65
|
};
|
|
64
66
|
|
|
65
67
|
export const SELECT_LOCATIONS = {
|
|
@@ -92,6 +94,12 @@ export const GENERATE_AI_TEXT_CTA_LOCATIONS = {
|
|
|
92
94
|
TESTIMONIAL_ITEM: 'testimonial_item',
|
|
93
95
|
};
|
|
94
96
|
|
|
97
|
+
export const GENERATE_AI_SUGGESTED_PROMPT = {
|
|
98
|
+
GENERATE_TEXT: 'generate_text',
|
|
99
|
+
IMPROVE_TEXT: 'improve_text',
|
|
100
|
+
SPELL_CHECK: 'spell_check',
|
|
101
|
+
};
|
|
102
|
+
|
|
95
103
|
export const TRIGGER_TYPE = {
|
|
96
104
|
AUTOMATIC: 'automatic',
|
|
97
105
|
USER_TRIGGERED: 'user_triggered',
|
|
@@ -100,6 +100,7 @@ import { commonTr, errorTr } from '../../../composables/useTranslate';
|
|
|
100
100
|
import { UPGRADE_CTA_LOCATIONS } from '../../composables/useEventTracker';
|
|
101
101
|
import { useVideoStore } from '../video';
|
|
102
102
|
import { findValuesByKey } from '../../../helpers/ts.helper';
|
|
103
|
+
import { useLogoStore } from '../logo-store';
|
|
103
104
|
|
|
104
105
|
export interface NotificationMessage {
|
|
105
106
|
type: 'success' | 'warning' | 'error';
|
|
@@ -358,6 +359,8 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
358
359
|
const userStore = useBrandPageMakerUserStore();
|
|
359
360
|
const containerStore = useBrandPageContainerStore();
|
|
360
361
|
const uiContentSettings = useUiContentSettingsStore();
|
|
362
|
+
const editableLogoStore = useUiEditableLogoStore();
|
|
363
|
+
const logoStore = useLogoStore();
|
|
361
364
|
|
|
362
365
|
if (!this.selectedTemplateId) {
|
|
363
366
|
return;
|
|
@@ -409,6 +412,27 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
409
412
|
);
|
|
410
413
|
}
|
|
411
414
|
} else {
|
|
415
|
+
if (containerStore.isPrePurchase) {
|
|
416
|
+
if (logoStore.logoTemplateAsset?.isByo) {
|
|
417
|
+
if (uiStore.logoTheme)
|
|
418
|
+
uiStore.setLogoTheme({
|
|
419
|
+
logoTheme: uiStore.logoTheme,
|
|
420
|
+
});
|
|
421
|
+
} else {
|
|
422
|
+
const logoVariation =
|
|
423
|
+
logoSettingsStore.selectedLogoTemplateImage
|
|
424
|
+
?.logoTemplateVersion ?? 0;
|
|
425
|
+
const logoTheme =
|
|
426
|
+
editableLogoStore.editableLogoVariations[logoVariation]
|
|
427
|
+
?.logoTheme;
|
|
428
|
+
|
|
429
|
+
if (logoTheme)
|
|
430
|
+
uiStore.setLogoTheme({
|
|
431
|
+
logoTheme: parseLogoThemeToCssStyles(logoTheme),
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
412
436
|
const logoImage =
|
|
413
437
|
logoUtil.safeGetLogoImageFromLogoImageUrl(logoImageUrl);
|
|
414
438
|
|
|
@@ -171,12 +171,21 @@ export const getPlainTextFromRTE = (content: string): string => {
|
|
|
171
171
|
return '';
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
let plainText = content;
|
|
175
|
+
|
|
174
176
|
// Only strip HTML tags if the value contains HTML
|
|
175
177
|
if (hasRTEContent(content)) {
|
|
176
|
-
|
|
178
|
+
plainText = content.replace(/<[^>]*>/g, '');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Decode URL-encoded characters (like %0A for line breaks)
|
|
182
|
+
try {
|
|
183
|
+
plainText = decodeURIComponent(plainText);
|
|
184
|
+
} catch (e) {
|
|
185
|
+
// If decoding fails, use the text as-is
|
|
177
186
|
}
|
|
178
187
|
|
|
179
|
-
return
|
|
188
|
+
return plainText.trim();
|
|
180
189
|
};
|
|
181
190
|
|
|
182
191
|
export const replaceTextInRTE = (
|
|
@@ -638,7 +638,19 @@
|
|
|
638
638
|
"generateInputPlaceholder": "Geben Sie Ihre Eingabeaufforderung ein, um den Text zu beschreiben ...",
|
|
639
639
|
"stopGeneration": "Generierung anhalten",
|
|
640
640
|
"useText": "Text verwenden",
|
|
641
|
-
"promptTooLong": "Der Prompt darf maximal {{maxLength}} Zeichen lang sein ({{currentLength}})"
|
|
641
|
+
"promptTooLong": "Der Prompt darf maximal {{maxLength}} Zeichen lang sein ({{currentLength}})",
|
|
642
|
+
"generateText": "Erstellen Sie {{ location }}",
|
|
643
|
+
"improveText": "Meinen Text verbessern",
|
|
644
|
+
"spellCheck": "Rechtschreibprüfung",
|
|
645
|
+
"generateTextPrompt": "Schreiben Sie ein einprägsames {{fieldName}} für {{businessName}}, ein {{industry}} Unternehmen. Gestalten Sie es freundlich und einladend.",
|
|
646
|
+
"generateTextPromptWithIndustry": "Ein einprägsames {{fieldName}} schreiben für ein Unternehmen in der folgenden Branche: {{industry}}. Freundlich und einladend gestalten.",
|
|
647
|
+
"generateTextPromptWithBusinessName": "Ein einprägsames {{fieldName}} schreiben für {{businessName}}. Freundlich und einladend gestalten.",
|
|
648
|
+
"generateTextPromptSimple": "Ein einprägsames {{fieldName}} schreiben. Freundlich und einladend gestalten.",
|
|
649
|
+
"improveTextPrompt": "Diesen Text für {{businessName}} verbessern, ein Unternehmen in der folgenden Branche: {{industry}}. Natürlicher, klarer und professioneller formulieren.",
|
|
650
|
+
"improveTextPromptWithIndustry": "Diesen Text für {{industry}} verbessern. Natürlicher, klarer und professioneller formulieren.",
|
|
651
|
+
"improveTextPromptWithBusinessName": "Diesen Text für {{businessName}} verbessern. Natürlicher, klarer und professioneller formulieren.",
|
|
652
|
+
"improveTextPromptSimple": "Diesen Text verbessern. Natürlicher, klarer und professioneller formulieren.",
|
|
653
|
+
"spellCheckPrompt": "Rechtschreibung und Grammatik für diesen Text prüfen."
|
|
642
654
|
},
|
|
643
655
|
"googleAddressField": {
|
|
644
656
|
"addressPlaceholder": "Geben Sie einen Ort ein"
|
|
@@ -638,7 +638,19 @@
|
|
|
638
638
|
"generateInputPlaceholder": "Introduce tu mensaje para describir el texto...",
|
|
639
639
|
"stopGeneration": "Detén la generación",
|
|
640
640
|
"useText": "Usa texto",
|
|
641
|
-
"promptTooLong": "El mensaje debe tener {{maxLength}} caracteres como máximo ({{currentLength}})"
|
|
641
|
+
"promptTooLong": "El mensaje debe tener {{maxLength}} caracteres como máximo ({{currentLength}})",
|
|
642
|
+
"generateText": "Genera {{ location }}",
|
|
643
|
+
"improveText": "Mejora mi texto",
|
|
644
|
+
"spellCheck": "Comprueba la ortografía",
|
|
645
|
+
"generateTextPrompt": "Escribe un {{fieldName}} pegadizo para {{businessName}}, un negocio {{industry}}. Hazlo amigable y acogedor.",
|
|
646
|
+
"generateTextPromptWithIndustry": "Escribe una {{fieldName}} que llame la atención para un negocio en el sector de {{industry}}. Haz que resulte cordial y agradable.",
|
|
647
|
+
"generateTextPromptWithBusinessName": "Escribe una {{fieldName}} que llame la atención para {{businessName}}. Haz que resulte cordial y agradable.",
|
|
648
|
+
"generateTextPromptSimple": "Escribe una {{fieldName}} que llame la atención. Haz que resulte cordial y agradable.",
|
|
649
|
+
"improveTextPrompt": "Mejora este texto para {{businessName}}, un negocio de {{industry}}. Haz que suene más natural, claro y profesional.",
|
|
650
|
+
"improveTextPromptWithIndustry": "Mejora este texto para un negocio de {{industry}}. Haz que suene más natural, claro y profesional.",
|
|
651
|
+
"improveTextPromptWithBusinessName": "Mejora este texto para {{businessName}}. Haz que suene más natural, claro y profesional.",
|
|
652
|
+
"improveTextPromptSimple": "Mejora este texto. Haz que suene más natural, claro y profesional.",
|
|
653
|
+
"spellCheckPrompt": "Verifica la ortografía y la gramática de este texto."
|
|
642
654
|
},
|
|
643
655
|
"googleAddressField": {
|
|
644
656
|
"addressPlaceholder": "Introduce una ubicación"
|