+12
-11
src/lexicons/site.standard.document.ts
+12
-11
src/lexicons/site.standard.document.ts
···
9
site: lx.string({
10
required: true,
11
format: 'uri',
12
-
description: 'Required URI for parent site or publication (https:// or at://). Use https:// for loose documents. Avoid trailing slashes.'
13
}),
14
path: lx.string({
15
-
description: 'Optional path, combined with site or publication url value to construct a full url to the document. Prepend with a leading slash.'
16
}),
17
title: lx.string({
18
required: true,
19
maxLength: 1280,
20
maxGraphemes: 128,
21
-
description: 'Required title of the document.'
22
}),
23
description: lx.string({
24
maxLength: 3000,
25
maxGraphemes: 300,
26
-
description: 'Optional brief description or expert of the document.'
27
}),
28
coverImage: lx.blob({
29
maxSize: 1 * MB,
30
accept: ['image/*'],
31
-
description: 'Optional image to use as the documents cover. Less than 1MB is size.'
32
}),
33
content: lx.union([], {
34
closed: false,
35
-
description: 'Optional open union to construct content within the record. Can be extended with other lexicons to define any content format.'
36
}),
37
textContent: lx.string({
38
-
description: 'Optional plaintext representation of the documents contents. Useful for search and other cases.'
39
}),
40
bskyPostRef: lx.ref('com.atproto.repo.strongRef', {
41
-
description: 'Optional strong reference to a Bluesky post. Useful to keep track of comments off-platform.'
42
}),
43
tags: lx.array({
44
type: 'string',
45
}, {
46
maxLength: 100,
47
-
description: 'Optional array of strings used to tag/categorize the document. Avoid prepending tags with hashtags ("#").'
48
}),
49
publishedAt: lx.string({
50
required: true,
51
format: 'datetime',
52
-
description: 'Required timestamp of the documents publication.'
53
}),
54
updatedAt: lx.string({
55
format: 'datetime',
56
-
description: 'Optional timestamp of the documents last edit.'
57
})
58
}),
59
})
60
})
···
9
site: lx.string({
10
required: true,
11
format: 'uri',
12
+
description: 'Points to a publication record (at://) or a publication url (https://) for loose documents. Avoid trailing slashes.'
13
}),
14
path: lx.string({
15
+
description: 'Combine with site or publication url to construct a canonical URL to the document. Prepend with a leading slash.'
16
}),
17
title: lx.string({
18
required: true,
19
maxLength: 1280,
20
maxGraphemes: 128,
21
+
description: 'Title of the document.'
22
}),
23
description: lx.string({
24
maxLength: 3000,
25
maxGraphemes: 300,
26
+
description: 'A brief description or excerpt from the document.'
27
}),
28
coverImage: lx.blob({
29
maxSize: 1 * MB,
30
accept: ['image/*'],
31
+
description: 'Image to used for thumbnail or cover image. Less than 1MB is size.'
32
}),
33
content: lx.union([], {
34
closed: false,
35
+
description: 'Open union used to define the record\'s content. Each entry must specify a $type and may be extended with other lexicons to support additional content formats.'
36
}),
37
textContent: lx.string({
38
+
description: 'Plaintext representation of the documents contents. Should not contain markdown or other formatting.'
39
}),
40
bskyPostRef: lx.ref('com.atproto.repo.strongRef', {
41
+
description: 'Strong reference to a Bluesky post. Useful to keep track of comments off-platform.'
42
}),
43
tags: lx.array({
44
type: 'string',
45
}, {
46
maxLength: 100,
47
+
description: 'Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags.'
48
}),
49
publishedAt: lx.string({
50
required: true,
51
format: 'datetime',
52
+
description: 'Timestamp of the documents publish time.'
53
}),
54
updatedAt: lx.string({
55
format: 'datetime',
56
+
description: 'Timestamp of the documents last edit.'
57
})
58
}),
59
+
description: 'A document record representing a published article, blog post, or other content. Documents can belong to a publication or exist independently.'
60
})
61
})
+1
-1
src/lexicons/site.standard.graph.subscription.ts
+1
-1
src/lexicons/site.standard.graph.subscription.ts
+11
-8
src/lexicons/site.standard.publication.ts
+11
-8
src/lexicons/site.standard.publication.ts
···
10
url: lx.string({
11
required: true,
12
format: 'uri',
13
-
description: 'Required base publication URL (ex: https://standard.site).'
14
}),
15
icon: lx.blob({
16
maxSize: 1 * MB,
17
-
accept: ['image/*']
18
}),
19
name: lx.string({
20
required: true,
21
maxLength: 1280,
22
maxGraphemes: 128,
23
-
description: 'Required name of the publication.'
24
}),
25
description: lx.string({
26
maxLength: 3000,
27
maxGraphemes: 300,
28
-
description: 'Optional brief description of the publication.'
29
}),
30
basicTheme: lx.ref(siteStandardThemeBasic.json.id, {
31
-
description: 'Optional simplified publication theme for tools and apps to easily implement when displaying content.'
32
}),
33
preferences: lx.ref('#preferences', {
34
-
description: 'Optional object containing platform specific preferences (with a few shared properties).'
35
})
36
}),
37
}),
38
preferences: lx.object({
39
showInDiscover: lx.boolean({
40
default: true,
41
-
description: 'Optional boolean which decides whether the publication should appear in discovery feeds.'
42
-
})
43
})
44
})
···
10
url: lx.string({
11
required: true,
12
format: 'uri',
13
+
description: 'Base publication url (ex: https://standard.site). The canonical document URL is formed by combining this value with the document path.'
14
}),
15
icon: lx.blob({
16
maxSize: 1 * MB,
17
+
accept: ['image/*'],
18
+
description: 'Square image to identify the publication. Should be at least 256x256.'
19
}),
20
name: lx.string({
21
required: true,
22
maxLength: 1280,
23
maxGraphemes: 128,
24
+
description: 'Name of the publication.'
25
}),
26
description: lx.string({
27
maxLength: 3000,
28
maxGraphemes: 300,
29
+
description: 'Brief description of the publication.'
30
}),
31
basicTheme: lx.ref(siteStandardThemeBasic.json.id, {
32
+
description: 'Simplified publication theme for tools and apps to utilize when displaying content.'
33
}),
34
preferences: lx.ref('#preferences', {
35
+
description: 'Object containing platform specific preferences (with a few shared properties).'
36
})
37
}),
38
+
description: 'A publication record representing a blog, website, or content platform. Publications serve as containers for documents and define the overall branding and settings.'
39
}),
40
preferences: lx.object({
41
showInDiscover: lx.boolean({
42
default: true,
43
+
description: 'Boolean which decides whether the publication should appear in discovery feeds.'
44
+
}),
45
+
description: 'Platform-specific preferences for the publication, including discovery and visibility settings.'
46
})
47
})
+5
-4
src/lexicons/site.standard.theme.basic.ts
+5
-4
src/lexicons/site.standard.theme.basic.ts
···
8
record: lx.object({
9
background: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
10
required: true,
11
-
description: 'Required color used for content background.'
12
}),
13
foreground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
14
required: true,
15
-
description: 'Required color used for content text.'
16
}),
17
accent: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
18
required: true,
19
-
description: 'Required color used for links and button backgrounds.'
20
}),
21
accentForeground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
22
required: true,
23
-
description: 'Required color used for button text.'
24
})
25
}),
26
})
27
})
···
8
record: lx.object({
9
background: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
10
required: true,
11
+
description: 'Color used for content background.'
12
}),
13
foreground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
14
required: true,
15
+
description: 'Color used for content text.'
16
}),
17
accent: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
18
required: true,
19
+
description: 'Color used for links and button backgrounds.'
20
}),
21
accentForeground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
22
required: true,
23
+
description: 'Color used for button text.'
24
})
25
}),
26
+
description: 'A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications.'
27
})
28
})