@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.
@@ -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.IMAGE, [slide_layout_enum_1.SLIDE_LAYOUT.TYPE_1]],
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["IMAGE"] = "IMAGE";
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(200),
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.string().describe('Slide title in about 6 words').min(10).max(200),
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('Literal "Author" in presentation\'s language'),
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('Literal "Date" in presentation\'s language'),
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(200),
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('Fairly long textual description of the point presented in the title. A couple of paragraphs.')
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(1000),
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.string().min(1))
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.object({
101
- contentType: zod_1.z.literal(enums_1.SLIDE_CONTENT_TYPE.IMAGE),
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("Either a short description or a slightly long description of the slide's title depending on the context")
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(150)))
131
- .min(2)
132
- .max(10)
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().min(1).max(12))
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.string().min(1).max(12).describe('Series name for legend'),
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(12)
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').min(10).max(200),
165
- description: zod_1.z.string().describe("Information on slide's topic").min(10).max(400),
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot-tools",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "scripts": {
@@ -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.IMAGE, [SLIDE_LAYOUT.TYPE_1]],
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]],
@@ -4,7 +4,7 @@ export enum SLIDE_CONTENT_TYPE {
4
4
  SECTION_BREAK = 'SECTION_BREAK',
5
5
  STRUCTURED_LIST = 'STRUCTURED_LIST',
6
6
  CONTENTS = 'CONTENTS',
7
- IMAGE = 'IMAGE',
7
+ TEXT_WITH_IMAGE = 'TEXT_WITH_IMAGE',
8
8
  THANK_YOU = 'THANK_YOU',
9
9
  TABLE = 'TABLE',
10
10
  CHART = 'CHART',
@@ -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(200),
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.string().describe('Slide title in about 6 words').min(10).max(200),
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('Literal "Author" in presentation\'s language'),
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('Literal "Date" in presentation\'s language'),
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(200),
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
- 'Fairly long textual description of the point presented in the title. A couple of paragraphs.',
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(1000),
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(z.string().min(1))
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.object({
127
- contentType: z.literal(SLIDE_CONTENT_TYPE.IMAGE),
128
- title: z.string().describe('Slide title in about 6 words').min(10).max(200),
129
- description: z
130
- .string()
131
- .describe(
132
- "Either a short description or a slightly long description of the slide's title depending on the context",
133
- )
134
- .min(10)
135
- .max(500),
136
- imageSlot: ImageSlotSchema,
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(150)))
163
- .min(2)
164
- .max(10)
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().min(1).max(12))
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.string().min(1).max(12).describe('Series name for legend'),
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(12)
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').min(10).max(200),
205
- description: z.string().describe("Information on slide's topic").min(10).max(400),
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