@purpleschool/gptbot-tools 0.0.28 → 0.0.30
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/build/presentation/constants/slide-layout-map.constant.js +1 -1
- package/build/presentation/enums/slide-content-type.enum.js +1 -1
- package/build/presentation/models/slide-content.schema.js +46 -31
- package/package.json +1 -1
- package/presentation/constants/slide-layout-map.constant.ts +1 -1
- package/presentation/enums/slide-content-type.enum.ts +1 -1
- package/presentation/models/slide-content.schema.ts +54 -41
|
@@ -9,7 +9,7 @@ exports.SLIDE_LAYOUT_MAP = new Map([
|
|
|
9
9
|
[enums_1.SLIDE_CONTENT_TYPE.TEXT, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1, slide_layout_enum_1.SLIDE_LAYOUT.TYPE_2]],
|
|
10
10
|
[enums_1.SLIDE_CONTENT_TYPE.SECTION_BREAK, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
11
11
|
[enums_1.SLIDE_CONTENT_TYPE.CONTENTS, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
12
|
-
[enums_1.SLIDE_CONTENT_TYPE.
|
|
12
|
+
[enums_1.SLIDE_CONTENT_TYPE.TEXT_WITH_IMAGE, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
13
13
|
[enums_1.SLIDE_CONTENT_TYPE.THANK_YOU, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
14
14
|
[enums_1.SLIDE_CONTENT_TYPE.TABLE, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
15
15
|
[enums_1.SLIDE_CONTENT_TYPE.CHART, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
|
|
@@ -8,7 +8,7 @@ var SLIDE_CONTENT_TYPE;
|
|
|
8
8
|
SLIDE_CONTENT_TYPE["SECTION_BREAK"] = "SECTION_BREAK";
|
|
9
9
|
SLIDE_CONTENT_TYPE["STRUCTURED_LIST"] = "STRUCTURED_LIST";
|
|
10
10
|
SLIDE_CONTENT_TYPE["CONTENTS"] = "CONTENTS";
|
|
11
|
-
SLIDE_CONTENT_TYPE["
|
|
11
|
+
SLIDE_CONTENT_TYPE["TEXT_WITH_IMAGE"] = "TEXT_WITH_IMAGE";
|
|
12
12
|
SLIDE_CONTENT_TYPE["THANK_YOU"] = "THANK_YOU";
|
|
13
13
|
SLIDE_CONTENT_TYPE["TABLE"] = "TABLE";
|
|
14
14
|
SLIDE_CONTENT_TYPE["CHART"] = "CHART";
|
|
@@ -19,13 +19,11 @@ exports.IconSlotSchema = zod_1.z.object({
|
|
|
19
19
|
.string()
|
|
20
20
|
.uuid()
|
|
21
21
|
.describe('Generate a valid uuid for icon slot, that will be used for future lookups'),
|
|
22
|
-
prompt: zod_1.z
|
|
23
|
-
.string()
|
|
24
|
-
.describe('Icons are stored locally. Provide a search query for a fitting icon. MUST BE IN ENGLISH'),
|
|
22
|
+
prompt: zod_1.z.string().describe('Provide a search query for an fitting icon. MUST BE IN ENGLISH'),
|
|
25
23
|
});
|
|
26
24
|
exports.CoverSlideDataSchema = zod_1.z.object({
|
|
27
25
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.COVER),
|
|
28
|
-
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(
|
|
26
|
+
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(150),
|
|
29
27
|
author: zod_1.z.object({
|
|
30
28
|
label: zod_1.z.string().describe('Literal "Author" in presentation\'s language'),
|
|
31
29
|
value: zod_1.z
|
|
@@ -42,18 +40,21 @@ exports.CoverSlideDataSchema = zod_1.z.object({
|
|
|
42
40
|
label: zod_1.z.string().describe('Just default word "Email"'),
|
|
43
41
|
value: zod_1.z.string().describe('Just default "email@example.com"'),
|
|
44
42
|
}),
|
|
43
|
+
version: zod_1.z.literal(1),
|
|
45
44
|
});
|
|
46
45
|
exports.ThankYouSlideDataSchema = zod_1.z.object({
|
|
47
46
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.THANK_YOU),
|
|
48
|
-
title: zod_1.z
|
|
47
|
+
title: zod_1.z
|
|
48
|
+
.string()
|
|
49
|
+
.describe('"Thank you for your attention" in presentation\'s language')
|
|
50
|
+
.min(10)
|
|
51
|
+
.max(150),
|
|
49
52
|
author: zod_1.z.object({
|
|
50
|
-
label: zod_1.z.string().describe('
|
|
51
|
-
value: zod_1.z
|
|
52
|
-
.string()
|
|
53
|
-
.describe('Literal "Author of the presentation" in presentation\'s language'),
|
|
53
|
+
label: zod_1.z.string().describe('"Author" in presentation\'s language'),
|
|
54
|
+
value: zod_1.z.string().describe('"Author of the presentation" in presentation\'s language'),
|
|
54
55
|
}),
|
|
55
56
|
date: zod_1.z.object({
|
|
56
|
-
label: zod_1.z.string().describe('
|
|
57
|
+
label: zod_1.z.string().describe('"Date" in presentation\'s language'),
|
|
57
58
|
value: zod_1.z
|
|
58
59
|
.string()
|
|
59
60
|
.describe('Date of the presentation in the "dd month yyyy" format in presentation\'s locale'),
|
|
@@ -62,28 +63,29 @@ exports.ThankYouSlideDataSchema = zod_1.z.object({
|
|
|
62
63
|
label: zod_1.z.string().describe('Just default word "Email"'),
|
|
63
64
|
value: zod_1.z.string().describe('Just default "email@example.com"'),
|
|
64
65
|
}),
|
|
66
|
+
version: zod_1.z.literal(1),
|
|
65
67
|
});
|
|
66
68
|
exports.StructuredListSlideDataSchema = zod_1.z.object({
|
|
67
69
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.STRUCTURED_LIST),
|
|
68
|
-
title: zod_1.z.string().describe('Slide title, 2–6 words'),
|
|
70
|
+
title: zod_1.z.string().describe('Slide title, 2–6 words').max(150),
|
|
69
71
|
description: zod_1.z.string().describe('One short framing sentence'),
|
|
70
72
|
list: zod_1.z
|
|
71
73
|
.array(zod_1.z.object({
|
|
72
74
|
title: zod_1.z.string().describe('2–4 words, concrete'),
|
|
73
|
-
description: zod_1.z
|
|
74
|
-
.string()
|
|
75
|
-
.describe('One clear short framing sentence, explains the point, 8–14 words'),
|
|
75
|
+
description: zod_1.z.string().describe('One clear short framing sentence').max(100),
|
|
76
76
|
}))
|
|
77
77
|
.length(4),
|
|
78
|
+
version: zod_1.z.literal(1),
|
|
78
79
|
});
|
|
79
80
|
exports.TextSlideDataSchema = zod_1.z.object({
|
|
80
81
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.TEXT),
|
|
81
|
-
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(
|
|
82
|
+
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(150),
|
|
82
83
|
description: zod_1.z
|
|
83
84
|
.string()
|
|
84
|
-
.describe(
|
|
85
|
+
.describe("Fairly long textual description of the point presented in the title. A couple of paragraphs. Consider maximum amount of text to be 600 characters. Don't cut the text short.")
|
|
85
86
|
.min(300)
|
|
86
|
-
.max(
|
|
87
|
+
.max(600),
|
|
88
|
+
version: zod_1.z.literal(1),
|
|
87
89
|
});
|
|
88
90
|
exports.ContentsSlideDataSchema = zod_1.z.object({
|
|
89
91
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.CONTENTS),
|
|
@@ -93,24 +95,32 @@ exports.ContentsSlideDataSchema = zod_1.z.object({
|
|
|
93
95
|
.min(10)
|
|
94
96
|
.max(200),
|
|
95
97
|
items: zod_1.z
|
|
96
|
-
.array(zod_1.z.
|
|
98
|
+
.array(zod_1.z.object({
|
|
99
|
+
pageNumber: zod_1.z.number().describe('Page number of the slide'),
|
|
100
|
+
title: zod_1.z.string().min(1).describe('Title of the slide on said page'),
|
|
101
|
+
}))
|
|
97
102
|
.min(1)
|
|
98
103
|
.describe('List of slide titles. Must be relevant and generated after all the slides are generated'),
|
|
104
|
+
version: zod_1.z.literal(1),
|
|
99
105
|
});
|
|
100
|
-
exports.ImageSlideDataSchema = zod_1.z
|
|
101
|
-
|
|
106
|
+
exports.ImageSlideDataSchema = zod_1.z
|
|
107
|
+
.object({
|
|
108
|
+
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.TEXT_WITH_IMAGE),
|
|
102
109
|
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(200),
|
|
103
110
|
description: zod_1.z
|
|
104
111
|
.string()
|
|
105
|
-
.describe("
|
|
112
|
+
.describe("Text that elaborates on the title and doesn't just describe the image")
|
|
106
113
|
.min(10)
|
|
107
114
|
.max(500),
|
|
108
115
|
imageSlot: exports.ImageSlotSchema,
|
|
109
|
-
|
|
116
|
+
version: zod_1.z.literal(1),
|
|
117
|
+
})
|
|
118
|
+
.describe('Slide that contains a title, description of the title');
|
|
110
119
|
exports.SectionBreakSlideDataSchema = zod_1.z.object({
|
|
111
120
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.SECTION_BREAK),
|
|
112
121
|
title: zod_1.z.string().describe('Slide title in about 6 words').min(10).max(200),
|
|
113
122
|
description: zod_1.z.string().describe('Description of the slide in about 6 words').min(10).max(200),
|
|
123
|
+
version: zod_1.z.literal(1),
|
|
114
124
|
});
|
|
115
125
|
exports.TableSlideDataSchema = zod_1.z.object({
|
|
116
126
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.TABLE),
|
|
@@ -127,25 +137,28 @@ exports.TableSlideDataSchema = zod_1.z.object({
|
|
|
127
137
|
.max(10)
|
|
128
138
|
.describe('Array of column header labels'),
|
|
129
139
|
rows: zod_1.z
|
|
130
|
-
.array(zod_1.z.array(zod_1.z.string().min(1).max(
|
|
131
|
-
.min(
|
|
132
|
-
.max(
|
|
140
|
+
.array(zod_1.z.array(zod_1.z.string().min(1).max(75)))
|
|
141
|
+
.min(3)
|
|
142
|
+
.max(4)
|
|
133
143
|
.describe('Table rows; each row must have exactly the same number of cells as columnHeaders'),
|
|
134
144
|
hasRowHeaders: zod_1.z.boolean().describe('If table needs special row headers, set this to true'),
|
|
135
145
|
hasSummaryRow: zod_1.z.boolean().describe('If table needs a summary row, set this to true'),
|
|
136
146
|
}),
|
|
147
|
+
version: zod_1.z.literal(1),
|
|
137
148
|
});
|
|
138
149
|
// Charts
|
|
139
150
|
exports.BarChartSlideDataSchema = zod_1.z.object({
|
|
140
151
|
type: zod_1.z.literal(SLIDE_CHART_TYPE.BAR),
|
|
141
152
|
categories: zod_1.z
|
|
142
|
-
.array(zod_1.z.string()
|
|
153
|
+
.array(zod_1.z.string())
|
|
143
154
|
.min(1)
|
|
144
155
|
.max(12)
|
|
145
156
|
.describe('Category labels (e.g., months, products, regions)'),
|
|
146
157
|
series: zod_1.z
|
|
147
158
|
.array(zod_1.z.object({
|
|
148
|
-
name: zod_1.z
|
|
159
|
+
name: zod_1.z
|
|
160
|
+
.string()
|
|
161
|
+
.describe('Series name for legend. Try to include measurements if needed'),
|
|
149
162
|
data: zod_1.z.array(zod_1.z.number()).describe('Values corresponding to categories'),
|
|
150
163
|
type: zod_1.z
|
|
151
164
|
.number()
|
|
@@ -154,16 +167,18 @@ exports.BarChartSlideDataSchema = zod_1.z.object({
|
|
|
154
167
|
.describe('Series type. Used to discriminate colors when applying theme'),
|
|
155
168
|
}))
|
|
156
169
|
.min(1)
|
|
157
|
-
.max(
|
|
158
|
-
.describe('Data series for the chart'),
|
|
170
|
+
.max(1)
|
|
171
|
+
.describe('Data series for the chart. Only one series is supported'),
|
|
159
172
|
yAxisLabel: zod_1.z.string().max(40).optional().describe('Y-axis label'),
|
|
160
173
|
unit: zod_1.z.string().max(10).optional().describe('Unit symbol (%, $, etc.)'),
|
|
174
|
+
version: zod_1.z.literal(1),
|
|
161
175
|
});
|
|
162
176
|
exports.ChartSlideDataSchema = zod_1.z.object({
|
|
163
177
|
contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.CHART),
|
|
164
|
-
title: zod_1.z.string().describe('Slide title in about 6 words').
|
|
165
|
-
description: zod_1.z.string().describe("Information on slide's topic").
|
|
178
|
+
title: zod_1.z.string().describe('Slide title in about 2-6 words').max(100),
|
|
179
|
+
description: zod_1.z.string().describe("Information on slide's topic").max(600),
|
|
166
180
|
chart: zod_1.z.discriminatedUnion('type', [exports.BarChartSlideDataSchema]),
|
|
181
|
+
version: zod_1.z.literal(1),
|
|
167
182
|
});
|
|
168
183
|
exports.SlideContentSchema = zod_1.z.discriminatedUnion('contentType', [
|
|
169
184
|
exports.CoverSlideDataSchema,
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ export const SLIDE_LAYOUT_MAP = new Map<SLIDE_CONTENT_TYPE, SLIDE_LAYOUT[]>([
|
|
|
7
7
|
[SLIDE_CONTENT_TYPE.TEXT, [SLIDE_LAYOUT.TYPE_1, SLIDE_LAYOUT.TYPE_2]],
|
|
8
8
|
[SLIDE_CONTENT_TYPE.SECTION_BREAK, [SLIDE_LAYOUT.TYPE_1]],
|
|
9
9
|
[SLIDE_CONTENT_TYPE.CONTENTS, [SLIDE_LAYOUT.TYPE_1]],
|
|
10
|
-
[SLIDE_CONTENT_TYPE.
|
|
10
|
+
[SLIDE_CONTENT_TYPE.TEXT_WITH_IMAGE, [SLIDE_LAYOUT.TYPE_1]],
|
|
11
11
|
[SLIDE_CONTENT_TYPE.THANK_YOU, [SLIDE_LAYOUT.TYPE_1]],
|
|
12
12
|
[SLIDE_CONTENT_TYPE.TABLE, [SLIDE_LAYOUT.TYPE_1]],
|
|
13
13
|
[SLIDE_CONTENT_TYPE.CHART, [SLIDE_LAYOUT.TYPE_1]],
|
|
@@ -19,17 +19,13 @@ export const IconSlotSchema = z.object({
|
|
|
19
19
|
.string()
|
|
20
20
|
.uuid()
|
|
21
21
|
.describe('Generate a valid uuid for icon slot, that will be used for future lookups'),
|
|
22
|
-
prompt: z
|
|
23
|
-
.string()
|
|
24
|
-
.describe(
|
|
25
|
-
'Icons are stored locally. Provide a search query for a fitting icon. MUST BE IN ENGLISH',
|
|
26
|
-
),
|
|
22
|
+
prompt: z.string().describe('Provide a search query for an fitting icon. MUST BE IN ENGLISH'),
|
|
27
23
|
});
|
|
28
24
|
export type IconSlot = z.infer<typeof IconSlotSchema>;
|
|
29
25
|
|
|
30
26
|
export const CoverSlideDataSchema = z.object({
|
|
31
27
|
contentType: z.literal(SLIDE_CONTENT_TYPE.COVER),
|
|
32
|
-
title: z.string().describe('Slide title in about 6 words').min(10).max(
|
|
28
|
+
title: z.string().describe('Slide title in about 6 words').min(10).max(150),
|
|
33
29
|
author: z.object({
|
|
34
30
|
label: z.string().describe('Literal "Author" in presentation\'s language'),
|
|
35
31
|
value: z
|
|
@@ -48,20 +44,23 @@ export const CoverSlideDataSchema = z.object({
|
|
|
48
44
|
label: z.string().describe('Just default word "Email"'),
|
|
49
45
|
value: z.string().describe('Just default "email@example.com"'),
|
|
50
46
|
}),
|
|
47
|
+
version: z.literal(1),
|
|
51
48
|
});
|
|
52
49
|
export type CoverSlideData = z.infer<typeof CoverSlideDataSchema>;
|
|
53
50
|
|
|
54
51
|
export const ThankYouSlideDataSchema = z.object({
|
|
55
52
|
contentType: z.literal(SLIDE_CONTENT_TYPE.THANK_YOU),
|
|
56
|
-
title: z
|
|
53
|
+
title: z
|
|
54
|
+
.string()
|
|
55
|
+
.describe('"Thank you for your attention" in presentation\'s language')
|
|
56
|
+
.min(10)
|
|
57
|
+
.max(150),
|
|
57
58
|
author: z.object({
|
|
58
|
-
label: z.string().describe('
|
|
59
|
-
value: z
|
|
60
|
-
.string()
|
|
61
|
-
.describe('Literal "Author of the presentation" in presentation\'s language'),
|
|
59
|
+
label: z.string().describe('"Author" in presentation\'s language'),
|
|
60
|
+
value: z.string().describe('"Author of the presentation" in presentation\'s language'),
|
|
62
61
|
}),
|
|
63
62
|
date: z.object({
|
|
64
|
-
label: z.string().describe('
|
|
63
|
+
label: z.string().describe('"Date" in presentation\'s language'),
|
|
65
64
|
value: z
|
|
66
65
|
.string()
|
|
67
66
|
.describe(
|
|
@@ -72,36 +71,37 @@ export const ThankYouSlideDataSchema = z.object({
|
|
|
72
71
|
label: z.string().describe('Just default word "Email"'),
|
|
73
72
|
value: z.string().describe('Just default "email@example.com"'),
|
|
74
73
|
}),
|
|
74
|
+
version: z.literal(1),
|
|
75
75
|
});
|
|
76
76
|
export type ThankYouSlideData = z.infer<typeof ThankYouSlideDataSchema>;
|
|
77
77
|
|
|
78
78
|
export const StructuredListSlideDataSchema = z.object({
|
|
79
79
|
contentType: z.literal(SLIDE_CONTENT_TYPE.STRUCTURED_LIST),
|
|
80
|
-
title: z.string().describe('Slide title, 2–6 words'),
|
|
80
|
+
title: z.string().describe('Slide title, 2–6 words').max(150),
|
|
81
81
|
description: z.string().describe('One short framing sentence'),
|
|
82
82
|
list: z
|
|
83
83
|
.array(
|
|
84
84
|
z.object({
|
|
85
85
|
title: z.string().describe('2–4 words, concrete'),
|
|
86
|
-
description: z
|
|
87
|
-
.string()
|
|
88
|
-
.describe('One clear short framing sentence, explains the point, 8–14 words'),
|
|
86
|
+
description: z.string().describe('One clear short framing sentence').max(100),
|
|
89
87
|
}),
|
|
90
88
|
)
|
|
91
89
|
.length(4),
|
|
90
|
+
version: z.literal(1),
|
|
92
91
|
});
|
|
93
92
|
export type StructuredListSlideData = z.infer<typeof StructuredListSlideDataSchema>;
|
|
94
93
|
|
|
95
94
|
export const TextSlideDataSchema = z.object({
|
|
96
95
|
contentType: z.literal(SLIDE_CONTENT_TYPE.TEXT),
|
|
97
|
-
title: z.string().describe('Slide title in about 6 words').min(10).max(
|
|
96
|
+
title: z.string().describe('Slide title in about 6 words').min(10).max(150),
|
|
98
97
|
description: z
|
|
99
98
|
.string()
|
|
100
99
|
.describe(
|
|
101
|
-
|
|
100
|
+
"Fairly long textual description of the point presented in the title. A couple of paragraphs. Consider maximum amount of text to be 600 characters. Don't cut the text short.",
|
|
102
101
|
)
|
|
103
102
|
.min(300)
|
|
104
|
-
.max(
|
|
103
|
+
.max(600),
|
|
104
|
+
version: z.literal(1),
|
|
105
105
|
});
|
|
106
106
|
export type TextSlideData = z.infer<typeof TextSlideDataSchema>;
|
|
107
107
|
|
|
@@ -115,32 +115,40 @@ export const ContentsSlideDataSchema = z.object({
|
|
|
115
115
|
.min(10)
|
|
116
116
|
.max(200),
|
|
117
117
|
items: z
|
|
118
|
-
.array(
|
|
118
|
+
.array(
|
|
119
|
+
z.object({
|
|
120
|
+
pageNumber: z.number().describe('Page number of the slide'),
|
|
121
|
+
title: z.string().min(1).describe('Title of the slide on said page'),
|
|
122
|
+
}),
|
|
123
|
+
)
|
|
119
124
|
.min(1)
|
|
120
125
|
.describe(
|
|
121
126
|
'List of slide titles. Must be relevant and generated after all the slides are generated',
|
|
122
127
|
),
|
|
128
|
+
version: z.literal(1),
|
|
123
129
|
});
|
|
124
130
|
export type ContentsSlideData = z.infer<typeof ContentsSlideDataSchema>;
|
|
125
131
|
|
|
126
|
-
export const ImageSlideDataSchema = z
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
"
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
})
|
|
132
|
+
export const ImageSlideDataSchema = z
|
|
133
|
+
.object({
|
|
134
|
+
contentType: z.literal(SLIDE_CONTENT_TYPE.TEXT_WITH_IMAGE),
|
|
135
|
+
title: z.string().describe('Slide title in about 6 words').min(10).max(200),
|
|
136
|
+
description: z
|
|
137
|
+
.string()
|
|
138
|
+
.describe("Text that elaborates on the title and doesn't just describe the image")
|
|
139
|
+
.min(10)
|
|
140
|
+
.max(500),
|
|
141
|
+
imageSlot: ImageSlotSchema,
|
|
142
|
+
version: z.literal(1),
|
|
143
|
+
})
|
|
144
|
+
.describe('Slide that contains a title, description of the title');
|
|
138
145
|
export type ImageSlideData = z.infer<typeof ImageSlideDataSchema>;
|
|
139
146
|
|
|
140
147
|
export const SectionBreakSlideDataSchema = z.object({
|
|
141
148
|
contentType: z.literal(SLIDE_CONTENT_TYPE.SECTION_BREAK),
|
|
142
149
|
title: z.string().describe('Slide title in about 6 words').min(10).max(200),
|
|
143
150
|
description: z.string().describe('Description of the slide in about 6 words').min(10).max(200),
|
|
151
|
+
version: z.literal(1),
|
|
144
152
|
});
|
|
145
153
|
export type SectionBreakSlideData = z.infer<typeof SectionBreakSlideDataSchema>;
|
|
146
154
|
|
|
@@ -159,15 +167,16 @@ export const TableSlideDataSchema = z.object({
|
|
|
159
167
|
.max(10)
|
|
160
168
|
.describe('Array of column header labels'),
|
|
161
169
|
rows: z
|
|
162
|
-
.array(z.array(z.string().min(1).max(
|
|
163
|
-
.min(
|
|
164
|
-
.max(
|
|
170
|
+
.array(z.array(z.string().min(1).max(75)))
|
|
171
|
+
.min(3)
|
|
172
|
+
.max(4)
|
|
165
173
|
.describe(
|
|
166
174
|
'Table rows; each row must have exactly the same number of cells as columnHeaders',
|
|
167
175
|
),
|
|
168
176
|
hasRowHeaders: z.boolean().describe('If table needs special row headers, set this to true'),
|
|
169
177
|
hasSummaryRow: z.boolean().describe('If table needs a summary row, set this to true'),
|
|
170
178
|
}),
|
|
179
|
+
version: z.literal(1),
|
|
171
180
|
});
|
|
172
181
|
export type TableSlideData = z.infer<typeof TableSlideDataSchema>;
|
|
173
182
|
|
|
@@ -175,14 +184,16 @@ export type TableSlideData = z.infer<typeof TableSlideDataSchema>;
|
|
|
175
184
|
export const BarChartSlideDataSchema = z.object({
|
|
176
185
|
type: z.literal(SLIDE_CHART_TYPE.BAR),
|
|
177
186
|
categories: z
|
|
178
|
-
.array(z.string()
|
|
187
|
+
.array(z.string())
|
|
179
188
|
.min(1)
|
|
180
189
|
.max(12)
|
|
181
190
|
.describe('Category labels (e.g., months, products, regions)'),
|
|
182
191
|
series: z
|
|
183
192
|
.array(
|
|
184
193
|
z.object({
|
|
185
|
-
name: z
|
|
194
|
+
name: z
|
|
195
|
+
.string()
|
|
196
|
+
.describe('Series name for legend. Try to include measurements if needed'),
|
|
186
197
|
data: z.array(z.number()).describe('Values corresponding to categories'),
|
|
187
198
|
type: z
|
|
188
199
|
.number()
|
|
@@ -192,18 +203,20 @@ export const BarChartSlideDataSchema = z.object({
|
|
|
192
203
|
}),
|
|
193
204
|
)
|
|
194
205
|
.min(1)
|
|
195
|
-
.max(
|
|
196
|
-
.describe('Data series for the chart'),
|
|
206
|
+
.max(1)
|
|
207
|
+
.describe('Data series for the chart. Only one series is supported'),
|
|
197
208
|
yAxisLabel: z.string().max(40).optional().describe('Y-axis label'),
|
|
198
209
|
unit: z.string().max(10).optional().describe('Unit symbol (%, $, etc.)'),
|
|
210
|
+
version: z.literal(1),
|
|
199
211
|
});
|
|
200
212
|
export type BarChartSlideData = z.infer<typeof BarChartSlideDataSchema>;
|
|
201
213
|
|
|
202
214
|
export const ChartSlideDataSchema = z.object({
|
|
203
215
|
contentType: z.literal(SLIDE_CONTENT_TYPE.CHART),
|
|
204
|
-
title: z.string().describe('Slide title in about 6 words').
|
|
205
|
-
description: z.string().describe("Information on slide's topic").
|
|
216
|
+
title: z.string().describe('Slide title in about 2-6 words').max(100),
|
|
217
|
+
description: z.string().describe("Information on slide's topic").max(600),
|
|
206
218
|
chart: z.discriminatedUnion('type', [BarChartSlideDataSchema]),
|
|
219
|
+
version: z.literal(1),
|
|
207
220
|
});
|
|
208
221
|
export type ChartSlideData = z.infer<typeof ChartSlideDataSchema>;
|
|
209
222
|
|