@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,1241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Content Blocks for QwickPress
|
|
3
|
+
*
|
|
4
|
+
* These blocks can be used across Pages, Posts, Products, and other collections
|
|
5
|
+
* to build flexible, data-driven layouts.
|
|
6
|
+
*
|
|
7
|
+
* Blocks map to QwickApps Framework components for consistent rendering.
|
|
8
|
+
*
|
|
9
|
+
* All blocks inherit from framework ViewSchema which provides comprehensive styling props.
|
|
10
|
+
* See: /packages/qwickapps-react-framework/src/schemas/ViewSchema.ts
|
|
11
|
+
*
|
|
12
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Common ViewSchema fields - can be added to any block
|
|
16
|
+
* These map directly to framework component props
|
|
17
|
+
*/
|
|
18
|
+
const commonStyleFields = [
|
|
19
|
+
{
|
|
20
|
+
type: 'collapsible',
|
|
21
|
+
label: 'Layout & Spacing',
|
|
22
|
+
admin: {
|
|
23
|
+
initCollapsed: true,
|
|
24
|
+
},
|
|
25
|
+
fields: [
|
|
26
|
+
{
|
|
27
|
+
name: 'padding',
|
|
28
|
+
type: 'select',
|
|
29
|
+
options: [
|
|
30
|
+
{ label: 'None', value: 'none' },
|
|
31
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
32
|
+
{ label: 'Small', value: 'small' },
|
|
33
|
+
{ label: 'Medium', value: 'medium' },
|
|
34
|
+
{ label: 'Large', value: 'large' },
|
|
35
|
+
{ label: 'Huge', value: 'huge' },
|
|
36
|
+
],
|
|
37
|
+
admin: {
|
|
38
|
+
description: 'Internal spacing',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'marginTop',
|
|
43
|
+
type: 'select',
|
|
44
|
+
options: [
|
|
45
|
+
{ label: 'None', value: 'none' },
|
|
46
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
47
|
+
{ label: 'Small', value: 'small' },
|
|
48
|
+
{ label: 'Medium', value: 'medium' },
|
|
49
|
+
{ label: 'Large', value: 'large' },
|
|
50
|
+
{ label: 'Huge', value: 'huge' },
|
|
51
|
+
],
|
|
52
|
+
admin: {
|
|
53
|
+
description: 'Space above block',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'marginBottom',
|
|
58
|
+
type: 'select',
|
|
59
|
+
options: [
|
|
60
|
+
{ label: 'None', value: 'none' },
|
|
61
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
62
|
+
{ label: 'Small', value: 'small' },
|
|
63
|
+
{ label: 'Medium', value: 'medium' },
|
|
64
|
+
{ label: 'Large', value: 'large' },
|
|
65
|
+
{ label: 'Huge', value: 'huge' },
|
|
66
|
+
],
|
|
67
|
+
admin: {
|
|
68
|
+
description: 'Space below block',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'width',
|
|
73
|
+
type: 'text',
|
|
74
|
+
admin: {
|
|
75
|
+
description: 'Width (e.g., "100%", "large", "600px")',
|
|
76
|
+
placeholder: 'auto',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'maxWidth',
|
|
81
|
+
type: 'select',
|
|
82
|
+
options: [
|
|
83
|
+
{ label: 'Extra Small (444px)', value: 'xs' },
|
|
84
|
+
{ label: 'Small (600px)', value: 'sm' },
|
|
85
|
+
{ label: 'Medium (900px)', value: 'md' },
|
|
86
|
+
{ label: 'Large (1200px)', value: 'lg' },
|
|
87
|
+
{ label: 'Extra Large (1536px)', value: 'xl' },
|
|
88
|
+
{ label: 'Full Width', value: 'false' },
|
|
89
|
+
],
|
|
90
|
+
admin: {
|
|
91
|
+
description: 'Maximum content width',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'collapsible',
|
|
98
|
+
label: 'Colors & Background',
|
|
99
|
+
admin: {
|
|
100
|
+
initCollapsed: true,
|
|
101
|
+
},
|
|
102
|
+
fields: [
|
|
103
|
+
{
|
|
104
|
+
name: 'background',
|
|
105
|
+
type: 'text',
|
|
106
|
+
label: 'Background Color',
|
|
107
|
+
admin: {
|
|
108
|
+
description: 'Background color (theme variable or custom)',
|
|
109
|
+
components: {
|
|
110
|
+
Field: '/src/admin/fields/ColorInput#ColorInput',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'color',
|
|
116
|
+
type: 'text',
|
|
117
|
+
label: 'Text Color',
|
|
118
|
+
admin: {
|
|
119
|
+
description: 'Text color (theme variable or custom)',
|
|
120
|
+
components: {
|
|
121
|
+
Field: '/src/admin/fields/ColorInput#ColorInput',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'backgroundImage',
|
|
127
|
+
type: 'upload',
|
|
128
|
+
relationTo: 'media',
|
|
129
|
+
admin: {
|
|
130
|
+
description: 'Background image',
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'backgroundGradient',
|
|
135
|
+
type: 'textarea',
|
|
136
|
+
admin: {
|
|
137
|
+
description: 'CSS gradient',
|
|
138
|
+
placeholder: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'collapsible',
|
|
145
|
+
label: 'Advanced',
|
|
146
|
+
admin: {
|
|
147
|
+
initCollapsed: true,
|
|
148
|
+
},
|
|
149
|
+
fields: [
|
|
150
|
+
{
|
|
151
|
+
name: 'className',
|
|
152
|
+
type: 'text',
|
|
153
|
+
admin: {
|
|
154
|
+
description: 'Additional CSS class names',
|
|
155
|
+
placeholder: 'custom-class',
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'sx',
|
|
160
|
+
type: 'textarea',
|
|
161
|
+
admin: {
|
|
162
|
+
description: 'MUI sx prop as JSON for advanced styling',
|
|
163
|
+
placeholder: '{"boxShadow": 2, "borderRadius": 2}',
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'id',
|
|
168
|
+
type: 'text',
|
|
169
|
+
admin: {
|
|
170
|
+
description: 'HTML element ID',
|
|
171
|
+
placeholder: 'unique-id',
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
];
|
|
177
|
+
/**
|
|
178
|
+
* Hero Block - Large header section with title, subtitle, and actions
|
|
179
|
+
* Maps to: @qwickapps/react-framework HeroBlock component
|
|
180
|
+
*/
|
|
181
|
+
export const HeroBlock = {
|
|
182
|
+
slug: 'hero',
|
|
183
|
+
labels: {
|
|
184
|
+
singular: 'Hero Block',
|
|
185
|
+
plural: 'Hero Blocks',
|
|
186
|
+
},
|
|
187
|
+
admin: {
|
|
188
|
+
components: {
|
|
189
|
+
Label: {
|
|
190
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
191
|
+
clientProps: {},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
fields: [
|
|
196
|
+
{
|
|
197
|
+
name: 'blockName',
|
|
198
|
+
type: 'text',
|
|
199
|
+
admin: {
|
|
200
|
+
description: 'Optional custom name for this block (e.g., "Home page hero")',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'title',
|
|
205
|
+
type: 'text',
|
|
206
|
+
required: true,
|
|
207
|
+
admin: {
|
|
208
|
+
description: 'Main heading text',
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'subtitle',
|
|
213
|
+
type: 'textarea',
|
|
214
|
+
admin: {
|
|
215
|
+
description: 'Optional subtitle or description',
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: 'textAlign',
|
|
220
|
+
type: 'select',
|
|
221
|
+
defaultValue: 'center',
|
|
222
|
+
options: [
|
|
223
|
+
{ label: 'Left', value: 'left' },
|
|
224
|
+
{ label: 'Center', value: 'center' },
|
|
225
|
+
{ label: 'Right', value: 'right' },
|
|
226
|
+
],
|
|
227
|
+
admin: {
|
|
228
|
+
description: 'Text alignment',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'blockHeight',
|
|
233
|
+
type: 'select',
|
|
234
|
+
defaultValue: 'medium',
|
|
235
|
+
options: [
|
|
236
|
+
{ label: 'Small', value: 'small' },
|
|
237
|
+
{ label: 'Medium', value: 'medium' },
|
|
238
|
+
{ label: 'Large', value: 'large' },
|
|
239
|
+
{ label: 'Full Viewport', value: 'viewport' },
|
|
240
|
+
],
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'actions',
|
|
244
|
+
type: 'array',
|
|
245
|
+
label: 'Call-to-Action Buttons',
|
|
246
|
+
admin: {
|
|
247
|
+
description: 'Add buttons for hero actions (e.g., "Get Started", "Learn More")',
|
|
248
|
+
components: {
|
|
249
|
+
RowLabel: {
|
|
250
|
+
path: '/src/admin/components/ButtonRowLabel#ButtonRowLabel',
|
|
251
|
+
clientProps: {},
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
fields: [
|
|
256
|
+
{
|
|
257
|
+
name: 'label',
|
|
258
|
+
type: 'text',
|
|
259
|
+
required: true,
|
|
260
|
+
admin: {
|
|
261
|
+
description: 'Button text label',
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: 'href',
|
|
266
|
+
type: 'text',
|
|
267
|
+
required: true,
|
|
268
|
+
admin: {
|
|
269
|
+
description: 'Button destination URL',
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
name: 'variant',
|
|
274
|
+
type: 'select',
|
|
275
|
+
defaultValue: 'contained',
|
|
276
|
+
options: [
|
|
277
|
+
{ label: 'Contained', value: 'contained' },
|
|
278
|
+
{ label: 'Outlined', value: 'outlined' },
|
|
279
|
+
{ label: 'Text', value: 'text' },
|
|
280
|
+
],
|
|
281
|
+
admin: {
|
|
282
|
+
description: 'Button style variant',
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: 'color',
|
|
287
|
+
type: 'select',
|
|
288
|
+
defaultValue: 'primary',
|
|
289
|
+
options: [
|
|
290
|
+
{ label: 'Primary', value: 'primary' },
|
|
291
|
+
{ label: 'Secondary', value: 'secondary' },
|
|
292
|
+
{ label: 'Error', value: 'error' },
|
|
293
|
+
{ label: 'Warning', value: 'warning' },
|
|
294
|
+
{ label: 'Info', value: 'info' },
|
|
295
|
+
{ label: 'Success', value: 'success' },
|
|
296
|
+
],
|
|
297
|
+
admin: {
|
|
298
|
+
description: 'Button color theme',
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: 'buttonSize',
|
|
303
|
+
type: 'select',
|
|
304
|
+
defaultValue: 'medium',
|
|
305
|
+
options: [
|
|
306
|
+
{ label: 'Small', value: 'small' },
|
|
307
|
+
{ label: 'Medium', value: 'medium' },
|
|
308
|
+
{ label: 'Large', value: 'large' },
|
|
309
|
+
],
|
|
310
|
+
admin: {
|
|
311
|
+
description: 'Button size',
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: 'icon',
|
|
316
|
+
type: 'text',
|
|
317
|
+
admin: {
|
|
318
|
+
description: 'Icon name for start of button (e.g., "rocket_launch", "play_arrow")',
|
|
319
|
+
placeholder: 'rocket_launch',
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'endIcon',
|
|
324
|
+
type: 'text',
|
|
325
|
+
admin: {
|
|
326
|
+
description: 'Icon name for end of button (e.g., "arrow_forward", "open_in_new")',
|
|
327
|
+
placeholder: 'arrow_forward',
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'fullWidth',
|
|
332
|
+
type: 'checkbox',
|
|
333
|
+
defaultValue: false,
|
|
334
|
+
admin: {
|
|
335
|
+
description: 'Make button stretch to full container width',
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
],
|
|
339
|
+
},
|
|
340
|
+
...commonStyleFields,
|
|
341
|
+
],
|
|
342
|
+
};
|
|
343
|
+
/**
|
|
344
|
+
* Text Section Block - Simple section with heading and rich text content
|
|
345
|
+
* Maps to: @qwickapps/react-framework Section component
|
|
346
|
+
*/
|
|
347
|
+
export const TextSectionBlock = {
|
|
348
|
+
slug: 'textSection',
|
|
349
|
+
labels: {
|
|
350
|
+
singular: 'Text Section',
|
|
351
|
+
plural: 'Text Sections',
|
|
352
|
+
},
|
|
353
|
+
admin: {
|
|
354
|
+
components: {
|
|
355
|
+
Label: {
|
|
356
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
357
|
+
clientProps: {},
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
fields: [
|
|
362
|
+
{
|
|
363
|
+
name: 'blockName',
|
|
364
|
+
type: 'text',
|
|
365
|
+
admin: {
|
|
366
|
+
description: 'Optional custom name for this block',
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
name: 'heading',
|
|
371
|
+
type: 'text',
|
|
372
|
+
admin: {
|
|
373
|
+
description: 'Section heading (optional)',
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
name: 'content',
|
|
378
|
+
type: 'richText',
|
|
379
|
+
required: true,
|
|
380
|
+
admin: {
|
|
381
|
+
description: 'Rich text content',
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
name: 'textAlign',
|
|
386
|
+
type: 'select',
|
|
387
|
+
defaultValue: 'left',
|
|
388
|
+
options: [
|
|
389
|
+
{ label: 'Left', value: 'left' },
|
|
390
|
+
{ label: 'Center', value: 'center' },
|
|
391
|
+
{ label: 'Right', value: 'right' },
|
|
392
|
+
{ label: 'Justify', value: 'justify' },
|
|
393
|
+
],
|
|
394
|
+
admin: {
|
|
395
|
+
description: 'Text alignment',
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
...commonStyleFields,
|
|
399
|
+
],
|
|
400
|
+
};
|
|
401
|
+
/**
|
|
402
|
+
* Feature Grid Block - Grid of features from Features collection
|
|
403
|
+
* Maps to: @qwickapps/react-framework GridLayout + GridCell components
|
|
404
|
+
*/
|
|
405
|
+
export const FeatureGridBlock = {
|
|
406
|
+
slug: 'featureGrid',
|
|
407
|
+
labels: {
|
|
408
|
+
singular: 'Feature Grid',
|
|
409
|
+
plural: 'Feature Grids',
|
|
410
|
+
},
|
|
411
|
+
admin: {
|
|
412
|
+
components: {
|
|
413
|
+
Label: {
|
|
414
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
415
|
+
clientProps: {},
|
|
416
|
+
},
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
fields: [
|
|
420
|
+
{
|
|
421
|
+
name: 'blockName',
|
|
422
|
+
type: 'text',
|
|
423
|
+
admin: {
|
|
424
|
+
description: 'Optional custom name for this block',
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
name: 'heading',
|
|
429
|
+
type: 'text',
|
|
430
|
+
admin: {
|
|
431
|
+
description: 'Optional heading above the grid',
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
name: 'features',
|
|
436
|
+
type: 'relationship',
|
|
437
|
+
relationTo: 'features',
|
|
438
|
+
hasMany: true,
|
|
439
|
+
required: true,
|
|
440
|
+
admin: {
|
|
441
|
+
description: 'Select features to display',
|
|
442
|
+
},
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
name: 'columns',
|
|
446
|
+
type: 'number',
|
|
447
|
+
defaultValue: 3,
|
|
448
|
+
min: 1,
|
|
449
|
+
max: 6,
|
|
450
|
+
admin: {
|
|
451
|
+
description: 'Number of columns (responsive)',
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
name: 'spacing',
|
|
456
|
+
type: 'select',
|
|
457
|
+
defaultValue: 'medium',
|
|
458
|
+
options: [
|
|
459
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
460
|
+
{ label: 'Small', value: 'small' },
|
|
461
|
+
{ label: 'Medium', value: 'medium' },
|
|
462
|
+
{ label: 'Large', value: 'large' },
|
|
463
|
+
{ label: 'Huge', value: 'huge' },
|
|
464
|
+
],
|
|
465
|
+
admin: {
|
|
466
|
+
description: 'Space between grid items',
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
name: 'equalHeight',
|
|
471
|
+
type: 'checkbox',
|
|
472
|
+
defaultValue: false,
|
|
473
|
+
admin: {
|
|
474
|
+
description: 'Make all grid items the same height',
|
|
475
|
+
},
|
|
476
|
+
},
|
|
477
|
+
...commonStyleFields,
|
|
478
|
+
],
|
|
479
|
+
};
|
|
480
|
+
/**
|
|
481
|
+
* CTA Section Block - Call-to-action section with buttons
|
|
482
|
+
* Maps to: @qwickapps/react-framework Section component
|
|
483
|
+
*/
|
|
484
|
+
export const CTASectionBlock = {
|
|
485
|
+
slug: 'ctaSection',
|
|
486
|
+
labels: {
|
|
487
|
+
singular: 'CTA Section',
|
|
488
|
+
plural: 'CTA Sections',
|
|
489
|
+
},
|
|
490
|
+
admin: {
|
|
491
|
+
components: {
|
|
492
|
+
Label: {
|
|
493
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
494
|
+
clientProps: {},
|
|
495
|
+
},
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
fields: [
|
|
499
|
+
{
|
|
500
|
+
name: 'blockName',
|
|
501
|
+
type: 'text',
|
|
502
|
+
admin: {
|
|
503
|
+
description: 'Optional custom name for this block',
|
|
504
|
+
},
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
name: 'heading',
|
|
508
|
+
type: 'text',
|
|
509
|
+
required: true,
|
|
510
|
+
admin: {
|
|
511
|
+
description: 'Main heading',
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
name: 'description',
|
|
516
|
+
type: 'textarea',
|
|
517
|
+
admin: {
|
|
518
|
+
description: 'Optional description text',
|
|
519
|
+
},
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
name: 'buttons',
|
|
523
|
+
type: 'array',
|
|
524
|
+
label: 'Action Buttons',
|
|
525
|
+
minRows: 1,
|
|
526
|
+
maxRows: 3,
|
|
527
|
+
admin: {
|
|
528
|
+
description: 'Add call-to-action buttons (1-3 buttons recommended)',
|
|
529
|
+
components: {
|
|
530
|
+
RowLabel: {
|
|
531
|
+
path: '/src/admin/components/ButtonRowLabel#ButtonRowLabel',
|
|
532
|
+
clientProps: {},
|
|
533
|
+
},
|
|
534
|
+
},
|
|
535
|
+
},
|
|
536
|
+
fields: [
|
|
537
|
+
{
|
|
538
|
+
name: 'label',
|
|
539
|
+
type: 'text',
|
|
540
|
+
required: true,
|
|
541
|
+
admin: {
|
|
542
|
+
description: 'Button text label',
|
|
543
|
+
},
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
name: 'href',
|
|
547
|
+
type: 'text',
|
|
548
|
+
required: true,
|
|
549
|
+
admin: {
|
|
550
|
+
description: 'Button destination URL',
|
|
551
|
+
},
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
name: 'variant',
|
|
555
|
+
type: 'select',
|
|
556
|
+
defaultValue: 'contained',
|
|
557
|
+
options: [
|
|
558
|
+
{ label: 'Contained', value: 'contained' },
|
|
559
|
+
{ label: 'Outlined', value: 'outlined' },
|
|
560
|
+
{ label: 'Text', value: 'text' },
|
|
561
|
+
],
|
|
562
|
+
admin: {
|
|
563
|
+
description: 'Button style variant',
|
|
564
|
+
},
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
name: 'color',
|
|
568
|
+
type: 'select',
|
|
569
|
+
defaultValue: 'primary',
|
|
570
|
+
options: [
|
|
571
|
+
{ label: 'Primary', value: 'primary' },
|
|
572
|
+
{ label: 'Secondary', value: 'secondary' },
|
|
573
|
+
{ label: 'Error', value: 'error' },
|
|
574
|
+
{ label: 'Warning', value: 'warning' },
|
|
575
|
+
{ label: 'Info', value: 'info' },
|
|
576
|
+
{ label: 'Success', value: 'success' },
|
|
577
|
+
],
|
|
578
|
+
admin: {
|
|
579
|
+
description: 'Button color theme',
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
name: 'buttonSize',
|
|
584
|
+
type: 'select',
|
|
585
|
+
defaultValue: 'large',
|
|
586
|
+
options: [
|
|
587
|
+
{ label: 'Small', value: 'small' },
|
|
588
|
+
{ label: 'Medium', value: 'medium' },
|
|
589
|
+
{ label: 'Large', value: 'large' },
|
|
590
|
+
],
|
|
591
|
+
admin: {
|
|
592
|
+
description: 'Button size',
|
|
593
|
+
},
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
name: 'icon',
|
|
597
|
+
type: 'text',
|
|
598
|
+
admin: {
|
|
599
|
+
description: 'Icon name for start of button (e.g., "rocket_launch", "play_arrow")',
|
|
600
|
+
placeholder: 'rocket_launch',
|
|
601
|
+
},
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
name: 'endIcon',
|
|
605
|
+
type: 'text',
|
|
606
|
+
admin: {
|
|
607
|
+
description: 'Icon name for end of button (e.g., "arrow_forward", "open_in_new")',
|
|
608
|
+
placeholder: 'arrow_forward',
|
|
609
|
+
},
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
name: 'fullWidth',
|
|
613
|
+
type: 'checkbox',
|
|
614
|
+
defaultValue: false,
|
|
615
|
+
admin: {
|
|
616
|
+
description: 'Make button stretch to full container width',
|
|
617
|
+
},
|
|
618
|
+
},
|
|
619
|
+
],
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
name: 'textAlign',
|
|
623
|
+
type: 'select',
|
|
624
|
+
defaultValue: 'center',
|
|
625
|
+
options: [
|
|
626
|
+
{ label: 'Left', value: 'left' },
|
|
627
|
+
{ label: 'Center', value: 'center' },
|
|
628
|
+
{ label: 'Right', value: 'right' },
|
|
629
|
+
],
|
|
630
|
+
admin: {
|
|
631
|
+
description: 'Text alignment',
|
|
632
|
+
},
|
|
633
|
+
},
|
|
634
|
+
...commonStyleFields,
|
|
635
|
+
],
|
|
636
|
+
};
|
|
637
|
+
/**
|
|
638
|
+
* Image Block - Single image with optional caption
|
|
639
|
+
* Maps to: Next.js Image component
|
|
640
|
+
*/
|
|
641
|
+
export const ImageBlock = {
|
|
642
|
+
slug: 'image',
|
|
643
|
+
labels: {
|
|
644
|
+
singular: 'Image',
|
|
645
|
+
plural: 'Images',
|
|
646
|
+
},
|
|
647
|
+
admin: {
|
|
648
|
+
components: {
|
|
649
|
+
Label: {
|
|
650
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
651
|
+
clientProps: {},
|
|
652
|
+
},
|
|
653
|
+
},
|
|
654
|
+
},
|
|
655
|
+
fields: [
|
|
656
|
+
{
|
|
657
|
+
name: 'blockName',
|
|
658
|
+
type: 'text',
|
|
659
|
+
admin: {
|
|
660
|
+
description: 'Optional custom name for this block',
|
|
661
|
+
},
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
name: 'image',
|
|
665
|
+
type: 'upload',
|
|
666
|
+
relationTo: 'media',
|
|
667
|
+
required: true,
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
name: 'alt',
|
|
671
|
+
type: 'text',
|
|
672
|
+
required: true,
|
|
673
|
+
admin: {
|
|
674
|
+
description: 'Alt text for accessibility',
|
|
675
|
+
},
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
name: 'caption',
|
|
679
|
+
type: 'textarea',
|
|
680
|
+
admin: {
|
|
681
|
+
description: 'Optional caption',
|
|
682
|
+
},
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
name: 'size',
|
|
686
|
+
type: 'select',
|
|
687
|
+
defaultValue: 'large',
|
|
688
|
+
options: [
|
|
689
|
+
{ label: 'Small', value: 'small' },
|
|
690
|
+
{ label: 'Medium', value: 'medium' },
|
|
691
|
+
{ label: 'Large', value: 'large' },
|
|
692
|
+
{ label: 'Full Width', value: 'full' },
|
|
693
|
+
],
|
|
694
|
+
admin: {
|
|
695
|
+
description: 'Image display size',
|
|
696
|
+
},
|
|
697
|
+
},
|
|
698
|
+
...commonStyleFields,
|
|
699
|
+
],
|
|
700
|
+
};
|
|
701
|
+
/**
|
|
702
|
+
* Spacer Block - Add vertical spacing between sections
|
|
703
|
+
*/
|
|
704
|
+
export const SpacerBlock = {
|
|
705
|
+
slug: 'spacer',
|
|
706
|
+
labels: {
|
|
707
|
+
singular: 'Spacer',
|
|
708
|
+
plural: 'Spacers',
|
|
709
|
+
},
|
|
710
|
+
admin: {
|
|
711
|
+
components: {
|
|
712
|
+
Label: {
|
|
713
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
714
|
+
clientProps: {},
|
|
715
|
+
},
|
|
716
|
+
},
|
|
717
|
+
},
|
|
718
|
+
fields: [
|
|
719
|
+
{
|
|
720
|
+
name: 'blockName',
|
|
721
|
+
type: 'text',
|
|
722
|
+
admin: {
|
|
723
|
+
description: 'Optional custom name for this block',
|
|
724
|
+
},
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
name: 'height',
|
|
728
|
+
type: 'select',
|
|
729
|
+
defaultValue: 'medium',
|
|
730
|
+
options: [
|
|
731
|
+
{ label: 'Small (24px)', value: 'small' },
|
|
732
|
+
{ label: 'Medium (48px)', value: 'medium' },
|
|
733
|
+
{ label: 'Large (96px)', value: 'large' },
|
|
734
|
+
{ label: 'Extra Large (144px)', value: 'xlarge' },
|
|
735
|
+
],
|
|
736
|
+
},
|
|
737
|
+
],
|
|
738
|
+
};
|
|
739
|
+
/**
|
|
740
|
+
* Code Block - Display code snippets with syntax highlighting
|
|
741
|
+
* Maps to: @qwickapps/react-framework Code component
|
|
742
|
+
*/
|
|
743
|
+
export const CodeBlock = {
|
|
744
|
+
slug: 'code',
|
|
745
|
+
labels: {
|
|
746
|
+
singular: 'Code Block',
|
|
747
|
+
plural: 'Code Blocks',
|
|
748
|
+
},
|
|
749
|
+
admin: {
|
|
750
|
+
components: {
|
|
751
|
+
Label: {
|
|
752
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
753
|
+
clientProps: {},
|
|
754
|
+
},
|
|
755
|
+
},
|
|
756
|
+
},
|
|
757
|
+
fields: [
|
|
758
|
+
{
|
|
759
|
+
name: 'blockName',
|
|
760
|
+
type: 'text',
|
|
761
|
+
admin: {
|
|
762
|
+
description: 'Optional custom name for this block',
|
|
763
|
+
},
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
name: 'code',
|
|
767
|
+
type: 'textarea',
|
|
768
|
+
required: true,
|
|
769
|
+
admin: {
|
|
770
|
+
description: 'Code content to display',
|
|
771
|
+
},
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
name: 'language',
|
|
775
|
+
type: 'select',
|
|
776
|
+
defaultValue: 'javascript',
|
|
777
|
+
options: [
|
|
778
|
+
{ label: 'JavaScript', value: 'javascript' },
|
|
779
|
+
{ label: 'TypeScript', value: 'typescript' },
|
|
780
|
+
{ label: 'Python', value: 'python' },
|
|
781
|
+
{ label: 'Java', value: 'java' },
|
|
782
|
+
{ label: 'C#', value: 'csharp' },
|
|
783
|
+
{ label: 'PHP', value: 'php' },
|
|
784
|
+
{ label: 'Ruby', value: 'ruby' },
|
|
785
|
+
{ label: 'Go', value: 'go' },
|
|
786
|
+
{ label: 'Rust', value: 'rust' },
|
|
787
|
+
{ label: 'HTML', value: 'html' },
|
|
788
|
+
{ label: 'CSS', value: 'css' },
|
|
789
|
+
{ label: 'JSON', value: 'json' },
|
|
790
|
+
{ label: 'XML', value: 'xml' },
|
|
791
|
+
{ label: 'SQL', value: 'sql' },
|
|
792
|
+
{ label: 'Bash', value: 'bash' },
|
|
793
|
+
{ label: 'Plain Text', value: 'text' },
|
|
794
|
+
],
|
|
795
|
+
admin: {
|
|
796
|
+
description: 'Programming language for syntax highlighting',
|
|
797
|
+
},
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
name: 'title',
|
|
801
|
+
type: 'text',
|
|
802
|
+
admin: {
|
|
803
|
+
description: 'Optional title for the code block',
|
|
804
|
+
},
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
name: 'showCopy',
|
|
808
|
+
type: 'checkbox',
|
|
809
|
+
defaultValue: true,
|
|
810
|
+
admin: {
|
|
811
|
+
description: 'Show copy to clipboard button',
|
|
812
|
+
},
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
name: 'showLineNumbers',
|
|
816
|
+
type: 'checkbox',
|
|
817
|
+
defaultValue: false,
|
|
818
|
+
admin: {
|
|
819
|
+
description: 'Display line numbers',
|
|
820
|
+
},
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
name: 'wrapLines',
|
|
824
|
+
type: 'checkbox',
|
|
825
|
+
defaultValue: false,
|
|
826
|
+
admin: {
|
|
827
|
+
description: 'Wrap long lines instead of scrolling',
|
|
828
|
+
},
|
|
829
|
+
},
|
|
830
|
+
...commonStyleFields,
|
|
831
|
+
],
|
|
832
|
+
};
|
|
833
|
+
/**
|
|
834
|
+
* Product Grid Block - Display products from Products collection
|
|
835
|
+
* Maps to: @qwickapps/react-framework ProductCard component
|
|
836
|
+
*/
|
|
837
|
+
export const ProductGridBlock = {
|
|
838
|
+
slug: 'productGrid',
|
|
839
|
+
labels: {
|
|
840
|
+
singular: 'Product Grid',
|
|
841
|
+
plural: 'Product Grids',
|
|
842
|
+
},
|
|
843
|
+
admin: {
|
|
844
|
+
components: {
|
|
845
|
+
Label: {
|
|
846
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
847
|
+
clientProps: {},
|
|
848
|
+
},
|
|
849
|
+
},
|
|
850
|
+
},
|
|
851
|
+
fields: [
|
|
852
|
+
{
|
|
853
|
+
name: 'blockName',
|
|
854
|
+
type: 'text',
|
|
855
|
+
admin: {
|
|
856
|
+
description: 'Optional custom name for this block',
|
|
857
|
+
},
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
name: 'heading',
|
|
861
|
+
type: 'text',
|
|
862
|
+
admin: {
|
|
863
|
+
description: 'Optional heading above the product grid',
|
|
864
|
+
},
|
|
865
|
+
},
|
|
866
|
+
{
|
|
867
|
+
name: 'products',
|
|
868
|
+
type: 'relationship',
|
|
869
|
+
relationTo: 'products',
|
|
870
|
+
hasMany: true,
|
|
871
|
+
required: true,
|
|
872
|
+
admin: {
|
|
873
|
+
description: 'Select products to display',
|
|
874
|
+
},
|
|
875
|
+
},
|
|
876
|
+
{
|
|
877
|
+
name: 'variant',
|
|
878
|
+
type: 'select',
|
|
879
|
+
defaultValue: 'compact',
|
|
880
|
+
options: [
|
|
881
|
+
{ label: 'Compact', value: 'compact' },
|
|
882
|
+
{ label: 'Detailed', value: 'detailed' },
|
|
883
|
+
],
|
|
884
|
+
admin: {
|
|
885
|
+
description: 'Product card display variant',
|
|
886
|
+
},
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
name: 'columns',
|
|
890
|
+
type: 'number',
|
|
891
|
+
defaultValue: 3,
|
|
892
|
+
min: 1,
|
|
893
|
+
max: 4,
|
|
894
|
+
admin: {
|
|
895
|
+
description: 'Number of columns (responsive)',
|
|
896
|
+
},
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
name: 'spacing',
|
|
900
|
+
type: 'select',
|
|
901
|
+
defaultValue: 'medium',
|
|
902
|
+
options: [
|
|
903
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
904
|
+
{ label: 'Small', value: 'small' },
|
|
905
|
+
{ label: 'Medium', value: 'medium' },
|
|
906
|
+
{ label: 'Large', value: 'large' },
|
|
907
|
+
{ label: 'Huge', value: 'huge' },
|
|
908
|
+
],
|
|
909
|
+
admin: {
|
|
910
|
+
description: 'Space between product cards',
|
|
911
|
+
},
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
name: 'equalHeight',
|
|
915
|
+
type: 'checkbox',
|
|
916
|
+
defaultValue: true,
|
|
917
|
+
admin: {
|
|
918
|
+
description: 'Make all product cards the same height',
|
|
919
|
+
},
|
|
920
|
+
},
|
|
921
|
+
...commonStyleFields,
|
|
922
|
+
],
|
|
923
|
+
};
|
|
924
|
+
/**
|
|
925
|
+
* Accordion Block - Collapsible content sections (FAQ style)
|
|
926
|
+
* Maps to: @qwickapps/react-framework CollapsibleLayout component
|
|
927
|
+
*/
|
|
928
|
+
export const AccordionBlock = {
|
|
929
|
+
slug: 'accordion',
|
|
930
|
+
labels: {
|
|
931
|
+
singular: 'Accordion',
|
|
932
|
+
plural: 'Accordions',
|
|
933
|
+
},
|
|
934
|
+
admin: {
|
|
935
|
+
components: {
|
|
936
|
+
Label: {
|
|
937
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
938
|
+
clientProps: {},
|
|
939
|
+
},
|
|
940
|
+
},
|
|
941
|
+
},
|
|
942
|
+
fields: [
|
|
943
|
+
{
|
|
944
|
+
name: 'blockName',
|
|
945
|
+
type: 'text',
|
|
946
|
+
admin: {
|
|
947
|
+
description: 'Optional custom name for this block',
|
|
948
|
+
},
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
name: 'heading',
|
|
952
|
+
type: 'text',
|
|
953
|
+
admin: {
|
|
954
|
+
description: 'Optional heading above the accordion',
|
|
955
|
+
},
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
name: 'items',
|
|
959
|
+
type: 'array',
|
|
960
|
+
label: 'Accordion Items',
|
|
961
|
+
minRows: 1,
|
|
962
|
+
admin: {
|
|
963
|
+
description: 'Add accordion sections (e.g., FAQ questions)',
|
|
964
|
+
components: {
|
|
965
|
+
RowLabel: {
|
|
966
|
+
path: '/src/admin/components/AccordionItemRowLabel#AccordionItemRowLabel',
|
|
967
|
+
clientProps: {},
|
|
968
|
+
},
|
|
969
|
+
},
|
|
970
|
+
},
|
|
971
|
+
fields: [
|
|
972
|
+
{
|
|
973
|
+
name: 'title',
|
|
974
|
+
type: 'text',
|
|
975
|
+
required: true,
|
|
976
|
+
admin: {
|
|
977
|
+
description: 'Item title/question',
|
|
978
|
+
},
|
|
979
|
+
},
|
|
980
|
+
{
|
|
981
|
+
name: 'content',
|
|
982
|
+
type: 'richText',
|
|
983
|
+
required: true,
|
|
984
|
+
admin: {
|
|
985
|
+
description: 'Item content/answer',
|
|
986
|
+
},
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
name: 'defaultExpanded',
|
|
990
|
+
type: 'checkbox',
|
|
991
|
+
defaultValue: false,
|
|
992
|
+
admin: {
|
|
993
|
+
description: 'Expand this item by default',
|
|
994
|
+
},
|
|
995
|
+
},
|
|
996
|
+
],
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
name: 'allowMultiple',
|
|
1000
|
+
type: 'checkbox',
|
|
1001
|
+
defaultValue: false,
|
|
1002
|
+
admin: {
|
|
1003
|
+
description: 'Allow multiple items to be expanded at once',
|
|
1004
|
+
},
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
name: 'variant',
|
|
1008
|
+
type: 'select',
|
|
1009
|
+
defaultValue: 'outlined',
|
|
1010
|
+
options: [
|
|
1011
|
+
{ label: 'Outlined', value: 'outlined' },
|
|
1012
|
+
{ label: 'Filled', value: 'filled' },
|
|
1013
|
+
{ label: 'Plain', value: 'plain' },
|
|
1014
|
+
],
|
|
1015
|
+
admin: {
|
|
1016
|
+
description: 'Accordion visual style',
|
|
1017
|
+
},
|
|
1018
|
+
},
|
|
1019
|
+
...commonStyleFields,
|
|
1020
|
+
],
|
|
1021
|
+
};
|
|
1022
|
+
/**
|
|
1023
|
+
* Card Grid Block - Flexible card grid for custom content
|
|
1024
|
+
* Maps to: @qwickapps/react-framework GridLayout with custom cards
|
|
1025
|
+
*/
|
|
1026
|
+
export const CardGridBlock = {
|
|
1027
|
+
slug: 'cardGrid',
|
|
1028
|
+
labels: {
|
|
1029
|
+
singular: 'Card Grid',
|
|
1030
|
+
plural: 'Card Grids',
|
|
1031
|
+
},
|
|
1032
|
+
admin: {
|
|
1033
|
+
components: {
|
|
1034
|
+
Label: {
|
|
1035
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
1036
|
+
clientProps: {},
|
|
1037
|
+
},
|
|
1038
|
+
},
|
|
1039
|
+
},
|
|
1040
|
+
fields: [
|
|
1041
|
+
{
|
|
1042
|
+
name: 'blockName',
|
|
1043
|
+
type: 'text',
|
|
1044
|
+
admin: {
|
|
1045
|
+
description: 'Optional custom name for this block',
|
|
1046
|
+
},
|
|
1047
|
+
},
|
|
1048
|
+
{
|
|
1049
|
+
name: 'heading',
|
|
1050
|
+
type: 'text',
|
|
1051
|
+
admin: {
|
|
1052
|
+
description: 'Optional heading above the card grid',
|
|
1053
|
+
},
|
|
1054
|
+
},
|
|
1055
|
+
{
|
|
1056
|
+
name: 'cards',
|
|
1057
|
+
type: 'array',
|
|
1058
|
+
label: 'Cards',
|
|
1059
|
+
minRows: 1,
|
|
1060
|
+
admin: {
|
|
1061
|
+
description: 'Add cards with icons, images, and links',
|
|
1062
|
+
components: {
|
|
1063
|
+
RowLabel: {
|
|
1064
|
+
path: '/src/admin/components/CardRowLabel#CardRowLabel',
|
|
1065
|
+
clientProps: {},
|
|
1066
|
+
},
|
|
1067
|
+
},
|
|
1068
|
+
},
|
|
1069
|
+
fields: [
|
|
1070
|
+
{
|
|
1071
|
+
name: 'title',
|
|
1072
|
+
type: 'text',
|
|
1073
|
+
required: true,
|
|
1074
|
+
admin: {
|
|
1075
|
+
description: 'Card title/heading',
|
|
1076
|
+
},
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
name: 'description',
|
|
1080
|
+
type: 'textarea',
|
|
1081
|
+
admin: {
|
|
1082
|
+
description: 'Card description text',
|
|
1083
|
+
},
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
name: 'image',
|
|
1087
|
+
type: 'upload',
|
|
1088
|
+
relationTo: 'media',
|
|
1089
|
+
admin: {
|
|
1090
|
+
description: 'Optional card image',
|
|
1091
|
+
},
|
|
1092
|
+
},
|
|
1093
|
+
{
|
|
1094
|
+
name: 'icon',
|
|
1095
|
+
type: 'text',
|
|
1096
|
+
admin: {
|
|
1097
|
+
description: 'Optional emoji or icon character',
|
|
1098
|
+
},
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
name: 'link',
|
|
1102
|
+
type: 'text',
|
|
1103
|
+
admin: {
|
|
1104
|
+
description: 'Optional link URL',
|
|
1105
|
+
},
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
name: 'linkText',
|
|
1109
|
+
type: 'text',
|
|
1110
|
+
admin: {
|
|
1111
|
+
description: 'Link button text (defaults to "Learn More")',
|
|
1112
|
+
},
|
|
1113
|
+
},
|
|
1114
|
+
],
|
|
1115
|
+
},
|
|
1116
|
+
{
|
|
1117
|
+
name: 'columns',
|
|
1118
|
+
type: 'number',
|
|
1119
|
+
defaultValue: 3,
|
|
1120
|
+
min: 1,
|
|
1121
|
+
max: 4,
|
|
1122
|
+
admin: {
|
|
1123
|
+
description: 'Number of columns (responsive)',
|
|
1124
|
+
},
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
name: 'spacing',
|
|
1128
|
+
type: 'select',
|
|
1129
|
+
defaultValue: 'medium',
|
|
1130
|
+
options: [
|
|
1131
|
+
{ label: 'Tiny', value: 'tiny' },
|
|
1132
|
+
{ label: 'Small', value: 'small' },
|
|
1133
|
+
{ label: 'Medium', value: 'medium' },
|
|
1134
|
+
{ label: 'Large', value: 'large' },
|
|
1135
|
+
{ label: 'Huge', value: 'huge' },
|
|
1136
|
+
],
|
|
1137
|
+
admin: {
|
|
1138
|
+
description: 'Space between cards',
|
|
1139
|
+
},
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
name: 'cardVariant',
|
|
1143
|
+
type: 'select',
|
|
1144
|
+
defaultValue: 'outlined',
|
|
1145
|
+
options: [
|
|
1146
|
+
{ label: 'Outlined', value: 'outlined' },
|
|
1147
|
+
{ label: 'Elevated', value: 'elevation' },
|
|
1148
|
+
{ label: 'Filled', value: 'filled' },
|
|
1149
|
+
],
|
|
1150
|
+
admin: {
|
|
1151
|
+
description: 'Card visual style',
|
|
1152
|
+
},
|
|
1153
|
+
},
|
|
1154
|
+
...commonStyleFields,
|
|
1155
|
+
],
|
|
1156
|
+
};
|
|
1157
|
+
/**
|
|
1158
|
+
* Form Block - References a reusable form from Forms collection
|
|
1159
|
+
* Submissions are saved to FormSubmissions collection
|
|
1160
|
+
*
|
|
1161
|
+
* AI-First: Forms can be managed via /api/forms endpoints
|
|
1162
|
+
*/
|
|
1163
|
+
export const FormBlock = {
|
|
1164
|
+
slug: 'form',
|
|
1165
|
+
labels: {
|
|
1166
|
+
singular: 'Form',
|
|
1167
|
+
plural: 'Forms',
|
|
1168
|
+
},
|
|
1169
|
+
admin: {
|
|
1170
|
+
components: {
|
|
1171
|
+
Label: {
|
|
1172
|
+
path: '/src/admin/components/BlockRowLabel#BlockRowLabel',
|
|
1173
|
+
clientProps: {},
|
|
1174
|
+
},
|
|
1175
|
+
},
|
|
1176
|
+
},
|
|
1177
|
+
fields: [
|
|
1178
|
+
{
|
|
1179
|
+
name: 'blockName',
|
|
1180
|
+
type: 'text',
|
|
1181
|
+
admin: {
|
|
1182
|
+
description: 'Optional custom name for this block',
|
|
1183
|
+
},
|
|
1184
|
+
},
|
|
1185
|
+
{
|
|
1186
|
+
name: 'form',
|
|
1187
|
+
type: 'relationship',
|
|
1188
|
+
relationTo: 'forms',
|
|
1189
|
+
required: true,
|
|
1190
|
+
admin: {
|
|
1191
|
+
description: 'Select a form from the Forms collection',
|
|
1192
|
+
},
|
|
1193
|
+
},
|
|
1194
|
+
{
|
|
1195
|
+
name: 'overrideHeading',
|
|
1196
|
+
type: 'text',
|
|
1197
|
+
admin: {
|
|
1198
|
+
description: 'Override the form heading for this instance (optional)',
|
|
1199
|
+
},
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
name: 'overrideDescription',
|
|
1203
|
+
type: 'textarea',
|
|
1204
|
+
admin: {
|
|
1205
|
+
description: 'Override the form description for this instance (optional)',
|
|
1206
|
+
},
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
name: 'overrideSubmitButtonText',
|
|
1210
|
+
type: 'text',
|
|
1211
|
+
admin: {
|
|
1212
|
+
description: 'Override the submit button text for this instance (optional)',
|
|
1213
|
+
},
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
name: 'overrideSuccessMessage',
|
|
1217
|
+
type: 'text',
|
|
1218
|
+
admin: {
|
|
1219
|
+
description: 'Override the success message for this instance (optional)',
|
|
1220
|
+
},
|
|
1221
|
+
},
|
|
1222
|
+
...commonStyleFields,
|
|
1223
|
+
],
|
|
1224
|
+
};
|
|
1225
|
+
/**
|
|
1226
|
+
* All content blocks - export as array for easy reuse
|
|
1227
|
+
*/
|
|
1228
|
+
export const contentBlocks = [
|
|
1229
|
+
HeroBlock,
|
|
1230
|
+
TextSectionBlock,
|
|
1231
|
+
FeatureGridBlock,
|
|
1232
|
+
CTASectionBlock,
|
|
1233
|
+
ImageBlock,
|
|
1234
|
+
SpacerBlock,
|
|
1235
|
+
CodeBlock,
|
|
1236
|
+
ProductGridBlock,
|
|
1237
|
+
AccordionBlock,
|
|
1238
|
+
CardGridBlock,
|
|
1239
|
+
FormBlock,
|
|
1240
|
+
];
|
|
1241
|
+
//# sourceMappingURL=ContentBlocks.js.map
|