@marvalt/digivalt-core 0.1.7 → 0.2.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 (44) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +47 -4
  3. package/bin/init.cjs +406 -25
  4. package/dist/config.cjs +520 -0
  5. package/dist/config.cjs.map +1 -0
  6. package/dist/config.d.ts +307 -0
  7. package/dist/config.esm.js +502 -0
  8. package/dist/config.esm.js.map +1 -0
  9. package/dist/generators.cjs +2481 -0
  10. package/dist/generators.cjs.map +1 -0
  11. package/dist/generators.d.ts +19 -0
  12. package/dist/generators.esm.js +2475 -0
  13. package/dist/generators.esm.js.map +1 -0
  14. package/dist/index.cjs +18 -7955
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +18 -1196
  17. package/dist/index.esm.js +13 -7929
  18. package/dist/index.esm.js.map +1 -1
  19. package/dist/runtime/env.d.ts +4 -0
  20. package/dist/runtime/lazy.d.ts +1 -0
  21. package/dist/services/cf-wp-webhook.d.ts +2 -0
  22. package/dist/services/gravityForms.d.ts +3 -0
  23. package/dist/services/mautic.d.ts +5 -1
  24. package/dist/services/suitecrm.d.ts +2 -0
  25. package/dist/services.cjs +1339 -0
  26. package/dist/services.cjs.map +1 -0
  27. package/dist/services.d.ts +432 -0
  28. package/dist/services.esm.js +1322 -0
  29. package/dist/services.esm.js.map +1 -0
  30. package/dist/static/index.d.ts +4 -0
  31. package/dist/static.cjs +997 -0
  32. package/dist/static.cjs.map +1 -0
  33. package/dist/static.d.ts +410 -0
  34. package/dist/static.esm.js +962 -0
  35. package/dist/static.esm.js.map +1 -0
  36. package/dist/types.cjs +3 -0
  37. package/dist/types.cjs.map +1 -0
  38. package/dist/types.d.ts +134 -0
  39. package/dist/types.esm.js +2 -0
  40. package/dist/types.esm.js.map +1 -0
  41. package/package.json +30 -2
  42. package/template/DIGIVALT_SETUP.md +73 -0
  43. package/template/scripts/deploy-secrets.js +55 -23
  44. package/template/scripts/generate.ts +3 -17
@@ -0,0 +1,962 @@
1
+ import 'clsx';
2
+ import 'tailwind-merge';
3
+
4
+ /**
5
+ * Decodes HTML entities in a string
6
+ * Handles both named entities (&, ") and numeric entities (', ’)
7
+ * @param text - The text string with HTML entities
8
+ * @returns Decoded text string
9
+ */
10
+ function decodeHtmlEntities(text) {
11
+ if (!text)
12
+ return '';
13
+ // Use browser's built-in decoder if available (most efficient)
14
+ if (typeof document !== 'undefined') {
15
+ const textarea = document.createElement('textarea');
16
+ textarea.innerHTML = text;
17
+ return textarea.value;
18
+ }
19
+ // Fallback for server-side or when document is not available
20
+ // Decode common named entities
21
+ const namedEntities = {
22
+ '&': '&',
23
+ '&lt;': '<',
24
+ '&gt;': '>',
25
+ '&quot;': '"',
26
+ '&apos;': "'",
27
+ '&nbsp;': ' ',
28
+ '&copy;': '©',
29
+ '&reg;': '®',
30
+ '&trade;': '™',
31
+ '&hellip;': '…',
32
+ '&mdash;': '—',
33
+ '&ndash;': '–',
34
+ '&lsquo;': '\u2018', // Left single quotation mark
35
+ '&rsquo;': '\u2019', // Right single quotation mark
36
+ '&ldquo;': '\u201C', // Left double quotation mark
37
+ '&rdquo;': '\u201D', // Right double quotation mark
38
+ };
39
+ let decoded = text;
40
+ // Decode numeric entities (&#039;, &#8217;, etc.)
41
+ decoded = decoded.replace(/&#(\d+);/g, (match, dec) => {
42
+ return String.fromCharCode(parseInt(dec, 10));
43
+ });
44
+ // Decode hex entities (&#x27;, etc.)
45
+ decoded = decoded.replace(/&#x([0-9a-fA-F]+);/g, (match, hex) => {
46
+ return String.fromCharCode(parseInt(hex, 16));
47
+ });
48
+ // Decode named entities
49
+ Object.entries(namedEntities).forEach(([entity, char]) => {
50
+ decoded = decoded.replace(new RegExp(entity, 'g'), char);
51
+ });
52
+ return decoded;
53
+ }
54
+ /**
55
+ * Replaces common WordPress HTML entities so they display as expected (e.g. en dash as hyphen, &#038;/&amp; as &).
56
+ * Use on block innerHTML or other WP-rendered HTML before passing to dangerouslySetInnerHTML.
57
+ */
58
+ function normalizeWordPressHtmlEntities(html) {
59
+ if (!html)
60
+ return '';
61
+ return decodeHtmlEntities(html.replace(/&#8211;/g, '-'));
62
+ }
63
+
64
+ // @ts-nocheck
65
+ /**
66
+ * Cloudflare Images URL helpers
67
+ *
68
+ * Many endpoints (e.g., cloudflare_image_standardized) return the base URL
69
+ * without a variant/transform segment. Append a variant at render-time to
70
+ * control size and improve LCP/SEO.
71
+ */
72
+ const isCloudflareImageUrl = (url) => {
73
+ if (!url)
74
+ return false;
75
+ try {
76
+ const u = new URL(url);
77
+ return u.hostname.toLowerCase().includes('imagedelivery.net');
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ };
83
+ /**
84
+ * Append Cloudflare Images variant to the base URL if not already present.
85
+ * Example output: https://imagedelivery.net/<account>/<id>/w=1024,h=600
86
+ */
87
+ const getCloudflareVariantUrl = (url, options) => {
88
+ if (!isCloudflareImageUrl(url))
89
+ return url;
90
+ // If a transform already exists, return as-is
91
+ if (/\/w=\d+/.test(url) || /\/(public|thumbnail|banner|avatar)/.test(url)) {
92
+ return url;
93
+ }
94
+ const { width, height } = options;
95
+ const hasTrailingSlash = url.endsWith('/');
96
+ const base = hasTrailingSlash ? url.slice(0, -1) : url;
97
+ const variant = `w=${Math.max(1, Math.floor(width))}` + (height ? `,h=${Math.max(1, Math.floor(height))}` : '');
98
+ return `${base}/${variant}`;
99
+ };
100
+
101
+ // @ts-nocheck
102
+ // Minimal browser-safe static data loader to avoid importing Node-only code in the runtime bundle.
103
+ /** Recursively normalize WordPress HTML entities (e.g. &#8211; → "-") in block innerHTML. */
104
+ function normalizeBlocksHtml(blocks) {
105
+ if (!blocks)
106
+ return;
107
+ for (const block of blocks) {
108
+ if (block.innerHTML && typeof block.innerHTML === 'string') {
109
+ block.innerHTML = normalizeWordPressHtmlEntities(block.innerHTML);
110
+ }
111
+ if (block.innerBlocks?.length)
112
+ normalizeBlocksHtml(block.innerBlocks);
113
+ }
114
+ }
115
+ /** Recursively decode HTML entities in all string values of an event_meta-like object (mutate in place). */
116
+ function normalizeEventMetaStrings(meta) {
117
+ for (const key of Object.keys(meta)) {
118
+ const v = meta[key];
119
+ if (typeof v === 'string') {
120
+ meta[key] = decodeHtmlEntities(v);
121
+ }
122
+ else if (Array.isArray(v)) {
123
+ for (let i = 0; i < v.length; i++) {
124
+ const el = v[i];
125
+ if (typeof el === 'string') {
126
+ v[i] = decodeHtmlEntities(el);
127
+ }
128
+ else if (el && typeof el === 'object' && !Array.isArray(el)) {
129
+ normalizeEventMetaStrings(el);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ /** Normalize title.rendered, excerpt.rendered, content.rendered, content_cloudflare on a WP-like item (mutate in place). */
136
+ function normalizeRenderedStrings(item) {
137
+ if (!item || typeof item !== 'object')
138
+ return;
139
+ if (typeof item.title?.rendered === 'string') {
140
+ item.title.rendered = normalizeWordPressHtmlEntities(item.title.rendered);
141
+ }
142
+ if (typeof item.excerpt?.rendered === 'string') {
143
+ item.excerpt.rendered = normalizeWordPressHtmlEntities(item.excerpt.rendered);
144
+ }
145
+ if (typeof item.content?.rendered === 'string') {
146
+ item.content.rendered = normalizeWordPressHtmlEntities(item.content.rendered);
147
+ }
148
+ if (typeof item.content_cloudflare === 'string') {
149
+ item.content_cloudflare = normalizeWordPressHtmlEntities(item.content_cloudflare);
150
+ }
151
+ }
152
+ /**
153
+ * Mask email for privacy: first char of local + ***@****** + last char of domain name + TLD.
154
+ * Example: name@example.com.au → n***@******e.com.au
155
+ */
156
+ function maskEmail(email) {
157
+ const s = typeof email === 'string' ? email.trim() : '';
158
+ if (!s || !s.includes('@'))
159
+ return '***@***.***';
160
+ const parts = s.split('@', 2);
161
+ const local = parts[0];
162
+ const domain = parts[1];
163
+ if (!local || !domain)
164
+ return '***@***.***';
165
+ const localFirst = local.slice(0, 1);
166
+ const domainBits = domain.split('.');
167
+ if (domainBits.length < 2)
168
+ return localFirst + '***@******.' + domain;
169
+ const domainName = domainBits.shift() ?? '';
170
+ const tld = domainBits.join('.');
171
+ const domainLast = domainName.slice(-1);
172
+ return localFirst + '***@******' + domainLast + '.' + tld;
173
+ }
174
+ /** Replace raw members_email with masked value on each member in member arrays. */
175
+ function maskMemberEmailsInStaticData(data) {
176
+ if (!data)
177
+ return;
178
+ const memberKeys = ['chapter_member', 'members', 'member'];
179
+ const dataRecord = data;
180
+ for (const key of memberKeys) {
181
+ const arr = dataRecord[key];
182
+ if (!Array.isArray(arr))
183
+ continue;
184
+ for (const item of arr) {
185
+ if (item && typeof item === 'object') {
186
+ const obj = item;
187
+ if (obj.member_meta && typeof obj.member_meta === 'object') {
188
+ const meta = obj.member_meta;
189
+ if (meta.members_email != null)
190
+ meta.members_email = maskEmail(meta.members_email);
191
+ }
192
+ if (obj.public_profile && typeof obj.public_profile === 'object') {
193
+ const profile = obj.public_profile;
194
+ if (profile.members_email != null)
195
+ profile.members_email = maskEmail(profile.members_email);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ /** Walk static data and normalize block HTML and .rendered/content fields so entities like &#8211; display correctly. */
202
+ function normalizeWordPressHtmlInStaticData(data) {
203
+ if (!data)
204
+ return;
205
+ if (data.pages) {
206
+ for (const page of data.pages) {
207
+ normalizeRenderedStrings(page);
208
+ if (page.blocks)
209
+ normalizeBlocksHtml(page.blocks);
210
+ }
211
+ }
212
+ if (data.posts) {
213
+ for (const post of data.posts) {
214
+ normalizeRenderedStrings(post);
215
+ }
216
+ }
217
+ const cptKeys = ['eventbrite_event', 'member', 'testimonial', 'chapter_member', 'members'];
218
+ const dataRecord = data;
219
+ for (const key of cptKeys) {
220
+ const arr = dataRecord[key];
221
+ if (Array.isArray(arr)) {
222
+ for (const item of arr) {
223
+ normalizeRenderedStrings(item);
224
+ if (key === 'eventbrite_event' && item?.event_meta && typeof item.event_meta === 'object' && !Array.isArray(item.event_meta)) {
225
+ normalizeEventMetaStrings(item.event_meta);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ if (data.site_settings && typeof data.site_settings === 'object') {
231
+ const settings = data.site_settings;
232
+ if (typeof settings.name === 'string')
233
+ settings.name = normalizeWordPressHtmlEntities(settings.name);
234
+ if (typeof settings.description === 'string')
235
+ settings.description = normalizeWordPressHtmlEntities(settings.description);
236
+ }
237
+ if (data.header?.blocks)
238
+ normalizeBlocksHtml(data.header.blocks);
239
+ if (data.footer?.blocks)
240
+ normalizeBlocksHtml(data.footer.blocks);
241
+ }
242
+ let wpStaticCache = null;
243
+ const loadWordPressData = async (path = '/wordpress-data.json') => {
244
+ if (wpStaticCache)
245
+ return;
246
+ const res = await fetch(path);
247
+ if (!res.ok)
248
+ throw new Error(`Failed to load WordPress static data: ${res.status}`);
249
+ wpStaticCache = (await res.json());
250
+ normalizeWordPressHtmlInStaticData(wpStaticCache);
251
+ maskMemberEmailsInStaticData(wpStaticCache);
252
+ // Expose cache globally for theme loading (temporary workaround)
253
+ if (typeof window !== 'undefined') {
254
+ window.__wpStaticCache = wpStaticCache;
255
+ }
256
+ };
257
+ /**
258
+ * Get WordPress static data (includes theme_styles)
259
+ */
260
+ const getWordPressData = () => wpStaticCache;
261
+ const getWordPressPosts = () => wpStaticCache?.posts ?? [];
262
+ const getWordPressPages = () => wpStaticCache?.pages ?? [];
263
+ const getWordPressPageBySlug = (slug) => {
264
+ const pages = getWordPressPages();
265
+ return pages.find(page => page.slug === slug);
266
+ };
267
+ const getWordPressPageById = (id) => {
268
+ const pages = getWordPressPages();
269
+ return pages.find(page => page.id === id);
270
+ };
271
+ const getWordPressMedia = () => wpStaticCache?.media ?? [];
272
+ const getWordPressCategories = () => wpStaticCache?.categories ?? [];
273
+ const getWordPressTags = () => wpStaticCache?.tags ?? [];
274
+ const getWordPressMembers = () => wpStaticCache?.chapter_member ?? wpStaticCache?.members ?? wpStaticCache?.member ?? [];
275
+ const getWordPressEvents = () => wpStaticCache?.eventbrite_event ?? [];
276
+ const getWordPressTestimonials = () => wpStaticCache?.testimonial ?? [];
277
+ /** Returns a member by slug from the same list the grid uses. Call after loadWordPressData(). */
278
+ const getWordPressMemberBySlug = (slug) => getWordPressMembers().find((m) => m.slug === slug);
279
+ const getWordPressMemberRoles = () => wpStaticCache?.['member-role'] ?? wpStaticCache?.memberRoles ?? [];
280
+ const getSiteSettings = () => {
281
+ return wpStaticCache?.site_settings;
282
+ };
283
+ const getHeader = () => {
284
+ const data = getWordPressData();
285
+ return data?.header;
286
+ };
287
+ /**
288
+ * Get the first navigation block's menu ID from header blocks (for responsive header menu).
289
+ */
290
+ function findFirstNavRef(blocks) {
291
+ for (const block of blocks || []) {
292
+ if (block?.blockName === 'core/navigation') {
293
+ const ref = block?.attrs?.['ref'] ?? block?.attrs?.['menuId'] ?? block?.attrs?.['menu'];
294
+ if (ref != null)
295
+ return parseInt(String(ref), 10);
296
+ }
297
+ const inner = block?.innerBlocks;
298
+ if (Array.isArray(inner)) {
299
+ const found = findFirstNavRef(inner);
300
+ if (found != null)
301
+ return found;
302
+ }
303
+ }
304
+ return undefined;
305
+ }
306
+ const getHeaderMenuId = () => {
307
+ const header = getHeader();
308
+ return header?.blocks ? findFirstNavRef(header.blocks) : undefined;
309
+ };
310
+ const getParsedHeader = () => {
311
+ const header = getHeader();
312
+ const hasHeader = !!(header?.blocks && header.blocks.length > 0);
313
+ return {
314
+ hasHeader,
315
+ menuId: hasHeader ? getHeaderMenuId() : undefined,
316
+ };
317
+ };
318
+ const getNavigationMenu = () => {
319
+ const data = getWordPressData();
320
+ return data?.navigation_menu;
321
+ };
322
+ /**
323
+ * Get a menu by ID from static data
324
+ * @param menuId Menu ID to retrieve
325
+ * @returns Menu data if found, undefined otherwise
326
+ */
327
+ const getMenuById = (menuId) => {
328
+ const data = getWordPressData();
329
+ if (data?.menus) {
330
+ // JSON keys are strings, so convert menuId to string for lookup
331
+ const menuKey = String(menuId);
332
+ if (data.menus[menuKey]) {
333
+ return data.menus[menuKey];
334
+ }
335
+ // Also try numeric key in case it's stored as number
336
+ if (data.menus[menuId]) {
337
+ return data.menus[menuId];
338
+ }
339
+ }
340
+ // Fallback: check if it's the header menu
341
+ if (data?.navigation_menu && data.navigation_menu.id === menuId) {
342
+ return data.navigation_menu;
343
+ }
344
+ return undefined;
345
+ };
346
+ const getFooter = () => {
347
+ return wpStaticCache?.footer;
348
+ };
349
+ // Helper to get logo URL (prefers Cloudflare URL if available)
350
+ // Appends /w=80 to Cloudflare URLs for proper display
351
+ const getLogoUrl = () => {
352
+ const settings = getSiteSettings();
353
+ if (!settings?.logo)
354
+ return null;
355
+ // Prefer Cloudflare URL if available
356
+ const logoUrl = settings.logo.cloudflare_url || settings.logo.url;
357
+ if (!logoUrl)
358
+ return null;
359
+ return getCloudflareVariantUrl(logoUrl, { width: 80 }) || logoUrl;
360
+ };
361
+ // Helper to get site icon URL (prefers Cloudflare URL if available)
362
+ const getSiteIconUrl = () => {
363
+ const settings = getSiteSettings();
364
+ if (!settings?.site_icon)
365
+ return null;
366
+ return settings.site_icon.cloudflare_url || settings.site_icon.url || null;
367
+ };
368
+ // Helper to get site name
369
+ const getSiteName = () => {
370
+ const settings = getSiteSettings();
371
+ return settings?.site_name || 'DigiVAlt';
372
+ };
373
+
374
+ const isBrowserEnvironment = () => {
375
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
376
+ };
377
+
378
+ // @ts-nocheck
379
+ // Gravity Forms data store with proper environment handling
380
+ const transformForm = (formData) => {
381
+ // Transform fields to ensure proper structure
382
+ const transformedFields = (formData.fields || []).map((field) => ({
383
+ id: field.id.toString(), // Ensure ID is string
384
+ type: field.type,
385
+ label: field.label,
386
+ description: field.description,
387
+ isRequired: field.isRequired || false,
388
+ placeholder: field.placeholder,
389
+ defaultValue: field.defaultValue,
390
+ cssClass: field.cssClass,
391
+ inputs: field.inputs || null,
392
+ choices: field.choices || [],
393
+ validation: {
394
+ message: field.errorMessage,
395
+ pattern: field.inputMaskValue
396
+ }
397
+ }));
398
+ return {
399
+ id: formData.id.toString(), // Ensure ID is string
400
+ title: formData.title || formData.name || `Form ${formData.id}`,
401
+ description: formData.description,
402
+ fields: transformedFields,
403
+ button: {
404
+ text: formData.button?.text || 'Submit',
405
+ type: formData.button?.type || 'text',
406
+ imageUrl: formData.button?.imageUrl,
407
+ },
408
+ confirmation: {
409
+ type: formData.confirmation?.type || 'message',
410
+ message: formData.confirmation?.message,
411
+ url: formData.confirmation?.url,
412
+ pageId: formData.confirmation?.pageId,
413
+ queryString: formData.confirmation?.queryString,
414
+ isDefault: formData.confirmation?.isDefault,
415
+ },
416
+ settings: {
417
+ enableHoneypot: formData.enableHoneypot || false,
418
+ enableAnimation: formData.enableAnimation || false,
419
+ validationSummary: formData.validationSummary || false,
420
+ saveAndContinue: formData.save?.enabled || false,
421
+ limitEntries: {
422
+ enabled: formData.limitEntries || false,
423
+ limit: formData.limitEntriesCount,
424
+ message: formData.limitEntriesMessage
425
+ },
426
+ scheduleForm: {
427
+ enabled: formData.scheduleForm || false,
428
+ start: formData.scheduleStart,
429
+ end: formData.scheduleEnd,
430
+ message: formData.scheduleMessage
431
+ },
432
+ },
433
+ isActive: formData.isActive === true || formData.is_active === "1" || formData.is_active === true,
434
+ isPublished: formData.isPublished === true || formData.is_trash === "0" || formData.is_trash === false || formData.is_active === "1" || formData.is_active === true,
435
+ };
436
+ };
437
+ // Default fallback data
438
+ const defaultData = {
439
+ generated_at: new Date().toISOString(),
440
+ total_forms: 0,
441
+ forms: []
442
+ };
443
+ // Load static data from the generated JSON file
444
+ let gravityFormsData = defaultData;
445
+ // Function to load data dynamically
446
+ const loadGravityFormsData = async () => {
447
+ if (!isBrowserEnvironment()) {
448
+ return gravityFormsData;
449
+ }
450
+ try {
451
+ console.log('🔄 Loading Gravity Forms data from /gravity-forms-data.json...');
452
+ const response = await fetch('/gravity-forms-data.json');
453
+ if (response.ok) {
454
+ const jsonData = await response.json();
455
+ console.log('🔍 Gravity Forms Data Load Debug:', {
456
+ totalForms: jsonData.total_forms,
457
+ formsCount: jsonData.forms?.length || 0,
458
+ firstForm: jsonData.forms?.[0] ? {
459
+ id: jsonData.forms[0].id,
460
+ title: jsonData.forms[0].title,
461
+ is_active: jsonData.forms[0].is_active,
462
+ isActive: jsonData.forms[0].isActive,
463
+ isPublished: jsonData.forms[0].isPublished
464
+ } : null
465
+ });
466
+ // Transform the data to ensure it matches our interface
467
+ const transformedForms = jsonData.forms.map((form) => transformForm(form));
468
+ gravityFormsData = {
469
+ generated_at: jsonData.generated_at,
470
+ total_forms: jsonData.total_forms,
471
+ forms: transformedForms
472
+ };
473
+ console.log('🔍 Form Transformation Debug:', {
474
+ originalForms: jsonData.forms.map((f) => ({ id: f.id, title: f.title, is_active: f.is_active })),
475
+ transformedForms: transformedForms.map(f => ({ id: f.id, title: f.title, isActive: f.isActive, isPublished: f.isPublished }))
476
+ });
477
+ console.log('🔍 Transformed Forms Debug:', {
478
+ totalForms: gravityFormsData.total_forms,
479
+ formsCount: gravityFormsData.forms.length,
480
+ activeForms: gravityFormsData.forms.filter(f => f.isActive).length,
481
+ publishedForms: gravityFormsData.forms.filter(f => f.isPublished).length
482
+ });
483
+ return gravityFormsData;
484
+ }
485
+ else {
486
+ console.error('❌ Failed to load gravityForms.json:', response.status, response.statusText);
487
+ }
488
+ }
489
+ catch (error) {
490
+ console.error('❌ Error loading gravityForms.json:', error);
491
+ }
492
+ return defaultData;
493
+ };
494
+ const getActiveForms = () => gravityFormsData.forms.filter(form => form.isActive);
495
+ const getPublishedForms$1 = () => gravityFormsData.forms.filter(form => form.isPublished);
496
+ const getFormById$1 = (id) => {
497
+ const idStr = String(id);
498
+ const idNum = typeof id === 'number' ? id : parseInt(idStr, 10);
499
+ return gravityFormsData.forms.find(form => String(form.id) === idStr || form.id === idNum);
500
+ };
501
+ const getFormByTitle = (title) => gravityFormsData.forms.find(form => form.title === title);
502
+
503
+ var generated_at = "2026-03-19T05:29:48.840Z";
504
+ var forms = [
505
+ {
506
+ id: 3,
507
+ name: "Eventbright Form",
508
+ alias: "eventbrigh",
509
+ description: null,
510
+ isPublished: true,
511
+ fields: [
512
+ {
513
+ id: 10,
514
+ label: "First Name",
515
+ showLabel: true,
516
+ alias: "first_name",
517
+ type: "text",
518
+ defaultValue: null,
519
+ isRequired: true,
520
+ validationMessage: null,
521
+ helpMessage: null,
522
+ order: 1,
523
+ properties: {
524
+ placeholder: null
525
+ },
526
+ validation: [
527
+ ],
528
+ parent: null,
529
+ conditions: [
530
+ ],
531
+ labelAttributes: null,
532
+ inputAttributes: null,
533
+ containerAttributes: null,
534
+ leadField: "firstname",
535
+ saveResult: true,
536
+ isAutoFill: true,
537
+ isReadOnly: false,
538
+ mappedObject: "contact",
539
+ mappedField: "firstname"
540
+ },
541
+ {
542
+ id: 11,
543
+ label: "Last Name",
544
+ showLabel: true,
545
+ alias: "last_name",
546
+ type: "text",
547
+ defaultValue: null,
548
+ isRequired: true,
549
+ validationMessage: null,
550
+ helpMessage: null,
551
+ order: 2,
552
+ properties: {
553
+ placeholder: null
554
+ },
555
+ validation: [
556
+ ],
557
+ parent: null,
558
+ conditions: [
559
+ ],
560
+ labelAttributes: null,
561
+ inputAttributes: null,
562
+ containerAttributes: null,
563
+ leadField: "lastname",
564
+ saveResult: true,
565
+ isAutoFill: true,
566
+ isReadOnly: false,
567
+ mappedObject: "contact",
568
+ mappedField: "lastname"
569
+ },
570
+ {
571
+ id: 8,
572
+ label: "Email",
573
+ showLabel: true,
574
+ alias: "email",
575
+ type: "email",
576
+ defaultValue: null,
577
+ isRequired: true,
578
+ validationMessage: null,
579
+ helpMessage: null,
580
+ order: 3,
581
+ properties: {
582
+ placeholder: null
583
+ },
584
+ validation: [
585
+ ],
586
+ parent: null,
587
+ conditions: [
588
+ ],
589
+ labelAttributes: null,
590
+ inputAttributes: null,
591
+ containerAttributes: null,
592
+ leadField: "email",
593
+ saveResult: true,
594
+ isAutoFill: true,
595
+ isReadOnly: false,
596
+ mappedObject: "contact",
597
+ mappedField: "email"
598
+ },
599
+ {
600
+ id: 9,
601
+ label: "Submit",
602
+ showLabel: true,
603
+ alias: "submit",
604
+ type: "button",
605
+ defaultValue: null,
606
+ isRequired: false,
607
+ validationMessage: null,
608
+ helpMessage: null,
609
+ order: 4,
610
+ properties: [
611
+ ],
612
+ validation: [
613
+ ],
614
+ parent: null,
615
+ conditions: [
616
+ ],
617
+ labelAttributes: null,
618
+ inputAttributes: "class=\"btn btn-ghost\"",
619
+ containerAttributes: null,
620
+ leadField: null,
621
+ saveResult: true,
622
+ isAutoFill: false,
623
+ isReadOnly: false,
624
+ mappedObject: null,
625
+ mappedField: null
626
+ }
627
+ ],
628
+ actions: [
629
+ {
630
+ id: 1,
631
+ name: "Email",
632
+ description: null,
633
+ type: "lead.addutmtags",
634
+ order: 1,
635
+ properties: [
636
+ ]
637
+ },
638
+ {
639
+ id: 2,
640
+ name: "THank You Notif 1",
641
+ description: null,
642
+ type: "email.send.user",
643
+ order: 2,
644
+ properties: {
645
+ useremail: {
646
+ email: "2"
647
+ },
648
+ user_id: [
649
+ 1
650
+ ]
651
+ }
652
+ },
653
+ {
654
+ id: 3,
655
+ name: "Registered +10 (HOT)",
656
+ description: null,
657
+ type: "lead.changetags",
658
+ order: 3,
659
+ properties: {
660
+ add_tags: [
661
+ "HOT"
662
+ ],
663
+ remove_tags: [
664
+ ]
665
+ }
666
+ }
667
+ ],
668
+ postAction: "message",
669
+ postActionProperty: "Thanks for your submission. An email will be sent to you shortly.",
670
+ formType: "campaign"
671
+ },
672
+ {
673
+ id: 2,
674
+ name: "second form",
675
+ alias: "second_for",
676
+ description: null,
677
+ isPublished: true,
678
+ fields: [
679
+ {
680
+ id: 4,
681
+ label: "Name",
682
+ showLabel: false,
683
+ alias: "f_name",
684
+ type: "text",
685
+ defaultValue: null,
686
+ isRequired: true,
687
+ validationMessage: "this field is required",
688
+ helpMessage: null,
689
+ order: 1,
690
+ properties: {
691
+ placeholder: "your first name"
692
+ },
693
+ validation: [
694
+ ],
695
+ parent: null,
696
+ conditions: [
697
+ ],
698
+ labelAttributes: null,
699
+ inputAttributes: null,
700
+ containerAttributes: null,
701
+ leadField: "firstname",
702
+ saveResult: true,
703
+ isAutoFill: false,
704
+ isReadOnly: false,
705
+ mappedObject: "contact",
706
+ mappedField: "firstname"
707
+ },
708
+ {
709
+ id: 5,
710
+ label: "Email",
711
+ showLabel: true,
712
+ alias: "email",
713
+ type: "email",
714
+ defaultValue: null,
715
+ isRequired: true,
716
+ validationMessage: "this is a required field",
717
+ helpMessage: null,
718
+ order: 2,
719
+ properties: {
720
+ placeholder: "email"
721
+ },
722
+ validation: [
723
+ ],
724
+ parent: null,
725
+ conditions: [
726
+ ],
727
+ labelAttributes: null,
728
+ inputAttributes: null,
729
+ containerAttributes: null,
730
+ leadField: "email",
731
+ saveResult: true,
732
+ isAutoFill: false,
733
+ isReadOnly: false,
734
+ mappedObject: "contact",
735
+ mappedField: "email"
736
+ },
737
+ {
738
+ id: 6,
739
+ label: "Message",
740
+ showLabel: false,
741
+ alias: "f_message",
742
+ type: "textarea",
743
+ defaultValue: null,
744
+ isRequired: true,
745
+ validationMessage: "we need your message",
746
+ helpMessage: null,
747
+ order: 3,
748
+ properties: [
749
+ ],
750
+ validation: [
751
+ ],
752
+ parent: null,
753
+ conditions: [
754
+ ],
755
+ labelAttributes: null,
756
+ inputAttributes: null,
757
+ containerAttributes: null,
758
+ leadField: "companyaddress1",
759
+ saveResult: true,
760
+ isAutoFill: false,
761
+ isReadOnly: false,
762
+ mappedObject: "company",
763
+ mappedField: "companyaddress1"
764
+ },
765
+ {
766
+ id: 7,
767
+ label: "Submit",
768
+ showLabel: true,
769
+ alias: "submit",
770
+ type: "button",
771
+ defaultValue: null,
772
+ isRequired: false,
773
+ validationMessage: null,
774
+ helpMessage: null,
775
+ order: 4,
776
+ properties: [
777
+ ],
778
+ validation: [
779
+ ],
780
+ parent: null,
781
+ conditions: [
782
+ ],
783
+ labelAttributes: null,
784
+ inputAttributes: "class=\"btn btn-ghost\"",
785
+ containerAttributes: null,
786
+ leadField: null,
787
+ saveResult: true,
788
+ isAutoFill: false,
789
+ isReadOnly: false,
790
+ mappedObject: null,
791
+ mappedField: null
792
+ }
793
+ ],
794
+ actions: [
795
+ ],
796
+ postAction: "message",
797
+ postActionProperty: "Great, you have made it!",
798
+ formType: "standalone"
799
+ },
800
+ {
801
+ id: 1,
802
+ name: "Simple form",
803
+ alias: "simple_for",
804
+ description: null,
805
+ isPublished: true,
806
+ fields: [
807
+ {
808
+ id: 1,
809
+ label: "Name",
810
+ showLabel: false,
811
+ alias: "f_name",
812
+ type: "text",
813
+ defaultValue: null,
814
+ isRequired: true,
815
+ validationMessage: "This field is required",
816
+ helpMessage: null,
817
+ order: 1,
818
+ properties: {
819
+ placeholder: "Your name"
820
+ },
821
+ validation: [
822
+ ],
823
+ parent: null,
824
+ conditions: [
825
+ ],
826
+ labelAttributes: null,
827
+ inputAttributes: null,
828
+ containerAttributes: null,
829
+ leadField: "firstname",
830
+ saveResult: true,
831
+ isAutoFill: false,
832
+ isReadOnly: false,
833
+ mappedObject: "contact",
834
+ mappedField: "firstname"
835
+ },
836
+ {
837
+ id: 2,
838
+ label: "EMail",
839
+ showLabel: false,
840
+ alias: "email",
841
+ type: "email",
842
+ defaultValue: null,
843
+ isRequired: true,
844
+ validationMessage: "This field is required",
845
+ helpMessage: null,
846
+ order: 2,
847
+ properties: {
848
+ placeholder: "Your email"
849
+ },
850
+ validation: [
851
+ ],
852
+ parent: null,
853
+ conditions: [
854
+ ],
855
+ labelAttributes: null,
856
+ inputAttributes: null,
857
+ containerAttributes: null,
858
+ leadField: "email",
859
+ saveResult: true,
860
+ isAutoFill: false,
861
+ isReadOnly: false,
862
+ mappedObject: "contact",
863
+ mappedField: "email"
864
+ },
865
+ {
866
+ id: 3,
867
+ label: "Submit",
868
+ showLabel: true,
869
+ alias: "submit",
870
+ type: "button",
871
+ defaultValue: null,
872
+ isRequired: false,
873
+ validationMessage: null,
874
+ helpMessage: null,
875
+ order: 3,
876
+ properties: [
877
+ ],
878
+ validation: [
879
+ ],
880
+ parent: null,
881
+ conditions: [
882
+ ],
883
+ labelAttributes: null,
884
+ inputAttributes: "class=\"btn btn-ghost\"",
885
+ containerAttributes: null,
886
+ leadField: null,
887
+ saveResult: true,
888
+ isAutoFill: false,
889
+ isReadOnly: false,
890
+ mappedObject: null,
891
+ mappedField: null
892
+ }
893
+ ],
894
+ actions: [
895
+ ],
896
+ postAction: "redirect",
897
+ postActionProperty: "/mautic-test",
898
+ formType: "standalone"
899
+ }
900
+ ];
901
+ var mauticFormsData = {
902
+ generated_at: generated_at,
903
+ forms: forms
904
+ };
905
+
906
+ // @ts-nocheck
907
+ // Import the generated Mautic forms data
908
+ // Create the data store
909
+ const mauticData = {
910
+ generated_at: mauticFormsData.generated_at,
911
+ forms: mauticFormsData.forms
912
+ };
913
+ // Helper functions
914
+ const getPublishedForms = () => mauticData.forms.filter(form => form.isPublished);
915
+ const getFormById = (id) => mauticData.forms.find(form => form.id === id);
916
+ const getFormByAlias = (alias) => mauticData.forms.find(form => form.alias === alias);
917
+
918
+ // @ts-nocheck
919
+ // Auto-generated WordPress static data - DO NOT EDIT MANUALLY
920
+ // Generated at: 2025-07-16T05:00:36.928Z
921
+ // Build ID: 1752642036928
922
+ const wordpressData = {
923
+ "generated_at": "2025-07-16T05:00:36.905Z",
924
+ "frontend_id": "react-wp-template",
925
+ "frontend_name": "React WordPress Template",
926
+ "config": {
927
+ "frontend_id": "react-wp-template",
928
+ "frontend_name": "React WordPress Template",
929
+ "post_types": {
930
+ "posts": {
931
+ "max_items": 50,
932
+ "include_embedded": true,
933
+ "orderby": "date",
934
+ "order": "desc"
935
+ },
936
+ "pages": {
937
+ "max_items": 20,
938
+ "include_embedded": true
939
+ },
940
+ "case_studies": {
941
+ "max_items": 20,
942
+ "include_embedded": true
943
+ },
944
+ "projects": {
945
+ "max_items": 20,
946
+ "include_embedded": true
947
+ },
948
+ "members": {
949
+ "max_items": 20,
950
+ "include_embedded": true
951
+ }
952
+ }
953
+ },
954
+ "posts": [],
955
+ "pages": [],
956
+ "case_studies": [],
957
+ "projects": [],
958
+ "members": []
959
+ };
960
+
961
+ export { getActiveForms, getFooter, getFormByAlias, getFormById$1 as getGravityFormById, getFormByTitle as getGravityFormByTitle, getHeader, getHeaderMenuId, getLogoUrl, getFormById as getMauticFormById, getMenuById, getNavigationMenu, getParsedHeader, getPublishedForms$1 as getPublishedGravityForms, getPublishedForms as getPublishedMauticForms, getSiteIconUrl, getSiteName, getSiteSettings, getWordPressCategories, getWordPressData, getWordPressEvents, getWordPressMedia, getWordPressMemberBySlug, getWordPressMemberRoles, getWordPressMembers, getWordPressPageById, getWordPressPageBySlug, getWordPressPages, getWordPressPosts, getWordPressTags, getWordPressTestimonials, gravityFormsData, loadGravityFormsData, loadWordPressData, mauticData, wordpressData };
962
+ //# sourceMappingURL=static.esm.js.map