@cloudcannon/configuration-types 0.0.52 → 0.0.54

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.
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://github.com/cloudcannon/configuration-types/releases/latest/download/cloudcannon-snippets.schema.json",
4
3
  "type": "object",
5
4
  "propertyNames": {
6
5
  "type": "string"
@@ -8,10 +7,9 @@
8
7
  "additionalProperties": {
9
8
  "$ref": "#/definitions/type.snippet"
10
9
  },
10
+ "$id": "https://github.com/cloudcannon/configuration-types/releases/latest/download/cloudcannon-snippets.schema.json",
11
11
  "definitions": {
12
12
  "type.snippet": {
13
- "title": "Snippet",
14
- "description": "This key defines a snippet configuration.",
15
13
  "type": "object",
16
14
  "properties": {
17
15
  "_inputs": {
@@ -142,7 +140,6 @@
142
140
  "additionalProperties": {
143
141
  "anyOf": [
144
142
  {
145
- "title": "Argument List Parser Configuration",
146
143
  "type": "object",
147
144
  "properties": {
148
145
  "parser": {
@@ -182,12 +179,12 @@
182
179
  "options"
183
180
  ],
184
181
  "additionalProperties": false,
182
+ "title": "Argument List Parser Configuration",
185
183
  "documented": true,
186
184
  "description": "This key defines a parser configuration that parses a list of distinct positional arguments based on their position.\n\n## Examples\n\nIn this example, we have configured an argument list parser to parse distinct positional arguments based on their position.\n\n```markdown\n{{<figure \"image.png\" \"My image title\">}}\n └──────────────────────────┘\n```",
187
185
  "markdownDescription": "This key defines a parser configuration that parses a list of distinct positional arguments based on their position.\n\n## Examples\n\nIn this example, we have configured an argument list parser to parse distinct positional arguments based on their position.\n\n```markdown\n{{<figure \"image.png\" \"My image title\">}}\n └──────────────────────────┘\n```"
188
186
  },
189
187
  {
190
- "title": "Argument Parser Configuration",
191
188
  "type": "object",
192
189
  "properties": {
193
190
  "parser": {
@@ -220,12 +217,12 @@
220
217
  "options"
221
218
  ],
222
219
  "additionalProperties": false,
220
+ "title": "Argument Parser Configuration",
223
221
  "documented": true,
224
222
  "description": "This key defines a parser configuration that parses a single argument, optionally delimited by characters.\n\nUseful for matching a single positional argument.\n\nThe argument parser is also used to parse a list of repeating arguments.\n\n## Examples\n\nIn this example, we have configured an argument parser to parse a single positional argument.\n\n```markdown\n{{<figure image.png>}}\n └───────┘\n```\n\nIn this example, we have configured an argument parser to parse a list of repeating arguments.\n\n```markdown\n{{<images image1.png image2.png image3.png>}}\n └──────────────────────────────┘\n```",
225
223
  "markdownDescription": "This key defines a parser configuration that parses a single argument, optionally delimited by characters.\n\nUseful for matching a single positional argument.\n\nThe argument parser is also used to parse a list of repeating arguments.\n\n## Examples\n\nIn this example, we have configured an argument parser to parse a single positional argument.\n\n```markdown\n{{<figure image.png>}}\n └───────┘\n```\n\nIn this example, we have configured an argument parser to parse a list of repeating arguments.\n\n```markdown\n{{<images image1.png image2.png image3.png>}}\n └──────────────────────────────┘\n```"
226
224
  },
227
225
  {
228
- "title": "Content Parser Configuration",
229
226
  "type": "object",
230
227
  "properties": {
231
228
  "parser": {
@@ -357,12 +354,12 @@
357
354
  "options"
358
355
  ],
359
356
  "additionalProperties": false,
357
+ "title": "Content Parser Configuration",
360
358
  "documented": true,
361
359
  "description": "This key defines a parser configuration that parses rich multiline content, such as the content between paired tags. Can be configured to parse nested snippets within.\n\n## Examples\n\nIn this example, we have configured a content parser to parse rich multiline content between paired tags.\n\n```liquid\n{% highlight \"js\" %} let a = b; {% endhighlight %}\n └──────────┘\n```",
362
360
  "markdownDescription": "This key defines a parser configuration that parses rich multiline content, such as the content between paired tags. Can be configured to parse nested snippets within.\n\n## Examples\n\nIn this example, we have configured a content parser to parse rich multiline content between paired tags.\n\n```liquid\n{% highlight \"js\" %} let a = b; {% endhighlight %}\n └──────────┘\n```"
363
361
  },
364
362
  {
365
- "title": "Key Value List Parser Configuration",
366
363
  "type": "object",
367
364
  "properties": {
368
365
  "parser": {
@@ -407,12 +404,12 @@
407
404
  "parser"
408
405
  ],
409
406
  "additionalProperties": false,
407
+ "title": "Key Value List Parser Configuration",
410
408
  "documented": true,
411
409
  "description": "This key defines a parser configuration that parses repeating pairs of keys and values.\n\nUseful for most SSG snippets that take properties.\n\nCan be configured to handle most syntax forms of key value pairs.\n\n## Examples\n\nIn this example, we have configured a key-value list parser to parse repeating pairs of keys and values in Liquid syntax.\n\n```liquid\n{% include \"image.html\" image: \"tree.png\" alt: \"Image of a tree\" %}\n └──────────────────────────────────────┘\n```\n\nIn this example, we have configured a key-value list parser to parse repeating pairs of keys and values in Markdown syntax.\n\n```markdown\n<Link href=\"/about/\" new_tab={true}/>\n └───────────────────────────┘\n```",
412
410
  "markdownDescription": "This key defines a parser configuration that parses repeating pairs of keys and values.\n\nUseful for most SSG snippets that take properties.\n\nCan be configured to handle most syntax forms of key value pairs.\n\n## Examples\n\nIn this example, we have configured a key-value list parser to parse repeating pairs of keys and values in Liquid syntax.\n\n```liquid\n{% include \"image.html\" image: \"tree.png\" alt: \"Image of a tree\" %}\n └──────────────────────────────────────┘\n```\n\nIn this example, we have configured a key-value list parser to parse repeating pairs of keys and values in Markdown syntax.\n\n```markdown\n<Link href=\"/about/\" new_tab={true}/>\n └───────────────────────────┘\n```"
413
411
  },
414
412
  {
415
- "title": "Literal Parser Configuration",
416
413
  "type": "object",
417
414
  "properties": {
418
415
  "parser": {
@@ -473,12 +470,12 @@
473
470
  "options"
474
471
  ],
475
472
  "additionalProperties": false,
473
+ "title": "Literal Parser Configuration",
476
474
  "documented": true,
477
475
  "description": "This key defines a parser configuration that parses an exact literal value. Mainly useful when configuring a snippet template.",
478
476
  "markdownDescription": "This key defines a parser configuration that parses an exact literal value. Mainly useful when configuring a snippet template."
479
477
  },
480
478
  {
481
- "title": "Optional Parser Configuration",
482
479
  "type": "object",
483
480
  "properties": {
484
481
  "parser": {
@@ -522,12 +519,12 @@
522
519
  "options"
523
520
  ],
524
521
  "additionalProperties": false,
522
+ "title": "Optional Parser Configuration",
525
523
  "documented": true,
526
524
  "description": "This key toggles whether matching zero times is a valid state for this parser.\n\nSetting this key to `true` will allow matching zero times as a valid state. If `false`, this parser requires at least one matching value. Setting this to `true` is preferred to wrapping the `repeating` parser inside an `optional` parser.\n\nBy default, this key is `false` (i.e., at least one matching value is required).",
527
525
  "markdownDescription": "This key toggles whether matching zero times is a valid state for this parser.\n\nSetting this key to `true` will allow matching zero times as a valid state. If `false`, this parser requires at least one matching value. Setting this to `true` is preferred to wrapping the `repeating` parser inside an `optional` parser.\n\nBy default, this key is `false` (i.e., at least one matching value is required)."
528
526
  },
529
527
  {
530
- "title": "Repeating Literal Parser Config",
531
528
  "type": "object",
532
529
  "properties": {
533
530
  "parser": {
@@ -585,12 +582,12 @@
585
582
  "options"
586
583
  ],
587
584
  "additionalProperties": false,
585
+ "title": "Repeating Literal Parser Config",
588
586
  "documented": true,
589
587
  "description": "This key defines a parser configuration that parses a repeating set of exact literal values.",
590
588
  "markdownDescription": "This key defines a parser configuration that parses a repeating set of exact literal values."
591
589
  },
592
590
  {
593
- "title": "Repeating Parser Configuration",
594
591
  "type": "object",
595
592
  "properties": {
596
593
  "parser": {
@@ -658,12 +655,12 @@
658
655
  "options"
659
656
  ],
660
657
  "additionalProperties": false,
658
+ "title": "Repeating Parser Configuration",
661
659
  "documented": true,
662
660
  "description": "This key defines a higher-order parser configuration that wraps a snippet string and allows it to repeat.",
663
661
  "markdownDescription": "This key defines a higher-order parser configuration that wraps a snippet string and allows it to repeat."
664
662
  },
665
663
  {
666
- "title": "Wrapper Parser Configuration",
667
664
  "type": "object",
668
665
  "properties": {
669
666
  "parser": {
@@ -710,6 +707,7 @@
710
707
  "options"
711
708
  ],
712
709
  "additionalProperties": false,
710
+ "title": "Wrapper Parser Configuration",
713
711
  "documented": true,
714
712
  "description": "This key defines a wrapper parser configuration for wrapping another snippet configuration.\n\nThe value is an object that contains a `parser` property set to `wrapper` and an `options` object with `snippet` and optional `remove_empty` properties. The wrapper parser wraps another snippet configuration, allowing it to be used within a different snippet context.\n\n## Examples\n\nIn this example, we have configured a wrapper parser to wrap a content snippet.\n\n```yaml\n_snippets:\n example:\n snippet: \"<<example [[wrapped_content]]>>\"\n params:\n wrapped_content:\n parser: wrapper\n options:\n snippet: 'content'\n content:\n snippet: \"<<content [[text]]>>\"\n params:\n text:\n parser: content\n options:\n editor_key: content_text\n```",
715
713
  "markdownDescription": "This key defines a wrapper parser configuration for wrapping another snippet configuration.\n\nThe value is an object that contains a `parser` property set to `wrapper` and an `options` object with `snippet` and optional `remove_empty` properties. The wrapper parser wraps another snippet configuration, allowing it to be used within a different snippet context.\n\n## Examples\n\nIn this example, we have configured a wrapper parser to wrap a content snippet.\n\n```yaml\n_snippets:\n example:\n snippet: \"<<example [[wrapped_content]]>>\"\n params:\n wrapped_content:\n parser: wrapper\n options:\n snippet: 'content'\n content:\n snippet: \"<<content [[text]]>>\"\n params:\n text:\n parser: content\n options:\n editor_key: content_text\n```"
@@ -725,12 +723,12 @@
725
723
  }
726
724
  },
727
725
  "additionalProperties": false,
726
+ "title": "Snippet",
727
+ "description": "This key defines a snippet configuration.",
728
728
  "documented": true,
729
729
  "markdownDescription": "This key defines a snippet configuration."
730
730
  },
731
731
  "type._inputs": {
732
- "title": "Inputs",
733
- "description": "This key defines which inputs are available at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_inputs` will default to any\nvalues configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\n## Examples\n\nIn this example, we have configured the `date_created` key as a *Date and Time Input*, which will automatically populate when you create a file using this input. Editors cannot alter this input as the interface is disabled.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n comment: UTC +0 timezone\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n hidden: false\n disabled: true\n instance_value: NOW\n cascade: true\n options:\n timezone: Etc/UTC\n```\n\nIn this example, we have configured the `blog_tags` key as a *Multiselect Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n blog_tags:\n type: multiselect\n label: Blog type\n comment: Select a blog type\n context:\n open: false\n title: Help\n icon: help\n content: |\n Blog tags help our users filter articles by topic.\n options:\n values:\n - Opinion\n - Feature\n - Resource\n```",
734
732
  "type": "object",
735
733
  "propertyNames": {
736
734
  "type": "string"
@@ -738,15 +736,14 @@
738
736
  "additionalProperties": {
739
737
  "$ref": "#/definitions/Input"
740
738
  },
739
+ "title": "Inputs",
740
+ "description": "This key defines which inputs are available at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_inputs` will default to any\nvalues configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\n## Examples\n\nIn this example, we have configured the `date_created` key as a *Date and Time Input*, which will automatically populate when you create a file using this input. Editors cannot alter this input as the interface is disabled.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n comment: UTC +0 timezone\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n hidden: false\n disabled: true\n instance_value: NOW\n cascade: true\n options:\n timezone: Etc/UTC\n```\n\nIn this example, we have configured the `blog_tags` key as a *Multiselect Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n blog_tags:\n type: multiselect\n label: Blog type\n comment: Select a blog type\n context:\n open: false\n title: Help\n icon: help\n content: |\n Blog tags help our users filter articles by topic.\n options:\n values:\n - Opinion\n - Feature\n - Resource\n```",
741
741
  "documented": true,
742
742
  "markdownDescription": "This key defines which inputs are available at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_inputs` will default to any\nvalues configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\n## Examples\n\nIn this example, we have configured the `date_created` key as a *Date and Time Input*, which will automatically populate when you create a file using this input. Editors cannot alter this input as the interface is disabled.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n comment: UTC +0 timezone\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n hidden: false\n disabled: true\n instance_value: NOW\n cascade: true\n options:\n timezone: Etc/UTC\n```\n\nIn this example, we have configured the `blog_tags` key as a *Multiselect Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n blog_tags:\n type: multiselect\n label: Blog type\n comment: Select a blog type\n context:\n open: false\n title: Help\n icon: help\n content: |\n Blog tags help our users filter articles by topic.\n options:\n values:\n - Opinion\n - Feature\n - Resource\n```"
743
743
  },
744
744
  "Input": {
745
- "title": "Input",
746
745
  "anyOf": [
747
746
  {
748
- "title": "Known Input",
749
- "description": "This key defines an input configuration at a given level of the configuration cascade.\n\nThe value is an object that can contain `type`, `label`, `options`, `disabled`, `hidden`, and other input-specific properties. Each input configuration defines how team members interact with data in the *Data Editor*.\n\nFor more information, please read our documentation on [inputs](https://cloudcannon.com/documentation/articles/what-are-inputs/).\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n title:\n type: text\n label: Title\n```",
750
747
  "oneOf": [
751
748
  {
752
749
  "$ref": "#/definitions/TextInput"
@@ -806,6 +803,8 @@
806
803
  "$ref": "#/definitions/AutoInput"
807
804
  }
808
805
  ],
806
+ "title": "Known Input",
807
+ "description": "This key defines an input configuration at a given level of the configuration cascade.\n\nThe value is an object that can contain `type`, `label`, `options`, `disabled`, `hidden`, and other input-specific properties. Each input configuration defines how team members interact with data in the *Data Editor*.\n\nFor more information, please read our documentation on [inputs](https://cloudcannon.com/documentation/articles/what-are-inputs/).\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n title:\n type: text\n label: Title\n```",
809
808
  "documented": true,
810
809
  "markdownDescription": "This key defines an input configuration at a given level of the configuration cascade.\n\nThe value is an object that can contain `type`, `label`, `options`, `disabled`, `hidden`, and other input-specific properties. Each input configuration defines how team members interact with data in the *Data Editor*.\n\nFor more information, please read our documentation on [inputs](https://cloudcannon.com/documentation/articles/what-are-inputs/).\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n title:\n type: text\n label: Title\n```"
811
810
  },
@@ -813,13 +812,12 @@
813
812
  "$ref": "#/definitions/UnknownInput"
814
813
  }
815
814
  ],
815
+ "title": "Input",
816
816
  "documented": true,
817
817
  "description": "This key defines an input configuration at a given level of the configuration cascade.\n\nThe value is an object that can contain `type`, `label`, `options`, `disabled`, `hidden`, and other input-specific properties. Each input configuration defines how team members interact with data in the *Data Editor*.\n\nFor more information, please read our documentation on [inputs](https://cloudcannon.com/documentation/articles/what-are-inputs/).\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n title:\n type: text\n label: Title\n```",
818
818
  "markdownDescription": "This key defines an input configuration at a given level of the configuration cascade.\n\nThe value is an object that can contain `type`, `label`, `options`, `disabled`, `hidden`, and other input-specific properties. Each input configuration defines how team members interact with data in the *Data Editor*.\n\nFor more information, please read our documentation on [inputs](https://cloudcannon.com/documentation/articles/what-are-inputs/).\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* in the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _inputs:\n title:\n type: text\n label: Title\n```"
819
819
  },
820
820
  "TextInput": {
821
- "title": "Text Input",
822
- "description": "This key defines a simple editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input*.\n\n```yaml\n_inputs:\n title:\n type: text\n label: Blog Title\n```",
823
821
  "type": "object",
824
822
  "properties": {
825
823
  "comment": {
@@ -864,8 +862,6 @@
864
862
  "$ref": "#/definitions/type._inputs.*.cascade"
865
863
  },
866
864
  "type": {
867
- "title": "Type",
868
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* type.\n\n```yaml\n_inputs:\n title:\n type: text\n```",
869
865
  "type": "string",
870
866
  "enum": [
871
867
  "text",
@@ -877,11 +873,12 @@
877
873
  "github",
878
874
  "instagram"
879
875
  ],
876
+ "title": "Type",
877
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* type.\n\n```yaml\n_inputs:\n title:\n type: text\n```",
880
878
  "documented": true,
881
879
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input* type.\n\n```yaml\n_inputs:\n title:\n type: text\n```"
882
880
  },
883
881
  "options": {
884
- "description": "This key defines options that are specific to Text Inputs.\n\n## Examples\n\nIn this example, we have configured *Text Input* options including comment and icon.\n\n```yaml\n_inputs:\n title:\n type: text\n options:\n comment: Enter a title\n icon: title\n```",
885
882
  "type": "object",
886
883
  "properties": {
887
884
  "max_length": {
@@ -896,6 +893,33 @@
896
893
  "min_length_message": {
897
894
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
898
895
  },
896
+ "max_words": {
897
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
898
+ },
899
+ "max_words_message": {
900
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
901
+ },
902
+ "min_words": {
903
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
904
+ },
905
+ "min_words_message": {
906
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
907
+ },
908
+ "max_graphemes": {
909
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
910
+ },
911
+ "max_graphemes_message": {
912
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
913
+ },
914
+ "min_graphemes": {
915
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
916
+ },
917
+ "min_graphemes_message": {
918
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
919
+ },
920
+ "locale": {
921
+ "$ref": "#/definitions/type._inputs.*.options.locale"
922
+ },
899
923
  "pattern": {
900
924
  "$ref": "#/definitions/type._inputs.*.options.pattern"
901
925
  },
@@ -962,6 +986,7 @@
962
986
  }
963
987
  },
964
988
  "additionalProperties": false,
989
+ "description": "This key defines options that are specific to Text Inputs.\n\n## Examples\n\nIn this example, we have configured *Text Input* options including comment and icon.\n\n```yaml\n_inputs:\n title:\n type: text\n options:\n comment: Enter a title\n icon: title\n```",
965
990
  "documented": true,
966
991
  "title": "options",
967
992
  "markdownDescription": "This key defines options that are specific to Text Inputs.\n\n## Examples\n\nIn this example, we have configured *Text Input* options including comment and icon.\n\n```yaml\n_inputs:\n title:\n type: text\n options:\n comment: Enter a title\n icon: title\n```"
@@ -971,6 +996,8 @@
971
996
  "type"
972
997
  ],
973
998
  "additionalProperties": false,
999
+ "title": "Text Input",
1000
+ "description": "This key defines a simple editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input*.\n\n```yaml\n_inputs:\n title:\n type: text\n label: Blog Title\n```",
974
1001
  "documented": true,
975
1002
  "markdownDescription": "This key defines a simple editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `title` key as a *Text Input*.\n\n```yaml\n_inputs:\n title:\n type: text\n label: Blog Title\n```"
976
1003
  },
@@ -982,7 +1009,6 @@
982
1009
  "markdownDescription": "This key defines the subtitle text above an Input.\n\nCloudCannon supports a limited selection of Markdown formatting for the value of this key: links, bold, italic, subscript, superscript, and inline\ncode.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add helpful guidance for our `page_description` Input.\n\n```yaml\n_inputs:\n page_description:\n type: text\n label: Page Description\n comment: Enter a brief description of this page for search engines\n```"
983
1010
  },
984
1011
  "type._inputs.*.context": {
985
- "description": "This key defines a context box for extra information about an Input.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add a context box to our `date_created` Input to explain its purpose.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n instance_value: NOW\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n```",
986
1012
  "type": "object",
987
1013
  "properties": {
988
1014
  "content": {
@@ -1020,13 +1046,12 @@
1020
1046
  }
1021
1047
  },
1022
1048
  "additionalProperties": false,
1049
+ "description": "This key defines a context box for extra information about an Input.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add a context box to our `date_created` Input to explain its purpose.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n instance_value: NOW\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n```",
1023
1050
  "documented": true,
1024
1051
  "title": "context",
1025
1052
  "markdownDescription": "This key defines a context box for extra information about an Input.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add a context box to our `date_created` Input to explain its purpose.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n instance_value: NOW\n context:\n open: false\n title: Help\n icon: help\n content: This date field will automatically populate when you create an article.\n```"
1026
1053
  },
1027
1054
  "icon": {
1028
- "title": "Icon",
1029
- "description": "Material Symbol icon names available in CloudCannon for UI elements and content previews.",
1030
1055
  "type": "string",
1031
1056
  "enum": [
1032
1057
  "123",
@@ -4614,17 +4639,17 @@
4614
4639
  "zoom_out",
4615
4640
  "zoom_out_map"
4616
4641
  ],
4642
+ "title": "Icon",
4643
+ "description": "Material Symbol icon names available in CloudCannon for UI elements and content previews.",
4617
4644
  "documented": false,
4618
4645
  "markdownDescription": "Material Symbol icon names available in CloudCannon for UI elements and content previews."
4619
4646
  },
4620
4647
  "type.documentation": {
4621
- "title": "Documentation",
4622
- "description": "This key defines the documentation link at the top of a *Collection browser*.\n\nCollection documentation is useful for assisting your team members.\n\n## Examples\n\nIn this example, the documentation link for the `data` Collection goes to [CloudCannon Documentation](https://cloudcannon.com/documentation/).\n\n```yaml\ncollections_config:\n data:\n documentation:\n url: https://cloudcannon.com/documentation/\n text: CloudCannon Documentation\n icon: star\n```",
4623
4648
  "type": "object",
4624
4649
  "properties": {
4625
4650
  "url": {
4626
- "description": "This key defines the URL for the documentation link at the top of a *Collection browser*.\n\nYou must define this key for the\n`documentation` object to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have configured the `blog` Collection documentation link to go to `example.com`.\n\n```yaml\ncollections_config:\n blog:\n documentation:\n url: https://example.com\n```",
4627
4651
  "type": "string",
4652
+ "description": "This key defines the URL for the documentation link at the top of a *Collection browser*.\n\nYou must define this key for the\n`documentation` object to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have configured the `blog` Collection documentation link to go to `example.com`.\n\n```yaml\ncollections_config:\n blog:\n documentation:\n url: https://example.com\n```",
4628
4653
  "documented": true,
4629
4654
  "title": "url",
4630
4655
  "markdownDescription": "This key defines the URL for the documentation link at the top of a *Collection browser*.\n\nYou must define this key for the\n`documentation` object to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have configured the `blog` Collection documentation link to go to `example.com`.\n\n```yaml\ncollections_config:\n blog:\n documentation:\n url: https://example.com\n```"
@@ -4653,6 +4678,8 @@
4653
4678
  "url"
4654
4679
  ],
4655
4680
  "additionalProperties": false,
4681
+ "title": "Documentation",
4682
+ "description": "This key defines the documentation link at the top of a *Collection browser*.\n\nCollection documentation is useful for assisting your team members.\n\n## Examples\n\nIn this example, the documentation link for the `data` Collection goes to [CloudCannon Documentation](https://cloudcannon.com/documentation/).\n\n```yaml\ncollections_config:\n data:\n documentation:\n url: https://cloudcannon.com/documentation/\n text: CloudCannon Documentation\n icon: star\n```",
4656
4683
  "documented": true,
4657
4684
  "markdownDescription": "This key defines the documentation link at the top of a *Collection browser*.\n\nCollection documentation is useful for assisting your team members.\n\n## Examples\n\nIn this example, the documentation link for the `data` Collection goes to [CloudCannon Documentation](https://cloudcannon.com/documentation/).\n\n```yaml\ncollections_config:\n data:\n documentation:\n url: https://cloudcannon.com/documentation/\n text: CloudCannon Documentation\n icon: star\n```"
4658
4685
  },
@@ -4668,15 +4695,15 @@
4668
4695
  "default": false,
4669
4696
  "anyOf": [
4670
4697
  {
4671
- "title": "Boolean Hidden",
4672
4698
  "type": "boolean",
4699
+ "title": "Boolean Hidden",
4673
4700
  "documented": true,
4674
4701
  "description": "This key represents a boolean value for the `hidden` key that toggles whether CloudCannon hides an input from view.\n\nWhen set to `true`, CloudCannon hides the input from the *Data Editor* and the sidebar of the *Visual Editor* or *Content Editor*. The input still exists in the file and can be edited in the *Source Editor*.\n\nWhen set to `false`, CloudCannon displays the input normally.\n\nBy default, this key follows the input naming convention where key names beginning with an underscore are hidden (`true`). Otherwise, this key defaults to `false` (i.e., the input is visible).\n\n## Examples\n\nIn this example, we have configured an input to be hidden using a boolean value, making it only editable in the *Source Editor*.\n\n```yaml\n_inputs:\n internal_id:\n type: text\n label: Internal ID\n hidden: true\n```",
4675
4702
  "markdownDescription": "This key represents a boolean value for the `hidden` key that toggles whether CloudCannon hides an input from view.\n\nWhen set to `true`, CloudCannon hides the input from the *Data Editor* and the sidebar of the *Visual Editor* or *Content Editor*. The input still exists in the file and can be edited in the *Source Editor*.\n\nWhen set to `false`, CloudCannon displays the input normally.\n\nBy default, this key follows the input naming convention where key names beginning with an underscore are hidden (`true`). Otherwise, this key defaults to `false` (i.e., the input is visible).\n\n## Examples\n\nIn this example, we have configured an input to be hidden using a boolean value, making it only editable in the *Source Editor*.\n\n```yaml\n_inputs:\n internal_id:\n type: text\n label: Internal ID\n hidden: true\n```"
4676
4703
  },
4677
4704
  {
4678
- "title": "Query String Hidden",
4679
4705
  "type": "string",
4706
+ "title": "Query String Hidden",
4680
4707
  "documented": true,
4681
4708
  "description": "This key represents a query string value for the `hidden` key that conditionally hides an input based on another input's value.\n\nThe value is a string that references a sibling input key name. CloudCannon evaluates the referenced input's value to determine whether to hide this input.\n\nWhen the referenced input is truthy, CloudCannon hides this input. You can reverse this behavior by prefixing the string with `!`.\n\nFor reverse values in YAML files, the string should be wrapped in single or double quotation marks.\n\n## Examples\n\nIn this example, we have configured an input to be hidden when the `published` input is truthy.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n draft_notes:\n type: textarea\n label: Draft notes\n hidden: published\n```\n\nIn this example, we have configured an input to be hidden when the `published` input is falsy using the `!` prefix.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n publish_date:\n type: datetime\n label: Publish date\n hidden: '!published'\n```",
4682
4709
  "markdownDescription": "This key represents a query string value for the `hidden` key that conditionally hides an input based on another input's value.\n\nThe value is a string that references a sibling input key name. CloudCannon evaluates the referenced input's value to determine whether to hide this input.\n\nWhen the referenced input is truthy, CloudCannon hides this input. You can reverse this behavior by prefixing the string with `!`.\n\nFor reverse values in YAML files, the string should be wrapped in single or double quotation marks.\n\n## Examples\n\nIn this example, we have configured an input to be hidden when the `published` input is truthy.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n draft_notes:\n type: textarea\n label: Draft notes\n hidden: published\n```\n\nIn this example, we have configured an input to be hidden when the `published` input is falsy using the `!` prefix.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n publish_date:\n type: datetime\n label: Publish date\n hidden: '!published'\n```"
@@ -4691,15 +4718,15 @@
4691
4718
  "default": false,
4692
4719
  "anyOf": [
4693
4720
  {
4694
- "title": "Boolean",
4695
4721
  "type": "boolean",
4722
+ "title": "Boolean",
4696
4723
  "documented": true,
4697
4724
  "description": "This key represents a boolean value for the `disabled` key that toggles whether CloudCannon prevents editing of an input value.\n\nWhen set to `true`, CloudCannon prevents team members from editing the input value in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*. The input value is still displayed but cannot be modified outside of the *Source Editor*.\n\nWhen set to `false`, team members can edit the input value normally.\n\nBy default, this key is `false` (i.e., team members can edit input values).\n\n## Examples\n\nIn this example, we have configured a datetime input to be disabled using a boolean value, preventing editors from modifying the automatically generated date.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n disabled: true\n instance_value: NOW\n```",
4698
4725
  "markdownDescription": "This key represents a boolean value for the `disabled` key that toggles whether CloudCannon prevents editing of an input value.\n\nWhen set to `true`, CloudCannon prevents team members from editing the input value in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*. The input value is still displayed but cannot be modified outside of the *Source Editor*.\n\nWhen set to `false`, team members can edit the input value normally.\n\nBy default, this key is `false` (i.e., team members can edit input values).\n\n## Examples\n\nIn this example, we have configured a datetime input to be disabled using a boolean value, preventing editors from modifying the automatically generated date.\n\n```yaml\n_inputs:\n date_created:\n type: datetime\n label: Date of article creation\n disabled: true\n instance_value: NOW\n```"
4699
4726
  },
4700
4727
  {
4701
- "title": "Query String",
4702
4728
  "type": "string",
4729
+ "title": "Query String",
4703
4730
  "documented": true,
4704
4731
  "description": "This key represents a query string value for the `disabled` key that conditionally prevents editing of an input value based on another input's value.\n\nThe value is a string that references a sibling input key name. CloudCannon evaluates the referenced input's value to determine whether to disable this input.\n\nWhen the referenced input is truthy, CloudCannon disables this input. You can reverse this behavior by prefixing the string with `!`.\n\nFor reverse values in YAML files, the string should be wrapped in single or double quotation marks.\n\n## Examples\n\nIn this example, we have configured an input to be disabled when the `published` input is truthy.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n edit_date:\n type: datetime\n label: Last edited\n disabled: published\n```\n\nIn this example, we have configured an input to be disabled when the `published` input is falsy using the `!` prefix.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n draft_notes:\n type: textarea\n label: Draft notes\n disabled: '!published'\n```",
4705
4732
  "markdownDescription": "This key represents a query string value for the `disabled` key that conditionally prevents editing of an input value based on another input's value.\n\nThe value is a string that references a sibling input key name. CloudCannon evaluates the referenced input's value to determine whether to disable this input.\n\nWhen the referenced input is truthy, CloudCannon disables this input. You can reverse this behavior by prefixing the string with `!`.\n\nFor reverse values in YAML files, the string should be wrapped in single or double quotation marks.\n\n## Examples\n\nIn this example, we have configured an input to be disabled when the `published` input is truthy.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n edit_date:\n type: datetime\n label: Last edited\n disabled: published\n```\n\nIn this example, we have configured an input to be disabled when the `published` input is falsy using the `!` prefix.\n\n```yaml\n_inputs:\n published:\n type: checkbox\n label: Published\n draft_notes:\n type: textarea\n label: Draft notes\n disabled: '!published'\n```"
@@ -4764,6 +4791,69 @@
4764
4791
  "title": "min_length_message",
4765
4792
  "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.min_length`.\n\nThis key requires you to define `options.min_length`.\n\nThis key has no default.\n\nThis key is available for Code, Color, File, Select, Text, Rich Text, and URL Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number of characters using a custom message.\n\n```yaml\n_inputs:\n seo_description:\n type: markdown\n comment: Enter a brief description of this blog.\n options:\n max_length: 125\n max_length_message: You are only allowed 125 characters.\n min_length: 25\n min_length_message: Please write more than 25 characters.\n```"
4766
4793
  },
4794
+ "type._inputs.*.options.max_words": {
4795
+ "description": "This key defines the maximum string length, in words, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too long. If the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your changes, or discard your unsaved changes.",
4796
+ "type": "number",
4797
+ "documented": true,
4798
+ "title": "max_words",
4799
+ "markdownDescription": "This key defines the maximum string length, in words, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too long. If the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your changes, or discard your unsaved changes."
4800
+ },
4801
+ "type._inputs.*.options.max_words_message": {
4802
+ "description": "This key defines the message that explains which maximum string length an Input will accept. This key requires you to define `options.max_words.",
4803
+ "type": "string",
4804
+ "documented": true,
4805
+ "title": "max_words_message",
4806
+ "markdownDescription": "This key defines the message that explains which maximum string length an Input will accept. This key requires you to define `options.max_words."
4807
+ },
4808
+ "type._inputs.*.options.min_words": {
4809
+ "description": "This key defines the minimum string length, in words, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too short. If the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your changes, or discard your unsaved changes.",
4810
+ "type": "number",
4811
+ "documented": true,
4812
+ "title": "min_words",
4813
+ "markdownDescription": "This key defines the minimum string length, in words, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too short. If the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your changes, or discard your unsaved changes."
4814
+ },
4815
+ "type._inputs.*.options.min_words_message": {
4816
+ "description": "This key defines the message that explains which minimum string length an Input will accept. This key requires you to define `options.min_words`.",
4817
+ "type": "string",
4818
+ "documented": true,
4819
+ "title": "min_words_message",
4820
+ "markdownDescription": "This key defines the message that explains which minimum string length an Input will accept. This key requires you to define `options.min_words`."
4821
+ },
4822
+ "type._inputs.*.options.max_graphemes": {
4823
+ "description": "This key defines the maximum string length, in graphemes, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too long. If the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your changes, or discard your unsaved changes.",
4824
+ "type": "number",
4825
+ "documented": true,
4826
+ "title": "max_graphemes",
4827
+ "markdownDescription": "This key defines the maximum string length, in graphemes, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too long. If the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your changes, or discard your unsaved changes."
4828
+ },
4829
+ "type._inputs.*.options.max_graphemes_message": {
4830
+ "description": "This key defines the message that explains which maximum string length an Input will accept. This key requires you to define `options.max_graphemes.",
4831
+ "type": "string",
4832
+ "documented": true,
4833
+ "title": "max_graphemes_message",
4834
+ "markdownDescription": "This key defines the message that explains which maximum string length an Input will accept. This key requires you to define `options.max_graphemes."
4835
+ },
4836
+ "type._inputs.*.options.min_graphemes": {
4837
+ "description": "This key defines the minimum string length, in graphemes, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too short. If the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your changes, or discard your unsaved changes.",
4838
+ "type": "number",
4839
+ "documented": true,
4840
+ "title": "min_graphemes",
4841
+ "markdownDescription": "This key defines the minimum string length, in graphemes, that CloudCannon will allow in an Input. When configured, CloudCannon will warn you when an Input value is too short. If the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your changes, or discard your unsaved changes."
4842
+ },
4843
+ "type._inputs.*.options.min_graphemes_message": {
4844
+ "description": "This key defines the message that explains which minimum string length an Input will accept. This key requires you to define `options.min_graphemes`.",
4845
+ "type": "string",
4846
+ "documented": true,
4847
+ "title": "min_graphemes_message",
4848
+ "markdownDescription": "This key defines the message that explains which minimum string length an Input will accept. This key requires you to define `options.min_graphemes`."
4849
+ },
4850
+ "type._inputs.*.options.locale": {
4851
+ "description": "This key defines the locale that CloudCannon uses to determine the number of words or graphemes in this Input, if you have `max_words`, `min_words`, `max_graphemes`, or `min_graphemes` configured.",
4852
+ "type": "string",
4853
+ "documented": true,
4854
+ "title": "locale",
4855
+ "markdownDescription": "This key defines the locale that CloudCannon uses to determine the number of words or graphemes in this Input, if you have `max_words`, `min_words`, `max_graphemes`, or `min_graphemes` configured."
4856
+ },
4767
4857
  "type._inputs.*.options.pattern": {
4768
4858
  "description": "This key defines a [regular expression](https://re2js.leopard.in.ua/) that the Input value must match.\n\nWhen configured, CloudCannon will require you to enter a value that matches the REGEX pattern.\n\nIf the Input already contains an invalid value, CloudCannon will require you to enter a valid string to save your changes, or discard your unsaved\nchanges.\n\nValue must be a valid REGEX string.\n\nIf your REGEX string includes a `\\` character and CloudCannon Configuration File is a `.yml` file, use single quotes `'` around the string to avoid a\nbuild error.\n\nThis key has no default.\n\nThis key is available for Code, Color, File, Select, Text, Rich Text, and URL Inputs.\n\nTo use this key in a Select Input, `allow_create` must be set to `true`.\n\n## Examples\n\nIn this example, we want our team to add an email address to the `contact_email` Input using the correct email format.\n\n```yaml\n_inputs:\n contact_email:\n type: email\n options:\n pattern: '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'\n pattern_message: 'Please use the format ___@___.__'\n```",
4769
4859
  "type": "string",
@@ -4852,8 +4942,8 @@
4852
4942
  "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.required`.\n\nThis key requires you to define `options.required`.\n\nThis key has no default.\n\nThis key is available for Array, Code, Color, Date and Time, File, Number, Object, Select and Multiselect, Text, Rich Text, and URL Inputs.\n\n## Examples\n\nIn this example, we prompt our team to use enter an Input value using a required message.\n\n```yaml\n_inputs:\n author:\n type: text\n comment: Enter the name of the author for this blog post.\n options:\n required: true\n required_message: You are not allowed to leave this blank.\n```"
4853
4943
  },
4854
4944
  "type._inputs.*.options.empty_type(text)": {
4855
- "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.",
4856
4945
  "default": "null",
4946
+ "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.",
4857
4947
  "type": "string",
4858
4948
  "enum": [
4859
4949
  "null",
@@ -4879,17 +4969,16 @@
4879
4969
  "title": "icon_color(previewentries)"
4880
4970
  },
4881
4971
  "type.preview-entry.(array)": {
4882
- "title": "Array Preview Entry",
4883
4972
  "type": "array",
4884
4973
  "items": {
4885
4974
  "$ref": "#/definitions/type.preview-entry"
4886
4975
  },
4976
+ "title": "Array Preview Entry",
4887
4977
  "documented": true,
4888
4978
  "description": "This key represents an array of preview entries for displaying data on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an array of preview entry objects, strings, or `false` values. Each preview entry object can contain a `key`, `template`, or `text` property. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured an array of preview entries with an array of values to provide fallback options. CloudCannon will use the value of `title` first, then the `{name}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n - template: '{name}'\n - text: 'Untitled'\n```",
4889
4979
  "markdownDescription": "This key represents an array of preview entries for displaying data on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an array of preview entry objects, strings, or `false` values. Each preview entry object can contain a `key`, `template`, or `text` property. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured an array of preview entries with an array of values to provide fallback options. CloudCannon will use the value of `title` first, then the `{name}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n - template: '{name}'\n - text: 'Untitled'\n```"
4890
4980
  },
4891
4981
  "type.preview-entry": {
4892
- "title": "Preview Entry",
4893
4982
  "anyOf": [
4894
4983
  {
4895
4984
  "$ref": "#/definitions/type.preview-entry.(key)"
@@ -4907,17 +4996,17 @@
4907
4996
  "$ref": "#/definitions/type.preview-entry.(false)"
4908
4997
  }
4909
4998
  ],
4999
+ "title": "Preview Entry",
4910
5000
  "documented": true,
4911
5001
  "description": "This key defines a preview entry configuration for displaying data on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an object with a `key`, `template`, or `text` property, a raw text string, `false`, or an array of these values. When multiple entries are provided, CloudCannon will use them in order as fallback options. Preview entries are used to configure how data is displayed in card previews.\n\n## Examples\n\nIn this example, we have configured a preview entry with an array of values to provide fallback options. CloudCannon will use the value of `title` first, then the `{name}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n - template: '{name}'\n - text: 'Untitled'\n```\n\nIn this example, we have configured a preview entry to display the `title` key.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```",
4912
5002
  "markdownDescription": "This key defines a preview entry configuration for displaying data on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an object with a `key`, `template`, or `text` property, a raw text string, `false`, or an array of these values. When multiple entries are provided, CloudCannon will use them in order as fallback options. Preview entries are used to configure how data is displayed in card previews.\n\n## Examples\n\nIn this example, we have configured a preview entry with an array of values to provide fallback options. CloudCannon will use the value of `title` first, then the `{name}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n - template: '{name}'\n - text: 'Untitled'\n```\n\nIn this example, we have configured a preview entry to display the `title` key.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```"
4913
5003
  },
4914
5004
  "type.preview-entry.(key)": {
4915
- "title": "Key Preview Entry",
4916
5005
  "type": "object",
4917
5006
  "properties": {
4918
5007
  "key": {
4919
- "title": "Key Value",
4920
5008
  "type": "string",
5009
+ "title": "Key Value",
4921
5010
  "documented": true,
4922
5011
  "description": "This key defines the data key name to display in a key preview entry.\n\nThe value is a string that specifies the name of a data key whose value will be displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the key value to display the `title` field.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```",
4923
5012
  "markdownDescription": "This key defines the data key name to display in a key preview entry.\n\nThe value is a string that specifies the name of a data key whose value will be displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the key value to display the `title` field.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```"
@@ -4927,17 +5016,17 @@
4927
5016
  "key"
4928
5017
  ],
4929
5018
  "additionalProperties": false,
5019
+ "title": "Key Preview Entry",
4930
5020
  "documented": true,
4931
5021
  "description": "This key represents a key preview entry type for displaying data from a specific key on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `key` property with a string value. This displays the value of the specified data key in card previews.\n\n## Examples\n\nIn this example, we have configured a key preview entry to display the `title` key.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```",
4932
5022
  "markdownDescription": "This key represents a key preview entry type for displaying data from a specific key on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `key` property with a string value. This displays the value of the specified data key in card previews.\n\n## Examples\n\nIn this example, we have configured a key preview entry to display the `title` key.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n```"
4933
5023
  },
4934
5024
  "type.preview-entry.(template)": {
4935
- "title": "Template Preview Entry",
4936
5025
  "type": "object",
4937
5026
  "properties": {
4938
5027
  "template": {
4939
- "title": "Template Value",
4940
5028
  "type": "string",
5029
+ "title": "Template Value",
4941
5030
  "documented": true,
4942
5031
  "description": "This key defines the template string to use in a template preview entry.\n\nThe value is a string that specifies a template with placeholders (e.g., `{name}`, `{date}`) that will be replaced with data values when displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the template value to display author and date.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - template: '{author} - {date}'\n```",
4943
5032
  "markdownDescription": "This key defines the template string to use in a template preview entry.\n\nThe value is a string that specifies a template with placeholders (e.g., `{name}`, `{date}`) that will be replaced with data values when displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the template value to display author and date.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - template: '{author} - {date}'\n```"
@@ -4947,17 +5036,17 @@
4947
5036
  "template"
4948
5037
  ],
4949
5038
  "additionalProperties": false,
5039
+ "title": "Template Preview Entry",
4950
5040
  "documented": true,
4951
5041
  "description": "This key represents a template preview entry type for displaying formatted text using a template on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `template` property with a string value. This displays formatted text using template syntax (e.g., `{name}`) in card previews.\n\n## Examples\n\nIn this example, we have configured a template preview entry to display formatted text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - template: '{author} - {date}'\n```",
4952
5042
  "markdownDescription": "This key represents a template preview entry type for displaying formatted text using a template on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `template` property with a string value. This displays formatted text using template syntax (e.g., `{name}`) in card previews.\n\n## Examples\n\nIn this example, we have configured a template preview entry to display formatted text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - template: '{author} - {date}'\n```"
4953
5043
  },
4954
5044
  "type.preview-entry.(text)": {
4955
- "title": "Text Preview Entry",
4956
5045
  "type": "object",
4957
5046
  "properties": {
4958
5047
  "text": {
4959
- "title": "Text Value",
4960
5048
  "type": "string",
5049
+ "title": "Text Value",
4961
5050
  "documented": true,
4962
5051
  "description": "This key defines the static text string to display in a text preview entry.\n\nThe value is a string that specifies static text to display on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the text value to display a static fallback message.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - text: 'Untitled'\n```",
4963
5052
  "markdownDescription": "This key defines the static text string to display in a text preview entry.\n\nThe value is a string that specifies static text to display on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the text value to display a static fallback message.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - text: 'Untitled'\n```"
@@ -4967,28 +5056,27 @@
4967
5056
  "text"
4968
5057
  ],
4969
5058
  "additionalProperties": false,
5059
+ "title": "Text Preview Entry",
4970
5060
  "documented": true,
4971
5061
  "description": "This key represents a text preview entry type for displaying static text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `text` property with a string value. This displays static text in card previews.\n\n## Examples\n\nIn this example, we have configured a text preview entry to display static text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - text: 'Untitled'\n```",
4972
5062
  "markdownDescription": "This key represents a text preview entry type for displaying static text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an object that contains a `text` property with a string value. This displays static text in card previews.\n\n## Examples\n\nIn this example, we have configured a text preview entry to display static text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - text: 'Untitled'\n```"
4973
5063
  },
4974
5064
  "type.preview-entry.(raw-text)": {
4975
- "title": "Raw Text Preview Entry",
4976
5065
  "type": "string",
5066
+ "title": "Raw Text Preview Entry",
4977
5067
  "documented": true,
4978
5068
  "description": "This key represents a raw text preview entry type for displaying static text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is a string that specifies static text to display in card previews. This is equivalent to using `{ text: \"...\" }` but in a simpler format.\n\n## Examples\n\nIn this example, we have configured a raw text preview entry to display static text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text: 'Untitled'\n```",
4979
5069
  "markdownDescription": "This key represents a raw text preview entry type for displaying static text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is a string that specifies static text to display in card previews. This is equivalent to using `{ text: \"...\" }` but in a simpler format.\n\n## Examples\n\nIn this example, we have configured a raw text preview entry to display static text.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text: 'Untitled'\n```"
4980
5070
  },
4981
5071
  "type.preview-entry.(false)": {
4982
- "title": "False Preview Entry",
4983
5072
  "type": "boolean",
4984
5073
  "const": false,
5074
+ "title": "False Preview Entry",
4985
5075
  "documented": true,
4986
5076
  "description": "This key represents a preview entry that disables the preview display for a specific field on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value must be `false`. Setting a preview entry to `false` will hide that preview element.\n\n## Examples\n\nIn this example, we have configured the preview text to be disabled.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text: false\n```",
4987
5077
  "markdownDescription": "This key represents a preview entry that disables the preview display for a specific field on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value must be `false`. Setting a preview entry to `false` will hide that preview element.\n\n## Examples\n\nIn this example, we have configured the preview text to be disabled.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text: false\n```"
4988
5078
  },
4989
5079
  "TextareaInput": {
4990
- "title": "Textarea Input",
4991
- "description": "This key defines an editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input*.\n\n```yaml\n_inputs:\n description:\n type: textarea\n label: Description\n```",
4992
5080
  "type": "object",
4993
5081
  "properties": {
4994
5082
  "comment": {
@@ -5033,15 +5121,14 @@
5033
5121
  "$ref": "#/definitions/type._inputs.*.cascade"
5034
5122
  },
5035
5123
  "type": {
5036
- "title": "Type",
5037
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input* type.\n\n```yaml\n_inputs:\n description:\n type: textarea\n```",
5038
5124
  "type": "string",
5039
5125
  "const": "textarea",
5126
+ "title": "Type",
5127
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input* type.\n\n```yaml\n_inputs:\n description:\n type: textarea\n```",
5040
5128
  "documented": true,
5041
5129
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input* type.\n\n```yaml\n_inputs:\n description:\n type: textarea\n```"
5042
5130
  },
5043
5131
  "options": {
5044
- "description": "This key defines options that are specific to Textarea Inputs.\n\n## Examples\n\nIn this example, we have configured *Textarea Input* options including comment and character count.\n\n```yaml\n_inputs:\n description:\n type: textarea\n options:\n comment: Enter a description\n show_count: true\n```",
5045
5132
  "type": "object",
5046
5133
  "properties": {
5047
5134
  "max_length": {
@@ -5056,6 +5143,33 @@
5056
5143
  "min_length_message": {
5057
5144
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5058
5145
  },
5146
+ "max_words": {
5147
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5148
+ },
5149
+ "max_words_message": {
5150
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5151
+ },
5152
+ "min_words": {
5153
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5154
+ },
5155
+ "min_words_message": {
5156
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5157
+ },
5158
+ "max_graphemes": {
5159
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5160
+ },
5161
+ "max_graphemes_message": {
5162
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5163
+ },
5164
+ "min_graphemes": {
5165
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5166
+ },
5167
+ "min_graphemes_message": {
5168
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5169
+ },
5170
+ "locale": {
5171
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5172
+ },
5059
5173
  "pattern": {
5060
5174
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5061
5175
  },
@@ -5097,6 +5211,7 @@
5097
5211
  }
5098
5212
  },
5099
5213
  "additionalProperties": false,
5214
+ "description": "This key defines options that are specific to Textarea Inputs.\n\n## Examples\n\nIn this example, we have configured *Textarea Input* options including comment and character count.\n\n```yaml\n_inputs:\n description:\n type: textarea\n options:\n comment: Enter a description\n show_count: true\n```",
5100
5215
  "documented": true,
5101
5216
  "title": "options",
5102
5217
  "markdownDescription": "This key defines options that are specific to Textarea Inputs.\n\n## Examples\n\nIn this example, we have configured *Textarea Input* options including comment and character count.\n\n```yaml\n_inputs:\n description:\n type: textarea\n options:\n comment: Enter a description\n show_count: true\n```"
@@ -5106,12 +5221,12 @@
5106
5221
  "type"
5107
5222
  ],
5108
5223
  "additionalProperties": false,
5224
+ "title": "Textarea Input",
5225
+ "description": "This key defines an editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input*.\n\n```yaml\n_inputs:\n description:\n type: textarea\n label: Description\n```",
5109
5226
  "documented": true,
5110
5227
  "markdownDescription": "This key defines an editing interface for plain text.\n\n## Examples\n\nIn this example, we have configured the `description` key as a *Textarea Input*.\n\n```yaml\n_inputs:\n description:\n type: textarea\n label: Description\n```"
5111
5228
  },
5112
5229
  "CodeInput": {
5113
- "title": "Code Input",
5114
- "description": "This key defines an editing interface for code or mono-spaced plain text content.",
5115
5230
  "type": "object",
5116
5231
  "properties": {
5117
5232
  "comment": {
@@ -5156,15 +5271,14 @@
5156
5271
  "$ref": "#/definitions/type._inputs.*.cascade"
5157
5272
  },
5158
5273
  "type": {
5159
- "title": "Type",
5160
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5161
5274
  "type": "string",
5162
5275
  "const": "code",
5276
+ "title": "Type",
5277
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5163
5278
  "documented": true,
5164
5279
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5165
5280
  },
5166
5281
  "options": {
5167
- "description": "This key defines options that are specific to Code Inputs.",
5168
5282
  "type": "object",
5169
5283
  "properties": {
5170
5284
  "tab_size": {
@@ -5215,6 +5329,33 @@
5215
5329
  "min_length_message": {
5216
5330
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5217
5331
  },
5332
+ "max_words": {
5333
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5334
+ },
5335
+ "max_words_message": {
5336
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5337
+ },
5338
+ "min_words": {
5339
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5340
+ },
5341
+ "min_words_message": {
5342
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5343
+ },
5344
+ "max_graphemes": {
5345
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5346
+ },
5347
+ "max_graphemes_message": {
5348
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5349
+ },
5350
+ "min_graphemes": {
5351
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5352
+ },
5353
+ "min_graphemes_message": {
5354
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5355
+ },
5356
+ "locale": {
5357
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5358
+ },
5218
5359
  "pattern": {
5219
5360
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5220
5361
  },
@@ -5266,6 +5407,7 @@
5266
5407
  }
5267
5408
  },
5268
5409
  "additionalProperties": false,
5410
+ "description": "This key defines options that are specific to Code Inputs.",
5269
5411
  "documented": true,
5270
5412
  "title": "options",
5271
5413
  "markdownDescription": "This key defines options that are specific to Code Inputs."
@@ -5275,6 +5417,8 @@
5275
5417
  "type"
5276
5418
  ],
5277
5419
  "additionalProperties": false,
5420
+ "title": "Code Input",
5421
+ "description": "This key defines an editing interface for code or mono-spaced plain text content.",
5278
5422
  "documented": true,
5279
5423
  "markdownDescription": "This key defines an editing interface for code or mono-spaced plain text content."
5280
5424
  },
@@ -5311,8 +5455,6 @@
5311
5455
  "title": "theme(theme)"
5312
5456
  },
5313
5457
  "Syntax": {
5314
- "title": "Syntax",
5315
- "description": "Available syntax highlighting languages for code editors in CloudCannon.",
5316
5458
  "type": "string",
5317
5459
  "enum": [
5318
5460
  "c_cpp",
@@ -5384,12 +5526,12 @@
5384
5526
  "xquery",
5385
5527
  "yaml"
5386
5528
  ],
5529
+ "title": "Syntax",
5530
+ "description": "Available syntax highlighting languages for code editors in CloudCannon.",
5387
5531
  "documented": false,
5388
5532
  "markdownDescription": "Available syntax highlighting languages for code editors in CloudCannon."
5389
5533
  },
5390
5534
  "ColorInput": {
5391
- "title": "Color Input",
5392
- "description": "This key defines an editing interface for color values.",
5393
5535
  "type": "object",
5394
5536
  "properties": {
5395
5537
  "comment": {
@@ -5434,15 +5576,14 @@
5434
5576
  "$ref": "#/definitions/type._inputs.*.cascade"
5435
5577
  },
5436
5578
  "type": {
5437
- "title": "Type",
5438
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5439
5579
  "type": "string",
5440
5580
  "const": "color",
5581
+ "title": "Type",
5582
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5441
5583
  "documented": true,
5442
5584
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5443
5585
  },
5444
5586
  "options": {
5445
- "description": "This key defines options that are specific to Color Inputs.",
5446
5587
  "type": "object",
5447
5588
  "properties": {
5448
5589
  "max_length": {
@@ -5457,6 +5598,33 @@
5457
5598
  "min_length_message": {
5458
5599
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5459
5600
  },
5601
+ "max_words": {
5602
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5603
+ },
5604
+ "max_words_message": {
5605
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5606
+ },
5607
+ "min_words": {
5608
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5609
+ },
5610
+ "min_words_message": {
5611
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5612
+ },
5613
+ "max_graphemes": {
5614
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5615
+ },
5616
+ "max_graphemes_message": {
5617
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5618
+ },
5619
+ "min_graphemes": {
5620
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5621
+ },
5622
+ "min_graphemes_message": {
5623
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5624
+ },
5625
+ "locale": {
5626
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5627
+ },
5460
5628
  "pattern": {
5461
5629
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5462
5630
  },
@@ -5525,6 +5693,7 @@
5525
5693
  }
5526
5694
  },
5527
5695
  "additionalProperties": false,
5696
+ "description": "This key defines options that are specific to Color Inputs.",
5528
5697
  "documented": true,
5529
5698
  "title": "options",
5530
5699
  "markdownDescription": "This key defines options that are specific to Color Inputs."
@@ -5534,12 +5703,12 @@
5534
5703
  "type"
5535
5704
  ],
5536
5705
  "additionalProperties": false,
5706
+ "title": "Color Input",
5707
+ "description": "This key defines an editing interface for color values.",
5537
5708
  "documented": true,
5538
5709
  "markdownDescription": "This key defines an editing interface for color values."
5539
5710
  },
5540
5711
  "BooleanInput": {
5541
- "title": "Boolean Input",
5542
- "description": "This key defines an editing interface for true or false values.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input*.\n\n```yaml\n_inputs:\n featured:\n type: switch\n label: Featured\n```",
5543
5712
  "type": "object",
5544
5713
  "properties": {
5545
5714
  "comment": {
@@ -5584,13 +5753,13 @@
5584
5753
  "$ref": "#/definitions/type._inputs.*.cascade"
5585
5754
  },
5586
5755
  "type": {
5587
- "title": "Type",
5588
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input* type.\n\n```yaml\n_inputs:\n featured:\n type: switch\n```",
5589
5756
  "type": "string",
5590
5757
  "enum": [
5591
5758
  "checkbox",
5592
5759
  "switch"
5593
5760
  ],
5761
+ "title": "Type",
5762
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input* type.\n\n```yaml\n_inputs:\n featured:\n type: switch\n```",
5594
5763
  "documented": true,
5595
5764
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input* type.\n\n```yaml\n_inputs:\n featured:\n type: switch\n```"
5596
5765
  }
@@ -5599,12 +5768,12 @@
5599
5768
  "type"
5600
5769
  ],
5601
5770
  "additionalProperties": false,
5771
+ "title": "Boolean Input",
5772
+ "description": "This key defines an editing interface for true or false values.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input*.\n\n```yaml\n_inputs:\n featured:\n type: switch\n label: Featured\n```",
5602
5773
  "documented": true,
5603
5774
  "markdownDescription": "This key defines an editing interface for true or false values.\n\n## Examples\n\nIn this example, we have configured the `featured` key as a *Boolean Input*.\n\n```yaml\n_inputs:\n featured:\n type: switch\n label: Featured\n```"
5604
5775
  },
5605
5776
  "NumberInput": {
5606
- "title": "Number Input",
5607
- "description": "This key defines an editing interface for numeric values.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input*.\n\n```yaml\n_inputs:\n quantity:\n type: number\n label: Quantity\n```",
5608
5777
  "type": "object",
5609
5778
  "properties": {
5610
5779
  "comment": {
@@ -5649,15 +5818,14 @@
5649
5818
  "$ref": "#/definitions/type._inputs.*.cascade"
5650
5819
  },
5651
5820
  "type": {
5652
- "title": "Type",
5653
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input* type.\n\n```yaml\n_inputs:\n quantity:\n type: number\n```",
5654
5821
  "type": "string",
5655
5822
  "const": "number",
5823
+ "title": "Type",
5824
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input* type.\n\n```yaml\n_inputs:\n quantity:\n type: number\n```",
5656
5825
  "documented": true,
5657
5826
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input* type.\n\n```yaml\n_inputs:\n quantity:\n type: number\n```"
5658
5827
  },
5659
5828
  "options": {
5660
- "description": "This key defines options that are specific to Number Inputs.\n\n## Examples\n\nIn this example, we have configured *Number Input* options including min and max values.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n min: 1\n max: 100\n```",
5661
5829
  "type": "object",
5662
5830
  "properties": {
5663
5831
  "required": {
@@ -5704,6 +5872,7 @@
5704
5872
  }
5705
5873
  },
5706
5874
  "additionalProperties": false,
5875
+ "description": "This key defines options that are specific to Number Inputs.\n\n## Examples\n\nIn this example, we have configured *Number Input* options including min and max values.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n min: 1\n max: 100\n```",
5707
5876
  "documented": true,
5708
5877
  "title": "options",
5709
5878
  "markdownDescription": "This key defines options that are specific to Number Inputs.\n\n## Examples\n\nIn this example, we have configured *Number Input* options including min and max values.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n min: 1\n max: 100\n```"
@@ -5713,12 +5882,14 @@
5713
5882
  "type"
5714
5883
  ],
5715
5884
  "additionalProperties": false,
5885
+ "title": "Number Input",
5886
+ "description": "This key defines an editing interface for numeric values.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input*.\n\n```yaml\n_inputs:\n quantity:\n type: number\n label: Quantity\n```",
5716
5887
  "documented": true,
5717
5888
  "markdownDescription": "This key defines an editing interface for numeric values.\n\n## Examples\n\nIn this example, we have configured the `quantity` key as a *Number Input*.\n\n```yaml\n_inputs:\n quantity:\n type: number\n label: Quantity\n```"
5718
5889
  },
5719
5890
  "type._inputs.*.options.empty_type(number)": {
5720
- "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty number values will be saved.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n empty_type: number\n```",
5721
5891
  "default": "null",
5892
+ "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty number values will be saved.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n empty_type: number\n```",
5722
5893
  "type": "string",
5723
5894
  "enum": [
5724
5895
  "null",
@@ -5729,15 +5900,15 @@
5729
5900
  "markdownDescription": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty number values will be saved.\n\n```yaml\n_inputs:\n quantity:\n type: number\n options:\n empty_type: number\n```"
5730
5901
  },
5731
5902
  "type._inputs.*.options.min": {
5732
- "description": "This key defines the minimum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a lesser numerical value.\n\nIf the Input already contains a lesser numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any number.\n\nIf `options.max` is also configured, this key cannot be a greater number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a minimum rating of one.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```",
5733
5903
  "type": "number",
5904
+ "description": "This key defines the minimum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a lesser numerical value.\n\nIf the Input already contains a lesser numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any number.\n\nIf `options.max` is also configured, this key cannot be a greater number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a minimum rating of one.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```",
5734
5905
  "documented": true,
5735
5906
  "title": "min",
5736
5907
  "markdownDescription": "This key defines the minimum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a lesser numerical value.\n\nIf the Input already contains a lesser numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any number.\n\nIf `options.max` is also configured, this key cannot be a greater number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a minimum rating of one.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```"
5737
5908
  },
5738
5909
  "type._inputs.*.options.max": {
5739
- "description": "This key defines the maximum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a greater numerical value.\n\nIf the Input already contains a greater numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any integer.\n\nIf `options.min` is also configured, this key cannot be a lesser number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a maximum rating of five.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```",
5740
5910
  "type": "number",
5911
+ "description": "This key defines the maximum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a greater numerical value.\n\nIf the Input already contains a greater numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any integer.\n\nIf `options.min` is also configured, this key cannot be a lesser number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a maximum rating of five.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```",
5741
5912
  "documented": true,
5742
5913
  "title": "max",
5743
5914
  "markdownDescription": "This key defines the maximum numerical value CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from entering a greater numerical value.\n\nIf the Input already contains a greater numerical value, CloudCannon will require you to enter a valid value to save your changes, or discard your\nunsaved changes.\n\nThis key is required for `range` inputs.\n\nValue can be any integer.\n\nIf `options.min` is also configured, this key cannot be a lesser number.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we want to add a rating out of five for each article in our travel blog using the `rating` Input. This Input limits you to a maximum rating of five.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n min: 1\n```"
@@ -5764,8 +5935,6 @@
5764
5935
  "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max`.\nThis key requires you to define `options.max`.\n\nThis key has no default.\n\nThis key is available for Number Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number using a custom message.\n\n```yaml\n_inputs:\n rating:\n type: number\n comment: How highly did you rate this experience?\n options:\n max: 5\n max_message: Cannot be more than 5\n min: 1\n min_message: Cannot be less than 1\n```"
5765
5936
  },
5766
5937
  "RangeInput": {
5767
- "title": "Range Input",
5768
- "description": "This key defines a slider interface for selecting a numeric value.",
5769
5938
  "type": "object",
5770
5939
  "properties": {
5771
5940
  "comment": {
@@ -5810,15 +5979,14 @@
5810
5979
  "$ref": "#/definitions/type._inputs.*.cascade"
5811
5980
  },
5812
5981
  "type": {
5813
- "title": "Type",
5814
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5815
5982
  "type": "string",
5816
5983
  "const": "range",
5984
+ "title": "Type",
5985
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5817
5986
  "documented": true,
5818
5987
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5819
5988
  },
5820
5989
  "options": {
5821
- "description": "This key defines options that are specific to Range Inputs.",
5822
5990
  "type": "object",
5823
5991
  "properties": {
5824
5992
  "required": {
@@ -5857,6 +6025,7 @@
5857
6025
  "max"
5858
6026
  ],
5859
6027
  "additionalProperties": false,
6028
+ "description": "This key defines options that are specific to Range Inputs.",
5860
6029
  "documented": true,
5861
6030
  "title": "options",
5862
6031
  "markdownDescription": "This key defines options that are specific to Range Inputs."
@@ -5866,12 +6035,12 @@
5866
6035
  "type"
5867
6036
  ],
5868
6037
  "additionalProperties": false,
6038
+ "title": "Range Input",
6039
+ "description": "This key defines a slider interface for selecting a numeric value.",
5869
6040
  "documented": true,
5870
6041
  "markdownDescription": "This key defines a slider interface for selecting a numeric value."
5871
6042
  },
5872
6043
  "RichTextInput": {
5873
- "title": "Rich Text Input",
5874
- "description": "This key defines an editing interface for HTML markup content.",
5875
6044
  "type": "object",
5876
6045
  "properties": {
5877
6046
  "comment": {
@@ -5916,18 +6085,17 @@
5916
6085
  "$ref": "#/definitions/type._inputs.*.cascade"
5917
6086
  },
5918
6087
  "type": {
5919
- "title": "Type",
5920
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5921
6088
  "type": "string",
5922
6089
  "enum": [
5923
6090
  "html",
5924
6091
  "markdown"
5925
6092
  ],
6093
+ "title": "Type",
6094
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5926
6095
  "documented": true,
5927
6096
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5928
6097
  },
5929
6098
  "options": {
5930
- "description": "This key defines options that are specific to Rich Text Inputs.",
5931
6099
  "type": "object",
5932
6100
  "properties": {
5933
6101
  "mime_type": {
@@ -6080,6 +6248,33 @@
6080
6248
  "min_length_message": {
6081
6249
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
6082
6250
  },
6251
+ "max_words": {
6252
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
6253
+ },
6254
+ "max_words_message": {
6255
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
6256
+ },
6257
+ "min_words": {
6258
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
6259
+ },
6260
+ "min_words_message": {
6261
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
6262
+ },
6263
+ "max_graphemes": {
6264
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
6265
+ },
6266
+ "max_graphemes_message": {
6267
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
6268
+ },
6269
+ "min_graphemes": {
6270
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
6271
+ },
6272
+ "min_graphemes_message": {
6273
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
6274
+ },
6275
+ "locale": {
6276
+ "$ref": "#/definitions/type._inputs.*.options.locale"
6277
+ },
6083
6278
  "pattern": {
6084
6279
  "$ref": "#/definitions/type._inputs.*.options.pattern"
6085
6280
  },
@@ -6105,12 +6300,20 @@
6105
6300
  "title": "empty_type"
6106
6301
  },
6107
6302
  "allow_resize": {
6108
- "description": "This key toggles whether CloudCannon will show the resize handler to vertically resize the input.\n\nSetting this key to `false` will hide the resize handler.\n\nBy default, this key is `true` (i.e., the resize handler is shown).",
6109
- "default": false,
6303
+ "deprecated": true,
6110
6304
  "type": "boolean",
6111
6305
  "documented": true,
6112
6306
  "title": "allow_resize",
6113
- "markdownDescription": "This key toggles whether CloudCannon will show the resize handler to vertically resize the input.\n\nSetting this key to `false` will hide the resize handler.\n\nBy default, this key is `true` (i.e., the resize handler is shown)."
6307
+ "description": "This key is deprecated. Use `preview_resize` instead.\n\nThis key toggles whether CloudCannon will show the resize handler to vertically resize the input.\n\nSetting this key to `false` will hide the resize handler.\n\nBy default, this key is `true` (i.e., the resize handler is shown).",
6308
+ "markdownDescription": "This key is deprecated. Use `preview_resize` instead.\n\nThis key toggles whether CloudCannon will show the resize handler to vertically resize the input.\n\nSetting this key to `false` will hide the resize handler.\n\nBy default, this key is `true` (i.e., the resize handler is shown)."
6309
+ },
6310
+ "prevent_resize": {
6311
+ "description": "Shows or hides the resize handler to vertically resize the input.",
6312
+ "default": false,
6313
+ "type": "boolean",
6314
+ "documented": true,
6315
+ "title": "prevent_resize",
6316
+ "markdownDescription": "Shows or hides the resize handler to vertically resize the input."
6114
6317
  },
6115
6318
  "initial_height": {
6116
6319
  "description": "This key defines the initial height of this input in pixels (px).",
@@ -6121,6 +6324,7 @@
6121
6324
  }
6122
6325
  },
6123
6326
  "additionalProperties": false,
6327
+ "description": "This key defines options that are specific to Rich Text Inputs.",
6124
6328
  "documented": true,
6125
6329
  "title": "options",
6126
6330
  "markdownDescription": "This key defines options that are specific to Rich Text Inputs."
@@ -6130,6 +6334,8 @@
6130
6334
  "type"
6131
6335
  ],
6132
6336
  "additionalProperties": false,
6337
+ "title": "Rich Text Input",
6338
+ "description": "This key defines an editing interface for HTML markup content.",
6133
6339
  "documented": true,
6134
6340
  "markdownDescription": "This key defines an editing interface for HTML markup content."
6135
6341
  },
@@ -6219,8 +6425,8 @@
6219
6425
  "type": "object",
6220
6426
  "properties": {
6221
6427
  "size": {
6222
- "description": "This key defines a number suffixed with \"x\" (relative size) or \"w\" (fixed width) for setting the dimensions of the image (e.g. 2x, 3x, 100w, 360w).\n\n## Examples\n\nIn this example, we have configured a size definition for an *Image Input* to create a 2x relative size image.\n\n```yaml\n_inputs:\n hero_image:\n type: image\n options:\n sizes:\n - size: 2x\n```",
6223
6428
  "type": "string",
6429
+ "description": "This key defines a number suffixed with \"x\" (relative size) or \"w\" (fixed width) for setting the dimensions of the image (e.g. 2x, 3x, 100w, 360w).\n\n## Examples\n\nIn this example, we have configured a size definition for an *Image Input* to create a 2x relative size image.\n\n```yaml\n_inputs:\n hero_image:\n type: image\n options:\n sizes:\n - size: 2x\n```",
6224
6430
  "documented": true,
6225
6431
  "title": "size",
6226
6432
  "markdownDescription": "This key defines a number suffixed with \"x\" (relative size) or \"w\" (fixed width) for setting the dimensions of the image (e.g. 2x, 3x, 100w, 360w).\n\n## Examples\n\nIn this example, we have configured a size definition for an *Image Input* to create a 2x relative size image.\n\n```yaml\n_inputs:\n hero_image:\n type: image\n options:\n sizes:\n - size: 2x\n```"
@@ -6246,7 +6452,6 @@
6246
6452
  "markdownDescription": "This key defines definitions for creating additional images of different sizes when uploading or selecting existing files.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to create additional images of different sizes when uploading or selecting files.\n\n```yaml\n_inputs:\n hero_image:\n type: image\n options:\n sizes:\n - size: 2x\n - size: 3x\n```"
6247
6453
  },
6248
6454
  "type.paths": {
6249
- "title": "Paths",
6250
6455
  "type": "object",
6251
6456
  "properties": {
6252
6457
  "static": {
@@ -6272,6 +6477,7 @@
6272
6477
  }
6273
6478
  },
6274
6479
  "additionalProperties": false,
6480
+ "title": "Paths",
6275
6481
  "documented": true,
6276
6482
  "description": "This key defines paths for your Rich Text editors or File inputs.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `paths` will default to any\nvalues configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\n## Examples\n\nIn this example, we have configured paths for the `blog` Collection to set custom upload and static paths.\n\n```yaml\ncollections_config:\n blog:\n paths:\n uploads: /uploads/blog/\n static: /assets/\n```",
6277
6483
  "markdownDescription": "This key defines paths for your Rich Text editors or File inputs.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `paths` will default to any\nvalues configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\n## Examples\n\nIn this example, we have configured paths for the `blog` Collection to set custom upload and static paths.\n\n```yaml\ncollections_config:\n blog:\n paths:\n uploads: /uploads/blog/\n static: /assets/\n```"
@@ -6562,11 +6768,11 @@
6562
6768
  "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a [Snippet](https://cloudcannon.com/documentation/articles/what-is-a-snippet/), if any are available.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a Snippet."
6563
6769
  },
6564
6770
  "type._editables.*.styles": {
6565
- "description": "This key toggles whether CloudCannon will display a dropdown menu in your WYSIWYG toolbar to apply a style to selected text.\n\nSetting this key to `true` will enable a dropdown menu in your WYSIWYG toolbar to apply a style to selected text. Styles are the combination of an element and class name. The value for this option is the path (either source or build output) for the CSS file containing styles.",
6771
+ "description": "This key toggles whether CloudCannon will display a dropdown menu in your WYSIWYG toolbar to apply a style to selected text.\n\n## Examples\n\nIn this example, we have enabled a dropdown menu in our WYSIWYG toolbar to apply a style to selected text. The styles are defined in the `/css/styles.css` file.\n\n```yaml\n_editables:\n content:\n styles: /css/styles.css\n```\n\nThis example file defines the styles that CloudCannon can add to your WYSIWYG toolbar.\n\n```css\n/* Can be applied to blocks of content */\np.callout {\n margin: 10px;\n border: 1px solid #f5f5f5;\n background-color: #eee;\n}\n\n/* Can be applied to inline content */\nspan.big-blue-text {\n font-size: 2rem;\n color: blue;\n}\n\n/* Applied to content, excluded from style dropdown */\nh2 {\n font-family: cursive;\n}\n\n/* Applied to content, excluded from style dropdown */\n.align-left { text-align: left; }\n.align-center { text-align: center; }\n.align-right { text-align: right; }\n.align-justify { text-align: justify; }\n```",
6566
6772
  "type": "string",
6567
6773
  "documented": true,
6568
6774
  "title": "styles",
6569
- "markdownDescription": "This key toggles whether CloudCannon will display a dropdown menu in your WYSIWYG toolbar to apply a style to selected text.\n\nSetting this key to `true` will enable a dropdown menu in your WYSIWYG toolbar to apply a style to selected text. Styles are the combination of an element and class name. The value for this option is the path (either source or build output) for the CSS file containing styles."
6775
+ "markdownDescription": "This key toggles whether CloudCannon will display a dropdown menu in your WYSIWYG toolbar to apply a style to selected text.\n\n## Examples\n\nIn this example, we have enabled a dropdown menu in our WYSIWYG toolbar to apply a style to selected text. The styles are defined in the `/css/styles.css` file.\n\n```yaml\n_editables:\n content:\n styles: /css/styles.css\n```\n\nThis example file defines the styles that CloudCannon can add to your WYSIWYG toolbar.\n\n```css\n/* Can be applied to blocks of content */\np.callout {\n margin: 10px;\n border: 1px solid #f5f5f5;\n background-color: #eee;\n}\n\n/* Can be applied to inline content */\nspan.big-blue-text {\n font-size: 2rem;\n color: blue;\n}\n\n/* Applied to content, excluded from style dropdown */\nh2 {\n font-family: cursive;\n}\n\n/* Applied to content, excluded from style dropdown */\n.align-left { text-align: left; }\n.align-center { text-align: center; }\n.align-right { text-align: right; }\n.align-justify { text-align: justify; }\n```"
6570
6776
  },
6571
6777
  "type._editables.*.table": {
6572
6778
  "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a table.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a table. Further table options are available from the table context menu in the rich text editor.",
@@ -6593,8 +6799,6 @@
6593
6799
  "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to merge a list item with the item below it in an ordered or unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to merge a list item with the item below it."
6594
6800
  },
6595
6801
  "DateInput": {
6596
- "title": "Date/Datetime Input",
6597
- "description": "This key defines an editing interface for date and/or time values.",
6598
6802
  "type": "object",
6599
6803
  "properties": {
6600
6804
  "comment": {
@@ -6639,18 +6843,17 @@
6639
6843
  "$ref": "#/definitions/type._inputs.*.cascade"
6640
6844
  },
6641
6845
  "type": {
6642
- "title": "Type",
6643
- "description": "This key defines the input type, which controls how this input appears and behaves.",
6644
6846
  "type": "string",
6645
6847
  "enum": [
6646
6848
  "date",
6647
6849
  "datetime"
6648
6850
  ],
6851
+ "title": "Type",
6852
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
6649
6853
  "documented": true,
6650
6854
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
6651
6855
  },
6652
6856
  "options": {
6653
- "description": "This key defines options that are specific to Date Inputs.",
6654
6857
  "type": "object",
6655
6858
  "properties": {
6656
6859
  "required": {
@@ -6683,10 +6886,10 @@
6683
6886
  "description": "This key defines the earliest date and time, inclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting an earlier date and time.\n\nIf the Input already contains an earlier date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard\nyour unsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.\n\nThe value can have quotation marks or no quotation marks.\n\nIf `options.end_before` is also configured, this key cannot be a later date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we want our team to enter the date and time of an event in the `2022_event` Input. This Input will only allow dates on or after January 1st, 2022.\n\n```yaml\n_inputs:\n 2022_event:\n type: datetime\n options:\n start_from: 2022-01-01T00:00:00Z\n end_before: 2023-01-01T00:00:00Z\n```",
6684
6887
  "anyOf": [
6685
6888
  {
6686
- "title": "String Start From",
6687
6889
  "type": "string",
6688
6890
  "format": "date-time",
6689
6891
  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z||([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
6892
+ "title": "String Start From",
6690
6893
  "documented": true,
6691
6894
  "description": "This key defines the earliest date and time, inclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting an earlier date and time.\n\nIf the Input already contains an earlier date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard\nyour unsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format and should be in quotes.\n\nIf `options.end_before` is also configured, this key cannot be a later date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.",
6692
6895
  "markdownDescription": "This key defines the earliest date and time, inclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting an earlier date and time.\n\nIf the Input already contains an earlier date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard\nyour unsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format and should be in quotes.\n\nIf `options.end_before` is also configured, this key cannot be a later date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs."
@@ -6713,10 +6916,10 @@
6713
6916
  "description": "This key defines the date and time, exclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting a later date and time.\n\nIf the Input already contains a later date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard your\nunsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.\n\nThe value can have quotation marks or no quotation marks.\n\nIf `options.start_from` is also configured, this key cannot be an earlier date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we want our team to enter the date and time of an event in the `2022_event` Input. This Input will only allow dates before January 1st, 2023.\n\n```yaml\n_inputs:\n 2022_event:\n type: datetime\n options:\n start_from: 2022-01-01T00:00:00Z\n end_before: 2023-01-01T00:00:00Z\n```",
6714
6917
  "anyOf": [
6715
6918
  {
6716
- "title": "String End Before",
6717
6919
  "type": "string",
6718
6920
  "format": "date-time",
6719
6921
  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z||([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
6922
+ "title": "String End Before",
6720
6923
  "documented": true,
6721
6924
  "description": "This key defines the date and time, exclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting a later date and time.\n\nIf the Input already contains a later date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard your\nunsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.\n\nIf `options.start_from` is also configured, this key cannot be an earlier date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.",
6722
6925
  "markdownDescription": "This key defines the date and time, exclusive, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from selecting a later date and time.\n\nIf the Input already contains a later date and time, CloudCannon will require you to change it to a valid value to save your changes, or discard your\nunsaved changes.\n\nValue must be in [ISO8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.\n\nIf `options.start_from` is also configured, this key cannot be an earlier date and time.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs."
@@ -6741,6 +6944,7 @@
6741
6944
  }
6742
6945
  },
6743
6946
  "additionalProperties": false,
6947
+ "description": "This key defines options that are specific to Date Inputs.",
6744
6948
  "documented": true,
6745
6949
  "title": "options",
6746
6950
  "markdownDescription": "This key defines options that are specific to Date Inputs."
@@ -6750,11 +6954,12 @@
6750
6954
  "type"
6751
6955
  ],
6752
6956
  "additionalProperties": false,
6957
+ "title": "Date/Datetime Input",
6958
+ "description": "This key defines an editing interface for date and/or time values.",
6753
6959
  "documented": true,
6754
6960
  "markdownDescription": "This key defines an editing interface for date and/or time values."
6755
6961
  },
6756
6962
  "type.timezone": {
6757
- "title": "Timezone",
6758
6963
  "type": "string",
6759
6964
  "enum": [
6760
6965
  "Africa/Abidjan",
@@ -7353,13 +7558,12 @@
7353
7558
  "WET",
7354
7559
  "Zulu"
7355
7560
  ],
7561
+ "title": "Timezone",
7356
7562
  "documented": true,
7357
7563
  "description": "This key defines the timezone for your Site.\n\nValue must be in IANA timezone format.\n\nFor more information, please read our documentation on [Date and Time inputs](https://cloudcannon.com/documentation/articles/what-are-date-and-time-inputs/).",
7358
7564
  "markdownDescription": "This key defines the timezone for your Site.\n\nValue must be in IANA timezone format.\n\nFor more information, please read our documentation on [Date and Time inputs](https://cloudcannon.com/documentation/articles/what-are-date-and-time-inputs/)."
7359
7565
  },
7360
7566
  "TimeInput": {
7361
- "title": "Time Input",
7362
- "description": "This key defines an editing interface for time values only.",
7363
7567
  "type": "object",
7364
7568
  "properties": {
7365
7569
  "comment": {
@@ -7404,15 +7608,14 @@
7404
7608
  "$ref": "#/definitions/type._inputs.*.cascade"
7405
7609
  },
7406
7610
  "type": {
7407
- "title": "Type",
7408
- "description": "This key defines the input type, which controls how this input appears and behaves.",
7409
7611
  "type": "string",
7410
7612
  "const": "time",
7613
+ "title": "Type",
7614
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
7411
7615
  "documented": true,
7412
7616
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
7413
7617
  },
7414
7618
  "options": {
7415
- "description": "This key defines options that are specific to Time Inputs.",
7416
7619
  "type": "object",
7417
7620
  "properties": {
7418
7621
  "required": {
@@ -7432,6 +7635,7 @@
7432
7635
  }
7433
7636
  },
7434
7637
  "additionalProperties": false,
7638
+ "description": "This key defines options that are specific to Time Inputs.",
7435
7639
  "documented": true,
7436
7640
  "title": "options",
7437
7641
  "markdownDescription": "This key defines options that are specific to Time Inputs."
@@ -7441,12 +7645,12 @@
7441
7645
  "type"
7442
7646
  ],
7443
7647
  "additionalProperties": false,
7648
+ "title": "Time Input",
7649
+ "description": "This key defines an editing interface for time values only.",
7444
7650
  "documented": true,
7445
7651
  "markdownDescription": "This key defines an editing interface for time values only."
7446
7652
  },
7447
7653
  "FileInput": {
7448
- "title": "File Input",
7449
- "description": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
7450
7654
  "type": "object",
7451
7655
  "properties": {
7452
7656
  "comment": {
@@ -7491,19 +7695,18 @@
7491
7695
  "$ref": "#/definitions/type._inputs.*.cascade"
7492
7696
  },
7493
7697
  "type": {
7494
- "title": "Type",
7495
- "description": "This key defines the input type, which controls how this input appears and behaves.",
7496
7698
  "type": "string",
7497
7699
  "enum": [
7498
7700
  "file",
7499
7701
  "document",
7500
7702
  "image"
7501
7703
  ],
7704
+ "title": "Type",
7705
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
7502
7706
  "documented": true,
7503
7707
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
7504
7708
  },
7505
7709
  "options": {
7506
- "description": "This key defines options that are specific to File Inputs.",
7507
7710
  "type": "object",
7508
7711
  "properties": {
7509
7712
  "mime_type": {
@@ -7545,6 +7748,33 @@
7545
7748
  "min_length_message": {
7546
7749
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
7547
7750
  },
7751
+ "max_words": {
7752
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
7753
+ },
7754
+ "max_words_message": {
7755
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
7756
+ },
7757
+ "min_words": {
7758
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
7759
+ },
7760
+ "min_words_message": {
7761
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
7762
+ },
7763
+ "max_graphemes": {
7764
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
7765
+ },
7766
+ "max_graphemes_message": {
7767
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
7768
+ },
7769
+ "min_graphemes": {
7770
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
7771
+ },
7772
+ "min_graphemes_message": {
7773
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
7774
+ },
7775
+ "locale": {
7776
+ "$ref": "#/definitions/type._inputs.*.options.locale"
7777
+ },
7548
7778
  "pattern": {
7549
7779
  "$ref": "#/definitions/type._inputs.*.options.pattern"
7550
7780
  },
@@ -7598,6 +7828,7 @@
7598
7828
  }
7599
7829
  },
7600
7830
  "additionalProperties": false,
7831
+ "description": "This key defines options that are specific to File Inputs.",
7601
7832
  "documented": true,
7602
7833
  "title": "options",
7603
7834
  "markdownDescription": "This key defines options that are specific to File Inputs."
@@ -7607,6 +7838,8 @@
7607
7838
  "type"
7608
7839
  ],
7609
7840
  "additionalProperties": false,
7841
+ "title": "File Input",
7842
+ "description": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
7610
7843
  "documented": true,
7611
7844
  "markdownDescription": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets."
7612
7845
  },
@@ -7614,18 +7847,18 @@
7614
7847
  "description": "This key defines which file types are available to select or upload to this input.\n\nAccepted format is an array or comma-separated string of MIME types.\n\nThe special value \"*\" means any type is accepted.\n\n## Examples\n\nIn this example, we have configured a *Image Input* to accept only JPEG or PNG files.\n\n```yaml\n_inputs:\n featured_image:\n type: image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n```",
7615
7848
  "anyOf": [
7616
7849
  {
7617
- "title": "Comma Separated Accepts Mime Types",
7618
7850
  "type": "string",
7851
+ "title": "Comma Separated Accepts Mime Types",
7619
7852
  "documented": true,
7620
7853
  "description": "This key represents a comma-separated string format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is a string containing MIME types separated by commas. Each MIME type specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the comma-separated format when you prefer a more compact configuration or when working with a small number of MIME types.\n\nThe special value `\"*\"` means any file type is accepted.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using a comma-separated string of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types: 'image/jpeg,image/png,image/webp'\n```\n\nIn this example, we have configured a *File Input* to accept only document files using a comma-separated string of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types: 'application/pdf,application/msword'\n```\n\nIn this example, we have configured a *File Input* to accept any file type using the special `\"*\"` value.\n\n```yaml\n_inputs:\n any_file:\n type: file\n label: Any File\n options:\n accepts_mime_types: '*'\n```",
7621
7854
  "markdownDescription": "This key represents a comma-separated string format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is a string containing MIME types separated by commas. Each MIME type specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the comma-separated format when you prefer a more compact configuration or when working with a small number of MIME types.\n\nThe special value `\"*\"` means any file type is accepted.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using a comma-separated string of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types: 'image/jpeg,image/png,image/webp'\n```\n\nIn this example, we have configured a *File Input* to accept only document files using a comma-separated string of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types: 'application/pdf,application/msword'\n```\n\nIn this example, we have configured a *File Input* to accept any file type using the special `\"*\"` value.\n\n```yaml\n_inputs:\n any_file:\n type: file\n label: Any File\n options:\n accepts_mime_types: '*'\n```"
7622
7855
  },
7623
7856
  {
7624
- "title": "Array Accepts Mime Types",
7625
7857
  "type": "array",
7626
7858
  "items": {
7627
7859
  "$ref": "#/definitions/MimeType"
7628
7860
  },
7861
+ "title": "Array Accepts Mime Types",
7629
7862
  "documented": true,
7630
7863
  "description": "This key represents an array format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is an array of MIME type strings. Each string specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the array format when you want to explicitly list multiple MIME types, making it easier to read and maintain in your configuration.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using an array of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n - image/webp\n```\n\nIn this example, we have configured a *File Input* to accept only document files using an array of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types:\n - application/pdf\n - application/msword\n - application/vnd.openxmlformats-officedocument.wordprocessingml.document\n```",
7631
7864
  "markdownDescription": "This key represents an array format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is an array of MIME type strings. Each string specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the array format when you want to explicitly list multiple MIME types, making it easier to read and maintain in your configuration.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using an array of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n - image/webp\n```\n\nIn this example, we have configured a *File Input* to accept only document files using an array of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types:\n - application/pdf\n - application/msword\n - application/vnd.openxmlformats-officedocument.wordprocessingml.document\n```"
@@ -7636,8 +7869,6 @@
7636
7869
  "markdownDescription": "This key defines which file types are available to select or upload to this input.\n\nAccepted format is an array or comma-separated string of MIME types.\n\nThe special value \"*\" means any type is accepted.\n\n## Examples\n\nIn this example, we have configured a *Image Input* to accept only JPEG or PNG files.\n\n```yaml\n_inputs:\n featured_image:\n type: image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n```"
7637
7870
  },
7638
7871
  "MimeType": {
7639
- "title": "Mime Type",
7640
- "description": "This key represents an array format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is an array of MIME type strings. Each string specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the array format when you want to explicitly list multiple MIME types, making it easier to read and maintain in your configuration.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using an array of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n - image/webp\n```\n\nIn this example, we have configured a *File Input* to accept only document files using an array of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types:\n - application/pdf\n - application/msword\n - application/vnd.openxmlformats-officedocument.wordprocessingml.document\n```",
7641
7872
  "type": "string",
7642
7873
  "enum": [
7643
7874
  "x-world/x-3dmf",
@@ -8074,6 +8305,8 @@
8074
8305
  "multipart/x-zip",
8075
8306
  "text/x-script.zsh"
8076
8307
  ],
8308
+ "title": "Mime Type",
8309
+ "description": "This key represents an array format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is an array of MIME type strings. Each string specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the array format when you want to explicitly list multiple MIME types, making it easier to read and maintain in your configuration.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using an array of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n - image/webp\n```\n\nIn this example, we have configured a *File Input* to accept only document files using an array of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types:\n - application/pdf\n - application/msword\n - application/vnd.openxmlformats-officedocument.wordprocessingml.document\n```",
8077
8310
  "documented": true,
8078
8311
  "markdownDescription": "This key represents an array format for the `accepts_mime_types` key that restricts which file types are available to select or upload in *File Inputs*.\n\nThe value is an array of MIME type strings. Each string specifies a file type that CloudCannon will allow for this input.\n\nAvailable MIME types include image formats (`image/x-icon`, `image/gif`, `image/jpeg`, `image/png`, `image/webp`, `image/bmp`, `image/svg+xml`) and document formats (`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `application/vnd.ms-powerpoint`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`).\n\nUse the array format when you want to explicitly list multiple MIME types, making it easier to read and maintain in your configuration.\n\n## Examples\n\nIn this example, we have configured a *File Input* to accept only image files using an array of image MIME types.\n\n```yaml\n_inputs:\n hero_image:\n type: file\n label: Hero Image\n options:\n accepts_mime_types:\n - image/jpeg\n - image/png\n - image/webp\n```\n\nIn this example, we have configured a *File Input* to accept only document files using an array of document MIME types.\n\n```yaml\n_inputs:\n document:\n type: file\n label: Document\n options:\n accepts_mime_types:\n - application/pdf\n - application/msword\n - application/vnd.openxmlformats-officedocument.wordprocessingml.document\n```"
8079
8312
  },
@@ -8116,8 +8349,6 @@
8116
8349
  "markdownDescription": "This key toggles whether CloudCannon will prevent file uploads inside the \"Select existing file/image\" file browser modal window.\n\nSetting this key to `true` will prevent file uploads inside the file browser modal window.\n\n## Examples\n\nIn this example, CloudCannon will disable the option to upload files inside the file browser modal window.\n\n```yaml\n_inputs:\n image:\n type: file\n options:\n disable_upload_file_in_file_browser: true\n```"
8117
8350
  },
8118
8351
  "UrlInput": {
8119
- "title": "URL Input",
8120
- "description": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
8121
8352
  "type": "object",
8122
8353
  "properties": {
8123
8354
  "comment": {
@@ -8162,15 +8393,14 @@
8162
8393
  "$ref": "#/definitions/type._inputs.*.cascade"
8163
8394
  },
8164
8395
  "type": {
8165
- "title": "Type",
8166
- "description": "This key defines the input type, which controls how this input appears and behaves.",
8167
8396
  "type": "string",
8168
8397
  "const": "url",
8398
+ "title": "Type",
8399
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
8169
8400
  "documented": true,
8170
8401
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
8171
8402
  },
8172
8403
  "options": {
8173
- "description": "This key defines options that are specific to URL Inputs.",
8174
8404
  "type": "object",
8175
8405
  "properties": {
8176
8406
  "mime_type": {
@@ -8212,6 +8442,33 @@
8212
8442
  "min_length_message": {
8213
8443
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8214
8444
  },
8445
+ "max_words": {
8446
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8447
+ },
8448
+ "max_words_message": {
8449
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8450
+ },
8451
+ "min_words": {
8452
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8453
+ },
8454
+ "min_words_message": {
8455
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8456
+ },
8457
+ "max_graphemes": {
8458
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8459
+ },
8460
+ "max_graphemes_message": {
8461
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8462
+ },
8463
+ "min_graphemes": {
8464
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8465
+ },
8466
+ "min_graphemes_message": {
8467
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8468
+ },
8469
+ "locale": {
8470
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8471
+ },
8215
8472
  "pattern": {
8216
8473
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8217
8474
  },
@@ -8297,6 +8554,7 @@
8297
8554
  }
8298
8555
  },
8299
8556
  "additionalProperties": false,
8557
+ "description": "This key defines options that are specific to URL Inputs.",
8300
8558
  "documented": true,
8301
8559
  "title": "options",
8302
8560
  "markdownDescription": "This key defines options that are specific to URL Inputs."
@@ -8306,12 +8564,12 @@
8306
8564
  "type"
8307
8565
  ],
8308
8566
  "additionalProperties": false,
8567
+ "title": "URL Input",
8568
+ "description": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
8309
8569
  "documented": true,
8310
8570
  "markdownDescription": "This key defines an editing interface for relative, absolute, and fully qualified URLs."
8311
8571
  },
8312
8572
  "SelectInput": {
8313
- "title": "Select Input",
8314
- "description": "This key defines an editing interface for data with multiple predefined options.\n\nSelect inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n label: Category\n options:\n values:\n - Blog\n - News\n - Events\n```",
8315
8573
  "type": "object",
8316
8574
  "properties": {
8317
8575
  "comment": {
@@ -8356,15 +8614,14 @@
8356
8614
  "$ref": "#/definitions/type._inputs.*.cascade"
8357
8615
  },
8358
8616
  "type": {
8359
- "title": "Type",
8360
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input* type.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```",
8361
8617
  "type": "string",
8362
8618
  "const": "select",
8619
+ "title": "Type",
8620
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input* type.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```",
8363
8621
  "documented": true,
8364
8622
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input* type.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```"
8365
8623
  },
8366
8624
  "options": {
8367
- "description": "This key defines options that are specific to Select Inputs.\n\n## Examples\n\nIn this example, we have configured *Select Input* options including values.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```",
8368
8625
  "type": "object",
8369
8626
  "properties": {
8370
8627
  "required": {
@@ -8421,6 +8678,33 @@
8421
8678
  "min_length_message": {
8422
8679
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8423
8680
  },
8681
+ "max_words": {
8682
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8683
+ },
8684
+ "max_words_message": {
8685
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8686
+ },
8687
+ "min_words": {
8688
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8689
+ },
8690
+ "min_words_message": {
8691
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8692
+ },
8693
+ "max_graphemes": {
8694
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8695
+ },
8696
+ "max_graphemes_message": {
8697
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8698
+ },
8699
+ "min_graphemes": {
8700
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8701
+ },
8702
+ "min_graphemes_message": {
8703
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8704
+ },
8705
+ "locale": {
8706
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8707
+ },
8424
8708
  "pattern": {
8425
8709
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8426
8710
  },
@@ -8441,6 +8725,7 @@
8441
8725
  }
8442
8726
  },
8443
8727
  "additionalProperties": false,
8728
+ "description": "This key defines options that are specific to Select Inputs.\n\n## Examples\n\nIn this example, we have configured *Select Input* options including values.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```",
8444
8729
  "documented": true,
8445
8730
  "title": "options",
8446
8731
  "markdownDescription": "This key defines options that are specific to Select Inputs.\n\n## Examples\n\nIn this example, we have configured *Select Input* options including values.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```"
@@ -8450,11 +8735,12 @@
8450
8735
  "type"
8451
8736
  ],
8452
8737
  "additionalProperties": false,
8738
+ "title": "Select Input",
8739
+ "description": "This key defines an editing interface for data with multiple predefined options.\n\nSelect inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n label: Category\n options:\n values:\n - Blog\n - News\n - Events\n```",
8453
8740
  "documented": true,
8454
8741
  "markdownDescription": "This key defines an editing interface for data with multiple predefined options.\n\nSelect inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `category` key as a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n label: Category\n options:\n values:\n - Blog\n - News\n - Events\n```"
8455
8742
  },
8456
8743
  "type.preview": {
8457
- "title": "Preview",
8458
8744
  "type": "object",
8459
8745
  "properties": {
8460
8746
  "text": {
@@ -8486,6 +8772,7 @@
8486
8772
  }
8487
8773
  },
8488
8774
  "additionalProperties": false,
8775
+ "title": "Preview",
8489
8776
  "documented": true,
8490
8777
  "description": "This key defines the appearance of a Card.\n\nYou can configure Card preview for [Collections](https://cloudcannon.com/documentation/articles/what-is-a-collection/), [Schemas](https://cloudcannon.com/documentation/articles/what-is-a-schema/),\n[Object inputs](https://cloudcannon.com/documentation/articles/what-is-an-object-input/), [Array inputs](https://cloudcannon.com/documentation/articles/what-is-an-array-input/), [Select\ninputs](https://cloudcannon.com/documentation/articles/what-is-a-select-input/), [Structures](https://cloudcannon.com/documentation/articles/what-is-a-structure/), the Structure modal,\n[Snippets](https://cloudcannon.com/documentation/articles/what-is-a-snippet/), and the Snippet modal.\n\nFor more information about previews, please read our documentation on [configuring card previews](https://cloudcannon.com/documentation/articles/configure-your-card-previews/).\n\n## Examples\n\nIn this example, we have configured the appearance of file Cards in the *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n subtext:\n - key: author\n icon: edit_note\n icon_color:\n - key: color\n - '#ff0000'\n image:\n - key: image\n metadata:\n - template: [url]\n - icon: event\n text:\n - template: 'Published on {date|date_long}'\n gallery:\n - key: featured_image\n```\n\nIn this example, we have configured the appearance of Cards in inputs using the Structure `staff`.\n\n```yaml\n_structures:\n staff:\n values:\n - value:\n _type: Employee\n name:\n job_description:\n profile_picture:\n preview:\n text:\n - key: name\n - Employee\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: support_agent\n - value:\n _type: Manager\n name:\n job_description:\n profile_picture:\n url:\n preview:\n text:\n - key: name\n - Manager\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: face\n```",
8491
8778
  "markdownDescription": "This key defines the appearance of a Card.\n\nYou can configure Card preview for [Collections](https://cloudcannon.com/documentation/articles/what-is-a-collection/), [Schemas](https://cloudcannon.com/documentation/articles/what-is-a-schema/),\n[Object inputs](https://cloudcannon.com/documentation/articles/what-is-an-object-input/), [Array inputs](https://cloudcannon.com/documentation/articles/what-is-an-array-input/), [Select\ninputs](https://cloudcannon.com/documentation/articles/what-is-a-select-input/), [Structures](https://cloudcannon.com/documentation/articles/what-is-a-structure/), the Structure modal,\n[Snippets](https://cloudcannon.com/documentation/articles/what-is-a-snippet/), and the Snippet modal.\n\nFor more information about previews, please read our documentation on [configuring card previews](https://cloudcannon.com/documentation/articles/configure-your-card-previews/).\n\n## Examples\n\nIn this example, we have configured the appearance of file Cards in the *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n preview:\n text:\n - key: title\n subtext:\n - key: author\n icon: edit_note\n icon_color:\n - key: color\n - '#ff0000'\n image:\n - key: image\n metadata:\n - template: [url]\n - icon: event\n text:\n - template: 'Published on {date|date_long}'\n gallery:\n - key: featured_image\n```\n\nIn this example, we have configured the appearance of Cards in inputs using the Structure `staff`.\n\n```yaml\n_structures:\n staff:\n values:\n - value:\n _type: Employee\n name:\n job_description:\n profile_picture:\n preview:\n text:\n - key: name\n - Employee\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: support_agent\n - value:\n _type: Manager\n name:\n job_description:\n profile_picture:\n url:\n preview:\n text:\n - key: name\n - Manager\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: face\n```"
@@ -8681,38 +8968,36 @@
8681
8968
  "markdownDescription": "This key toggles whether CloudCannon will allow new text values to be created at edit time.\n\nSetting this key to `true` will allow new text values to be created at edit time.\n\n## Examples\n\nIn this example, CloudCannon will allow users to add new values to a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n allow_create: true\n```"
8682
8969
  },
8683
8970
  "type._inputs.*.options.allow_empty": {
8684
- "description": "**⚠️ DEPRECATED:** This key is deprecated. If you want to prevent empty values, we recommend setting `_inputs.*.options.required` to `true` instead.\n\nThis key toggles whether CloudCannon will accept empty values, and pre-select the first option if opened with an empty value.\n\nSetting this key to `true` will allow CloudCannon to accept empty values.\n\n## Examples\n\nIn this example, CloudCannon will accept empty values for a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n allow_empty: true\n```",
8685
- "default": true,
8971
+ "deprecated": true,
8972
+ "description": "This key is deprecated. If you want to prevent empty values, we recommend setting `_inputs.*.options.required` to `true` instead.\n\nThis key toggles whether CloudCannon will accept empty values, and pre-select the first option if opened with an empty value.\n\nSetting this key to `true` will allow CloudCannon to accept empty values.\n\n## Examples\n\nIn this example, CloudCannon will accept empty values for a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n allow_empty: true\n```",
8686
8973
  "type": "boolean",
8687
8974
  "documented": true,
8688
8975
  "title": "allow_empty",
8689
- "markdownDescription": "**⚠️ DEPRECATED:** This key is deprecated. If you want to prevent empty values, we recommend setting `_inputs.*.options.required` to `true` instead.\n\nThis key toggles whether CloudCannon will accept empty values, and pre-select the first option if opened with an empty value.\n\nSetting this key to `true` will allow CloudCannon to accept empty values.\n\n## Examples\n\nIn this example, CloudCannon will accept empty values for a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n allow_empty: true\n```"
8976
+ "markdownDescription": "This key is deprecated. If you want to prevent empty values, we recommend setting `_inputs.*.options.required` to `true` instead.\n\nThis key toggles whether CloudCannon will accept empty values, and pre-select the first option if opened with an empty value.\n\nSetting this key to `true` will allow CloudCannon to accept empty values.\n\n## Examples\n\nIn this example, CloudCannon will accept empty values for a *Select Input*.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n allow_empty: true\n```"
8690
8977
  },
8691
8978
  "type._inputs.*.options.values": {
8692
8979
  "description": "This key defines the values available to choose from.\n\nOptional, defaults to fetching values from the naming convention (e.g. `colors` or `my_colors` for data set `colors`).\n\n## Examples\n\nIn this example, we have configured a *Select Input* with custom values to choose from.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n```",
8693
8980
  "anyOf": [
8694
8981
  {
8982
+ "type": "string",
8695
8983
  "title": "Dataset Reference Values",
8696
8984
  "description": "This key defines a reference to a dataset.",
8697
- "type": "string",
8698
8985
  "documented": true,
8699
8986
  "markdownDescription": "This key defines a reference to a dataset."
8700
8987
  },
8701
8988
  {
8702
- "description": "Data formats for populating select and multiselect input options, supporting arrays and objects.",
8703
8989
  "anyOf": [
8704
8990
  {
8705
- "title": "Text Array",
8706
8991
  "type": "array",
8707
8992
  "items": {
8708
8993
  "type": "string",
8709
8994
  "documented": false,
8710
8995
  "title": "values(any-of-1)(text-array)[*]"
8711
8996
  },
8997
+ "title": "Text Array",
8712
8998
  "documented": false
8713
8999
  },
8714
9000
  {
8715
- "title": "Text Object",
8716
9001
  "type": "object",
8717
9002
  "propertyNames": {
8718
9003
  "type": "string"
@@ -8722,10 +9007,10 @@
8722
9007
  "documented": false,
8723
9008
  "title": "values(any-of-1)(text-object).*"
8724
9009
  },
9010
+ "title": "Text Object",
8725
9011
  "documented": false
8726
9012
  },
8727
9013
  {
8728
- "title": "Object Array",
8729
9014
  "type": "array",
8730
9015
  "items": {
8731
9016
  "type": "object",
@@ -8736,18 +9021,20 @@
8736
9021
  "documented": false,
8737
9022
  "title": "values(any-of-1)(object-array)[*]"
8738
9023
  },
9024
+ "title": "Object Array",
8739
9025
  "documented": false
8740
9026
  },
8741
9027
  {
8742
- "title": "Object",
8743
9028
  "type": "object",
8744
9029
  "propertyNames": {
8745
9030
  "type": "string"
8746
9031
  },
8747
9032
  "additionalProperties": {},
9033
+ "title": "Object",
8748
9034
  "documented": false
8749
9035
  }
8750
9036
  ],
9037
+ "description": "Data formats for populating select and multiselect input options, supporting arrays and objects.",
8751
9038
  "documented": false,
8752
9039
  "title": "values(any-of-1)",
8753
9040
  "markdownDescription": "Data formats for populating select and multiselect input options, supporting arrays and objects."
@@ -8791,8 +9078,6 @@
8791
9078
  "markdownDescription": "This key defines how CloudCannon should render selectable options in the dropdown of a *Select Input*.\n\n## Examples\n\nIn this example, we have configured a *Select Input* to display options using the card view.\n\n```yaml\n_inputs:\n category:\n type: select\n options:\n values:\n - Blog\n - News\n - Events\n picker_view: card\n```"
8792
9079
  },
8793
9080
  "MultiselectInput": {
8794
- "title": "Multiselect Input",
8795
- "description": "This key defines an editing interface for data with multiple predefined options.\n\nMultiselect inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input*.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n label: Tags\n options:\n values:\n - featured\n - news\n - events\n```",
8796
9081
  "type": "object",
8797
9082
  "properties": {
8798
9083
  "comment": {
@@ -8837,15 +9122,14 @@
8837
9122
  "$ref": "#/definitions/type._inputs.*.cascade"
8838
9123
  },
8839
9124
  "type": {
8840
- "title": "Type",
8841
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input* type.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n```",
8842
9125
  "type": "string",
8843
9126
  "const": "multiselect",
9127
+ "title": "Type",
9128
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input* type.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n```",
8844
9129
  "documented": true,
8845
9130
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input* type.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n```"
8846
9131
  },
8847
9132
  "options": {
8848
- "description": "This key defines options that are specific to Multiselect Inputs.\n\n## Examples\n\nIn this example, we have configured *Multiselect Input* options including values.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n options:\n values:\n - featured\n - news\n - events\n```",
8849
9133
  "type": "object",
8850
9134
  "properties": {
8851
9135
  "required": {
@@ -8919,6 +9203,7 @@
8919
9203
  }
8920
9204
  },
8921
9205
  "additionalProperties": false,
9206
+ "description": "This key defines options that are specific to Multiselect Inputs.\n\n## Examples\n\nIn this example, we have configured *Multiselect Input* options including values.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n options:\n values:\n - featured\n - news\n - events\n```",
8922
9207
  "documented": true,
8923
9208
  "title": "options",
8924
9209
  "markdownDescription": "This key defines options that are specific to Multiselect Inputs.\n\n## Examples\n\nIn this example, we have configured *Multiselect Input* options including values.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n options:\n values:\n - featured\n - news\n - events\n```"
@@ -8928,6 +9213,8 @@
8928
9213
  "type"
8929
9214
  ],
8930
9215
  "additionalProperties": false,
9216
+ "title": "Multiselect Input",
9217
+ "description": "This key defines an editing interface for data with multiple predefined options.\n\nMultiselect inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input*.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n label: Tags\n options:\n values:\n - featured\n - news\n - events\n```",
8931
9218
  "documented": true,
8932
9219
  "markdownDescription": "This key defines an editing interface for data with multiple predefined options.\n\nMultiselect inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `tags` key as a *Multiselect Input*.\n\n```yaml\n_inputs:\n tags:\n type: multiselect\n label: Tags\n options:\n values:\n - featured\n - news\n - events\n```"
8933
9220
  },
@@ -8974,8 +9261,8 @@
8974
9261
  "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.unique_on`.\nThis key requires you to define `options.unique_on`.\n\nThis key has no default.\n\nThis key is available for Array inputs.\n\n## Examples\n\nIn this example, we want our team to add article filepaths to the `related_articles` Input. This Input requires all the filepaths to be unique.\n\n```yaml\n_inputs:\n related_articles:\n type: array\n options:\n unique_on: '$.path'\n unique_on_message: The value for path must be different for all items.\n```\n\n```yaml\nrelated_articles:\n - path: /articles/first-article.md\n featured: true\n - path: /articles/first-article.md\n featured: false\n```"
8975
9262
  },
8976
9263
  "type._inputs.*.options.empty_type(array)": {
8977
- "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty array values will be saved.\n\n```yaml\n_inputs:\n tags:\n type: array\n options:\n empty_type: array\n```",
8978
9264
  "default": "null",
9265
+ "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty array values will be saved.\n\n```yaml\n_inputs:\n tags:\n type: array\n options:\n empty_type: array\n```",
8979
9266
  "type": "string",
8980
9267
  "enum": [
8981
9268
  "null",
@@ -8986,8 +9273,6 @@
8986
9273
  "markdownDescription": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty array values will be saved.\n\n```yaml\n_inputs:\n tags:\n type: array\n options:\n empty_type: array\n```"
8987
9274
  },
8988
9275
  "ChoiceInput": {
8989
- "title": "Choice Input",
8990
- "description": "This key defines an editing interface for data with multiple predefined options.\n\nChoice inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input*.\n\n```yaml\n_inputs:\n status:\n type: choice\n label: Status\n options:\n values:\n - draft\n - published\n - archived\n```",
8991
9276
  "type": "object",
8992
9277
  "properties": {
8993
9278
  "comment": {
@@ -9032,15 +9317,14 @@
9032
9317
  "$ref": "#/definitions/type._inputs.*.cascade"
9033
9318
  },
9034
9319
  "type": {
9035
- "title": "Type",
9036
- "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input* type.\n\n```yaml\n_inputs:\n status:\n type: choice\n```",
9037
9320
  "type": "string",
9038
9321
  "const": "choice",
9322
+ "title": "Type",
9323
+ "description": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input* type.\n\n```yaml\n_inputs:\n status:\n type: choice\n```",
9039
9324
  "documented": true,
9040
9325
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input* type.\n\n```yaml\n_inputs:\n status:\n type: choice\n```"
9041
9326
  },
9042
9327
  "options": {
9043
- "description": "This key defines options that are specific to Choice Inputs.\n\n## Examples\n\nIn this example, we have configured *Choice Input* options including values.\n\n```yaml\n_inputs:\n status:\n type: choice\n options:\n values:\n - draft\n - published\n - archived\n```",
9044
9328
  "type": "object",
9045
9329
  "properties": {
9046
9330
  "required": {
@@ -9094,6 +9378,33 @@
9094
9378
  "min_length_message": {
9095
9379
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
9096
9380
  },
9381
+ "max_words": {
9382
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
9383
+ },
9384
+ "max_words_message": {
9385
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
9386
+ },
9387
+ "min_words": {
9388
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
9389
+ },
9390
+ "min_words_message": {
9391
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
9392
+ },
9393
+ "max_graphemes": {
9394
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
9395
+ },
9396
+ "max_graphemes_message": {
9397
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
9398
+ },
9399
+ "min_graphemes": {
9400
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
9401
+ },
9402
+ "min_graphemes_message": {
9403
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
9404
+ },
9405
+ "locale": {
9406
+ "$ref": "#/definitions/type._inputs.*.options.locale"
9407
+ },
9097
9408
  "pattern": {
9098
9409
  "$ref": "#/definitions/type._inputs.*.options.pattern"
9099
9410
  },
@@ -9114,6 +9425,7 @@
9114
9425
  }
9115
9426
  },
9116
9427
  "additionalProperties": false,
9428
+ "description": "This key defines options that are specific to Choice Inputs.\n\n## Examples\n\nIn this example, we have configured *Choice Input* options including values.\n\n```yaml\n_inputs:\n status:\n type: choice\n options:\n values:\n - draft\n - published\n - archived\n```",
9117
9429
  "documented": true,
9118
9430
  "title": "options",
9119
9431
  "markdownDescription": "This key defines options that are specific to Choice Inputs.\n\n## Examples\n\nIn this example, we have configured *Choice Input* options including values.\n\n```yaml\n_inputs:\n status:\n type: choice\n options:\n values:\n - draft\n - published\n - archived\n```"
@@ -9123,12 +9435,12 @@
9123
9435
  "type"
9124
9436
  ],
9125
9437
  "additionalProperties": false,
9438
+ "title": "Choice Input",
9439
+ "description": "This key defines an editing interface for data with multiple predefined options.\n\nChoice inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input*.\n\n```yaml\n_inputs:\n status:\n type: choice\n label: Status\n options:\n values:\n - draft\n - published\n - archived\n```",
9126
9440
  "documented": true,
9127
9441
  "markdownDescription": "This key defines an editing interface for data with multiple predefined options.\n\nChoice inputs only allow one value.\n\n## Examples\n\nIn this example, we have configured the `status` key as a *Choice Input*.\n\n```yaml\n_inputs:\n status:\n type: choice\n label: Status\n options:\n values:\n - draft\n - published\n - archived\n```"
9128
9442
  },
9129
9443
  "MultichoiceInput": {
9130
- "title": "Multichoice Input",
9131
- "description": "This key defines an editing interface for data with multiple predefined options.\n\nMultichoice inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input*.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n label: Categories\n options:\n values:\n - technology\n - design\n - business\n```",
9132
9444
  "type": "object",
9133
9445
  "properties": {
9134
9446
  "comment": {
@@ -9173,15 +9485,14 @@
9173
9485
  "$ref": "#/definitions/type._inputs.*.cascade"
9174
9486
  },
9175
9487
  "type": {
9176
- "title": "Type",
9177
- "description": "This key defines the type of editing interface used for an Input.\n\nEach Input type has a different appearance and functionality, processes and accepts different types of values, and has different configuration\noptions.\n\nValue can be one of the following: `auto`, `checkbox`, `switch`, `code`, `color`, `datetime`, `date`, `time`, `file`, `document`, `image`, `number`,\n`range`, `object`, `array`, `select`, `multiselect`, `choice`, `multichoice`, `text`, `textarea`, `email`, `html`, `markdown`, or `url`.\n\nIf the type or value of an Input is misconfigured, CloudCannon will display an orange warning instead of an Input.\n\nIf type is not configured for an Input, CloudCannon will attempt to determine Input type based on value or key name conventions.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input* type.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n```",
9178
9488
  "type": "string",
9179
9489
  "const": "multichoice",
9490
+ "title": "Type",
9491
+ "description": "This key defines the type of editing interface used for an Input.\n\nEach Input type has a different appearance and functionality, processes and accepts different types of values, and has different configuration\noptions.\n\nValue can be one of the following: `auto`, `checkbox`, `switch`, `code`, `color`, `datetime`, `date`, `time`, `file`, `document`, `image`, `number`,\n`range`, `object`, `array`, `select`, `multiselect`, `choice`, `multichoice`, `text`, `textarea`, `email`, `html`, `markdown`, or `url`.\n\nIf the type or value of an Input is misconfigured, CloudCannon will display an orange warning instead of an Input.\n\nIf type is not configured for an Input, CloudCannon will attempt to determine Input type based on value or key name conventions.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input* type.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n```",
9180
9492
  "documented": true,
9181
9493
  "markdownDescription": "This key defines the type of editing interface used for an Input.\n\nEach Input type has a different appearance and functionality, processes and accepts different types of values, and has different configuration\noptions.\n\nValue can be one of the following: `auto`, `checkbox`, `switch`, `code`, `color`, `datetime`, `date`, `time`, `file`, `document`, `image`, `number`,\n`range`, `object`, `array`, `select`, `multiselect`, `choice`, `multichoice`, `text`, `textarea`, `email`, `html`, `markdown`, or `url`.\n\nIf the type or value of an Input is misconfigured, CloudCannon will display an orange warning instead of an Input.\n\nIf type is not configured for an Input, CloudCannon will attempt to determine Input type based on value or key name conventions.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input* type.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n```"
9182
9494
  },
9183
9495
  "options": {
9184
- "description": "This key defines options that are specific to Multichoice Inputs.\n\n## Examples\n\nIn this example, we have configured *Multichoice Input* options including values.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n options:\n values:\n - technology\n - design\n - business\n```",
9185
9496
  "type": "object",
9186
9497
  "properties": {
9187
9498
  "required": {
@@ -9252,6 +9563,7 @@
9252
9563
  }
9253
9564
  },
9254
9565
  "additionalProperties": false,
9566
+ "description": "This key defines options that are specific to Multichoice Inputs.\n\n## Examples\n\nIn this example, we have configured *Multichoice Input* options including values.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n options:\n values:\n - technology\n - design\n - business\n```",
9255
9567
  "documented": true,
9256
9568
  "title": "options",
9257
9569
  "markdownDescription": "This key defines options that are specific to Multichoice Inputs.\n\n## Examples\n\nIn this example, we have configured *Multichoice Input* options including values.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n options:\n values:\n - technology\n - design\n - business\n```"
@@ -9261,12 +9573,12 @@
9261
9573
  "type"
9262
9574
  ],
9263
9575
  "additionalProperties": false,
9576
+ "title": "Multichoice Input",
9577
+ "description": "This key defines an editing interface for data with multiple predefined options.\n\nMultichoice inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input*.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n label: Categories\n options:\n values:\n - technology\n - design\n - business\n```",
9264
9578
  "documented": true,
9265
9579
  "markdownDescription": "This key defines an editing interface for data with multiple predefined options.\n\nMultichoice inputs allow several values.\n\n## Examples\n\nIn this example, we have configured the `categories` key as a *Multichoice Input*.\n\n```yaml\n_inputs:\n categories:\n type: multichoice\n label: Categories\n options:\n values:\n - technology\n - design\n - business\n```"
9266
9580
  },
9267
9581
  "ObjectInput": {
9268
- "title": "Object Input",
9269
- "description": "This key defines a user interface for a group of inputs.",
9270
9582
  "type": "object",
9271
9583
  "properties": {
9272
9584
  "comment": {
@@ -9311,15 +9623,14 @@
9311
9623
  "$ref": "#/definitions/type._inputs.*.cascade"
9312
9624
  },
9313
9625
  "type": {
9314
- "title": "Type",
9315
- "description": "This key defines the input type, which controls how this input appears and behaves.",
9316
9626
  "type": "string",
9317
9627
  "const": "object",
9628
+ "title": "Type",
9629
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
9318
9630
  "documented": true,
9319
9631
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
9320
9632
  },
9321
9633
  "options": {
9322
- "description": "This key defines options that are specific to Object Inputs.",
9323
9634
  "type": "object",
9324
9635
  "properties": {
9325
9636
  "required": {
@@ -9542,6 +9853,7 @@
9542
9853
  }
9543
9854
  },
9544
9855
  "additionalProperties": false,
9856
+ "description": "This key defines options that are specific to Object Inputs.",
9545
9857
  "documented": true,
9546
9858
  "title": "options",
9547
9859
  "markdownDescription": "This key defines options that are specific to Object Inputs."
@@ -9551,12 +9863,14 @@
9551
9863
  "type"
9552
9864
  ],
9553
9865
  "additionalProperties": false,
9866
+ "title": "Object Input",
9867
+ "description": "This key defines a user interface for a group of inputs.",
9554
9868
  "documented": true,
9555
9869
  "markdownDescription": "This key defines a user interface for a group of inputs."
9556
9870
  },
9557
9871
  "type._inputs.*.options.empty_type(object)": {
9558
- "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty object values will be saved.\n\n```yaml\n_inputs:\n metadata:\n type: object\n options:\n empty_type: object\n```",
9559
9872
  "default": "null",
9873
+ "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty object values will be saved.\n\n```yaml\n_inputs:\n metadata:\n type: object\n options:\n empty_type: object\n```",
9560
9874
  "type": "string",
9561
9875
  "enum": [
9562
9876
  "null",
@@ -9567,15 +9881,13 @@
9567
9881
  "markdownDescription": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.\n\n## Examples\n\nIn this example, we have configured how empty object values will be saved.\n\n```yaml\n_inputs:\n metadata:\n type: object\n options:\n empty_type: object\n```"
9568
9882
  },
9569
9883
  "type.structure-reference": {
9884
+ "type": "string",
9570
9885
  "title": "Structure Reference",
9571
9886
  "description": "A reference to an existing structure.",
9572
- "type": "string",
9573
9887
  "documented": true,
9574
9888
  "markdownDescription": "A reference to an existing structure."
9575
9889
  },
9576
9890
  "type.structure": {
9577
- "title": "Structure",
9578
- "description": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
9579
9891
  "type": "object",
9580
9892
  "properties": {
9581
9893
  "reorder_inputs": {
@@ -9611,11 +9923,11 @@
9611
9923
  "markdownDescription": "This key toggles whether CloudCannon will remove inputs that are not present in a Structure from a file before loading it in an Editing Interface.\n\nSetting this key to `true` will remove inputs that are not present in a Structure from a file before loading it in an Editing Interface. Non-Structure inputs will not be visible in the [Visual Editor](https://cloudcannon.com/documentation/articles/what-is-the-visual-editor/), [Content\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-content-editor/), or [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/), and saving the file\nwill remove them from the file before persisting the changes to your Git repository.\n\nYou can also configure this behavior for specific values of a Structure using `values[*].remove_extra_inputs`.\n\n## Examples\n\nIn this example, we want to delete old inputs that are not in the Structure from the associated file.\n\n```yaml\n_structures:\n related_articles:\n remove_extra_inputs: true\n values:\n - value:\n name:\n description:\n url:\n```"
9612
9924
  },
9613
9925
  "values": {
9614
- "description": "This key defines the options available for a Structure.\n\nYou must define this key for the Structure to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add the `title`, `subtitle`, `author`, `featured_image`, and `url` fields to Object or Array inputs that reference this Structure.\n\n```yaml\n_structures:\n related_articles:\n values:\n - label: Blog\n id:\n default: true\n tabbed: false\n tags:\n - blog\n value:\n title:\n subtitle:\n author:\n featured_image:\n url:\n _inputs:\n featured_image:\n type: image\n options:\n width: 50\n height: 50\n groups:\n - heading: Titles\n inputs:\n - title\n - subtitle\n - heading: Details\n inputs:\n - author\n - image\n - url\n preview:\n text:\n - template: \"{title}\"\n subtext:\n - template: \"By {author}\"\n image:\n - key: image\n picker_preview:\n text: Blog\n subtext: Add a related blog\n icon: post_add\n```",
9615
9926
  "type": "array",
9616
9927
  "items": {
9617
9928
  "$ref": "#/definitions/type.structure.values.[*]"
9618
9929
  },
9930
+ "description": "This key defines the options available for a Structure.\n\nYou must define this key for the Structure to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add the `title`, `subtitle`, `author`, `featured_image`, and `url` fields to Object or Array inputs that reference this Structure.\n\n```yaml\n_structures:\n related_articles:\n values:\n - label: Blog\n id:\n default: true\n tabbed: false\n tags:\n - blog\n value:\n title:\n subtitle:\n author:\n featured_image:\n url:\n _inputs:\n featured_image:\n type: image\n options:\n width: 50\n height: 50\n groups:\n - heading: Titles\n inputs:\n - title\n - subtitle\n - heading: Details\n inputs:\n - author\n - image\n - url\n preview:\n text:\n - template: \"{title}\"\n subtext:\n - template: \"By {author}\"\n image:\n - key: image\n picker_preview:\n text: Blog\n subtext: Add a related blog\n icon: post_add\n```",
9619
9931
  "documented": true,
9620
9932
  "title": "values",
9621
9933
  "markdownDescription": "This key defines the options available for a Structure.\n\nYou must define this key for the Structure to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to add the `title`, `subtitle`, `author`, `featured_image`, and `url` fields to Object or Array inputs that reference this Structure.\n\n```yaml\n_structures:\n related_articles:\n values:\n - label: Blog\n id:\n default: true\n tabbed: false\n tags:\n - blog\n value:\n title:\n subtitle:\n author:\n featured_image:\n url:\n _inputs:\n featured_image:\n type: image\n options:\n width: 50\n height: 50\n groups:\n - heading: Titles\n inputs:\n - title\n - subtitle\n - heading: Details\n inputs:\n - author\n - image\n - url\n preview:\n text:\n - template: \"{title}\"\n subtext:\n - template: \"By {author}\"\n image:\n - key: image\n picker_preview:\n text: Blog\n subtext: Add a related blog\n icon: post_add\n```"
@@ -9626,13 +9938,13 @@
9626
9938
  "type": "string",
9627
9939
  "documented": true,
9628
9940
  "title": "values_from_glob[*]",
9629
- "description": "This key represents an individual glob pattern string in the `values_from_glob` array.\n\nThe value is a string that specifies a file path pattern relative to the root of your repository. The path must end in the file extension `.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure-value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob: /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```",
9630
- "markdownDescription": "This key represents an individual glob pattern string in the `values_from_glob` array.\n\nThe value is a string that specifies a file path pattern relative to the root of your repository. The path must end in the file extension `.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure-value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob: /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```"
9941
+ "description": "This key represents an individual glob pattern string in the `values_from_glob` array.\n\nThe value is a string that specifies a file path pattern relative to the root of your repository. The path must end in the file extension `.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure-value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob:\n - /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```",
9942
+ "markdownDescription": "This key represents an individual glob pattern string in the `values_from_glob` array.\n\nThe value is a string that specifies a file path pattern relative to the root of your repository. The path must end in the file extension `.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure-value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob:\n - /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```"
9631
9943
  },
9632
9944
  "documented": true,
9633
9945
  "title": "values_from_glob",
9634
- "description": "This key defines globs that filter which files CloudCannon should use for *Structure* value configuration.\n\nValues in this array are relative to the root of your repository (i.e., `/`, not the value of `source`) and must end in the file extension\n`.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\nYou can use this key anywhere you would use the `_structures.*.values` key.\n\nPlease see our documentation on [structures_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/_structures_from_glob/) for defining a\n*Structure* in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure_value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob: /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```\n\n```yaml\nlabel: Board\nvalue:\n name:\n title:\n profile_picture:\n url:\n description:\n```",
9635
- "markdownDescription": "This key defines globs that filter which files CloudCannon should use for *Structure* value configuration.\n\nValues in this array are relative to the root of your repository (i.e., `/`, not the value of `source`) and must end in the file extension\n`.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\nYou can use this key anywhere you would use the `_structures.*.values` key.\n\nPlease see our documentation on [structures_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/_structures_from_glob/) for defining a\n*Structure* in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure_value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob: /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```\n\n```yaml\nlabel: Board\nvalue:\n name:\n title:\n profile_picture:\n url:\n description:\n```"
9946
+ "description": "This key defines globs that filter which files CloudCannon should use for *Structure* value configuration.\n\nValues in this array are relative to the root of your repository (i.e., `/`, not the value of `source`) and must end in the file extension\n`.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\nYou can use this key anywhere you would use the `_structures.*.values` key.\n\nPlease see our documentation on [structures_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/_structures_from_glob/) for defining a\n*Structure* in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure_value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob:\n - /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```\n\n```yaml\nlabel: Board\nvalue:\n name:\n title:\n profile_picture:\n url:\n description:\n```",
9947
+ "markdownDescription": "This key defines globs that filter which files CloudCannon should use for *Structure* value configuration.\n\nValues in this array are relative to the root of your repository (i.e., `/`, not the value of `source`) and must end in the file extension\n`.cloudcannon.structure-value.yml` (note the singular form of \"value\").\n\nYou can use this key anywhere you would use the `_structures.*.values` key.\n\nPlease see our documentation on [structures_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/_structures_from_glob/) for defining a\n*Structure* in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, the `staff` Array Input uses inline *Structure* values from the main *Configuration File* and also references another value from the `boardMember.cloudcannon.structure_value.yml` in the `/.cloudcannon/structures/` folder.\n\n```yaml\n_inputs:\n staff:\n type: array\n options:\n structures:\n values_from_glob:\n - /.cloudcannon/structures/boardMember.cloudcannon.structure-value.yml\n values:\n - label: Employee\n value:\n name:\n title:\n profile_picture:\n - label: Manager\n value:\n name:\n title:\n profile_picture:\n url:\n```\n\n```yaml\nlabel: Board\nvalue:\n name:\n title:\n profile_picture:\n url:\n description:\n```"
9636
9948
  },
9637
9949
  "id_key": {
9638
9950
  "description": "This key defines which key within `values[*].value` CloudCannon should use to identify the Structure option.\n\nIf CloudCannon cannot find this key in a Structure value, it will compare all other key names in the Structure value to find the correct one.\n\nBy default, this key is `_type`.\n\n## Examples\n\nIn this example, we have change the `id_key` from the default `_type` to `component` to match our existing configuration in the `content_blocks` Array input.\n\n```yaml\n_inputs:\n content_blocks___1___:\n type: array\n options:\n structures: _structures.page_components\n_structures:\n page_components:\n id_key___2___: component\n values:\n - label: Hero Component\n value:\n component___3___: hero\n title:\n description:\n image_path:\n link:\n text:\n url:\n - label: Feature Component\n value:\n component: feature\n image_path:\n title:\n description:\n button:\n link:\n text:\n reversed_layout: false\n - label: Video Component\n value:\n component: video\n image_path:\n videoUrl:\n```",
@@ -9659,12 +9971,12 @@
9659
9971
  "values"
9660
9972
  ],
9661
9973
  "additionalProperties": false,
9974
+ "title": "Structure",
9975
+ "description": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
9662
9976
  "documented": true,
9663
9977
  "markdownDescription": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values."
9664
9978
  },
9665
9979
  "type.structure.values.[*]": {
9666
- "title": "Structure Value",
9667
- "description": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
9668
9980
  "type": "object",
9669
9981
  "properties": {
9670
9982
  "reorder_inputs": {
@@ -9925,6 +10237,8 @@
9925
10237
  "value"
9926
10238
  ],
9927
10239
  "additionalProperties": false,
10240
+ "title": "Structure Value",
10241
+ "description": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
9928
10242
  "documented": true,
9929
10243
  "markdownDescription": "This key represents a single value option within a structure, defining the data format and appearance for content editors."
9930
10244
  },
@@ -9943,27 +10257,23 @@
9943
10257
  "markdownDescription": "This key defines globs that filter which files CloudCannon should use for *Input* configuration.\n\nValues in this array are relative to the root of your repository (i.e., `/`, not the value of `source`) and must end in the file extension\n`.cloudcannon.inputs.yml`.\n\nYou can use this key anywhere you would use the `_inputs` key in the configuration cascade.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have several *Input Configuration Files* in the `.cloudcannon/inputs/` folder, with each file containing multiple *Input* definitions. The value of the `_inputs_from_glob` key tells CloudCannon to only use the `seo.cloudcannon.inputs.yml` and `blog-details.cloudcannon.inputs.yml` files in that folder.\n\n```yaml\ncollections_config:\n posts:\n path: content/posts\n icon: event\n inputs_from_glob:\n - '/.cloudcannon/inputs/seo.cloudcannon.inputs.yml'\n - '/.cloudcannon/inputs/blogDetails.cloudcannon.inputs.yml'\n```\n\n```yaml\nseo_title:\n type: text\n options:\n required: true\n max_length: 50\nseo_description:\n type: textarea\n options:\n show_count: true\n required: true\n max_length: 125\nseo_image:\n type: image\n options:\n path:\n uploads: images\n accepts_mime_types:\n - image/png\n - image/jpeg\n required: true\n pattern: (?i)\\.(jpe?g|png)$\n pattern_message: Please select a JPG or PNG image file\n```"
9944
10258
  },
9945
10259
  "type._select_data": {
9946
- "title": "Select Data",
9947
- "description": "This key defines defines fixed data sets to populate Select and Multiselect inputs at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_select_data` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [Select and Multiselect inputs](https://cloudcannon.com/documentation/articles/what-is-a-select-input/#fixed-data-sets).\n\n## Examples\n\nIn this example, we have configured the `blog_tags` Multiselect input for the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _select_data:\n blog_topics:\n - Opinion\n - Feature\n - Resource\n```",
9948
10260
  "type": "object",
9949
10261
  "propertyNames": {
9950
10262
  "type": "string"
9951
10263
  },
9952
10264
  "additionalProperties": {
9953
- "description": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects.",
9954
10265
  "anyOf": [
9955
10266
  {
9956
- "title": "Text Array Select Data",
9957
10267
  "type": "array",
9958
10268
  "items": {
9959
10269
  "type": "string",
9960
10270
  "documented": true,
9961
10271
  "title": "*(text-array)[*]"
9962
10272
  },
10273
+ "title": "Text Array Select Data",
9963
10274
  "documented": true
9964
10275
  },
9965
10276
  {
9966
- "title": "Text Object Select Data",
9967
10277
  "type": "object",
9968
10278
  "propertyNames": {
9969
10279
  "type": "string"
@@ -9973,10 +10283,10 @@
9973
10283
  "documented": true,
9974
10284
  "title": "*(text-object).*"
9975
10285
  },
10286
+ "title": "Text Object Select Data",
9976
10287
  "documented": true
9977
10288
  },
9978
10289
  {
9979
- "title": "Object Array Select Data",
9980
10290
  "type": "array",
9981
10291
  "items": {
9982
10292
  "type": "object",
@@ -9987,28 +10297,30 @@
9987
10297
  "documented": true,
9988
10298
  "title": "*(object-array)[*]"
9989
10299
  },
10300
+ "title": "Object Array Select Data",
9990
10301
  "documented": true
9991
10302
  },
9992
10303
  {
9993
- "title": "Object Select Data",
9994
10304
  "type": "object",
9995
10305
  "propertyNames": {
9996
10306
  "type": "string"
9997
10307
  },
9998
10308
  "additionalProperties": {},
10309
+ "title": "Object Select Data",
9999
10310
  "documented": true
10000
10311
  }
10001
10312
  ],
10313
+ "description": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects.",
10002
10314
  "documented": true,
10003
10315
  "title": "_select_data.*",
10004
10316
  "markdownDescription": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects."
10005
10317
  },
10318
+ "title": "Select Data",
10319
+ "description": "This key defines defines fixed data sets to populate Select and Multiselect inputs at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_select_data` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [Select and Multiselect inputs](https://cloudcannon.com/documentation/articles/what-is-a-select-input/#fixed-data-sets).\n\n## Examples\n\nIn this example, we have configured the `blog_tags` Multiselect input for the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _select_data:\n blog_topics:\n - Opinion\n - Feature\n - Resource\n```",
10006
10320
  "documented": true,
10007
10321
  "markdownDescription": "This key defines defines fixed data sets to populate Select and Multiselect inputs at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_select_data` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [Select and Multiselect inputs](https://cloudcannon.com/documentation/articles/what-is-a-select-input/#fixed-data-sets).\n\n## Examples\n\nIn this example, we have configured the `blog_tags` Multiselect input for the `blog` Collection.\n\n```yaml\ncollections_config:\n blog:\n _select_data:\n blog_topics:\n - Opinion\n - Feature\n - Resource\n```"
10008
10322
  },
10009
10323
  "type._structures": {
10010
- "title": "Structures",
10011
- "description": "This key defines which structures are available for [Object inputs](https://cloudcannon.com/documentation/articles/what-is-an-object-input/) and [Array\ninputs](https://cloudcannon.com/documentation/articles/what-is-an-array-input/) at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_structures` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [structures](https://cloudcannon.com/documentation/articles/what-is-a-structure/).\n\n## Examples\n\nIn this example, we want to populate an Array input in the `blog` Collection with Related Articles, including the `name`, `description`, and `url` fields.\n\n```yaml\ncollections_config:\n blog:\n _structures:\n related_articles:\n style: select\n values:\n - preview:\n text:\n - key: name\n subtext:\n - key: url\n value:\n name:\n description:\n url:\n```\n\nIn this example, we want to populate an Array input with Staff members, including the `name`, `job_description`, and `profile_picture` fields for all staff types, and the `url` field for Managers only.\n\n```yaml\n_structures:\n staff:\n style: modal\n hide_extra_inputs: false\n values:\n - value:\n _type: Employee\n name:\n job_description:\n profile_picture:\n preview:\n text:\n - key: name\n - Employee\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: support_agent\n - value:\n _type: Manager\n name:\n job_description:\n profile_picture:\n url:\n preview:\n text:\n - key: name\n - Manager\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: face\n```",
10012
10324
  "type": "object",
10013
10325
  "propertyNames": {
10014
10326
  "type": "string"
@@ -10016,6 +10328,8 @@
10016
10328
  "additionalProperties": {
10017
10329
  "$ref": "#/definitions/type.structure"
10018
10330
  },
10331
+ "title": "Structures",
10332
+ "description": "This key defines which structures are available for [Object inputs](https://cloudcannon.com/documentation/articles/what-is-an-object-input/) and [Array\ninputs](https://cloudcannon.com/documentation/articles/what-is-an-array-input/) at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_structures` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [structures](https://cloudcannon.com/documentation/articles/what-is-a-structure/).\n\n## Examples\n\nIn this example, we want to populate an Array input in the `blog` Collection with Related Articles, including the `name`, `description`, and `url` fields.\n\n```yaml\ncollections_config:\n blog:\n _structures:\n related_articles:\n style: select\n values:\n - preview:\n text:\n - key: name\n subtext:\n - key: url\n value:\n name:\n description:\n url:\n```\n\nIn this example, we want to populate an Array input with Staff members, including the `name`, `job_description`, and `profile_picture` fields for all staff types, and the `url` field for Managers only.\n\n```yaml\n_structures:\n staff:\n style: modal\n hide_extra_inputs: false\n values:\n - value:\n _type: Employee\n name:\n job_description:\n profile_picture:\n preview:\n text:\n - key: name\n - Employee\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: support_agent\n - value:\n _type: Manager\n name:\n job_description:\n profile_picture:\n url:\n preview:\n text:\n - key: name\n - Manager\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: face\n```",
10019
10333
  "documented": true,
10020
10334
  "markdownDescription": "This key defines which structures are available for [Object inputs](https://cloudcannon.com/documentation/articles/what-is-an-object-input/) and [Array\ninputs](https://cloudcannon.com/documentation/articles/what-is-an-array-input/) at a given level of the configuration cascade.\n\nThis key has no default.\n\nIf undefined at higher levels of the [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/), `_structures` will default to\nany values configured in the [CloudCannon configuration file](https://cloudcannon.com/documentation/articles/what-is-the-cloudcannon-configuration-file/).\n\nFor more information, please read our documentation on [structures](https://cloudcannon.com/documentation/articles/what-is-a-structure/).\n\n## Examples\n\nIn this example, we want to populate an Array input in the `blog` Collection with Related Articles, including the `name`, `description`, and `url` fields.\n\n```yaml\ncollections_config:\n blog:\n _structures:\n related_articles:\n style: select\n values:\n - preview:\n text:\n - key: name\n subtext:\n - key: url\n value:\n name:\n description:\n url:\n```\n\nIn this example, we want to populate an Array input with Staff members, including the `name`, `job_description`, and `profile_picture` fields for all staff types, and the `url` field for Managers only.\n\n```yaml\n_structures:\n staff:\n style: modal\n hide_extra_inputs: false\n values:\n - value:\n _type: Employee\n name:\n job_description:\n profile_picture:\n preview:\n text:\n - key: name\n - Employee\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: support_agent\n - value:\n _type: Manager\n name:\n job_description:\n profile_picture:\n url:\n preview:\n text:\n - key: name\n - Manager\n subtext:\n - key: job_description\n - Description of position\n image:\n - key: profile_picture\n icon: face\n```"
10021
10335
  },
@@ -10041,8 +10355,6 @@
10041
10355
  "markdownDescription": "This key defines the subtitle text above the key input when adding or renaming entries within a mutable *Object Input*.\n\nThe value is a string that supports a limited selection of Markdown formatting: links, bold, italic, subscript, superscript, and inline code elements are allowed.\n\nAvailable for Mutable Objects only.\n\n## Examples\n\nIn this example, we have configured a comment with Markdown formatting to provide help text above the key input.\n\n```yaml\n_inputs:\n metadata:\n type: object\n options:\n allow_create: true\n entries:\n comment: Key names should be **lowercase** and use underscores (e.g., `article_title`)\n```"
10042
10356
  },
10043
10357
  "ArrayInput": {
10044
- "title": "Array Input",
10045
- "description": "This key defines a user interface for lists of inputs or input groups.",
10046
10358
  "type": "object",
10047
10359
  "properties": {
10048
10360
  "comment": {
@@ -10087,15 +10399,14 @@
10087
10399
  "$ref": "#/definitions/type._inputs.*.cascade"
10088
10400
  },
10089
10401
  "type": {
10090
- "title": "Type",
10091
- "description": "This key defines the input type, which controls how this input appears and behaves.",
10092
10402
  "type": "string",
10093
10403
  "const": "array",
10404
+ "title": "Type",
10405
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
10094
10406
  "documented": true,
10095
10407
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
10096
10408
  },
10097
10409
  "options": {
10098
- "description": "This key defines options that are specific to Array Inputs.",
10099
10410
  "type": "object",
10100
10411
  "properties": {
10101
10412
  "required": {
@@ -10156,6 +10467,7 @@
10156
10467
  }
10157
10468
  },
10158
10469
  "additionalProperties": false,
10470
+ "description": "This key defines options that are specific to Array Inputs.",
10159
10471
  "documented": true,
10160
10472
  "title": "options",
10161
10473
  "markdownDescription": "This key defines options that are specific to Array Inputs."
@@ -10165,6 +10477,8 @@
10165
10477
  "type"
10166
10478
  ],
10167
10479
  "additionalProperties": false,
10480
+ "title": "Array Input",
10481
+ "description": "This key defines a user interface for lists of inputs or input groups.",
10168
10482
  "documented": true,
10169
10483
  "markdownDescription": "This key defines a user interface for lists of inputs or input groups."
10170
10484
  },
@@ -10193,9 +10507,6 @@
10193
10507
  "markdownDescription": "This key toggles whether CloudCannon will hide the controls on each item for moving them.\n\nSetting this key to `true` will hide the controls for moving items.\n\nBy default, this key is `false` (i.e., the controls for moving items are displayed)."
10194
10508
  },
10195
10509
  "AutoInput": {
10196
- "title": "Automatic Input",
10197
- "description": "Provides a default user interface based on the data contained.",
10198
- "excludeFromDocumentation": true,
10199
10510
  "type": "object",
10200
10511
  "properties": {
10201
10512
  "comment": {
@@ -10240,10 +10551,10 @@
10240
10551
  "$ref": "#/definitions/type._inputs.*.cascade"
10241
10552
  },
10242
10553
  "type": {
10243
- "title": "Type",
10244
- "description": "Sets an input type, which controls how this input appears and behaves.",
10245
10554
  "type": "string",
10246
10555
  "const": "auto",
10556
+ "title": "Type",
10557
+ "description": "Sets an input type, which controls how this input appears and behaves.",
10247
10558
  "documented": false,
10248
10559
  "markdownDescription": "Sets an input type, which controls how this input appears and behaves."
10249
10560
  },
@@ -10258,13 +10569,13 @@
10258
10569
  "type"
10259
10570
  ],
10260
10571
  "additionalProperties": false,
10572
+ "title": "Automatic Input",
10573
+ "description": "Provides a default user interface based on the data contained.",
10574
+ "excludeFromDocumentation": true,
10261
10575
  "documented": false,
10262
10576
  "markdownDescription": "Provides a default user interface based on the data contained."
10263
10577
  },
10264
10578
  "UnknownInput": {
10265
- "title": "Unknown Input",
10266
- "description": "Provides a default user interface based on the data contained.",
10267
- "excludeFromDocumentation": true,
10268
10579
  "type": "object",
10269
10580
  "properties": {
10270
10581
  "comment": {
@@ -10316,6 +10627,9 @@
10316
10627
  }
10317
10628
  },
10318
10629
  "additionalProperties": false,
10630
+ "title": "Unknown Input",
10631
+ "description": "Provides a default user interface based on the data contained.",
10632
+ "excludeFromDocumentation": true,
10319
10633
  "documented": false,
10320
10634
  "markdownDescription": "Provides a default user interface based on the data contained."
10321
10635
  },