@qwickapps/cms 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +45 -0
- package/README.md +203 -0
- package/dist/admin/components/AccordionItemRowLabel.d.ts +20 -0
- package/dist/admin/components/AccordionItemRowLabel.d.ts.map +1 -0
- package/dist/admin/components/AccordionItemRowLabel.js +47 -0
- package/dist/admin/components/AccordionItemRowLabel.js.map +1 -0
- package/dist/admin/components/BlockRowLabel.d.ts +19 -0
- package/dist/admin/components/BlockRowLabel.d.ts.map +1 -0
- package/dist/admin/components/BlockRowLabel.js +52 -0
- package/dist/admin/components/BlockRowLabel.js.map +1 -0
- package/dist/admin/components/ButtonRowLabel.d.ts +23 -0
- package/dist/admin/components/ButtonRowLabel.d.ts.map +1 -0
- package/dist/admin/components/ButtonRowLabel.js +63 -0
- package/dist/admin/components/ButtonRowLabel.js.map +1 -0
- package/dist/admin/components/CardRowLabel.d.ts +23 -0
- package/dist/admin/components/CardRowLabel.d.ts.map +1 -0
- package/dist/admin/components/CardRowLabel.js +59 -0
- package/dist/admin/components/CardRowLabel.js.map +1 -0
- package/dist/admin/components/ContentPreview.d.ts +12 -0
- package/dist/admin/components/ContentPreview.d.ts.map +1 -0
- package/dist/admin/components/ContentPreview.js +95 -0
- package/dist/admin/components/ContentPreview.js.map +1 -0
- package/dist/admin/components/Dashboard.d.ts +13 -0
- package/dist/admin/components/Dashboard.d.ts.map +1 -0
- package/dist/admin/components/Dashboard.js +7 -0
- package/dist/admin/components/Dashboard.js.map +1 -0
- package/dist/admin/components/DashboardContent.d.ts +11 -0
- package/dist/admin/components/DashboardContent.d.ts.map +1 -0
- package/dist/admin/components/DashboardContent.js +129 -0
- package/dist/admin/components/DashboardContent.js.map +1 -0
- package/dist/admin/components/FormFieldRowLabel.d.ts +21 -0
- package/dist/admin/components/FormFieldRowLabel.d.ts.map +1 -0
- package/dist/admin/components/FormFieldRowLabel.js +47 -0
- package/dist/admin/components/FormFieldRowLabel.js.map +1 -0
- package/dist/admin/components/Icon.d.ts +10 -0
- package/dist/admin/components/Icon.d.ts.map +1 -0
- package/dist/admin/components/Icon.js +16 -0
- package/dist/admin/components/Icon.js.map +1 -0
- package/dist/admin/components/Logo.d.ts +10 -0
- package/dist/admin/components/Logo.d.ts.map +1 -0
- package/dist/admin/components/Logo.js +16 -0
- package/dist/admin/components/Logo.js.map +1 -0
- package/dist/admin/components/NavigationItemRowLabel.d.ts +21 -0
- package/dist/admin/components/NavigationItemRowLabel.d.ts.map +1 -0
- package/dist/admin/components/NavigationItemRowLabel.js +43 -0
- package/dist/admin/components/NavigationItemRowLabel.js.map +1 -0
- package/dist/admin/components/NavigationSubItemRowLabel.d.ts +19 -0
- package/dist/admin/components/NavigationSubItemRowLabel.d.ts.map +1 -0
- package/dist/admin/components/NavigationSubItemRowLabel.js +32 -0
- package/dist/admin/components/NavigationSubItemRowLabel.js.map +1 -0
- package/dist/admin/components/PagesListHeader.d.ts +13 -0
- package/dist/admin/components/PagesListHeader.d.ts.map +1 -0
- package/dist/admin/components/PagesListHeader.js +48 -0
- package/dist/admin/components/PagesListHeader.js.map +1 -0
- package/dist/admin/components/ProductsListHeader.d.ts +13 -0
- package/dist/admin/components/ProductsListHeader.d.ts.map +1 -0
- package/dist/admin/components/ProductsListHeader.js +55 -0
- package/dist/admin/components/ProductsListHeader.js.map +1 -0
- package/dist/admin/components/styles/CollectionListHeader.css +161 -0
- package/dist/admin/components/styles/ContentPreview.css +416 -0
- package/dist/admin/components/styles/Dashboard.css +338 -0
- package/dist/admin/fields/ColorInput.d.ts +13 -0
- package/dist/admin/fields/ColorInput.d.ts.map +1 -0
- package/dist/admin/fields/ColorInput.js +201 -0
- package/dist/admin/fields/ColorInput.js.map +1 -0
- package/dist/admin/fields/index.d.ts +9 -0
- package/dist/admin/fields/index.d.ts.map +1 -0
- package/dist/admin/fields/index.js +9 -0
- package/dist/admin/fields/index.js.map +1 -0
- package/dist/admin/index.d.ts +24 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +30 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/blocks/ContentBlocks.d.ts +75 -0
- package/dist/blocks/ContentBlocks.d.ts.map +1 -0
- package/dist/blocks/ContentBlocks.js +1241 -0
- package/dist/blocks/ContentBlocks.js.map +1 -0
- package/dist/blocks/index.d.ts +2 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +3 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/client/PayloadAPIClient.d.ts +65 -0
- package/dist/client/PayloadAPIClient.d.ts.map +1 -0
- package/dist/client/PayloadAPIClient.js +167 -0
- package/dist/client/PayloadAPIClient.js.map +1 -0
- package/dist/collections/Automations.d.ts +12 -0
- package/dist/collections/Automations.d.ts.map +1 -0
- package/dist/collections/Automations.js +741 -0
- package/dist/collections/Automations.js.map +1 -0
- package/dist/collections/Features.d.ts +3 -0
- package/dist/collections/Features.d.ts.map +1 -0
- package/dist/collections/Features.js +69 -0
- package/dist/collections/Features.js.map +1 -0
- package/dist/collections/Footer.d.ts +11 -0
- package/dist/collections/Footer.d.ts.map +1 -0
- package/dist/collections/Footer.js +130 -0
- package/dist/collections/Footer.js.map +1 -0
- package/dist/collections/FormSubmissions.d.ts +3 -0
- package/dist/collections/FormSubmissions.d.ts.map +1 -0
- package/dist/collections/FormSubmissions.js +119 -0
- package/dist/collections/FormSubmissions.js.map +1 -0
- package/dist/collections/Forms.d.ts +16 -0
- package/dist/collections/Forms.d.ts.map +1 -0
- package/dist/collections/Forms.js +308 -0
- package/dist/collections/Forms.js.map +1 -0
- package/dist/collections/HeroBlocks.d.ts +3 -0
- package/dist/collections/HeroBlocks.d.ts.map +1 -0
- package/dist/collections/HeroBlocks.js +115 -0
- package/dist/collections/HeroBlocks.js.map +1 -0
- package/dist/collections/Media.d.ts +3 -0
- package/dist/collections/Media.d.ts.map +1 -0
- package/dist/collections/Media.js +26 -0
- package/dist/collections/Media.js.map +1 -0
- package/dist/collections/Navigation.d.ts +3 -0
- package/dist/collections/Navigation.d.ts.map +1 -0
- package/dist/collections/Navigation.js +106 -0
- package/dist/collections/Navigation.js.map +1 -0
- package/dist/collections/Pages.d.ts +3 -0
- package/dist/collections/Pages.d.ts.map +1 -0
- package/dist/collections/Pages.js +94 -0
- package/dist/collections/Pages.js.map +1 -0
- package/dist/collections/Posts.d.ts +3 -0
- package/dist/collections/Posts.d.ts.map +1 -0
- package/dist/collections/Posts.js +134 -0
- package/dist/collections/Posts.js.map +1 -0
- package/dist/collections/Products.d.ts +3 -0
- package/dist/collections/Products.d.ts.map +1 -0
- package/dist/collections/Products.js +264 -0
- package/dist/collections/Products.js.map +1 -0
- package/dist/collections/Users.d.ts +3 -0
- package/dist/collections/Users.d.ts.map +1 -0
- package/dist/collections/Users.js +53 -0
- package/dist/collections/Users.js.map +1 -0
- package/dist/collections/hooks/index.d.ts +9 -0
- package/dist/collections/hooks/index.d.ts.map +1 -0
- package/dist/collections/hooks/index.js +9 -0
- package/dist/collections/hooks/index.js.map +1 -0
- package/dist/collections/hooks/loggingHooks.d.ts +45 -0
- package/dist/collections/hooks/loggingHooks.d.ts.map +1 -0
- package/dist/collections/hooks/loggingHooks.js +109 -0
- package/dist/collections/hooks/loggingHooks.js.map +1 -0
- package/dist/collections/index.d.ts +14 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +16 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -0
- package/dist/globals/AdvancedSettings.d.ts +8 -0
- package/dist/globals/AdvancedSettings.d.ts.map +1 -0
- package/dist/globals/AdvancedSettings.js +157 -0
- package/dist/globals/AdvancedSettings.js.map +1 -0
- package/dist/globals/Integrations.d.ts +8 -0
- package/dist/globals/Integrations.d.ts.map +1 -0
- package/dist/globals/Integrations.js +270 -0
- package/dist/globals/Integrations.js.map +1 -0
- package/dist/globals/SiteSettings.d.ts +8 -0
- package/dist/globals/SiteSettings.d.ts.map +1 -0
- package/dist/globals/SiteSettings.js +258 -0
- package/dist/globals/SiteSettings.js.map +1 -0
- package/dist/globals/ThemeSettings.d.ts +11 -0
- package/dist/globals/ThemeSettings.d.ts.map +1 -0
- package/dist/globals/ThemeSettings.js +92 -0
- package/dist/globals/ThemeSettings.js.map +1 -0
- package/dist/globals/index.d.ts +5 -0
- package/dist/globals/index.d.ts.map +1 -0
- package/dist/globals/index.js +6 -0
- package/dist/globals/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +73 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +190 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/nextjs/BlockRenderer.d.ts +227 -0
- package/dist/nextjs/BlockRenderer.d.ts.map +1 -0
- package/dist/nextjs/BlockRenderer.js +358 -0
- package/dist/nextjs/BlockRenderer.js.map +1 -0
- package/dist/nextjs/ClientHomePage.d.ts +6 -0
- package/dist/nextjs/ClientHomePage.d.ts.map +1 -0
- package/dist/nextjs/ClientHomePage.js +17 -0
- package/dist/nextjs/ClientHomePage.js.map +1 -0
- package/dist/nextjs/ClientSideQwickApp.d.ts +23 -0
- package/dist/nextjs/ClientSideQwickApp.d.ts.map +1 -0
- package/dist/nextjs/ClientSideQwickApp.js +50 -0
- package/dist/nextjs/ClientSideQwickApp.js.map +1 -0
- package/dist/nextjs/DynamicQwickApp.d.ts +9 -0
- package/dist/nextjs/DynamicQwickApp.d.ts.map +1 -0
- package/dist/nextjs/DynamicQwickApp.js +19 -0
- package/dist/nextjs/DynamicQwickApp.js.map +1 -0
- package/dist/nextjs/FooterFromSettings.d.ts +6 -0
- package/dist/nextjs/FooterFromSettings.d.ts.map +1 -0
- package/dist/nextjs/FooterFromSettings.js +72 -0
- package/dist/nextjs/FooterFromSettings.js.map +1 -0
- package/dist/nextjs/FormBlockComponent.d.ts +25 -0
- package/dist/nextjs/FormBlockComponent.d.ts.map +1 -0
- package/dist/nextjs/FormBlockComponent.js +110 -0
- package/dist/nextjs/FormBlockComponent.js.map +1 -0
- package/dist/nextjs/HomePageContent.d.ts +6 -0
- package/dist/nextjs/HomePageContent.d.ts.map +1 -0
- package/dist/nextjs/HomePageContent.js +50 -0
- package/dist/nextjs/HomePageContent.js.map +1 -0
- package/dist/nextjs/LivePreviewClient.d.ts +40 -0
- package/dist/nextjs/LivePreviewClient.d.ts.map +1 -0
- package/dist/nextjs/LivePreviewClient.js +35 -0
- package/dist/nextjs/LivePreviewClient.js.map +1 -0
- package/dist/nextjs/RefreshRouteOnSave.d.ts +31 -0
- package/dist/nextjs/RefreshRouteOnSave.d.ts.map +1 -0
- package/dist/nextjs/RefreshRouteOnSave.js +59 -0
- package/dist/nextjs/RefreshRouteOnSave.js.map +1 -0
- package/dist/nextjs/ScriptsInjector.d.ts +2 -0
- package/dist/nextjs/ScriptsInjector.d.ts.map +1 -0
- package/dist/nextjs/ScriptsInjector.js +73 -0
- package/dist/nextjs/ScriptsInjector.js.map +1 -0
- package/dist/nextjs/ServerQwickApp.d.ts +13 -0
- package/dist/nextjs/ServerQwickApp.d.ts.map +1 -0
- package/dist/nextjs/ServerQwickApp.js +159 -0
- package/dist/nextjs/ServerQwickApp.js.map +1 -0
- package/dist/nextjs/SettingsProvider.d.ts +110 -0
- package/dist/nextjs/SettingsProvider.d.ts.map +1 -0
- package/dist/nextjs/SettingsProvider.js +107 -0
- package/dist/nextjs/SettingsProvider.js.map +1 -0
- package/dist/nextjs/SiteLogo.d.ts +35 -0
- package/dist/nextjs/SiteLogo.d.ts.map +1 -0
- package/dist/nextjs/SiteLogo.js +105 -0
- package/dist/nextjs/SiteLogo.js.map +1 -0
- package/dist/nextjs/framework.d.ts +19 -0
- package/dist/nextjs/framework.d.ts.map +1 -0
- package/dist/nextjs/framework.js +35 -0
- package/dist/nextjs/framework.js.map +1 -0
- package/dist/nextjs/index.d.ts +38 -0
- package/dist/nextjs/index.d.ts.map +1 -0
- package/dist/nextjs/index.js +47 -0
- package/dist/nextjs/index.js.map +1 -0
- package/dist/nextjs/metadata.d.ts +20 -0
- package/dist/nextjs/metadata.d.ts.map +1 -0
- package/dist/nextjs/metadata.js +107 -0
- package/dist/nextjs/metadata.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/qwickapps-plugin.d.ts +78 -0
- package/dist/plugins/qwickapps-plugin.d.ts.map +1 -0
- package/dist/plugins/qwickapps-plugin.js +154 -0
- package/dist/plugins/qwickapps-plugin.js.map +1 -0
- package/dist/providers/PayloadDataProvider.d.ts +72 -0
- package/dist/providers/PayloadDataProvider.d.ts.map +1 -0
- package/dist/providers/PayloadDataProvider.js +222 -0
- package/dist/providers/PayloadDataProvider.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/styles/admin-theme.css +352 -0
- package/package.json +104 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
'use client';
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* BlockRenderer - Generic component that maps Payload CMS blocks to QwickApps Framework components
|
|
6
|
+
*
|
|
7
|
+
* This component provides a data-driven rendering system that transforms Payload blocks
|
|
8
|
+
* into their corresponding QwickApps Framework components.
|
|
9
|
+
*
|
|
10
|
+
* Supported block types:
|
|
11
|
+
* - hero → HeroBlock
|
|
12
|
+
* - textSection → Section with rich text
|
|
13
|
+
* - featureGrid → GridLayout with FeatureCard children
|
|
14
|
+
* - ctaSection → Section with Button actions
|
|
15
|
+
* - image → Next.js Image component
|
|
16
|
+
* - spacer → Spacing div
|
|
17
|
+
*
|
|
18
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
19
|
+
*/
|
|
20
|
+
import { useState } from 'react';
|
|
21
|
+
import Image from 'next/image';
|
|
22
|
+
import { Paper, Card, CardContent, CardActions, Collapse, IconButton, Box, Typography } from '@mui/material';
|
|
23
|
+
import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';
|
|
24
|
+
import { HeroBlock, Section, GridLayout, Button, FeatureCard, Text, iconMap, ProductCard } from './framework';
|
|
25
|
+
import { FormBlockComponent } from './FormBlockComponent';
|
|
26
|
+
/**
|
|
27
|
+
* Helper function to convert Payload Lexical rich text to plain text
|
|
28
|
+
* Handles Payload CMS 3.0 Lexical editor format
|
|
29
|
+
*/
|
|
30
|
+
function renderRichText(content) {
|
|
31
|
+
if (!content)
|
|
32
|
+
return '';
|
|
33
|
+
// Handle string content directly
|
|
34
|
+
if (typeof content === 'string')
|
|
35
|
+
return content;
|
|
36
|
+
// Handle Lexical format: { root: { children: [...] } }
|
|
37
|
+
if (content.root && content.root.children) {
|
|
38
|
+
return extractTextFromLexical(content.root.children);
|
|
39
|
+
}
|
|
40
|
+
// Handle direct children array
|
|
41
|
+
if (Array.isArray(content)) {
|
|
42
|
+
return extractTextFromLexical(content);
|
|
43
|
+
}
|
|
44
|
+
return '';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Recursively extract text from Lexical nodes
|
|
48
|
+
*/
|
|
49
|
+
function extractTextFromLexical(nodes) {
|
|
50
|
+
if (!Array.isArray(nodes))
|
|
51
|
+
return '';
|
|
52
|
+
return nodes.map((node) => {
|
|
53
|
+
// Text node
|
|
54
|
+
if (node.type === 'text' && node.text) {
|
|
55
|
+
return node.text;
|
|
56
|
+
}
|
|
57
|
+
// Nodes with children (paragraphs, lists, etc.)
|
|
58
|
+
if (node.children && Array.isArray(node.children)) {
|
|
59
|
+
const text = extractTextFromLexical(node.children);
|
|
60
|
+
// Add line breaks for paragraph and list items
|
|
61
|
+
if (node.type === 'paragraph' || node.type === 'listitem') {
|
|
62
|
+
return text + '\n';
|
|
63
|
+
}
|
|
64
|
+
return text;
|
|
65
|
+
}
|
|
66
|
+
return '';
|
|
67
|
+
}).join('');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Helper function to map spacing values to pixel heights
|
|
71
|
+
*/
|
|
72
|
+
function getSpacerHeight(height) {
|
|
73
|
+
const heightMap = {
|
|
74
|
+
small: '24px',
|
|
75
|
+
medium: '48px',
|
|
76
|
+
large: '96px',
|
|
77
|
+
xlarge: '144px',
|
|
78
|
+
};
|
|
79
|
+
return heightMap[height || 'medium'];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Helper function to map image size to width
|
|
83
|
+
*/
|
|
84
|
+
function getImageSize(size) {
|
|
85
|
+
const sizeMap = {
|
|
86
|
+
small: '400px',
|
|
87
|
+
medium: '600px',
|
|
88
|
+
large: '800px',
|
|
89
|
+
full: '100%',
|
|
90
|
+
};
|
|
91
|
+
return sizeMap[size || 'large'];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extract ViewSchema props from a block
|
|
95
|
+
* These props should be passed through to all framework components
|
|
96
|
+
*/
|
|
97
|
+
function extractViewSchemaProps(block) {
|
|
98
|
+
const props = {};
|
|
99
|
+
// Layout & Spacing
|
|
100
|
+
if (block.padding !== undefined)
|
|
101
|
+
props.padding = block.padding;
|
|
102
|
+
if (block.marginTop !== undefined)
|
|
103
|
+
props.marginTop = block.marginTop;
|
|
104
|
+
if (block.marginBottom !== undefined)
|
|
105
|
+
props.marginBottom = block.marginBottom;
|
|
106
|
+
if (block.width !== undefined)
|
|
107
|
+
props.width = block.width;
|
|
108
|
+
if (block.maxWidth !== undefined)
|
|
109
|
+
props.maxWidth = block.maxWidth;
|
|
110
|
+
// Colors & Background
|
|
111
|
+
if (block.background !== undefined)
|
|
112
|
+
props.background = block.background;
|
|
113
|
+
if (block.color !== undefined)
|
|
114
|
+
props.color = block.color;
|
|
115
|
+
if (block.backgroundImage !== undefined) {
|
|
116
|
+
// Handle both { url: string } and string formats - always convert to string
|
|
117
|
+
props.backgroundImage = (typeof block.backgroundImage === 'string'
|
|
118
|
+
? block.backgroundImage
|
|
119
|
+
: block.backgroundImage?.url);
|
|
120
|
+
}
|
|
121
|
+
if (block.backgroundGradient !== undefined)
|
|
122
|
+
props.backgroundGradient = block.backgroundGradient;
|
|
123
|
+
// Advanced
|
|
124
|
+
if (block.className !== undefined)
|
|
125
|
+
props.className = block.className;
|
|
126
|
+
if (block.sx !== undefined) {
|
|
127
|
+
// Parse sx if it's a string
|
|
128
|
+
try {
|
|
129
|
+
props.sx = typeof block.sx === 'string' ? JSON.parse(block.sx) : block.sx;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
console.warn('Failed to parse sx prop:', block.sx);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (block.id !== undefined)
|
|
136
|
+
props.id = block.id;
|
|
137
|
+
return props;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Render a single block based on its type
|
|
141
|
+
*/
|
|
142
|
+
function renderBlock(block, index) {
|
|
143
|
+
const key = block.id || `block-${index}`;
|
|
144
|
+
switch (block.blockType) {
|
|
145
|
+
case 'hero': {
|
|
146
|
+
const heroBlock = block;
|
|
147
|
+
const viewProps = extractViewSchemaProps(heroBlock);
|
|
148
|
+
return (_jsx(HeroBlock, { title: heroBlock.title, subtitle: heroBlock.subtitle, backgroundImage: heroBlock.backgroundImage?.url || undefined, backgroundGradient: heroBlock.backgroundGradient, textAlign: heroBlock.textAlign, height: heroBlock.blockHeight, ...viewProps, children: heroBlock.actions && heroBlock.actions.length > 0 && (_jsx("div", { style: { display: 'flex', gap: '16px', justifyContent: heroBlock.textAlign === 'left' ? 'flex-start' : heroBlock.textAlign === 'right' ? 'flex-end' : 'center', flexWrap: 'wrap' }, children: heroBlock.actions.map((action, idx) => (_jsx(Button, { variant: action.variant || 'contained', buttonSize: action.buttonSize || 'medium', href: action.href, children: action.label }, `${key}-action-${idx}`))) })) }, key));
|
|
149
|
+
}
|
|
150
|
+
case 'textSection': {
|
|
151
|
+
const textSection = block;
|
|
152
|
+
const viewProps = extractViewSchemaProps(textSection);
|
|
153
|
+
// Map maxWidth to contentMaxWidth for Section component
|
|
154
|
+
const sectionProps = { ...viewProps };
|
|
155
|
+
if (textSection.maxWidth) {
|
|
156
|
+
sectionProps.contentMaxWidth = textSection.maxWidth;
|
|
157
|
+
delete sectionProps.maxWidth;
|
|
158
|
+
}
|
|
159
|
+
return (_jsxs(Section, { ...sectionProps, children: [textSection.heading && (_jsx(Text, { variant: "h4", align: textSection.textAlign, children: textSection.heading })), _jsx(Text, { variant: "body1", align: textSection.textAlign, color: textSection.color, children: renderRichText(textSection.content) })] }, key));
|
|
160
|
+
}
|
|
161
|
+
case 'featureGrid': {
|
|
162
|
+
const featureGrid = block;
|
|
163
|
+
const viewProps = extractViewSchemaProps(featureGrid);
|
|
164
|
+
return (_jsxs(Section, { ...viewProps, children: [featureGrid.heading && (_jsx(Text, { variant: "h3", align: "center", style: { marginBottom: '32px' }, children: featureGrid.heading })), _jsx(GridLayout, { columns: (featureGrid.columns || 3), spacing: featureGrid.spacing, children: featureGrid.features.map((feature) => {
|
|
165
|
+
// Convert icon name to Material UI icon component
|
|
166
|
+
const iconData = feature.icon ? iconMap[feature.icon] : null;
|
|
167
|
+
const IconComponent = iconData?.component;
|
|
168
|
+
return (_jsx(FeatureCard, { feature: {
|
|
169
|
+
id: feature.id,
|
|
170
|
+
title: feature.title,
|
|
171
|
+
description: feature.description,
|
|
172
|
+
icon: IconComponent ? _jsx(IconComponent, {}) : undefined
|
|
173
|
+
}, span: (12 / (featureGrid.columns || 3)) }, feature.id));
|
|
174
|
+
}) })] }, key));
|
|
175
|
+
}
|
|
176
|
+
case 'ctaSection': {
|
|
177
|
+
const ctaSection = block;
|
|
178
|
+
const viewProps = extractViewSchemaProps(ctaSection);
|
|
179
|
+
return (_jsxs(Section, { ...viewProps, children: [_jsx(Text, { variant: "h3", align: ctaSection.textAlign, children: ctaSection.heading }), ctaSection.description && (_jsx(Text, { variant: "body1", align: ctaSection.textAlign, children: ctaSection.description })), _jsx("div", { style: { display: 'flex', gap: '16px', justifyContent: ctaSection.textAlign === 'left' ? 'flex-start' : ctaSection.textAlign === 'right' ? 'flex-end' : 'center', marginTop: '24px', flexWrap: 'wrap' }, children: ctaSection.buttons.map((button, idx) => (_jsx(Button, { variant: button.variant || 'contained', buttonSize: button.size || 'large', href: button.href, children: button.label }, `${key}-button-${idx}`))) })] }, key));
|
|
180
|
+
}
|
|
181
|
+
case 'image': {
|
|
182
|
+
const imageBlock = block;
|
|
183
|
+
const viewProps = extractViewSchemaProps(imageBlock);
|
|
184
|
+
const containerStyle = {
|
|
185
|
+
width: imageBlock.size ? getImageSize(imageBlock.size) : viewProps.width,
|
|
186
|
+
maxWidth: viewProps.maxWidth,
|
|
187
|
+
margin: '0 auto',
|
|
188
|
+
};
|
|
189
|
+
return (_jsxs("div", { style: containerStyle, className: viewProps.className, id: viewProps.id, children: [imageBlock.image?.url && (_jsx(Image, { src: imageBlock.image.url, alt: imageBlock.alt, width: imageBlock.image.width || 800, height: imageBlock.image.height || 600, style: { width: '100%', height: 'auto' } })), imageBlock.caption && (_jsx(Text, { variant: "caption", align: "center", style: { marginTop: '8px', display: 'block' }, children: imageBlock.caption }))] }, key));
|
|
190
|
+
}
|
|
191
|
+
case 'spacer': {
|
|
192
|
+
const spacer = block;
|
|
193
|
+
return (_jsx("div", { style: { height: getSpacerHeight(spacer.height) }, "aria-hidden": "true" }, key));
|
|
194
|
+
}
|
|
195
|
+
case 'code': {
|
|
196
|
+
const codeBlock = block;
|
|
197
|
+
const viewProps = extractViewSchemaProps(codeBlock);
|
|
198
|
+
return (_jsx(Section, { ...viewProps, children: _jsxs(Paper, { variant: "outlined", sx: {
|
|
199
|
+
backgroundColor: 'var(--theme-surface-variant)',
|
|
200
|
+
border: '1px solid var(--theme-outline)',
|
|
201
|
+
borderRadius: 1,
|
|
202
|
+
overflow: 'hidden',
|
|
203
|
+
}, children: [(codeBlock.title || codeBlock.showCopy) && (_jsx(Box, { sx: {
|
|
204
|
+
display: 'flex',
|
|
205
|
+
justifyContent: 'space-between',
|
|
206
|
+
alignItems: 'center',
|
|
207
|
+
px: 2,
|
|
208
|
+
py: 1,
|
|
209
|
+
backgroundColor: 'var(--theme-surface)',
|
|
210
|
+
borderBottom: '1px solid var(--theme-outline)',
|
|
211
|
+
}, children: codeBlock.title && (_jsx(Typography, { variant: "body2", sx: {
|
|
212
|
+
fontFamily: 'Monaco, Consolas, monospace',
|
|
213
|
+
color: 'var(--theme-on-surface)',
|
|
214
|
+
opacity: 0.8,
|
|
215
|
+
}, children: codeBlock.title })) })), _jsx(Box, { component: "pre", sx: {
|
|
216
|
+
margin: 0,
|
|
217
|
+
padding: 2,
|
|
218
|
+
fontFamily: 'Monaco, Consolas, monospace',
|
|
219
|
+
fontSize: '0.875rem',
|
|
220
|
+
lineHeight: 1.5,
|
|
221
|
+
color: 'var(--theme-on-surface)',
|
|
222
|
+
overflow: 'auto',
|
|
223
|
+
whiteSpace: codeBlock.wrapLines ? 'pre-wrap' : 'pre',
|
|
224
|
+
}, children: _jsx("code", { children: codeBlock.code }) })] }) }, key));
|
|
225
|
+
}
|
|
226
|
+
case 'productGrid': {
|
|
227
|
+
const productGrid = block;
|
|
228
|
+
const viewProps = extractViewSchemaProps(productGrid);
|
|
229
|
+
// Helper to extract text from Lexical rich text
|
|
230
|
+
const extractTextFromLexical = (lexicalData) => {
|
|
231
|
+
if (!lexicalData?.root?.children)
|
|
232
|
+
return '';
|
|
233
|
+
const extractText = (node) => {
|
|
234
|
+
if (node.type === 'text')
|
|
235
|
+
return node.text || '';
|
|
236
|
+
if (node.children)
|
|
237
|
+
return node.children.map(extractText).join('');
|
|
238
|
+
return '';
|
|
239
|
+
};
|
|
240
|
+
return lexicalData.root.children.map(extractText).join(' ').trim();
|
|
241
|
+
};
|
|
242
|
+
// Helper to parse technologies string into array
|
|
243
|
+
const parseTechnologies = (techString) => {
|
|
244
|
+
if (!techString)
|
|
245
|
+
return [];
|
|
246
|
+
return techString.split(',').map(t => t.trim()).filter(Boolean);
|
|
247
|
+
};
|
|
248
|
+
// Map product status to ProductCard status
|
|
249
|
+
const mapProductStatus = (status) => {
|
|
250
|
+
switch (status) {
|
|
251
|
+
case 'active': return 'launched';
|
|
252
|
+
case 'beta': return 'beta';
|
|
253
|
+
case 'coming-soon': return 'coming-soon';
|
|
254
|
+
default: return 'coming-soon';
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
// Transform actions to ProductCard format
|
|
258
|
+
const transformActions = (actions) => {
|
|
259
|
+
if (!actions || actions.length === 0)
|
|
260
|
+
return undefined;
|
|
261
|
+
return actions.map(action => ({
|
|
262
|
+
id: action.id,
|
|
263
|
+
label: action.label,
|
|
264
|
+
variant: action.variant || 'contained',
|
|
265
|
+
color: action.color || 'primary',
|
|
266
|
+
disabled: action.disabled || false,
|
|
267
|
+
onClick: () => {
|
|
268
|
+
if (action.openInNewTab) {
|
|
269
|
+
window.open(action.url, '_blank', 'noopener,noreferrer');
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
window.location.href = action.url;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}));
|
|
276
|
+
};
|
|
277
|
+
return (_jsxs(Section, { ...viewProps, children: [productGrid.heading && (_jsx(Text, { variant: "h3", align: "center", style: { marginBottom: '32px' }, children: productGrid.heading })), _jsx(GridLayout, { columns: (productGrid.columns || 3), spacing: productGrid.spacing, equalHeight: productGrid.equalHeight !== false, children: productGrid.products.map((product) => (_jsx(ProductCard, { product: {
|
|
278
|
+
id: product.id,
|
|
279
|
+
name: product.name,
|
|
280
|
+
category: product.category || 'Product',
|
|
281
|
+
description: extractTextFromLexical(product.description),
|
|
282
|
+
shortDescription: product.tagline,
|
|
283
|
+
features: product.features?.map((f) => f.title) || [],
|
|
284
|
+
technologies: parseTechnologies(product.technologies),
|
|
285
|
+
status: mapProductStatus(product.status),
|
|
286
|
+
image: product.image?.url,
|
|
287
|
+
url: `/products/${product.slug}`,
|
|
288
|
+
}, actions: transformActions(product.actions), variant: productGrid.variant || 'compact', showImage: true, showTechnologies: true, maxFeaturesCompact: 3 }, product.id))) })] }, key));
|
|
289
|
+
}
|
|
290
|
+
case 'accordion': {
|
|
291
|
+
const accordion = block;
|
|
292
|
+
const viewProps = extractViewSchemaProps(accordion);
|
|
293
|
+
return (_jsxs(Section, { ...viewProps, children: [accordion.heading && (_jsx(Text, { variant: "h3", align: "center", style: { marginBottom: '24px' }, children: accordion.heading })), _jsx(Box, { sx: { maxWidth: '800px', margin: '0 auto' }, children: accordion.items.map((item, idx) => (_jsx(AccordionItem, { title: item.title, content: renderRichText(item.content), defaultExpanded: item.defaultExpanded, variant: accordion.variant }, `${key}-item-${idx}`))) })] }, key));
|
|
294
|
+
}
|
|
295
|
+
case 'cardGrid': {
|
|
296
|
+
const cardGrid = block;
|
|
297
|
+
const viewProps = extractViewSchemaProps(cardGrid);
|
|
298
|
+
return (_jsxs(Section, { ...viewProps, children: [cardGrid.heading && (_jsx(Text, { variant: "h3", align: "center", style: { marginBottom: '32px' }, children: cardGrid.heading })), _jsx(GridLayout, { columns: (cardGrid.columns || 3), spacing: cardGrid.spacing, children: cardGrid.cards.map((card, idx) => {
|
|
299
|
+
// Convert icon name to Material UI icon component
|
|
300
|
+
const iconData = card.icon ? iconMap[card.icon] : null;
|
|
301
|
+
const IconComponent = iconData?.component;
|
|
302
|
+
return (_jsxs(Card, { variant: cardGrid.cardVariant === 'elevation' ? 'elevation' : cardGrid.cardVariant === 'filled' ? 'outlined' : 'outlined', sx: { height: '100%' }, children: [card.image?.url && (_jsx(Image, { src: card.image.url, alt: card.title, width: 400, height: 200, style: { width: '100%', height: 'auto' } })), _jsxs(CardContent, { children: [IconComponent && (_jsx(Box, { sx: { display: 'flex', justifyContent: 'center', mb: 1, color: 'primary.main', fontSize: 48 }, children: _jsx(IconComponent, {}) })), _jsx(Text, { variant: "h6", children: card.title }), card.description && (_jsx(Text, { variant: "body2", style: { marginTop: '8px', color: 'var(--theme-on-surface-variant)' }, children: card.description }))] }), card.link && (_jsx(CardActions, { children: _jsx(Button, { buttonSize: "small", href: card.link, children: card.linkText || 'Learn More' }) }))] }, `${key}-card-${idx}`));
|
|
303
|
+
}) })] }, key));
|
|
304
|
+
}
|
|
305
|
+
case 'form': {
|
|
306
|
+
const formBlock = block;
|
|
307
|
+
// Handle case where form relationship might not be populated
|
|
308
|
+
if (!formBlock.form || typeof formBlock.form !== 'object') {
|
|
309
|
+
console.warn('Form block missing form relationship:', formBlock);
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
return (_jsx(FormBlockComponent, { formId: formBlock.form.id, formName: formBlock.form.formName, heading: formBlock.overrideHeading ? formBlock.overrideHeading : formBlock.form.title, description: formBlock.overrideDescription ? formBlock.overrideDescription : formBlock.form.description, fields: formBlock.form.fields, submitButtonText: formBlock.overrideSubmitButtonText ? formBlock.overrideSubmitButtonText : formBlock.form.submitButtonText, successMessage: formBlock.overrideSuccessMessage ? formBlock.overrideSuccessMessage : formBlock.form.successMessage, padding: formBlock.padding, enableCaptcha: formBlock.form.enableCaptcha }, key));
|
|
313
|
+
}
|
|
314
|
+
default:
|
|
315
|
+
console.warn(`Unknown block type: ${block.blockType}`);
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Accordion Item Component for the Accordion Block
|
|
321
|
+
*/
|
|
322
|
+
function AccordionItem({ title, content, defaultExpanded = false, variant = 'outlined', }) {
|
|
323
|
+
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
324
|
+
const handleToggle = () => {
|
|
325
|
+
setExpanded(!expanded);
|
|
326
|
+
};
|
|
327
|
+
return (_jsxs(Box, { sx: {
|
|
328
|
+
mb: 1,
|
|
329
|
+
border: variant === 'outlined' ? '1px solid var(--theme-outline)' : 'none',
|
|
330
|
+
backgroundColor: variant === 'filled' ? 'var(--theme-surface-variant)' : 'transparent',
|
|
331
|
+
borderRadius: 1,
|
|
332
|
+
}, children: [_jsxs(Box, { onClick: handleToggle, sx: {
|
|
333
|
+
display: 'flex',
|
|
334
|
+
justifyContent: 'space-between',
|
|
335
|
+
alignItems: 'center',
|
|
336
|
+
p: 2,
|
|
337
|
+
cursor: 'pointer',
|
|
338
|
+
'&:hover': {
|
|
339
|
+
backgroundColor: 'var(--theme-surface-variant)',
|
|
340
|
+
},
|
|
341
|
+
}, children: [_jsx(Text, { variant: "h6", style: { margin: 0 }, children: title }), _jsx(IconButton, { size: "small", sx: {
|
|
342
|
+
transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
|
|
343
|
+
transition: 'transform 0.3s',
|
|
344
|
+
}, children: _jsx(ExpandMoreIcon, {}) })] }), _jsx(Collapse, { in: expanded, children: _jsx(Box, { sx: { p: 2, pt: 0 }, children: _jsx(Text, { variant: "body1", children: content }) }) })] }));
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* BlockRenderer Component
|
|
348
|
+
*
|
|
349
|
+
* Renders an array of Payload blocks as QwickApps Framework components
|
|
350
|
+
*/
|
|
351
|
+
export function BlockRenderer({ blocks, className }) {
|
|
352
|
+
if (!blocks || blocks.length === 0) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
return (_jsx("div", { className: className, children: blocks.map((block, index) => renderBlock(block, index)) }));
|
|
356
|
+
}
|
|
357
|
+
export default BlockRenderer;
|
|
358
|
+
//# sourceMappingURL=BlockRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockRenderer.js","sourceRoot":"","sources":["../../src/nextjs/BlockRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientHomePage.d.ts","sourceRoot":"","sources":["../../src/nextjs/ClientHomePage.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACjB,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAErE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
/**
|
|
5
|
+
* Client-side HomePage Wrapper
|
|
6
|
+
*
|
|
7
|
+
* This wrapper handles dynamic import with SSR disabled.
|
|
8
|
+
* Next.js 15 requires dynamic imports with ssr:false to be in Client Components.
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
11
|
+
*/
|
|
12
|
+
// Import HomePageContent directly - SSR now supported!
|
|
13
|
+
import { HomePageContent } from './HomePageContent';
|
|
14
|
+
export function ClientHomePage({ hero, features }) {
|
|
15
|
+
return _jsx(HomePageContent, { hero: hero, features: features });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ClientHomePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientHomePage.js","sourceRoot":"","sources":["../../src/nextjs/ClientHomePage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,cAAc;AAEd;;;;;;;GAOG;AAEH,uDAAuD;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpD,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAuB;IACpE,OAAO,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Settings } from './SettingsProvider';
|
|
3
|
+
export interface ClientSideQwickAppProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
navigationItems: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
route: string;
|
|
9
|
+
icon?: string;
|
|
10
|
+
children?: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
label: string;
|
|
13
|
+
route: string;
|
|
14
|
+
}>;
|
|
15
|
+
}>;
|
|
16
|
+
initialSettings?: Settings | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* ClientSideQwickApp - Client Component
|
|
20
|
+
* Wraps the entire app with QwickApps framework, settings provider, and analytics
|
|
21
|
+
*/
|
|
22
|
+
export declare function ClientSideQwickApp({ children, navigationItems, initialSettings }: ClientSideQwickAppProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=ClientSideQwickApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientSideQwickApp.d.ts","sourceRoot":"","sources":["../../src/nextjs/ClientSideQwickApp.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAoB,QAAQ,EAAe,MAAM,oBAAoB,CAAC;AAU7E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,KAAK,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,KAAK,CAAC;YACf,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACnC;AAyCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,uBAAuB,2CAWzG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
'use client';
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* Client-side QwickApp Wrapper
|
|
6
|
+
*
|
|
7
|
+
* Provides the QwickApps framework on the client side.
|
|
8
|
+
* Receives navigation items from server component.
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
11
|
+
*/
|
|
12
|
+
import { QwickApp } from '@qwickapps/react-framework';
|
|
13
|
+
import { PayloadDataProvider } from '@qwickapps/cms/providers';
|
|
14
|
+
import { AppRouterCacheProvider } from '@mui/material-nextjs/v15-appRouter';
|
|
15
|
+
// import '@qwickapps/react-framework/dist/index.css'; // CSS is loaded by individual components
|
|
16
|
+
import { SettingsProvider, useSettings } from './SettingsProvider';
|
|
17
|
+
import { ScriptsInjector } from './ScriptsInjector';
|
|
18
|
+
import { SiteLogo } from './SiteLogo';
|
|
19
|
+
// Create Payload data provider instance
|
|
20
|
+
const payloadProvider = new PayloadDataProvider({
|
|
21
|
+
apiUrl: '/api',
|
|
22
|
+
debug: false
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Inner component that uses settings from SettingsProvider
|
|
26
|
+
*/
|
|
27
|
+
function QwickAppWithSettings({ children, navigationItems }) {
|
|
28
|
+
const { settings } = useSettings();
|
|
29
|
+
// Use settings for app name
|
|
30
|
+
const appName = settings?.siteName || 'QwickPress';
|
|
31
|
+
// Use SiteLogo component which automatically handles all logo configurations
|
|
32
|
+
const logoElement = _jsx(SiteLogo, { size: "small" });
|
|
33
|
+
// Use theme settings from CMS or fallback to defaults
|
|
34
|
+
const defaultTheme = settings?.defaultTheme || 'light';
|
|
35
|
+
const defaultPalette = settings?.defaultPalette || 'default';
|
|
36
|
+
const showThemeSwitcher = settings?.showThemeSwitcher !== undefined ? settings.showThemeSwitcher : true;
|
|
37
|
+
const showPaletteSwitcher = settings?.showPaletteSwitcher !== undefined ? settings.showPaletteSwitcher : false;
|
|
38
|
+
return (_jsx(QwickApp, { appName: appName, logo: logoElement, appId: "com.qwickapps.press", enableScaffolding: true, navigationItems: navigationItems, showThemeSwitcher: showThemeSwitcher, showPaletteSwitcher: showPaletteSwitcher, defaultTheme: defaultTheme, defaultPalette: defaultPalette, dataSource: {
|
|
39
|
+
dataProvider: payloadProvider,
|
|
40
|
+
enableLogging: false
|
|
41
|
+
}, children: children }));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* ClientSideQwickApp - Client Component
|
|
45
|
+
* Wraps the entire app with QwickApps framework, settings provider, and analytics
|
|
46
|
+
*/
|
|
47
|
+
export function ClientSideQwickApp({ children, navigationItems, initialSettings }) {
|
|
48
|
+
return (_jsx(AppRouterCacheProvider, { children: _jsxs(SettingsProvider, { initialSettings: initialSettings || undefined, children: [_jsx(ScriptsInjector, {}), _jsx(QwickAppWithSettings, { navigationItems: navigationItems, children: children })] }) }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ClientSideQwickApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientSideQwickApp.js","sourceRoot":"","sources":["../../src/nextjs/ClientSideQwickApp.tsx"],"names":[],"mappings":"AAAA,cAAc;AACd,YAAY,CAAC;;AAEb;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,gGAAgG;AAChG,OAAO,EAAE,gBAAgB,EAAY,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,wCAAwC;AACxC,MAAM,eAAe,GAAG,IAAI,mBAAmB,CAAC;IAC9C,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAkBH;;GAEG;AACH,SAAS,oBAAoB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAmD;IAC1G,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnC,4BAA4B;IAC5B,MAAM,OAAO,GAAG,QAAQ,EAAE,QAAQ,IAAI,YAAY,CAAC;IAEnD,6EAA6E;IAC7E,MAAM,WAAW,GAAG,KAAC,QAAQ,IAAC,IAAI,EAAC,OAAO,GAAG,CAAC;IAE9C,sDAAsD;IACtD,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,IAAI,OAAO,CAAC;IACvD,MAAM,cAAc,GAAG,QAAQ,EAAE,cAAc,IAAI,SAAS,CAAC;IAC7D,MAAM,iBAAiB,GAAG,QAAQ,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IACxG,MAAM,mBAAmB,GAAG,QAAQ,EAAE,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/G,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAC,qBAAqB,EAC3B,iBAAiB,EAAE,IAAI,EACvB,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE;YACV,YAAY,EAAE,eAAe;YAC7B,aAAa,EAAE,KAAK;SACrB,YAEA,QAAe,GACP,CACZ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAA2B;IACxG,OAAO,CACL,KAAC,sBAAsB,cACrB,MAAC,gBAAgB,IAAC,eAAe,EAAE,eAAe,IAAI,SAAS,aAC7D,KAAC,eAAe,KAAG,EACnB,KAAC,oBAAoB,IAAC,eAAe,EAAE,eAAe,YACnD,QAAQ,GACY,IACN,GACI,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface DynamicQwickAppProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* DynamicQwickApp - SSR compatible wrapper for QwickApp framework
|
|
7
|
+
*/
|
|
8
|
+
export declare function DynamicQwickApp({ children }: DynamicQwickAppProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=DynamicQwickApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicQwickApp.d.ts","sourceRoot":"","sources":["../../src/nextjs/DynamicQwickApp.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAEjE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic QwickApp Wrapper - SSR Compatible
|
|
4
|
+
*
|
|
5
|
+
* This component wraps ClientQwickApp and is now SSR compatible
|
|
6
|
+
* after Phase 2 framework fixes.
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
9
|
+
*/
|
|
10
|
+
'use client';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { ClientSideQwickApp } from './ClientSideQwickApp';
|
|
13
|
+
/**
|
|
14
|
+
* DynamicQwickApp - SSR compatible wrapper for QwickApp framework
|
|
15
|
+
*/
|
|
16
|
+
export function DynamicQwickApp({ children }) {
|
|
17
|
+
return _jsx(ClientSideQwickApp, { children: children });
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=DynamicQwickApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicQwickApp.js","sourceRoot":"","sources":["../../src/nextjs/DynamicQwickApp.tsx"],"names":[],"mappings":"AAAA,cAAc;AAEd;;;;;;;GAOG;AAEH,YAAY,CAAC;;AAGb,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAwB;IAChE,OAAO,KAAC,kBAAkB,cAAE,QAAQ,GAAsB,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FooterFromSettings.d.ts","sourceRoot":"","sources":["../../src/nextjs/FooterFromSettings.tsx"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,wBAAgB,kBAAkB,4CA4FjC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
'use client';
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* Footer From Settings Component
|
|
6
|
+
*
|
|
7
|
+
* Fetches footer configuration from Footer collection and renders with settings.
|
|
8
|
+
* Displays copyright from site settings and "Powered by" branding.
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useState } from 'react';
|
|
13
|
+
import { Box } from '@mui/material';
|
|
14
|
+
import { Footer, Text } from './framework';
|
|
15
|
+
import { useSettings } from './SettingsProvider';
|
|
16
|
+
import { getPayloadAPIClient } from '../client/PayloadAPIClient';
|
|
17
|
+
/**
|
|
18
|
+
* FooterFromSettings - Client Component
|
|
19
|
+
* Fetches footer data from Footer collection and renders with copyright
|
|
20
|
+
*/
|
|
21
|
+
export function FooterFromSettings() {
|
|
22
|
+
const { settings } = useSettings();
|
|
23
|
+
const [footerData, setFooterData] = useState(null);
|
|
24
|
+
const [loading, setLoading] = useState(true);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
async function fetchFooter() {
|
|
27
|
+
try {
|
|
28
|
+
const client = getPayloadAPIClient();
|
|
29
|
+
const result = await client.find('footer', {
|
|
30
|
+
where: {
|
|
31
|
+
position: { equals: 'main' }
|
|
32
|
+
},
|
|
33
|
+
limit: 1
|
|
34
|
+
});
|
|
35
|
+
if (result.docs && result.docs.length > 0) {
|
|
36
|
+
setFooterData(result.docs[0]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('Error fetching footer:', error);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
setLoading(false);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
fetchFooter();
|
|
47
|
+
}, []);
|
|
48
|
+
// Don't render anything while loading
|
|
49
|
+
if (loading) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Process copyright text with template variables
|
|
53
|
+
const currentYear = new Date().getFullYear();
|
|
54
|
+
const siteName = settings?.siteName || 'QwickPress';
|
|
55
|
+
let copyrightText = settings?.copyrightText || `© ${currentYear} ${siteName}. All rights reserved.`;
|
|
56
|
+
// Replace template variables
|
|
57
|
+
copyrightText = copyrightText
|
|
58
|
+
.replace('{year}', currentYear.toString())
|
|
59
|
+
.replace('{siteName}', siteName);
|
|
60
|
+
// Custom copyright component with "Powered by" on the right
|
|
61
|
+
const customCopyright = (_jsxs(Box, { sx: {
|
|
62
|
+
display: 'flex',
|
|
63
|
+
justifyContent: 'space-between',
|
|
64
|
+
alignItems: 'center',
|
|
65
|
+
flexWrap: 'wrap',
|
|
66
|
+
gap: 2,
|
|
67
|
+
width: '100%',
|
|
68
|
+
}, children: [_jsx(Text, { variant: "body2", customColor: "var(--theme-text-secondary)", children: copyrightText }), _jsxs("span", { style: { fontSize: '0.875rem', color: 'var(--theme-text-secondary)' }, children: ["Powered by", ' ', _jsx("a", { href: "https://qwickapps.com", target: "_blank", rel: "noopener noreferrer", style: { color: 'inherit', textDecoration: 'underline' }, children: "QwickPress" }), ' - A ', _jsx("a", { href: "https://payloadcms.com", target: "_blank", rel: "noopener noreferrer", style: { color: 'inherit', textDecoration: 'underline' }, children: "Payload CMS" })] })] }));
|
|
69
|
+
// Render footer with data if available, otherwise render minimal footer with just copyright
|
|
70
|
+
return (_jsx(Footer, { sections: footerData?.sections || [], copyright: customCopyright, orientation: footerData?.orientation || 'horizontal', variant: footerData?.variant || 'default', showDivider: footerData?.showDivider !== false }));
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=FooterFromSettings.js.map
|