@brightsideoy/kama 0.1.0-alpha.1 → 0.1.0-alpha.100
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/bin/cli.js +343 -0
- package/defaults/definitions/block-layouts/three-column.yaml +20 -0
- package/defaults/definitions/block-layouts/two-column.yaml +29 -0
- package/defaults/definitions/blocks/button.yaml +15 -0
- package/defaults/definitions/blocks/header.yaml +15 -0
- package/defaults/definitions/blocks/header_image.yaml +22 -0
- package/defaults/definitions/blocks/hero.yaml +27 -0
- package/defaults/definitions/blocks/image_card.yaml +57 -0
- package/defaults/definitions/blocks/single_image.yaml +28 -0
- package/defaults/definitions/blocks/text.yaml +16 -0
- package/defaults/definitions/channels/ecommerce.yaml +24 -0
- package/defaults/definitions/channels/website.yaml +32 -0
- package/defaults/definitions/field-sets/access.yaml +29 -0
- package/defaults/definitions/field-sets/channel-base.yaml +31 -0
- package/defaults/definitions/field-sets/comments.yaml +11 -0
- package/defaults/definitions/field-sets/content-block.yaml +46 -0
- package/defaults/definitions/field-sets/page-base.yaml +49 -0
- package/defaults/definitions/field-sets/page-meta.yaml +29 -0
- package/defaults/definitions/field-sets/page-social.yaml +80 -0
- package/defaults/definitions/field-sets/tree-base.yaml +31 -0
- package/defaults/definitions/field-sets/visibility.yaml +8 -0
- package/defaults/definitions/node-layouts/landing-page.yml +22 -0
- package/defaults/definitions/node-layouts/single-column.yml +38 -0
- package/defaults/definitions/node-layouts/three-column.yml +41 -0
- package/defaults/definitions/node-layouts/two-column.yml +40 -0
- package/defaults/definitions/nodes/address.yaml +32 -0
- package/defaults/definitions/nodes/article.yaml +43 -0
- package/defaults/definitions/nodes/event.yaml +49 -0
- package/defaults/definitions/nodes/external-link.yaml +26 -0
- package/defaults/definitions/nodes/page.yaml +65 -0
- package/defaults/definitions/nodes/person.yaml +37 -0
- package/defaults/definitions/nodes/product.yaml +86 -0
- package/defaults/definitions/trees/navigation.yaml +29 -0
- package/defaults/definitions/trees/social-links.yaml +9 -0
- package/definitions/_page.yaml +52 -0
- package/definitions/editor/button.ts +11 -0
- package/definitions/editor/default.ts +21 -0
- package/definitions/editor/header.ts +36 -0
- package/definitions/editor/minimal.ts +15 -0
- package/definitions/validators/iban.ts +12 -0
- package/definitions/validators/magic-word.ts +7 -0
- package/dist/assets/index-10GEw0KY.css +1 -0
- package/dist/assets/index-u699KJW2.js +1392 -0
- package/dist/index.html +13 -0
- package/dist/index.js +7922 -1022
- package/dist/media/kama/2026/08/17a098c92bc54ea4b4441e531a34575b.jpg +0 -0
- package/dist/media/kama/2026/08/3e9ae457dd23461680cc699f42d07cf0.jpg +0 -0
- package/dist/media/kama/2026/08/8e5b3a2fd194459f9b962f8e12928bf0.jpg +0 -0
- package/dist/media/kama/2026/08/8ea5c21026cd4944bdf78c99fe2544a9.jpg +0 -0
- package/package.json +25 -11
- package/schema.sql +221 -0
- package/scripts/bundle-definitions.js +176 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: channel-base
|
|
2
|
+
label: Channel Base Properties
|
|
3
|
+
|
|
4
|
+
fields:
|
|
5
|
+
- id:
|
|
6
|
+
label: Internal ID
|
|
7
|
+
type: hidden
|
|
8
|
+
dbType: integer
|
|
9
|
+
primaryKey: true
|
|
10
|
+
|
|
11
|
+
- label:
|
|
12
|
+
label: Channel Name
|
|
13
|
+
type: text
|
|
14
|
+
dbType: text
|
|
15
|
+
public: true
|
|
16
|
+
rules:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- key:
|
|
20
|
+
label: "API Identifier"
|
|
21
|
+
type: slug
|
|
22
|
+
dbType: text
|
|
23
|
+
public: true
|
|
24
|
+
index: true
|
|
25
|
+
linkedTo: label
|
|
26
|
+
placeholder: "e.g. main-site, store-eu"
|
|
27
|
+
rules:
|
|
28
|
+
required: true
|
|
29
|
+
unique: true
|
|
30
|
+
pattern: "^[a-z0-9-_]+$"
|
|
31
|
+
customMessage: "API key must be unique and contain only lowercase letters, numbers, hyphens, or underscores."
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# definitions/field-sets/content-block.yaml
|
|
2
|
+
id: content-block
|
|
3
|
+
label: Content Block Base Properties
|
|
4
|
+
|
|
5
|
+
fields:
|
|
6
|
+
- id:
|
|
7
|
+
label: ID
|
|
8
|
+
type: hidden
|
|
9
|
+
dbType: text
|
|
10
|
+
primaryKey: true
|
|
11
|
+
|
|
12
|
+
- contentId:
|
|
13
|
+
label: Node ID
|
|
14
|
+
type: text
|
|
15
|
+
dbType: text
|
|
16
|
+
rules:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- sortOrder:
|
|
20
|
+
label: Sort Order
|
|
21
|
+
type: number
|
|
22
|
+
dbType: integer
|
|
23
|
+
rules:
|
|
24
|
+
required: true
|
|
25
|
+
|
|
26
|
+
- elementType:
|
|
27
|
+
label: Element Component Type
|
|
28
|
+
type: text
|
|
29
|
+
dbType: text
|
|
30
|
+
rules:
|
|
31
|
+
required: true
|
|
32
|
+
|
|
33
|
+
- dataJson:
|
|
34
|
+
label: Content Field Data
|
|
35
|
+
type: json
|
|
36
|
+
dbType: json
|
|
37
|
+
rules:
|
|
38
|
+
required: true
|
|
39
|
+
|
|
40
|
+
- region:
|
|
41
|
+
label: Grid Region
|
|
42
|
+
type: text
|
|
43
|
+
dbType: text
|
|
44
|
+
default: "main"
|
|
45
|
+
rules:
|
|
46
|
+
required: true
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# definitions/field-sets/page-base.yaml
|
|
2
|
+
id: page-base
|
|
3
|
+
label: Base Page Properties
|
|
4
|
+
|
|
5
|
+
fields:
|
|
6
|
+
- id:
|
|
7
|
+
label: ID
|
|
8
|
+
type: hidden
|
|
9
|
+
dbType: text
|
|
10
|
+
primaryKey: true
|
|
11
|
+
public: true
|
|
12
|
+
|
|
13
|
+
- channelId:
|
|
14
|
+
label: Channel ID
|
|
15
|
+
type: hidden
|
|
16
|
+
dbType: text
|
|
17
|
+
public: true
|
|
18
|
+
index: true
|
|
19
|
+
|
|
20
|
+
- nodeType:
|
|
21
|
+
label: Type
|
|
22
|
+
type: select
|
|
23
|
+
dbType: text
|
|
24
|
+
default: "page"
|
|
25
|
+
public: true
|
|
26
|
+
position: sidebar
|
|
27
|
+
rules:
|
|
28
|
+
required: true
|
|
29
|
+
|
|
30
|
+
- title:
|
|
31
|
+
label: Page Title
|
|
32
|
+
type: text
|
|
33
|
+
dbType: text
|
|
34
|
+
public: true
|
|
35
|
+
rules:
|
|
36
|
+
required: true
|
|
37
|
+
|
|
38
|
+
- slug:
|
|
39
|
+
label: URL Slug
|
|
40
|
+
type: slug
|
|
41
|
+
linkedTo: title
|
|
42
|
+
dbType: text
|
|
43
|
+
public: true
|
|
44
|
+
index: true
|
|
45
|
+
rules:
|
|
46
|
+
required: true
|
|
47
|
+
uniqueSibling: true
|
|
48
|
+
pattern: "^[a-z0-9_-]+$"
|
|
49
|
+
customMessage: "Slug can only contain lowercase letters, numbers, hyphens, and underscores."
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
tab:
|
|
2
|
+
id: page-meta
|
|
3
|
+
label: "Meta"
|
|
4
|
+
|
|
5
|
+
fields:
|
|
6
|
+
metaDescription:
|
|
7
|
+
label: Meta Description
|
|
8
|
+
type: textarea
|
|
9
|
+
public: true
|
|
10
|
+
|
|
11
|
+
metaKeywords:
|
|
12
|
+
label: Meta Keywords
|
|
13
|
+
type: textarea
|
|
14
|
+
required: false
|
|
15
|
+
public: true
|
|
16
|
+
|
|
17
|
+
titlePrefix:
|
|
18
|
+
label: Title Prefix
|
|
19
|
+
type: text
|
|
20
|
+
required: false
|
|
21
|
+
public: true
|
|
22
|
+
inherits: titlePrefix
|
|
23
|
+
|
|
24
|
+
titleSuffix:
|
|
25
|
+
label: Title Suffix
|
|
26
|
+
type: text
|
|
27
|
+
required: false
|
|
28
|
+
public: true
|
|
29
|
+
inherits: titleSuffix
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
tab:
|
|
2
|
+
id: page-social
|
|
3
|
+
label: "Social"
|
|
4
|
+
|
|
5
|
+
fields:
|
|
6
|
+
# --- Facebook / Open Graph Texts ---
|
|
7
|
+
fbTitle:
|
|
8
|
+
label: "Facebook Title (og:title)"
|
|
9
|
+
type: text
|
|
10
|
+
inherits: title # 🔗 Syncs from SEO Title automatically
|
|
11
|
+
public: true
|
|
12
|
+
description: "The title of your article as it should appear on Facebook."
|
|
13
|
+
|
|
14
|
+
fbDescription:
|
|
15
|
+
label: "Facebook Description (og:description)"
|
|
16
|
+
type: textarea
|
|
17
|
+
inherits: metaDescription # 🔗 Or whatever your main SEO description field is named
|
|
18
|
+
public: true
|
|
19
|
+
description: "A 2-4 sentence summary of the content."
|
|
20
|
+
|
|
21
|
+
# --- X (Twitter) Texts ---
|
|
22
|
+
xTitle:
|
|
23
|
+
label: "X Title (twitter:title)"
|
|
24
|
+
type: text
|
|
25
|
+
inherits: fbTitle # 🔗 Cascades from Facebook Title (which cascades from SEO)
|
|
26
|
+
public: true
|
|
27
|
+
description: "Keep it concise (under 70 characters is ideal for X)."
|
|
28
|
+
|
|
29
|
+
xDescription:
|
|
30
|
+
label: "X Description (twitter:description)"
|
|
31
|
+
type: textarea
|
|
32
|
+
inherits: fbDescription
|
|
33
|
+
public: true
|
|
34
|
+
|
|
35
|
+
# ==========================================
|
|
36
|
+
# SOCIAL IMAGES (The Waterfall)
|
|
37
|
+
# ==========================================
|
|
38
|
+
|
|
39
|
+
# 1. The Source Image
|
|
40
|
+
socialImage:
|
|
41
|
+
label: "Master Social Image"
|
|
42
|
+
type: image
|
|
43
|
+
maxPreviewWidth: 620px
|
|
44
|
+
multiple: false
|
|
45
|
+
maxSizeMB: 10
|
|
46
|
+
allowedTypes: ["image/jpeg", "image/png", "image/webp"]
|
|
47
|
+
public: true
|
|
48
|
+
|
|
49
|
+
# 2. The Auto-Synced Crops
|
|
50
|
+
fbImage:
|
|
51
|
+
label: "Facebook / LinkedIn Image"
|
|
52
|
+
type: image
|
|
53
|
+
maxPreviewWidth: 620px
|
|
54
|
+
inherits: socialImage # 🔗 Syncs from socialImage
|
|
55
|
+
public: true
|
|
56
|
+
description: "Auto-cropped to 1.91:1. Drop a new image here to override."
|
|
57
|
+
crops:
|
|
58
|
+
aspectRatio: 1.91
|
|
59
|
+
|
|
60
|
+
xImage:
|
|
61
|
+
label: "X (Twitter) Image"
|
|
62
|
+
type: image
|
|
63
|
+
maxPreviewWidth: 620px
|
|
64
|
+
inherits: socialImage # 🔗 Syncs from socialImage
|
|
65
|
+
public: true
|
|
66
|
+
description: "Auto-cropped to 2:1. Drop a new image here to override."
|
|
67
|
+
crops:
|
|
68
|
+
aspectRatio: 2.0
|
|
69
|
+
|
|
70
|
+
whatsappImage:
|
|
71
|
+
label: "Messaging / Square Image"
|
|
72
|
+
type: image
|
|
73
|
+
maxPreviewWidth: 620px
|
|
74
|
+
inherits: socialImage # 🔗 Syncs from socialImage
|
|
75
|
+
public: true
|
|
76
|
+
description: "Auto-cropped to 1:1. Drop a new image here to override."
|
|
77
|
+
crops:
|
|
78
|
+
whatsappImage:
|
|
79
|
+
label: "WhatsApp Image (1:1)"
|
|
80
|
+
aspectRatio: 1.0
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: tree-base
|
|
2
|
+
label: Tree Base Properties
|
|
3
|
+
|
|
4
|
+
fields:
|
|
5
|
+
- id:
|
|
6
|
+
label: Internal ID
|
|
7
|
+
type: hidden
|
|
8
|
+
dbType: integer
|
|
9
|
+
primaryKey: true
|
|
10
|
+
|
|
11
|
+
- label:
|
|
12
|
+
label: "Label"
|
|
13
|
+
type: text
|
|
14
|
+
dbType: text
|
|
15
|
+
public: true
|
|
16
|
+
rules:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- key:
|
|
20
|
+
label: "API Identifier"
|
|
21
|
+
type: slug
|
|
22
|
+
dbType: text
|
|
23
|
+
index: true
|
|
24
|
+
public: true
|
|
25
|
+
linkedTo: label
|
|
26
|
+
placeholder: "e.g. main-site, store-eu"
|
|
27
|
+
rules:
|
|
28
|
+
required: true
|
|
29
|
+
unique: true
|
|
30
|
+
pattern: "^[a-z0-9-_]+$"
|
|
31
|
+
customMessage: "API key must be unique and contain only lowercase letters, numbers, hyphens, or underscores."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
id: landing-page
|
|
2
|
+
label: Landing Page
|
|
3
|
+
|
|
4
|
+
layout:
|
|
5
|
+
columns: "1fr"
|
|
6
|
+
areas:
|
|
7
|
+
- ["header"]
|
|
8
|
+
- ["hero"]
|
|
9
|
+
- ["content"]
|
|
10
|
+
- ["footer"]
|
|
11
|
+
|
|
12
|
+
regions:
|
|
13
|
+
header:
|
|
14
|
+
label: Header
|
|
15
|
+
inherit: parent
|
|
16
|
+
hero:
|
|
17
|
+
label: Hero / Top Banner
|
|
18
|
+
content:
|
|
19
|
+
label: Content
|
|
20
|
+
footer:
|
|
21
|
+
label: Footer
|
|
22
|
+
inherit: parent
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: single-column
|
|
2
|
+
label: Single Column
|
|
3
|
+
|
|
4
|
+
layout:
|
|
5
|
+
columns: "1fr"
|
|
6
|
+
areas:
|
|
7
|
+
- ["header"]
|
|
8
|
+
- ["content"]
|
|
9
|
+
- ["footer"]
|
|
10
|
+
|
|
11
|
+
regions:
|
|
12
|
+
header:
|
|
13
|
+
label: Header Image
|
|
14
|
+
showLabel: true
|
|
15
|
+
inherit: parent
|
|
16
|
+
allowOverride: true
|
|
17
|
+
dropType: image
|
|
18
|
+
maxPreviewWidth: 800px
|
|
19
|
+
multiple: false
|
|
20
|
+
maxSizeMB: 20
|
|
21
|
+
allowedTypes: ["image/*"]
|
|
22
|
+
crops:
|
|
23
|
+
standard:
|
|
24
|
+
label: "Desktop Header (4:1)"
|
|
25
|
+
aspectRatio: 4.0
|
|
26
|
+
tablet:
|
|
27
|
+
label: "Tablet Header (2:1)"
|
|
28
|
+
aspectRatio: 2.0
|
|
29
|
+
mobile:
|
|
30
|
+
label: "Mobile Header (4:3)"
|
|
31
|
+
aspectRatio: 1.33
|
|
32
|
+
public: true
|
|
33
|
+
|
|
34
|
+
content:
|
|
35
|
+
label: Content
|
|
36
|
+
footer:
|
|
37
|
+
label: Footer
|
|
38
|
+
inherit: parent
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: three-column
|
|
2
|
+
label: Three Column
|
|
3
|
+
|
|
4
|
+
layout:
|
|
5
|
+
columns: "2fr 7fr 3fr"
|
|
6
|
+
areas:
|
|
7
|
+
- ["header", "header", "header"]
|
|
8
|
+
- ["left_nav", "content", "right_sidebar"]
|
|
9
|
+
- ["footer", "footer", "footer"]
|
|
10
|
+
|
|
11
|
+
regions:
|
|
12
|
+
header:
|
|
13
|
+
label: Header Image
|
|
14
|
+
showLabel: true
|
|
15
|
+
inherit: parent
|
|
16
|
+
allowOverride: true
|
|
17
|
+
dropType: image
|
|
18
|
+
maxPreviewWidth: 800px
|
|
19
|
+
multiple: false
|
|
20
|
+
maxSizeMB: 20
|
|
21
|
+
allowedTypes: ["image/*"]
|
|
22
|
+
crops:
|
|
23
|
+
standard:
|
|
24
|
+
label: "Desktop Header (4:1)"
|
|
25
|
+
aspectRatio: 4.0
|
|
26
|
+
tablet:
|
|
27
|
+
label: "Tablet Header (2:1)"
|
|
28
|
+
aspectRatio: 2.0
|
|
29
|
+
mobile:
|
|
30
|
+
label: "Mobile Header (4:3)"
|
|
31
|
+
aspectRatio: 1.33
|
|
32
|
+
public: true
|
|
33
|
+
left_nav:
|
|
34
|
+
label: Left Navigation
|
|
35
|
+
content:
|
|
36
|
+
label: Content
|
|
37
|
+
right_sidebar:
|
|
38
|
+
label: Right Sidebar
|
|
39
|
+
footer:
|
|
40
|
+
label: Footer
|
|
41
|
+
inherit: parent
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# defaults/definitions/layouts/two-column-split.yml
|
|
2
|
+
id: two-column
|
|
3
|
+
label: Two Column
|
|
4
|
+
|
|
5
|
+
layout:
|
|
6
|
+
columns: "10fr 4fr"
|
|
7
|
+
areas:
|
|
8
|
+
- ["header", "header"]
|
|
9
|
+
- ["content", "sidebar"] # 👈 Changed 'main' to 'content' to match old data!
|
|
10
|
+
- ["footer", "footer"]
|
|
11
|
+
|
|
12
|
+
regions:
|
|
13
|
+
header:
|
|
14
|
+
label: Header Image
|
|
15
|
+
showLabel: true
|
|
16
|
+
inherit: parent
|
|
17
|
+
allowOverride: true
|
|
18
|
+
dropType: image
|
|
19
|
+
maxPreviewWidth: 800px
|
|
20
|
+
multiple: false
|
|
21
|
+
maxSizeMB: 20
|
|
22
|
+
allowedTypes: ["image/*"]
|
|
23
|
+
crops:
|
|
24
|
+
standard:
|
|
25
|
+
label: "Desktop Header (4:1)"
|
|
26
|
+
aspectRatio: 4.0
|
|
27
|
+
tablet:
|
|
28
|
+
label: "Tablet Header (2:1)"
|
|
29
|
+
aspectRatio: 2.0
|
|
30
|
+
mobile:
|
|
31
|
+
label: "Mobile Header (4:3)"
|
|
32
|
+
aspectRatio: 1.33
|
|
33
|
+
public: true
|
|
34
|
+
content: # 👈 Changed 'main' to 'content'
|
|
35
|
+
label: Content
|
|
36
|
+
sidebar:
|
|
37
|
+
label: Sidebar
|
|
38
|
+
footer:
|
|
39
|
+
label: Footer
|
|
40
|
+
inherit: parent
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: address
|
|
2
|
+
label: Address
|
|
3
|
+
inTree: false
|
|
4
|
+
|
|
5
|
+
# 👉 TABS DEFINITION
|
|
6
|
+
tabs:
|
|
7
|
+
settings:
|
|
8
|
+
label: "Address"
|
|
9
|
+
fields:
|
|
10
|
+
- title:
|
|
11
|
+
label: Address Title
|
|
12
|
+
required: true
|
|
13
|
+
- street:
|
|
14
|
+
label: Street
|
|
15
|
+
- city:
|
|
16
|
+
label: City
|
|
17
|
+
- area:
|
|
18
|
+
label: County / Area
|
|
19
|
+
- zip:
|
|
20
|
+
label: ZIP
|
|
21
|
+
- country:
|
|
22
|
+
label: Country
|
|
23
|
+
geolocation:
|
|
24
|
+
label: "Geolocation"
|
|
25
|
+
fields:
|
|
26
|
+
- lat:
|
|
27
|
+
label: Latitude
|
|
28
|
+
- lng:
|
|
29
|
+
label: Longitude
|
|
30
|
+
- timezone:
|
|
31
|
+
label: Timezone
|
|
32
|
+
- fieldSet: access
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
id: article
|
|
2
|
+
label: Article
|
|
3
|
+
inTree: false
|
|
4
|
+
hasCanvas: true
|
|
5
|
+
directLinking: true
|
|
6
|
+
|
|
7
|
+
regions:
|
|
8
|
+
content:
|
|
9
|
+
label: Content
|
|
10
|
+
|
|
11
|
+
allowedBlocks:
|
|
12
|
+
- header
|
|
13
|
+
- hero
|
|
14
|
+
- text
|
|
15
|
+
- image_card
|
|
16
|
+
- header_image
|
|
17
|
+
- two-column
|
|
18
|
+
- three-column
|
|
19
|
+
- single_image
|
|
20
|
+
|
|
21
|
+
tabs:
|
|
22
|
+
settings:
|
|
23
|
+
label: "Article"
|
|
24
|
+
fields:
|
|
25
|
+
- fieldSet: page-base
|
|
26
|
+
- title:
|
|
27
|
+
label: Article title
|
|
28
|
+
required: true
|
|
29
|
+
- slug:
|
|
30
|
+
linkedTo: "title"
|
|
31
|
+
- articleDate:
|
|
32
|
+
type: date
|
|
33
|
+
label: Article Date
|
|
34
|
+
public: true
|
|
35
|
+
default: now
|
|
36
|
+
index: true
|
|
37
|
+
- abstract:
|
|
38
|
+
label: Abstract
|
|
39
|
+
type: textarea
|
|
40
|
+
public: true
|
|
41
|
+
- fieldSet: page-meta
|
|
42
|
+
- fieldSet: page-social
|
|
43
|
+
- fieldSet: access
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
id: event
|
|
2
|
+
label: Event
|
|
3
|
+
inTree: false
|
|
4
|
+
hasCanvas: true
|
|
5
|
+
directLinking: true
|
|
6
|
+
|
|
7
|
+
regions:
|
|
8
|
+
main:
|
|
9
|
+
label: Content
|
|
10
|
+
|
|
11
|
+
allowedBlocks:
|
|
12
|
+
- header
|
|
13
|
+
- hero
|
|
14
|
+
- text
|
|
15
|
+
- image_card
|
|
16
|
+
- header_image
|
|
17
|
+
- two-column
|
|
18
|
+
- three-column
|
|
19
|
+
- single_image
|
|
20
|
+
|
|
21
|
+
tabs:
|
|
22
|
+
settings:
|
|
23
|
+
label: Event
|
|
24
|
+
fields:
|
|
25
|
+
- fieldSet: page-base
|
|
26
|
+
- title:
|
|
27
|
+
label: Event Title
|
|
28
|
+
required: true
|
|
29
|
+
showAsEditorTitle: true
|
|
30
|
+
- slug:
|
|
31
|
+
linkedTo: "title"
|
|
32
|
+
- startTime:
|
|
33
|
+
type: datetime
|
|
34
|
+
label: Starts
|
|
35
|
+
public: true
|
|
36
|
+
index: true
|
|
37
|
+
showAsEditorTitle: true
|
|
38
|
+
- endTime:
|
|
39
|
+
type: datetime
|
|
40
|
+
label: Finishes
|
|
41
|
+
public: true
|
|
42
|
+
index: true
|
|
43
|
+
- abstract:
|
|
44
|
+
label: Abstract
|
|
45
|
+
type: textarea
|
|
46
|
+
public: true
|
|
47
|
+
- fieldSet: page-meta
|
|
48
|
+
- fieldSet: page-social
|
|
49
|
+
- fieldSet: access
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: external-link
|
|
2
|
+
label: External Link
|
|
3
|
+
inTree: true
|
|
4
|
+
|
|
5
|
+
tabs:
|
|
6
|
+
settings:
|
|
7
|
+
label: "Link"
|
|
8
|
+
fields:
|
|
9
|
+
- fieldSet: page-base
|
|
10
|
+
- nodeType
|
|
11
|
+
- title:
|
|
12
|
+
label: Link Text
|
|
13
|
+
- iconName:
|
|
14
|
+
label: Icon
|
|
15
|
+
type: icon
|
|
16
|
+
dbType: text
|
|
17
|
+
packages: ["heroicons", "lucide", "mdi"]
|
|
18
|
+
- slug:
|
|
19
|
+
label: Slug
|
|
20
|
+
linkedTo: "menuTitle, title"
|
|
21
|
+
- url:
|
|
22
|
+
label: URL
|
|
23
|
+
type: text
|
|
24
|
+
public: true
|
|
25
|
+
|
|
26
|
+
- fieldSet: access
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
id: page
|
|
2
|
+
label: Page
|
|
3
|
+
inTree: true
|
|
4
|
+
inVault: true
|
|
5
|
+
hasCanvas: true
|
|
6
|
+
directLinking: true
|
|
7
|
+
|
|
8
|
+
# 👈 Keep this as the absolute last-resort fallback for the Public API
|
|
9
|
+
defaultLayout: "single-column"
|
|
10
|
+
|
|
11
|
+
# 👈 Cleaned up naming!
|
|
12
|
+
allowedBlocks:
|
|
13
|
+
- header
|
|
14
|
+
- hero
|
|
15
|
+
- text
|
|
16
|
+
- image_card
|
|
17
|
+
- header_image
|
|
18
|
+
- two-column
|
|
19
|
+
- three-column
|
|
20
|
+
- single_image
|
|
21
|
+
|
|
22
|
+
tabs:
|
|
23
|
+
settings:
|
|
24
|
+
label: "Page"
|
|
25
|
+
fields:
|
|
26
|
+
- fieldSet: page-base
|
|
27
|
+
|
|
28
|
+
# 👉 THE CURRENT PAGE'S LAYOUT
|
|
29
|
+
- layoutId:
|
|
30
|
+
label: Page Layout
|
|
31
|
+
type: layout-select
|
|
32
|
+
dbType: text
|
|
33
|
+
default: "inherit"
|
|
34
|
+
inheritsFromParent: true # 👈 Tells the UI to bind to the parent!
|
|
35
|
+
allowedLayouts:
|
|
36
|
+
- two-column
|
|
37
|
+
- single-column
|
|
38
|
+
- three-column
|
|
39
|
+
- landing-page
|
|
40
|
+
options:
|
|
41
|
+
- { label: "Inherit Layout", value: "inherit" }
|
|
42
|
+
|
|
43
|
+
# 👉 THE BEHAVIOR FOR ALL CHILDREN
|
|
44
|
+
- subpageLayoutId:
|
|
45
|
+
label: Subpages Layout Rule
|
|
46
|
+
type: layout-select
|
|
47
|
+
dbType: text
|
|
48
|
+
default: "inherit"
|
|
49
|
+
inheritsFromParent: true # 👈 A child's subpage rules can ALSO inherit!
|
|
50
|
+
allowedLayouts:
|
|
51
|
+
- two-column
|
|
52
|
+
- three-column
|
|
53
|
+
- single-column
|
|
54
|
+
- landing-page
|
|
55
|
+
options:
|
|
56
|
+
- { label: "Inherit Layout", value: "inherit" }
|
|
57
|
+
|
|
58
|
+
- menuTitle:
|
|
59
|
+
label: Menu Title
|
|
60
|
+
type: text
|
|
61
|
+
dbType: text
|
|
62
|
+
public: true
|
|
63
|
+
- fieldSet: page-meta
|
|
64
|
+
- fieldSet: page-social
|
|
65
|
+
- fieldSet: access
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: person
|
|
2
|
+
label: Person
|
|
3
|
+
inTree: false
|
|
4
|
+
inVault: true
|
|
5
|
+
hasCanvas: false
|
|
6
|
+
|
|
7
|
+
# 👉 TABS DEFINITION
|
|
8
|
+
tabs:
|
|
9
|
+
settings:
|
|
10
|
+
label: "Person"
|
|
11
|
+
fields:
|
|
12
|
+
- image:
|
|
13
|
+
label: Image
|
|
14
|
+
type: asset
|
|
15
|
+
multiple: false
|
|
16
|
+
maxSizeMB: 15
|
|
17
|
+
allowedTypes: ["image/*"]
|
|
18
|
+
maxPreviewWidth: 300
|
|
19
|
+
crops:
|
|
20
|
+
list_thumb:
|
|
21
|
+
label: "List View"
|
|
22
|
+
aspectRatio: 1
|
|
23
|
+
shape: "circle"
|
|
24
|
+
public: true
|
|
25
|
+
|
|
26
|
+
- title:
|
|
27
|
+
label: Title
|
|
28
|
+
required: false
|
|
29
|
+
- firstName:
|
|
30
|
+
label: First Name
|
|
31
|
+
showAsEditorTitle: true
|
|
32
|
+
- lastName:
|
|
33
|
+
label: Last Name
|
|
34
|
+
showAsEditorTitle: true
|
|
35
|
+
- position:
|
|
36
|
+
|
|
37
|
+
- fieldSet: access
|