domma-cms 0.2.1 → 0.5.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/README.md +3 -3
- package/admin/css/admin.css +1 -1200
- package/admin/dist/domma/domma-tools.css +2313 -0
- package/admin/dist/domma/domma-tools.min.js +10 -0
- package/admin/index.html +4 -0
- package/admin/js/api.js +1 -242
- package/admin/js/app.js +9 -279
- package/admin/js/config/sidebar-config.js +1 -115
- package/admin/js/lib/card.js +1 -63
- package/admin/js/lib/image-editor.js +1 -869
- package/admin/js/lib/markdown-toolbar.js +54 -421
- package/admin/js/templates/action-editor.html +171 -0
- package/admin/js/templates/actions-list.html +19 -0
- package/admin/js/templates/api-reference.html +1411 -0
- package/admin/js/templates/block-editor.html +158 -0
- package/admin/js/templates/blocks.html +8 -0
- package/admin/js/templates/collection-editor.html +47 -0
- package/admin/js/templates/collection-entries.html +3 -0
- package/admin/js/templates/collections.html +51 -4
- package/admin/js/templates/documentation.html +258 -0
- package/admin/js/templates/form-editor.html +238 -0
- package/{plugins/form-builder/admin → admin/js}/templates/form-submissions.html +30 -30
- package/{plugins/form-builder/admin/templates/forms-list.html → admin/js/templates/forms.html} +17 -17
- package/admin/js/templates/layouts.html +44 -7
- package/admin/js/templates/login.html +29 -4
- package/admin/js/templates/my-profile.html +17 -0
- package/admin/js/templates/page-editor.html +48 -0
- package/admin/js/templates/pages.html +6 -1
- package/admin/js/templates/pro-docs.html +259 -0
- package/admin/js/templates/role-editor.html +59 -0
- package/admin/js/templates/roles.html +10 -0
- package/admin/js/templates/settings.html +137 -18
- package/admin/js/templates/tutorials.html +81 -0
- package/admin/js/templates/user-editor.html +7 -0
- package/admin/js/templates/users.html +3 -1
- package/admin/js/templates/view-editor.html +201 -0
- package/admin/js/templates/view-preview.html +51 -0
- package/admin/js/templates/views-list.html +19 -0
- package/admin/js/views/action-editor.js +1 -0
- package/admin/js/views/actions-list.js +1 -0
- package/admin/js/views/api-reference.js +1 -0
- package/admin/js/views/block-editor.js +8 -0
- package/admin/js/views/blocks.js +4 -0
- package/admin/js/views/collection-editor.js +3 -487
- package/admin/js/views/collection-entries.js +1 -484
- package/admin/js/views/collections.js +1 -153
- package/admin/js/views/dashboard.js +1 -56
- package/admin/js/views/documentation.js +1 -12
- package/admin/js/views/form-editor.js +8 -0
- package/admin/js/views/form-submissions.js +1 -0
- package/admin/js/views/forms.js +1 -0
- package/admin/js/views/index.js +1 -39
- package/admin/js/views/layouts.js +9 -42
- package/admin/js/views/login.js +7 -251
- package/admin/js/views/media.js +1 -240
- package/admin/js/views/my-profile.js +1 -0
- package/admin/js/views/navigation.js +14 -212
- package/admin/js/views/page-editor.js +72 -661
- package/admin/js/views/pages.js +5 -72
- package/admin/js/views/plugins.js +13 -90
- package/admin/js/views/pro-docs.js +1 -0
- package/admin/js/views/role-editor.js +1 -0
- package/admin/js/views/roles.js +4 -0
- package/admin/js/views/settings.js +3 -199
- package/admin/js/views/tutorials.js +1 -12
- package/admin/js/views/user-editor.js +1 -88
- package/admin/js/views/users.js +4 -76
- package/admin/js/views/view-editor.js +1 -0
- package/admin/js/views/view-preview.js +1 -0
- package/admin/js/views/views-list.js +1 -0
- package/bin/cli.js +1 -1
- package/config/auth.json +2 -17
- package/config/connections.json.bak +9 -0
- package/config/connections.json.example +9 -0
- package/config/navigation.json +15 -0
- package/config/plugins.json +19 -29
- package/config/server.json +6 -6
- package/config/site.json +17 -6
- package/package.json +24 -10
- package/plugins/domma-effects/public/celebrations/core/canvas.js +2 -104
- package/plugins/domma-effects/public/celebrations/core/particles.js +1 -144
- package/plugins/domma-effects/public/celebrations/core/physics.js +1 -166
- package/plugins/domma-effects/public/celebrations/index.js +1 -535
- package/plugins/domma-effects/public/celebrations/themes/christmas.js +1 -1805
- package/plugins/domma-effects/public/celebrations/themes/guy-fawkes.js +1 -1477
- package/plugins/domma-effects/public/celebrations/themes/halloween.js +1 -1837
- package/plugins/domma-effects/public/celebrations/themes/st-andrews.js +1 -1175
- package/plugins/domma-effects/public/celebrations/themes/st-davids.js +1 -1258
- package/plugins/domma-effects/public/celebrations/themes/st-georges.js +1 -1754
- package/plugins/domma-effects/public/celebrations/themes/st-patricks.js +1 -1290
- package/plugins/domma-effects/public/celebrations/themes/valentines.js +1 -1361
- package/plugins/example-analytics/stats.json +21 -12
- package/plugins/theme-roller/admin/templates/theme-roller.html +71 -0
- package/plugins/theme-roller/admin/views/theme-roller-view.js +403 -0
- package/plugins/theme-roller/config.js +1 -0
- package/plugins/theme-roller/plugin.js +233 -0
- package/plugins/theme-roller/plugin.json +31 -0
- package/plugins/theme-roller/public/active-theme.css +0 -0
- package/plugins/theme-roller/public/inject-head-late.html +1 -0
- package/public/css/forms.css +1 -0
- package/public/css/site.css +1 -302
- package/public/js/btt.js +1 -90
- package/public/js/cookie-consent.js +1 -61
- package/public/js/form-logic-engine.js +1 -0
- package/public/js/forms.js +1 -0
- package/public/js/site.js +1 -204
- package/scripts/build.js +194 -129
- package/scripts/pro.js +254 -0
- package/scripts/reset.js +33 -8
- package/scripts/seed.js +343 -78
- package/scripts/setup.js +5 -4
- package/server/middleware/auth.js +136 -97
- package/server/routes/api/actions.js +200 -0
- package/server/routes/api/auth.js +292 -116
- package/server/routes/api/blocks.js +84 -0
- package/server/routes/api/collections.js +88 -23
- package/{plugins/form-builder/plugin.js → server/routes/api/forms.js} +483 -505
- package/server/routes/api/layouts.js +49 -25
- package/server/routes/api/media.js +118 -93
- package/server/routes/api/navigation.js +40 -37
- package/server/routes/api/pages.js +132 -118
- package/server/routes/api/plugins.js +6 -3
- package/server/routes/api/settings.js +104 -89
- package/server/routes/api/users.js +27 -21
- package/server/routes/api/views.js +148 -0
- package/server/routes/public.js +124 -108
- package/server/server.js +269 -173
- package/server/services/actions.js +387 -0
- package/server/services/adapterRegistry.js +98 -0
- package/server/services/adapters/FileAdapter.js +192 -0
- package/server/services/adapters/MongoAdapter.js +220 -0
- package/server/services/blocks.js +162 -0
- package/server/services/collections.js +74 -86
- package/server/services/connectionManager.js +102 -0
- package/server/services/content.js +312 -307
- package/{plugins/form-builder → server/services}/email.js +126 -103
- package/server/services/forms.js +173 -0
- package/server/services/markdown.js +1378 -648
- package/server/services/permissionRegistry.js +173 -0
- package/server/services/presetCollections.js +251 -0
- package/server/services/renderer.js +75 -1
- package/server/services/roles.js +227 -0
- package/server/services/rowAccess.js +104 -0
- package/server/services/userProfiles.js +199 -0
- package/server/services/users.js +281 -212
- package/server/services/views.js +280 -0
- package/server/templates/page.html +119 -113
- package/plugins/form-builder/admin/templates/form-editor.html +0 -171
- package/plugins/form-builder/admin/templates/form-settings.html +0 -29
- package/plugins/form-builder/admin/views/form-editor.js +0 -1442
- package/plugins/form-builder/admin/views/form-settings.js +0 -38
- package/plugins/form-builder/admin/views/form-submissions.js +0 -295
- package/plugins/form-builder/admin/views/forms-list.js +0 -164
- package/plugins/form-builder/config.js +0 -9
- package/plugins/form-builder/data/forms/consent.json +0 -104
- package/plugins/form-builder/data/forms/contact-details.json +0 -63
- package/plugins/form-builder/data/forms/contacts.json +0 -66
- package/plugins/form-builder/data/submissions/consent.json +0 -13
- package/plugins/form-builder/data/submissions/contact-details.json +0 -1
- package/plugins/form-builder/data/submissions/contacts.json +0 -26
- package/plugins/form-builder/plugin.json +0 -52
- package/plugins/form-builder/public/form-logic-engine.js +0 -568
- package/plugins/form-builder/public/inject-body.html +0 -352
- package/plugins/form-builder/public/inject-head.html +0 -58
- package/plugins/form-builder/public/package.json +0 -1
- package/scripts/copy-domma.js +0 -48
package/scripts/seed.js
CHANGED
|
@@ -121,7 +121,7 @@ Have a question, a project in mind, or just want to say hello? Fill in the form
|
|
|
121
121
|
|
|
122
122
|
## Send a message
|
|
123
123
|
|
|
124
|
-
<div data-form="
|
|
124
|
+
<div data-form="enquiries"></div>
|
|
125
125
|
|
|
126
126
|
[/col]
|
|
127
127
|
[col]
|
|
@@ -656,7 +656,7 @@ Paste this HTML anywhere in your Markdown to embed a form:
|
|
|
656
656
|
Replace \`your-form-slug\` with the slug from the Form Builder. Example:
|
|
657
657
|
|
|
658
658
|
\`\`\`html
|
|
659
|
-
<div data-form="
|
|
659
|
+
<div data-form="enquiries"></div>
|
|
660
660
|
\`\`\`
|
|
661
661
|
|
|
662
662
|
---
|
|
@@ -927,46 +927,120 @@ const COLLECTIONS = [
|
|
|
927
927
|
schema: {
|
|
928
928
|
slug: 'contacts',
|
|
929
929
|
title: 'Contacts',
|
|
930
|
-
description: '
|
|
930
|
+
description: 'People and their contact information.',
|
|
931
931
|
fields: [
|
|
932
|
-
{name: 'full_name',
|
|
933
|
-
{name: 'email_address',
|
|
934
|
-
{name: 'phone_number',
|
|
935
|
-
|
|
936
|
-
|
|
932
|
+
{name: 'full_name', label: 'Full Name', type: 'text', required: true},
|
|
933
|
+
{name: 'email_address', label: 'Email', type: 'text', required: true},
|
|
934
|
+
{name: 'phone_number', label: 'Phone', type: 'text'}
|
|
935
|
+
],
|
|
936
|
+
api: {
|
|
937
|
+
create: {enabled: true, access: 'public'},
|
|
938
|
+
read: {enabled: true, access: 'admin'},
|
|
939
|
+
update: {enabled: false, access: 'admin'},
|
|
940
|
+
delete: {enabled: false, access: 'admin'}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
slug: 'enquiries',
|
|
946
|
+
schema: {
|
|
947
|
+
slug: 'enquiries',
|
|
948
|
+
title: 'Enquiries',
|
|
949
|
+
description: 'Messages and enquiries from website visitors.',
|
|
950
|
+
fields: [
|
|
951
|
+
{name: 'full_name', label: 'Full Name', type: 'text', required: true},
|
|
952
|
+
{name: 'email', label: 'Email', type: 'text', required: true},
|
|
953
|
+
{name: 'phone', label: 'Phone', type: 'text'},
|
|
954
|
+
{
|
|
955
|
+
name: 'subject',
|
|
956
|
+
label: 'Subject',
|
|
957
|
+
type: 'select',
|
|
958
|
+
options: ['General Enquiry', 'Support', 'Sales', 'Partnership', 'Other'],
|
|
959
|
+
required: true
|
|
960
|
+
},
|
|
961
|
+
{name: 'message', label: 'Message', type: 'text', required: true}
|
|
962
|
+
],
|
|
963
|
+
api: {
|
|
964
|
+
create: {enabled: true, access: 'public'},
|
|
965
|
+
read: {enabled: true, access: 'admin'},
|
|
966
|
+
update: {enabled: false, access: 'admin'},
|
|
967
|
+
delete: {enabled: false, access: 'admin'}
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
},
|
|
971
|
+
{
|
|
972
|
+
slug: 'feedback',
|
|
973
|
+
schema: {
|
|
974
|
+
slug: 'feedback',
|
|
975
|
+
title: 'Feedback',
|
|
976
|
+
description: 'User feedback and ratings.',
|
|
977
|
+
fields: [
|
|
978
|
+
{name: 'name', label: 'Name', type: 'text', required: true},
|
|
979
|
+
{name: 'email', label: 'Email', type: 'text', required: true},
|
|
980
|
+
{
|
|
981
|
+
name: 'rating',
|
|
982
|
+
label: 'Rating',
|
|
983
|
+
type: 'select',
|
|
984
|
+
options: ['Excellent', 'Good', 'Average', 'Poor'],
|
|
985
|
+
required: true
|
|
986
|
+
},
|
|
987
|
+
{
|
|
988
|
+
name: 'category',
|
|
989
|
+
label: 'Category',
|
|
990
|
+
type: 'select',
|
|
991
|
+
options: ['General', 'Bug Report', 'Feature Request', 'Praise']
|
|
992
|
+
},
|
|
993
|
+
{name: 'subject', label: 'Subject', type: 'text'},
|
|
994
|
+
{name: 'message', label: 'Message', type: 'text', required: true}
|
|
995
|
+
],
|
|
996
|
+
api: {
|
|
997
|
+
create: {enabled: true, access: 'public'},
|
|
998
|
+
read: {enabled: true, access: 'admin'},
|
|
999
|
+
update: {enabled: false, access: 'admin'},
|
|
1000
|
+
delete: {enabled: false, access: 'admin'}
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
},
|
|
1004
|
+
{
|
|
1005
|
+
slug: 'to-do',
|
|
1006
|
+
schema: {
|
|
1007
|
+
slug: 'to-do',
|
|
1008
|
+
title: 'To-Do',
|
|
1009
|
+
description: 'Task tracking with priorities and due dates.',
|
|
1010
|
+
fields: [
|
|
1011
|
+
{name: 'title', label: 'Title', type: 'text', required: true},
|
|
1012
|
+
{name: 'description', label: 'Description', type: 'text'},
|
|
1013
|
+
{name: 'status', label: 'Status', type: 'select', options: ['Pending', 'In Progress', 'Done'], required: true},
|
|
1014
|
+
{name: 'priority', label: 'Priority', type: 'select', options: ['Low', 'Medium', 'High']},
|
|
1015
|
+
{name: 'due_date', label: 'Due Date', type: 'text'},
|
|
1016
|
+
{name: 'assigned_to', label: 'Assigned To', type: 'text'}
|
|
937
1017
|
],
|
|
938
1018
|
api: {
|
|
939
1019
|
create: {enabled: false, access: 'admin'},
|
|
940
|
-
read: {enabled:
|
|
1020
|
+
read: {enabled: false, access: 'admin'},
|
|
941
1021
|
update: {enabled: false, access: 'admin'},
|
|
942
1022
|
delete: {enabled: false, access: 'admin'}
|
|
943
|
-
}
|
|
944
|
-
createdAt: now,
|
|
945
|
-
updatedAt: now
|
|
1023
|
+
}
|
|
946
1024
|
}
|
|
947
1025
|
},
|
|
948
1026
|
{
|
|
949
|
-
slug: '
|
|
1027
|
+
slug: 'notes',
|
|
950
1028
|
schema: {
|
|
951
|
-
slug: '
|
|
952
|
-
title: '
|
|
953
|
-
description: '
|
|
1029
|
+
slug: 'notes',
|
|
1030
|
+
title: 'Notes',
|
|
1031
|
+
description: 'Free-form notes with categories and tags.',
|
|
954
1032
|
fields: [
|
|
955
|
-
{name: '
|
|
956
|
-
{name: '
|
|
957
|
-
{name: '
|
|
958
|
-
{name: '
|
|
959
|
-
{name: 'ended_at', type: 'date', label: 'End Date', required: true},
|
|
960
|
-
{name: 'notes', type: 'textarea', label: 'Notes', required: false}
|
|
1033
|
+
{name: 'title', label: 'Title', type: 'text', required: true},
|
|
1034
|
+
{name: 'content', label: 'Content', type: 'text', required: true},
|
|
1035
|
+
{name: 'category', label: 'Category', type: 'select', options: ['General', 'Idea', 'Reminder', 'Reference']},
|
|
1036
|
+
{name: 'tags', label: 'Tags', type: 'text'}
|
|
961
1037
|
],
|
|
962
1038
|
api: {
|
|
963
1039
|
create: {enabled: false, access: 'admin'},
|
|
964
|
-
read: {enabled:
|
|
1040
|
+
read: {enabled: false, access: 'admin'},
|
|
965
1041
|
update: {enabled: false, access: 'admin'},
|
|
966
1042
|
delete: {enabled: false, access: 'admin'}
|
|
967
|
-
}
|
|
968
|
-
createdAt: now,
|
|
969
|
-
updatedAt: now
|
|
1043
|
+
}
|
|
970
1044
|
}
|
|
971
1045
|
}
|
|
972
1046
|
];
|
|
@@ -977,123 +1051,313 @@ const COLLECTIONS = [
|
|
|
977
1051
|
|
|
978
1052
|
const FORMS = [
|
|
979
1053
|
{
|
|
980
|
-
slug: '
|
|
1054
|
+
slug: 'contacts',
|
|
1055
|
+
data: {
|
|
1056
|
+
slug: 'contacts',
|
|
1057
|
+
title: 'Contacts',
|
|
1058
|
+
description: 'Contact Information',
|
|
1059
|
+
fields: [
|
|
1060
|
+
{
|
|
1061
|
+
name: 'full_name',
|
|
1062
|
+
type: 'string',
|
|
1063
|
+
label: 'Full Name',
|
|
1064
|
+
required: false,
|
|
1065
|
+
placeholder: 'Full Name',
|
|
1066
|
+
helper: 'Full Name',
|
|
1067
|
+
minLength: 8,
|
|
1068
|
+
maxLength: 255
|
|
1069
|
+
},
|
|
1070
|
+
{type: 'spacer'},
|
|
1071
|
+
{
|
|
1072
|
+
name: 'phone_number',
|
|
1073
|
+
type: 'tel',
|
|
1074
|
+
label: 'Phone Number',
|
|
1075
|
+
required: false,
|
|
1076
|
+
placeholder: 'Phone Number',
|
|
1077
|
+
helper: 'Primary Phone Number'
|
|
1078
|
+
},
|
|
1079
|
+
{type: 'spacer'},
|
|
1080
|
+
{
|
|
1081
|
+
name: 'email_address',
|
|
1082
|
+
type: 'string',
|
|
1083
|
+
label: 'Email Address',
|
|
1084
|
+
required: false,
|
|
1085
|
+
placeholder: 'Email Address',
|
|
1086
|
+
helper: 'Email Address',
|
|
1087
|
+
minLength: 8,
|
|
1088
|
+
maxLength: 255
|
|
1089
|
+
}
|
|
1090
|
+
],
|
|
1091
|
+
settings: {
|
|
1092
|
+
submitText: 'Submit',
|
|
1093
|
+
successMessage: 'Thank you for your submission.',
|
|
1094
|
+
layout: 'stacked',
|
|
1095
|
+
honeypot: true,
|
|
1096
|
+
rateLimitPerMinute: 3
|
|
1097
|
+
},
|
|
1098
|
+
actions: {
|
|
1099
|
+
email: {enabled: false, recipients: '', subjectPrefix: '[Contacts]'},
|
|
1100
|
+
webhook: {enabled: false, url: '', method: 'POST'},
|
|
1101
|
+
collection: {enabled: true, slug: 'contacts'}
|
|
1102
|
+
},
|
|
1103
|
+
createdAt: now,
|
|
1104
|
+
updatedAt: now
|
|
1105
|
+
}
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
slug: 'enquiries',
|
|
981
1109
|
data: {
|
|
982
|
-
slug: '
|
|
983
|
-
title: '
|
|
984
|
-
description: '
|
|
1110
|
+
slug: 'enquiries',
|
|
1111
|
+
title: 'Enquiries',
|
|
1112
|
+
description: 'Get in touch with us',
|
|
985
1113
|
fields: [
|
|
986
1114
|
{
|
|
987
1115
|
name: 'full_name',
|
|
988
1116
|
type: 'string',
|
|
989
1117
|
label: 'Full Name',
|
|
990
1118
|
required: true,
|
|
991
|
-
placeholder: 'Your full name'
|
|
1119
|
+
placeholder: 'Your full name',
|
|
1120
|
+
helper: '',
|
|
1121
|
+
validation: {min: 2, max: 100}
|
|
992
1122
|
},
|
|
993
1123
|
{
|
|
994
1124
|
name: 'email',
|
|
995
|
-
type: '
|
|
1125
|
+
type: 'email',
|
|
996
1126
|
label: 'Email Address',
|
|
997
1127
|
required: true,
|
|
998
|
-
placeholder: '
|
|
1128
|
+
placeholder: 'your@email.com',
|
|
1129
|
+
helper: ''
|
|
999
1130
|
},
|
|
1000
1131
|
{
|
|
1001
1132
|
name: 'phone',
|
|
1002
1133
|
type: 'tel',
|
|
1003
1134
|
label: 'Phone Number',
|
|
1004
1135
|
required: false,
|
|
1005
|
-
placeholder: '+44 7700 000000'
|
|
1136
|
+
placeholder: '+44 7700 000000',
|
|
1137
|
+
helper: 'Optional'
|
|
1006
1138
|
},
|
|
1007
1139
|
{
|
|
1008
|
-
name: '
|
|
1009
|
-
type: '
|
|
1010
|
-
label: '
|
|
1011
|
-
required: true
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1140
|
+
name: 'subject',
|
|
1141
|
+
type: 'select',
|
|
1142
|
+
label: 'Subject',
|
|
1143
|
+
required: true,
|
|
1144
|
+
placeholder: 'Please select a subject',
|
|
1145
|
+
helper: '',
|
|
1146
|
+
options: [
|
|
1147
|
+
{value: 'general', label: 'General Enquiry'},
|
|
1148
|
+
{value: 'support', label: 'Support'},
|
|
1149
|
+
{value: 'sales', label: 'Sales'},
|
|
1150
|
+
{value: 'partnership', label: 'Partnership'},
|
|
1151
|
+
{value: 'other', label: 'Other'}
|
|
1152
|
+
]
|
|
1018
1153
|
},
|
|
1019
1154
|
{
|
|
1020
|
-
name: '
|
|
1155
|
+
name: 'message',
|
|
1021
1156
|
type: 'textarea',
|
|
1022
|
-
label: '
|
|
1023
|
-
required:
|
|
1024
|
-
placeholder: '
|
|
1157
|
+
label: 'Message',
|
|
1158
|
+
required: true,
|
|
1159
|
+
placeholder: 'How can we help you?',
|
|
1160
|
+
helper: '',
|
|
1161
|
+
rows: 4,
|
|
1162
|
+
validation: {min: 10, max: 2000}
|
|
1025
1163
|
}
|
|
1026
1164
|
],
|
|
1027
1165
|
settings: {
|
|
1028
|
-
submitText: '
|
|
1029
|
-
successMessage: '
|
|
1166
|
+
submitText: 'Send Message',
|
|
1167
|
+
successMessage: 'Thanks for reaching out! We\'ll get back to you shortly.',
|
|
1030
1168
|
layout: 'stacked',
|
|
1031
1169
|
honeypot: true,
|
|
1032
1170
|
rateLimitPerMinute: 3
|
|
1033
1171
|
},
|
|
1034
1172
|
actions: {
|
|
1035
|
-
email: {enabled: false, recipients: '', subjectPrefix: '[
|
|
1173
|
+
email: {enabled: false, recipients: '', subjectPrefix: '[enquiries]'},
|
|
1036
1174
|
webhook: {enabled: false, url: '', method: 'POST'},
|
|
1037
|
-
collection: {enabled: true, slug: '
|
|
1175
|
+
collection: {enabled: true, slug: 'enquiries'}
|
|
1038
1176
|
},
|
|
1039
1177
|
createdAt: now,
|
|
1040
1178
|
updatedAt: now
|
|
1041
1179
|
}
|
|
1042
1180
|
},
|
|
1043
1181
|
{
|
|
1044
|
-
slug: '
|
|
1182
|
+
slug: 'feedback',
|
|
1045
1183
|
data: {
|
|
1046
|
-
slug: '
|
|
1047
|
-
title: '
|
|
1048
|
-
description: '
|
|
1184
|
+
slug: 'feedback',
|
|
1185
|
+
title: 'Feedback',
|
|
1186
|
+
description: 'Share your feedback with us',
|
|
1049
1187
|
fields: [
|
|
1050
1188
|
{
|
|
1051
|
-
name: '
|
|
1189
|
+
name: 'name',
|
|
1052
1190
|
type: 'string',
|
|
1053
|
-
label: '
|
|
1191
|
+
label: 'Your Name',
|
|
1054
1192
|
required: true,
|
|
1055
|
-
placeholder: '
|
|
1193
|
+
placeholder: 'Please enter your full name',
|
|
1194
|
+
helper: 'Please enter your full name',
|
|
1195
|
+
validation: {min: 2, max: 100}
|
|
1056
1196
|
},
|
|
1057
1197
|
{
|
|
1058
|
-
name: '
|
|
1059
|
-
type: '
|
|
1198
|
+
name: 'email',
|
|
1199
|
+
type: 'email',
|
|
1060
1200
|
label: 'Email Address',
|
|
1061
1201
|
required: true,
|
|
1062
|
-
placeholder: '
|
|
1202
|
+
placeholder: 'your@email.com',
|
|
1203
|
+
helper: 'Please enter your email address'
|
|
1063
1204
|
},
|
|
1064
1205
|
{
|
|
1065
|
-
name: '
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1206
|
+
name: 'rating', type: 'select', label: 'Overall Rating', required: true, helper: 'Tell us how we are doing!',
|
|
1207
|
+
options: [
|
|
1208
|
+
{value: 'none', label: 'Please Choose'},
|
|
1209
|
+
{value: 'excellent', label: 'Excellent'},
|
|
1210
|
+
{value: 'good', label: 'Good'},
|
|
1211
|
+
{value: 'average', label: 'Average'},
|
|
1212
|
+
{value: 'poor', label: 'Poor'}
|
|
1213
|
+
]
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
name: 'category',
|
|
1217
|
+
type: 'select',
|
|
1218
|
+
label: 'Category',
|
|
1219
|
+
required: true,
|
|
1220
|
+
placeholder: 'Please select a category',
|
|
1221
|
+
helper: '',
|
|
1222
|
+
options: [
|
|
1223
|
+
{value: 'general', label: 'General'},
|
|
1224
|
+
{value: 'bug-report', label: 'Bug Report'},
|
|
1225
|
+
{value: 'feature-request', label: 'Feature Request'},
|
|
1226
|
+
{value: 'praise', label: 'Praise'}
|
|
1227
|
+
]
|
|
1070
1228
|
},
|
|
1071
1229
|
{
|
|
1072
1230
|
name: 'subject',
|
|
1073
1231
|
type: 'string',
|
|
1074
1232
|
label: 'Subject',
|
|
1075
|
-
required:
|
|
1076
|
-
placeholder: '
|
|
1233
|
+
required: true,
|
|
1234
|
+
placeholder: 'Brief summary of your feedback',
|
|
1235
|
+
helper: '',
|
|
1236
|
+
validation: {max: 200}
|
|
1077
1237
|
},
|
|
1078
1238
|
{
|
|
1079
1239
|
name: 'message',
|
|
1080
1240
|
type: 'textarea',
|
|
1081
|
-
label: '
|
|
1241
|
+
label: 'Your Feedback',
|
|
1082
1242
|
required: true,
|
|
1083
|
-
placeholder: '
|
|
1243
|
+
placeholder: 'Please share your thoughts in detail…',
|
|
1244
|
+
helper: 'Please share your thoughts in detail…',
|
|
1245
|
+
rows: 4,
|
|
1246
|
+
validation: {min: 10, max: 2000}
|
|
1084
1247
|
}
|
|
1085
1248
|
],
|
|
1086
1249
|
settings: {
|
|
1087
|
-
submitText: '
|
|
1088
|
-
successMessage: 'Thank you for your
|
|
1250
|
+
submitText: 'Submit Feedback',
|
|
1251
|
+
successMessage: 'Thank you for your feedback! We appreciate you taking the time.',
|
|
1089
1252
|
layout: 'stacked',
|
|
1090
1253
|
honeypot: true,
|
|
1091
1254
|
rateLimitPerMinute: 3
|
|
1092
1255
|
},
|
|
1093
1256
|
actions: {
|
|
1094
|
-
email: {enabled:
|
|
1257
|
+
email: {enabled: true, recipients: '', subjectPrefix: '[feedback]'},
|
|
1095
1258
|
webhook: {enabled: false, url: '', method: 'POST'},
|
|
1096
|
-
collection: {enabled: true, slug: '
|
|
1259
|
+
collection: {enabled: true, slug: 'feedback'}
|
|
1260
|
+
},
|
|
1261
|
+
createdAt: now,
|
|
1262
|
+
updatedAt: now
|
|
1263
|
+
}
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
slug: 'to-do',
|
|
1267
|
+
data: {
|
|
1268
|
+
slug: 'to-do',
|
|
1269
|
+
title: 'To-Do',
|
|
1270
|
+
description: 'Task tracking with status, priority, and due dates.',
|
|
1271
|
+
fields: [
|
|
1272
|
+
{name: 'title', type: 'string', label: 'Title', required: true, placeholder: 'Task title'},
|
|
1273
|
+
{
|
|
1274
|
+
name: 'description',
|
|
1275
|
+
type: 'textarea',
|
|
1276
|
+
label: 'Description',
|
|
1277
|
+
required: false,
|
|
1278
|
+
placeholder: 'Task details…',
|
|
1279
|
+
rows: 3
|
|
1280
|
+
},
|
|
1281
|
+
{
|
|
1282
|
+
name: 'status', type: 'select', label: 'Status', required: true,
|
|
1283
|
+
options: [
|
|
1284
|
+
{value: 'pending', label: 'Pending'},
|
|
1285
|
+
{value: 'in-progress', label: 'In Progress'},
|
|
1286
|
+
{value: 'done', label: 'Done'}
|
|
1287
|
+
]
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
name: 'priority', type: 'select', label: 'Priority', required: false,
|
|
1291
|
+
options: [
|
|
1292
|
+
{value: 'low', label: 'Low'},
|
|
1293
|
+
{value: 'medium', label: 'Medium'},
|
|
1294
|
+
{value: 'high', label: 'High'}
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1297
|
+
{name: 'due_date', type: 'date', label: 'Due Date', required: false},
|
|
1298
|
+
{name: 'assigned_to', type: 'string', label: 'Assigned To', required: false, placeholder: 'Name or email'}
|
|
1299
|
+
],
|
|
1300
|
+
settings: {
|
|
1301
|
+
submitText: 'Add Task',
|
|
1302
|
+
successMessage: 'Task added successfully.',
|
|
1303
|
+
layout: 'stacked',
|
|
1304
|
+
honeypot: true,
|
|
1305
|
+
rateLimitPerMinute: 3
|
|
1306
|
+
},
|
|
1307
|
+
actions: {
|
|
1308
|
+
email: {enabled: false, recipients: '', subjectPrefix: '[to-do]'},
|
|
1309
|
+
webhook: {enabled: false, url: '', method: 'POST'},
|
|
1310
|
+
collection: {enabled: true, slug: 'to-do'}
|
|
1311
|
+
},
|
|
1312
|
+
createdAt: now,
|
|
1313
|
+
updatedAt: now
|
|
1314
|
+
}
|
|
1315
|
+
},
|
|
1316
|
+
{
|
|
1317
|
+
slug: 'notes',
|
|
1318
|
+
data: {
|
|
1319
|
+
slug: 'notes',
|
|
1320
|
+
title: 'Notes',
|
|
1321
|
+
description: 'Free-form notes with categories and tags.',
|
|
1322
|
+
fields: [
|
|
1323
|
+
{name: 'title', type: 'string', label: 'Title', required: true, placeholder: 'Note title'},
|
|
1324
|
+
{
|
|
1325
|
+
name: 'content',
|
|
1326
|
+
type: 'textarea',
|
|
1327
|
+
label: 'Content',
|
|
1328
|
+
required: true,
|
|
1329
|
+
placeholder: 'Write your note here…',
|
|
1330
|
+
rows: 5
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
name: 'category', type: 'select', label: 'Category', required: false,
|
|
1334
|
+
options: [
|
|
1335
|
+
{value: 'general', label: 'General'},
|
|
1336
|
+
{value: 'idea', label: 'Idea'},
|
|
1337
|
+
{value: 'reminder', label: 'Reminder'},
|
|
1338
|
+
{value: 'reference', label: 'Reference'}
|
|
1339
|
+
]
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
name: 'tags',
|
|
1343
|
+
type: 'string',
|
|
1344
|
+
label: 'Tags',
|
|
1345
|
+
required: false,
|
|
1346
|
+
placeholder: 'Comma-separated tags',
|
|
1347
|
+
helper: 'Separate tags with commas'
|
|
1348
|
+
}
|
|
1349
|
+
],
|
|
1350
|
+
settings: {
|
|
1351
|
+
submitText: 'Save Note',
|
|
1352
|
+
successMessage: 'Note saved successfully.',
|
|
1353
|
+
layout: 'stacked',
|
|
1354
|
+
honeypot: true,
|
|
1355
|
+
rateLimitPerMinute: 3
|
|
1356
|
+
},
|
|
1357
|
+
actions: {
|
|
1358
|
+
email: {enabled: false, recipients: '', subjectPrefix: '[notes]'},
|
|
1359
|
+
webhook: {enabled: false, url: '', method: 'POST'},
|
|
1360
|
+
collection: {enabled: true, slug: 'notes'}
|
|
1097
1361
|
},
|
|
1098
1362
|
createdAt: now,
|
|
1099
1363
|
updatedAt: now
|
|
@@ -1166,11 +1430,12 @@ for (const form of FORMS) {
|
|
|
1166
1430
|
await writeFile(subsFile, '[]\n', {encoding: 'utf8', flag: 'wx'});
|
|
1167
1431
|
} catch { /* already exists */
|
|
1168
1432
|
}
|
|
1169
|
-
|
|
1433
|
+
const colSlug = form.data.actions?.collection?.slug ?? '—';
|
|
1434
|
+
console.log(` ✓ form: ${form.slug} → collection: ${colSlug}`);
|
|
1170
1435
|
}
|
|
1171
1436
|
|
|
1172
1437
|
console.log('');
|
|
1173
1438
|
console.log(` ✓ Seed complete — ${PAGES.length} pages, ${COLLECTIONS.length} collection(s), ${FORMS.length} form(s).`);
|
|
1174
|
-
console.log(' Visit your site at http://localhost:
|
|
1175
|
-
console.log(' Resources section available at http://localhost:
|
|
1439
|
+
console.log(' Visit your site at http://localhost:4096/');
|
|
1440
|
+
console.log(' Resources section available at http://localhost:4096/resources');
|
|
1176
1441
|
console.log('');
|
package/scripts/setup.js
CHANGED
|
@@ -38,10 +38,11 @@ const THEMES = [
|
|
|
38
38
|
'royal-dark', 'royal-light',
|
|
39
39
|
'lemon-dark', 'lemon-light',
|
|
40
40
|
'silver-dark', 'silver-light',
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
'grayve-dark', 'grayve-light',
|
|
42
|
+
'mint-dark', 'mint-light',
|
|
43
|
+
'christmas-dark', 'christmas-light',
|
|
44
|
+
'unicorn-dark', 'unicorn-light',
|
|
45
|
+
'dreamy-dark', 'dreamy-light',
|
|
45
46
|
];
|
|
46
47
|
|
|
47
48
|
// ---------------------------------------------------------------------------
|