@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,8 +1,5 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "Configuration",
4
- "description": "The main CloudCannon configuration.",
5
- "$id": "https://github.com/cloudcannon/configuration-types/releases/latest/download/cloudcannon-config.latest.schema.json",
6
3
  "type": "object",
7
4
  "properties": {
8
5
  "paths": {
@@ -256,9 +253,11 @@
256
253
  }
257
254
  },
258
255
  "additionalProperties": false,
256
+ "title": "Configuration",
257
+ "description": "The main CloudCannon configuration.",
258
+ "$id": "https://github.com/cloudcannon/configuration-types/releases/latest/download/cloudcannon-config.latest.schema.json",
259
259
  "definitions": {
260
260
  "type.paths": {
261
- "title": "Paths",
262
261
  "type": "object",
263
262
  "properties": {
264
263
  "static": {
@@ -284,6 +283,7 @@
284
283
  }
285
284
  },
286
285
  "additionalProperties": false,
286
+ "title": "Paths",
287
287
  "documented": true,
288
288
  "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```",
289
289
  "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```"
@@ -367,7 +367,6 @@
367
367
  "markdownDescription": "This key defines your Collections.\n\n## Examples\n\nIn this example, we have configured a `blog` Collection. Key settings include two Schemas to populate files with different content, a Blog Tags input populated by a fixed data set, and a custom Create Path to generate file names from structured data.\n\n```yaml\ncollections_config:\n blog:\n path: content/blog\n glob:\n - '!_index.md'\n name: Blog\n icon: post_add\n url: /blog/[full_slug]/\n documentation:\n url: https://example.com/travel-blog-style-guide\n text: Documentation\n icon: auto_stories\n description: |-\n This Collection is for *Travel blogs* and *Customer stories*.\n\n If your have any questions, please contact Heather.\n _editables:\n _enabled_editors:\n - content\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: _select_data.blog_topics\n _select_data:\n blog_topics:\n - Opinion\n - Feature\n - Resource\n create:\n extra_data:\n filename: '{date|year}-{date|month}-{date|day}-{title}'\n path: '[relative_base_path]/{filename|slugify}.[ext]'\n disable_add: false\n disable_add_folder: false\n disable_file_actions: false\n schemas:\n blog:\n path: schemas/travel_blog.md\n name: Blog Post\n icon: post_add\n customer_story:\n path: schemas/customer_story.md\n name: Customer Story\n icon: post_add\n schema_key: _blog_template\n include_developer_files: false\n```\n\nIn this example, we have configured a `team` Collection. Key settings include custom sorting options, add options, and Card previews.\n\n```yaml\ncollections_config:\n team:\n path: _data/team\n name: Our Team\n singular_name: Team Member\n icon: groups\n disable_url: true\n description: |-\n This Collection has a file for every member of our team!\n preview:\n text:\n - key: name\n subtext:\n - key: job_title\n icon:\n - key: profile_picture\n sort:\n key: name\n order: ascending\n sort_options:\n - key: name\n order: ascending\n label: Name (A-Z)\n - key: name\n order: descending\n label: Name (Z-A)\n - key: job_title\n order: ascending\n label: Job Title (A-Z)\n - key: date\n order: descending\n label: Job Title (Z-A)\n _enabled_editors:\n - data\n add_options:\n - name: Office Locations\n icon: map\n href: /our-offices\n schemas:\n manager:\n path: schemas/manager.yml\n name: Manager\n icon: face\n employee:\n path: schemas/employee.yml\n name: Employee\n icon: support_agent\n```"
368
368
  },
369
369
  "collections_config.*": {
370
- "title": "Collection Config",
371
370
  "type": "object",
372
371
  "properties": {
373
372
  "path": {
@@ -440,8 +439,6 @@
440
439
  "description": "This key defines the options for the *Sort* dropdown in a *Collection browser*.\n\nConfiguring sort options for a Collection will remove CloudCannon's default sorting options from the *Sort* dropdown.\n\nBy default, CloudCannon provides sorting options for path, file size, file creation time, and last modified, in ascending and descending order.\n\nCloudCannon will also read data keys from your early Collection files and provide options to sort by those key values.\n\n## Examples\n\nIn this example, the *Sort* dropdown in the `blog` *Collection browser* only contains options for sorting by `author` and `date` in ascending and descending order.\n\n```yaml\ncollections_config:\n blog:\n sort_options:\n - key: author\n order: ascending\n label: Author (A-Z)\n - key: author\n order: descending\n label: Author (Z-A)\n - key: date\n order: ascending\n label: Date (Newest First)\n - key: date\n order: descending\n label: Date (Oldest First)\n```",
441
440
  "type": "array",
442
441
  "items": {
443
- "title": "SortOption",
444
- "description": "This key represents a sort option for a Collection.",
445
442
  "type": "object",
446
443
  "properties": {
447
444
  "label": {
@@ -452,8 +449,8 @@
452
449
  "markdownDescription": "This key defines the label used for a file sorting option in the *Sort* dropdown.\n\n## Examples\n\nIn this example, the sorting method which uses the `author` key is called \"Author (A-Z)\" in the *Sort* dropdown.\n\n```yaml\ncollections_config:\n blog:\n sort_options:\n - key: author\n order: ascending\n label: Author (A-Z)\n```"
453
450
  },
454
451
  "key": {
455
- "description": "This key defines which key an option in the *Sort* dropdown should use to sort files in your *Collection browser*.\n\nYou must define this key for every entry in the `sort_options` array for the object to function.\n\nValue must be the name of a structured data key in your Collection files.\n\nIf some files in your Collection do not have this data key, CloudCannon will sort those in ascending alphabetical order, after the file sorted by your\ndata key in the *Collection browser*.\n\n## Examples\n\nIn this example, the \"Author (A-Z)\" option in the *Sort* dropdown will use the `author` key to sort files in the `blog` *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n sort_options:\n - key: author\n order: ascending\n label: Author (A-Z)\n```",
456
452
  "type": "string",
453
+ "description": "This key defines which key an option in the *Sort* dropdown should use to sort files in your *Collection browser*.\n\nYou must define this key for every entry in the `sort_options` array for the object to function.\n\nValue must be the name of a structured data key in your Collection files.\n\nIf some files in your Collection do not have this data key, CloudCannon will sort those in ascending alphabetical order, after the file sorted by your\ndata key in the *Collection browser*.\n\n## Examples\n\nIn this example, the \"Author (A-Z)\" option in the *Sort* dropdown will use the `author` key to sort files in the `blog` *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n sort_options:\n - key: author\n order: ascending\n label: Author (A-Z)\n```",
457
454
  "documented": true,
458
455
  "title": "key",
459
456
  "markdownDescription": "This key defines which key an option in the *Sort* dropdown should use to sort files in your *Collection browser*.\n\nYou must define this key for every entry in the `sort_options` array for the object to function.\n\nValue must be the name of a structured data key in your Collection files.\n\nIf some files in your Collection do not have this data key, CloudCannon will sort those in ascending alphabetical order, after the file sorted by your\ndata key in the *Collection browser*.\n\n## Examples\n\nIn this example, the \"Author (A-Z)\" option in the *Sort* dropdown will use the `author` key to sort files in the `blog` *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n sort_options:\n - key: author\n order: ascending\n label: Author (A-Z)\n```"
@@ -477,6 +474,8 @@
477
474
  "key"
478
475
  ],
479
476
  "additionalProperties": false,
477
+ "title": "SortOption",
478
+ "description": "This key represents a sort option for a Collection.",
480
479
  "documented": true,
481
480
  "markdownDescription": "This key represents a sort option for a Collection."
482
481
  },
@@ -517,8 +516,6 @@
517
516
  "items": {
518
517
  "anyOf": [
519
518
  {
520
- "title": "Add Option",
521
- "description": "This key represents the standard add option entry in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. Standard add options can contain optional `name`, `icon`, `editor`, `base_path`, `collection`, `schema`, and `default_content_file` keys.\n\n## Examples\n\nIn this example, we have configured a standard add option for the `people` Collection that uses the `employee` Schema and opens files in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\n```yaml\ncollections_config:\n people:\n add_options:\n - name: Add Staff Member\n schema: employee\n icon: face\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n```",
522
519
  "type": "object",
523
520
  "properties": {
524
521
  "name": {
@@ -580,12 +577,12 @@
580
577
  }
581
578
  },
582
579
  "additionalProperties": false,
580
+ "title": "Add Option",
581
+ "description": "This key represents the standard add option entry in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. Standard add options can contain optional `name`, `icon`, `editor`, `base_path`, `collection`, `schema`, and `default_content_file` keys.\n\n## Examples\n\nIn this example, we have configured a standard add option for the `people` Collection that uses the `employee` Schema and opens files in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\n```yaml\ncollections_config:\n people:\n add_options:\n - name: Add Staff Member\n schema: employee\n icon: face\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n```",
583
582
  "documented": true,
584
583
  "markdownDescription": "This key represents the standard add option entry in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. Standard add options can contain optional `name`, `icon`, `editor`, `base_path`, `collection`, `schema`, and `default_content_file` keys.\n\n## Examples\n\nIn this example, we have configured a standard add option for the `people` Collection that uses the `employee` Schema and opens files in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\n```yaml\ncollections_config:\n people:\n add_options:\n - name: Add Staff Member\n schema: employee\n icon: face\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n```"
585
584
  },
586
585
  {
587
- "title": "HREF Add Option",
588
- "description": "This key represents the URL add option object in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. URL add options must contain a required `href` key and can contain optional `name` and `icon` keys.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* has a link to the Office Locations page on our live website.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Office Locations\n icon: map\n href: /our-offices\n```",
589
586
  "type": "object",
590
587
  "properties": {
591
588
  "name": {
@@ -608,8 +605,8 @@
608
605
  "markdownDescription": "This key defines the icon displayed next to the text for a URL option in the *\\+ Add* button dropdown.\n\nThe value is a string that specifies an icon name from [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded).\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* uses a link option with the icon `map` to navigate to the Office Locations page on our live website.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Office Locations\n icon: map\n href: /our-offices\n```"
609
606
  },
610
607
  "href": {
611
- "description": "This key defines the link for a URL option in the *\\+ Add* button dropdown.\n\nThe value is a string that specifies a URL. Values can be an external URL or an internal URL relative to the current Site.\n\nThis key is required for URL add options in the `collections_config.*.add_options` array.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* uses a link option with the URL `https://forms.gle/xxxxxxx`.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Submit Form\n icon: assignment_add\n href: https://forms.gle/xxxxxxx\n```",
612
608
  "type": "string",
609
+ "description": "This key defines the link for a URL option in the *\\+ Add* button dropdown.\n\nThe value is a string that specifies a URL. Values can be an external URL or an internal URL relative to the current Site.\n\nThis key is required for URL add options in the `collections_config.*.add_options` array.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* uses a link option with the URL `https://forms.gle/xxxxxxx`.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Submit Form\n icon: assignment_add\n href: https://forms.gle/xxxxxxx\n```",
613
610
  "documented": true,
614
611
  "title": "href",
615
612
  "markdownDescription": "This key defines the link for a URL option in the *\\+ Add* button dropdown.\n\nThe value is a string that specifies a URL. Values can be an external URL or an internal URL relative to the current Site.\n\nThis key is required for URL add options in the `collections_config.*.add_options` array.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* uses a link option with the URL `https://forms.gle/xxxxxxx`.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Submit Form\n icon: assignment_add\n href: https://forms.gle/xxxxxxx\n```"
@@ -619,6 +616,8 @@
619
616
  "href"
620
617
  ],
621
618
  "additionalProperties": false,
619
+ "title": "HREF Add Option",
620
+ "description": "This key represents the URL add option object in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. URL add options must contain a required `href` key and can contain optional `name` and `icon` keys.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* has a link to the Office Locations page on our live website.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Office Locations\n icon: map\n href: /our-offices\n```",
622
621
  "documented": true,
623
622
  "markdownDescription": "This key represents the URL add option object in a `collections_config.*.add_options` array.\n\nThe value is an object that defines an option available in the *+ Add* button dropdown at the top right of the *Collection browser*. URL add options must contain a required `href` key and can contain optional `name` and `icon` keys.\n\n## Examples\n\nIn this example, the *\\+ Add* button dropdown in the `team` *Collection browser* has a link to the Office Locations page on our live website.\n\n```yaml\ncollections_config:\n team:\n add_options:\n - name: Office Locations\n icon: map\n href: /our-offices\n```"
624
623
  }
@@ -679,13 +678,11 @@
679
678
  "type": "string"
680
679
  },
681
680
  "additionalProperties": {
682
- "title": "Schema",
683
- "description": "This key defines your schemas, which are the structured data formats for your content files.",
684
681
  "type": "object",
685
682
  "properties": {
686
683
  "path": {
687
- "description": "This key defines the path to the schema file relative to the root folder of the site.",
688
684
  "type": "string",
685
+ "description": "This key defines the path to the schema file relative to the root folder of the site.",
689
686
  "documented": true,
690
687
  "title": "path",
691
688
  "markdownDescription": "This key defines the path to the schema file relative to the root folder of the site."
@@ -831,6 +828,8 @@
831
828
  "path"
832
829
  ],
833
830
  "additionalProperties": false,
831
+ "title": "Schema",
832
+ "description": "This key defines your schemas, which are the structured data formats for your content files.",
834
833
  "documented": true,
835
834
  "markdownDescription": "This key defines your schemas, which are the structured data formats for your content files."
836
835
  },
@@ -933,13 +932,14 @@
933
932
  "path"
934
933
  ],
935
934
  "additionalProperties": false,
935
+ "title": "Collection Config",
936
936
  "documented": true,
937
937
  "description": "This key defines your Collections, which are the sets of content files for your site grouped by folder.",
938
938
  "markdownDescription": "This key defines your Collections, which are the sets of content files for your site grouped by folder."
939
939
  },
940
940
  "path": {
941
- "description": "This key defines the folder path for the collection key in which it is nested.\n\nThe value for this key is relative to your [Site source](https://cloudcannon.com/documentation/developer-reference/configuration-file/source/).\n\nEach Collection must have a unique path.\n\n## Examples\n\nIn this example, the files for the `blog` Collection are located in the `content/blog` folder.\n\n```yaml\ncollections_config:\n blog:\n path: content/blog\n```",
942
941
  "type": "string",
942
+ "description": "This key defines the folder path for the collection key in which it is nested.\n\nThe value for this key is relative to your [Site source](https://cloudcannon.com/documentation/developer-reference/configuration-file/source/).\n\nEach Collection must have a unique path.\n\n## Examples\n\nIn this example, the files for the `blog` Collection are located in the `content/blog` folder.\n\n```yaml\ncollections_config:\n blog:\n path: content/blog\n```",
943
943
  "documented": true,
944
944
  "title": "path",
945
945
  "markdownDescription": "This key defines the folder path for the collection key in which it is nested.\n\nThe value for this key is relative to your [Site source](https://cloudcannon.com/documentation/developer-reference/configuration-file/source/).\n\nEach Collection must have a unique path.\n\n## Examples\n\nIn this example, the files for the `blog` Collection are located in the `content/blog` folder.\n\n```yaml\ncollections_config:\n blog:\n path: content/blog\n```"
@@ -948,7 +948,6 @@
948
948
  "description": "This key defines globs which filter the files visible in the *Collection browser* for a given Collection.\n\nGlobs can be positive (e.g. `*.yml`), or negative (e.g. `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\nIf you do not define any positive globs, CloudCannon will include all non-developer files in a Collection unless they match a negative\nglob.\n\nDefining a negative glob for a Collection does not remove a file from the associated Collection folder in your Git repository.\n\nSimilarly, defining a positive glob for a file in a folder outside your Collection path does not move the file.\n\n## Examples\n\nIn this example, the *Collection browser* will show all files in the `data` folder except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '!secret.yml'\n```\n\nIn this example, the *Collection browser* will show only `.yml` files in the `data` folder or any nested folders.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob: '**/*.yml'\n```\n\nIn this example, the *Collection browser* will show only `.yml` files in the `data` folder, except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '**/*.yml'\n - '!secret.yml'\n```",
949
949
  "anyOf": [
950
950
  {
951
- "title": "Glob Array",
952
951
  "type": "array",
953
952
  "items": {
954
953
  "type": "string",
@@ -957,13 +956,14 @@
957
956
  "description": "This key represents an individual glob pattern string in the `collections_config.*.glob` array.\n\nThe value is a string that specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\n## Examples\n\nIn this example, the `data` Collection uses a negative glob pattern to exclude the `secret.yml` file from the *Collection browser*.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '!secret.yml'\n```",
958
957
  "markdownDescription": "This key represents an individual glob pattern string in the `collections_config.*.glob` array.\n\nThe value is a string that specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\n## Examples\n\nIn this example, the `data` Collection uses a negative glob pattern to exclude the `secret.yml` file from the *Collection browser*.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '!secret.yml'\n```"
959
958
  },
959
+ "title": "Glob Array",
960
960
  "documented": true,
961
961
  "description": "This key represents an array format for the `collections_config.*.glob` key.\n\nThe value is an array of glob pattern strings. Each string specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\n## Examples\n\nIn this example, the `data` Collection uses an array of glob patterns to show only `.yml` files, except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '**/*.yml'\n - '!secret.yml'\n```",
962
962
  "markdownDescription": "This key represents an array format for the `collections_config.*.glob` key.\n\nThe value is an array of glob pattern strings. Each string specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\n## Examples\n\nIn this example, the `data` Collection uses an array of glob patterns to show only `.yml` files, except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '**/*.yml'\n - '!secret.yml'\n```"
963
963
  },
964
964
  {
965
- "title": "Glob",
966
965
  "type": "string",
966
+ "title": "Glob",
967
967
  "documented": true,
968
968
  "description": "This key represents a single glob pattern string format for the `collections_config.*.glob` key.\n\nThe value is a string that specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\n## Examples\n\nIn this example, the `data` Collection uses a single glob pattern to show only `.yml` files in the `data` folder or any nested folders.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob: '**/*.yml'\n```",
969
969
  "markdownDescription": "This key represents a single glob pattern string format for the `collections_config.*.glob` key.\n\nThe value is a string that specifies a file path pattern relative to the Collection path. Globs can be positive (e.g., `*.yml`) or negative (e.g., `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\n## Examples\n\nIn this example, the `data` Collection uses a single glob pattern to show only `.yml` files in the `data` folder or any nested folders.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob: '**/*.yml'\n```"
@@ -974,8 +974,6 @@
974
974
  "markdownDescription": "This key defines globs which filter the files visible in the *Collection browser* for a given Collection.\n\nGlobs can be positive (e.g. `*.yml`), or negative (e.g. `!**/*.json`).\n\nFiles are included in a Collection if they match any positive globs and do not match any negative globs.\n\nIf you do not define any positive globs, CloudCannon will include all non-developer files in a Collection unless they match a negative\nglob.\n\nDefining a negative glob for a Collection does not remove a file from the associated Collection folder in your Git repository.\n\nSimilarly, defining a positive glob for a file in a folder outside your Collection path does not move the file.\n\n## Examples\n\nIn this example, the *Collection browser* will show all files in the `data` folder except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '!secret.yml'\n```\n\nIn this example, the *Collection browser* will show only `.yml` files in the `data` folder or any nested folders.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob: '**/*.yml'\n```\n\nIn this example, the *Collection browser* will show only `.yml` files in the `data` folder, except for the `secret.yml` file.\n\n```yaml\ncollections_config:\n data:\n path: data\n glob:\n - '**/*.yml'\n - '!secret.yml'\n```"
975
975
  },
976
976
  "icon": {
977
- "title": "Icon",
978
- "description": "Material Symbol icon names available in CloudCannon for UI elements and content previews.",
979
977
  "type": "string",
980
978
  "enum": [
981
979
  "123",
@@ -4563,17 +4561,17 @@
4563
4561
  "zoom_out",
4564
4562
  "zoom_out_map"
4565
4563
  ],
4564
+ "title": "Icon",
4565
+ "description": "Material Symbol icon names available in CloudCannon for UI elements and content previews.",
4566
4566
  "documented": false,
4567
4567
  "markdownDescription": "Material Symbol icon names available in CloudCannon for UI elements and content previews."
4568
4568
  },
4569
4569
  "type.documentation": {
4570
- "title": "Documentation",
4571
- "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```",
4572
4570
  "type": "object",
4573
4571
  "properties": {
4574
4572
  "url": {
4575
- "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```",
4576
4573
  "type": "string",
4574
+ "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```",
4577
4575
  "documented": true,
4578
4576
  "title": "url",
4579
4577
  "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```"
@@ -4602,24 +4600,24 @@
4602
4600
  "url"
4603
4601
  ],
4604
4602
  "additionalProperties": false,
4603
+ "title": "Documentation",
4604
+ "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```",
4605
4605
  "documented": true,
4606
4606
  "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```"
4607
4607
  },
4608
4608
  "EditorKey": {
4609
- "title": "Editor Key",
4610
- "description": "The available editors in CloudCannon: visual, content, and data editors.",
4611
4609
  "type": "string",
4612
4610
  "enum": [
4613
4611
  "visual",
4614
4612
  "content",
4615
4613
  "data"
4616
4614
  ],
4615
+ "title": "Editor Key",
4616
+ "description": "The available editors in CloudCannon: visual, content, and data editors.",
4617
4617
  "documented": false,
4618
4618
  "markdownDescription": "The available editors in CloudCannon: visual, content, and data editors."
4619
4619
  },
4620
4620
  "type.create": {
4621
- "title": "Create",
4622
- "description": "This key defines the path to which CloudCannon will save new files in a Collection.\n\nCloudCannon generates \"Create Paths\" when you open the *Review changes* modal.\n\nFor more information, please read our documentation on [Create Paths](https://cloudcannon.com/documentation/articles/set-the-path-for-new-files/).\n\n## Examples\n\nIn this example, CloudCannon will generate a Create Path for new files in the `blog` Collection using the `date` and `title` structured data keys. For example, CloudCannon will generate a create path of `blog/2024-10-31-spooky-getaway.md` for a file with the date 31st October 2024 and the title \"Spooky Getaway\".\n\n```yaml\ncollections_config:\n blog:\n create:\n extra_data:\n filename: '{date|year}-{date|month}-{date|day}-{title}'\n path: '[relative_base_path]/{filename|slugify}.[ext]'\n```",
4623
4621
  "type": "object",
4624
4622
  "properties": {
4625
4623
  "path": {
@@ -4700,12 +4698,12 @@
4700
4698
  }
4701
4699
  },
4702
4700
  "additionalProperties": false,
4701
+ "title": "Create",
4702
+ "description": "This key defines the path to which CloudCannon will save new files in a Collection.\n\nCloudCannon generates \"Create Paths\" when you open the *Review changes* modal.\n\nFor more information, please read our documentation on [Create Paths](https://cloudcannon.com/documentation/articles/set-the-path-for-new-files/).\n\n## Examples\n\nIn this example, CloudCannon will generate a Create Path for new files in the `blog` Collection using the `date` and `title` structured data keys. For example, CloudCannon will generate a create path of `blog/2024-10-31-spooky-getaway.md` for a file with the date 31st October 2024 and the title \"Spooky Getaway\".\n\n```yaml\ncollections_config:\n blog:\n create:\n extra_data:\n filename: '{date|year}-{date|month}-{date|day}-{title}'\n path: '[relative_base_path]/{filename|slugify}.[ext]'\n```",
4703
4703
  "documented": true,
4704
4704
  "markdownDescription": "This key defines the path to which CloudCannon will save new files in a Collection.\n\nCloudCannon generates \"Create Paths\" when you open the *Review changes* modal.\n\nFor more information, please read our documentation on [Create Paths](https://cloudcannon.com/documentation/articles/set-the-path-for-new-files/).\n\n## Examples\n\nIn this example, CloudCannon will generate a Create Path for new files in the `blog` Collection using the `date` and `title` structured data keys. For example, CloudCannon will generate a create path of `blog/2024-10-31-spooky-getaway.md` for a file with the date 31st October 2024 and the title \"Spooky Getaway\".\n\n```yaml\ncollections_config:\n blog:\n create:\n extra_data:\n filename: '{date|year}-{date|month}-{date|day}-{title}'\n path: '[relative_base_path]/{filename|slugify}.[ext]'\n```"
4705
4705
  },
4706
4706
  "type._inputs": {
4707
- "title": "Inputs",
4708
- "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```",
4709
4707
  "type": "object",
4710
4708
  "propertyNames": {
4711
4709
  "type": "string"
@@ -4713,15 +4711,14 @@
4713
4711
  "additionalProperties": {
4714
4712
  "$ref": "#/definitions/Input"
4715
4713
  },
4714
+ "title": "Inputs",
4715
+ "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```",
4716
4716
  "documented": true,
4717
4717
  "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```"
4718
4718
  },
4719
4719
  "Input": {
4720
- "title": "Input",
4721
4720
  "anyOf": [
4722
4721
  {
4723
- "title": "Known Input",
4724
- "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```",
4725
4722
  "oneOf": [
4726
4723
  {
4727
4724
  "$ref": "#/definitions/TextInput"
@@ -4781,6 +4778,8 @@
4781
4778
  "$ref": "#/definitions/AutoInput"
4782
4779
  }
4783
4780
  ],
4781
+ "title": "Known Input",
4782
+ "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```",
4784
4783
  "documented": true,
4785
4784
  "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```"
4786
4785
  },
@@ -4788,13 +4787,12 @@
4788
4787
  "$ref": "#/definitions/UnknownInput"
4789
4788
  }
4790
4789
  ],
4790
+ "title": "Input",
4791
4791
  "documented": true,
4792
4792
  "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```",
4793
4793
  "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```"
4794
4794
  },
4795
4795
  "TextInput": {
4796
- "title": "Text Input",
4797
- "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```",
4798
4796
  "type": "object",
4799
4797
  "properties": {
4800
4798
  "comment": {
@@ -4839,8 +4837,6 @@
4839
4837
  "$ref": "#/definitions/type._inputs.*.cascade"
4840
4838
  },
4841
4839
  "type": {
4842
- "title": "Type",
4843
- "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```",
4844
4840
  "type": "string",
4845
4841
  "enum": [
4846
4842
  "text",
@@ -4852,11 +4848,12 @@
4852
4848
  "github",
4853
4849
  "instagram"
4854
4850
  ],
4851
+ "title": "Type",
4852
+ "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```",
4855
4853
  "documented": true,
4856
4854
  "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```"
4857
4855
  },
4858
4856
  "options": {
4859
- "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```",
4860
4857
  "type": "object",
4861
4858
  "properties": {
4862
4859
  "max_length": {
@@ -4871,6 +4868,33 @@
4871
4868
  "min_length_message": {
4872
4869
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
4873
4870
  },
4871
+ "max_words": {
4872
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
4873
+ },
4874
+ "max_words_message": {
4875
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
4876
+ },
4877
+ "min_words": {
4878
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
4879
+ },
4880
+ "min_words_message": {
4881
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
4882
+ },
4883
+ "max_graphemes": {
4884
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
4885
+ },
4886
+ "max_graphemes_message": {
4887
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
4888
+ },
4889
+ "min_graphemes": {
4890
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
4891
+ },
4892
+ "min_graphemes_message": {
4893
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
4894
+ },
4895
+ "locale": {
4896
+ "$ref": "#/definitions/type._inputs.*.options.locale"
4897
+ },
4874
4898
  "pattern": {
4875
4899
  "$ref": "#/definitions/type._inputs.*.options.pattern"
4876
4900
  },
@@ -4937,6 +4961,7 @@
4937
4961
  }
4938
4962
  },
4939
4963
  "additionalProperties": false,
4964
+ "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```",
4940
4965
  "documented": true,
4941
4966
  "title": "options",
4942
4967
  "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```"
@@ -4946,6 +4971,8 @@
4946
4971
  "type"
4947
4972
  ],
4948
4973
  "additionalProperties": false,
4974
+ "title": "Text Input",
4975
+ "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```",
4949
4976
  "documented": true,
4950
4977
  "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```"
4951
4978
  },
@@ -4957,7 +4984,6 @@
4957
4984
  "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```"
4958
4985
  },
4959
4986
  "type._inputs.*.context": {
4960
- "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```",
4961
4987
  "type": "object",
4962
4988
  "properties": {
4963
4989
  "content": {
@@ -4995,6 +5021,7 @@
4995
5021
  }
4996
5022
  },
4997
5023
  "additionalProperties": false,
5024
+ "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```",
4998
5025
  "documented": true,
4999
5026
  "title": "context",
5000
5027
  "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```"
@@ -5011,15 +5038,15 @@
5011
5038
  "default": false,
5012
5039
  "anyOf": [
5013
5040
  {
5014
- "title": "Boolean Hidden",
5015
5041
  "type": "boolean",
5042
+ "title": "Boolean Hidden",
5016
5043
  "documented": true,
5017
5044
  "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```",
5018
5045
  "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```"
5019
5046
  },
5020
5047
  {
5021
- "title": "Query String Hidden",
5022
5048
  "type": "string",
5049
+ "title": "Query String Hidden",
5023
5050
  "documented": true,
5024
5051
  "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```",
5025
5052
  "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```"
@@ -5034,15 +5061,15 @@
5034
5061
  "default": false,
5035
5062
  "anyOf": [
5036
5063
  {
5037
- "title": "Boolean",
5038
5064
  "type": "boolean",
5065
+ "title": "Boolean",
5039
5066
  "documented": true,
5040
5067
  "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```",
5041
5068
  "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```"
5042
5069
  },
5043
5070
  {
5044
- "title": "Query String",
5045
5071
  "type": "string",
5072
+ "title": "Query String",
5046
5073
  "documented": true,
5047
5074
  "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```",
5048
5075
  "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```"
@@ -5107,6 +5134,69 @@
5107
5134
  "title": "min_length_message",
5108
5135
  "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```"
5109
5136
  },
5137
+ "type._inputs.*.options.max_words": {
5138
+ "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.",
5139
+ "type": "number",
5140
+ "documented": true,
5141
+ "title": "max_words",
5142
+ "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."
5143
+ },
5144
+ "type._inputs.*.options.max_words_message": {
5145
+ "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.",
5146
+ "type": "string",
5147
+ "documented": true,
5148
+ "title": "max_words_message",
5149
+ "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."
5150
+ },
5151
+ "type._inputs.*.options.min_words": {
5152
+ "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.",
5153
+ "type": "number",
5154
+ "documented": true,
5155
+ "title": "min_words",
5156
+ "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."
5157
+ },
5158
+ "type._inputs.*.options.min_words_message": {
5159
+ "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`.",
5160
+ "type": "string",
5161
+ "documented": true,
5162
+ "title": "min_words_message",
5163
+ "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`."
5164
+ },
5165
+ "type._inputs.*.options.max_graphemes": {
5166
+ "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.",
5167
+ "type": "number",
5168
+ "documented": true,
5169
+ "title": "max_graphemes",
5170
+ "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."
5171
+ },
5172
+ "type._inputs.*.options.max_graphemes_message": {
5173
+ "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.",
5174
+ "type": "string",
5175
+ "documented": true,
5176
+ "title": "max_graphemes_message",
5177
+ "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."
5178
+ },
5179
+ "type._inputs.*.options.min_graphemes": {
5180
+ "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.",
5181
+ "type": "number",
5182
+ "documented": true,
5183
+ "title": "min_graphemes",
5184
+ "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."
5185
+ },
5186
+ "type._inputs.*.options.min_graphemes_message": {
5187
+ "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`.",
5188
+ "type": "string",
5189
+ "documented": true,
5190
+ "title": "min_graphemes_message",
5191
+ "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`."
5192
+ },
5193
+ "type._inputs.*.options.locale": {
5194
+ "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.",
5195
+ "type": "string",
5196
+ "documented": true,
5197
+ "title": "locale",
5198
+ "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."
5199
+ },
5110
5200
  "type._inputs.*.options.pattern": {
5111
5201
  "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```",
5112
5202
  "type": "string",
@@ -5195,8 +5285,8 @@
5195
5285
  "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```"
5196
5286
  },
5197
5287
  "type._inputs.*.options.empty_type(text)": {
5198
- "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.",
5199
5288
  "default": "null",
5289
+ "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.",
5200
5290
  "type": "string",
5201
5291
  "enum": [
5202
5292
  "null",
@@ -5222,17 +5312,16 @@
5222
5312
  "title": "icon_color(previewentries)"
5223
5313
  },
5224
5314
  "type.preview-entry.(array)": {
5225
- "title": "Array Preview Entry",
5226
5315
  "type": "array",
5227
5316
  "items": {
5228
5317
  "$ref": "#/definitions/type.preview-entry"
5229
5318
  },
5319
+ "title": "Array Preview Entry",
5230
5320
  "documented": true,
5231
5321
  "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```",
5232
5322
  "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```"
5233
5323
  },
5234
5324
  "type.preview-entry": {
5235
- "title": "Preview Entry",
5236
5325
  "anyOf": [
5237
5326
  {
5238
5327
  "$ref": "#/definitions/type.preview-entry.(key)"
@@ -5250,17 +5339,17 @@
5250
5339
  "$ref": "#/definitions/type.preview-entry.(false)"
5251
5340
  }
5252
5341
  ],
5342
+ "title": "Preview Entry",
5253
5343
  "documented": true,
5254
5344
  "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```",
5255
5345
  "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```"
5256
5346
  },
5257
5347
  "type.preview-entry.(key)": {
5258
- "title": "Key Preview Entry",
5259
5348
  "type": "object",
5260
5349
  "properties": {
5261
5350
  "key": {
5262
- "title": "Key Value",
5263
5351
  "type": "string",
5352
+ "title": "Key Value",
5264
5353
  "documented": true,
5265
5354
  "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```",
5266
5355
  "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```"
@@ -5270,17 +5359,17 @@
5270
5359
  "key"
5271
5360
  ],
5272
5361
  "additionalProperties": false,
5362
+ "title": "Key Preview Entry",
5273
5363
  "documented": true,
5274
5364
  "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```",
5275
5365
  "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```"
5276
5366
  },
5277
5367
  "type.preview-entry.(template)": {
5278
- "title": "Template Preview Entry",
5279
5368
  "type": "object",
5280
5369
  "properties": {
5281
5370
  "template": {
5282
- "title": "Template Value",
5283
5371
  "type": "string",
5372
+ "title": "Template Value",
5284
5373
  "documented": true,
5285
5374
  "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```",
5286
5375
  "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```"
@@ -5290,17 +5379,17 @@
5290
5379
  "template"
5291
5380
  ],
5292
5381
  "additionalProperties": false,
5382
+ "title": "Template Preview Entry",
5293
5383
  "documented": true,
5294
5384
  "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```",
5295
5385
  "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```"
5296
5386
  },
5297
5387
  "type.preview-entry.(text)": {
5298
- "title": "Text Preview Entry",
5299
5388
  "type": "object",
5300
5389
  "properties": {
5301
5390
  "text": {
5302
- "title": "Text Value",
5303
5391
  "type": "string",
5392
+ "title": "Text Value",
5304
5393
  "documented": true,
5305
5394
  "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```",
5306
5395
  "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```"
@@ -5310,28 +5399,27 @@
5310
5399
  "text"
5311
5400
  ],
5312
5401
  "additionalProperties": false,
5402
+ "title": "Text Preview Entry",
5313
5403
  "documented": true,
5314
5404
  "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```",
5315
5405
  "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```"
5316
5406
  },
5317
5407
  "type.preview-entry.(raw-text)": {
5318
- "title": "Raw Text Preview Entry",
5319
5408
  "type": "string",
5409
+ "title": "Raw Text Preview Entry",
5320
5410
  "documented": true,
5321
5411
  "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```",
5322
5412
  "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```"
5323
5413
  },
5324
5414
  "type.preview-entry.(false)": {
5325
- "title": "False Preview Entry",
5326
5415
  "type": "boolean",
5327
5416
  "const": false,
5417
+ "title": "False Preview Entry",
5328
5418
  "documented": true,
5329
5419
  "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```",
5330
5420
  "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```"
5331
5421
  },
5332
5422
  "TextareaInput": {
5333
- "title": "Textarea Input",
5334
- "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```",
5335
5423
  "type": "object",
5336
5424
  "properties": {
5337
5425
  "comment": {
@@ -5376,15 +5464,14 @@
5376
5464
  "$ref": "#/definitions/type._inputs.*.cascade"
5377
5465
  },
5378
5466
  "type": {
5379
- "title": "Type",
5380
- "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```",
5381
5467
  "type": "string",
5382
5468
  "const": "textarea",
5469
+ "title": "Type",
5470
+ "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```",
5383
5471
  "documented": true,
5384
5472
  "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```"
5385
5473
  },
5386
5474
  "options": {
5387
- "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```",
5388
5475
  "type": "object",
5389
5476
  "properties": {
5390
5477
  "max_length": {
@@ -5399,6 +5486,33 @@
5399
5486
  "min_length_message": {
5400
5487
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5401
5488
  },
5489
+ "max_words": {
5490
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5491
+ },
5492
+ "max_words_message": {
5493
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5494
+ },
5495
+ "min_words": {
5496
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5497
+ },
5498
+ "min_words_message": {
5499
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5500
+ },
5501
+ "max_graphemes": {
5502
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5503
+ },
5504
+ "max_graphemes_message": {
5505
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5506
+ },
5507
+ "min_graphemes": {
5508
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5509
+ },
5510
+ "min_graphemes_message": {
5511
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5512
+ },
5513
+ "locale": {
5514
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5515
+ },
5402
5516
  "pattern": {
5403
5517
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5404
5518
  },
@@ -5440,6 +5554,7 @@
5440
5554
  }
5441
5555
  },
5442
5556
  "additionalProperties": false,
5557
+ "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```",
5443
5558
  "documented": true,
5444
5559
  "title": "options",
5445
5560
  "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```"
@@ -5449,12 +5564,12 @@
5449
5564
  "type"
5450
5565
  ],
5451
5566
  "additionalProperties": false,
5567
+ "title": "Textarea Input",
5568
+ "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```",
5452
5569
  "documented": true,
5453
5570
  "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```"
5454
5571
  },
5455
5572
  "CodeInput": {
5456
- "title": "Code Input",
5457
- "description": "This key defines an editing interface for code or mono-spaced plain text content.",
5458
5573
  "type": "object",
5459
5574
  "properties": {
5460
5575
  "comment": {
@@ -5499,15 +5614,14 @@
5499
5614
  "$ref": "#/definitions/type._inputs.*.cascade"
5500
5615
  },
5501
5616
  "type": {
5502
- "title": "Type",
5503
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5504
5617
  "type": "string",
5505
5618
  "const": "code",
5619
+ "title": "Type",
5620
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5506
5621
  "documented": true,
5507
5622
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5508
5623
  },
5509
5624
  "options": {
5510
- "description": "This key defines options that are specific to Code Inputs.",
5511
5625
  "type": "object",
5512
5626
  "properties": {
5513
5627
  "tab_size": {
@@ -5558,6 +5672,33 @@
5558
5672
  "min_length_message": {
5559
5673
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5560
5674
  },
5675
+ "max_words": {
5676
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5677
+ },
5678
+ "max_words_message": {
5679
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5680
+ },
5681
+ "min_words": {
5682
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5683
+ },
5684
+ "min_words_message": {
5685
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5686
+ },
5687
+ "max_graphemes": {
5688
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5689
+ },
5690
+ "max_graphemes_message": {
5691
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5692
+ },
5693
+ "min_graphemes": {
5694
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5695
+ },
5696
+ "min_graphemes_message": {
5697
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5698
+ },
5699
+ "locale": {
5700
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5701
+ },
5561
5702
  "pattern": {
5562
5703
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5563
5704
  },
@@ -5609,6 +5750,7 @@
5609
5750
  }
5610
5751
  },
5611
5752
  "additionalProperties": false,
5753
+ "description": "This key defines options that are specific to Code Inputs.",
5612
5754
  "documented": true,
5613
5755
  "title": "options",
5614
5756
  "markdownDescription": "This key defines options that are specific to Code Inputs."
@@ -5618,6 +5760,8 @@
5618
5760
  "type"
5619
5761
  ],
5620
5762
  "additionalProperties": false,
5763
+ "title": "Code Input",
5764
+ "description": "This key defines an editing interface for code or mono-spaced plain text content.",
5621
5765
  "documented": true,
5622
5766
  "markdownDescription": "This key defines an editing interface for code or mono-spaced plain text content."
5623
5767
  },
@@ -5654,8 +5798,6 @@
5654
5798
  "title": "theme(theme)"
5655
5799
  },
5656
5800
  "Syntax": {
5657
- "title": "Syntax",
5658
- "description": "Available syntax highlighting languages for code editors in CloudCannon.",
5659
5801
  "type": "string",
5660
5802
  "enum": [
5661
5803
  "c_cpp",
@@ -5727,12 +5869,12 @@
5727
5869
  "xquery",
5728
5870
  "yaml"
5729
5871
  ],
5872
+ "title": "Syntax",
5873
+ "description": "Available syntax highlighting languages for code editors in CloudCannon.",
5730
5874
  "documented": false,
5731
5875
  "markdownDescription": "Available syntax highlighting languages for code editors in CloudCannon."
5732
5876
  },
5733
5877
  "ColorInput": {
5734
- "title": "Color Input",
5735
- "description": "This key defines an editing interface for color values.",
5736
5878
  "type": "object",
5737
5879
  "properties": {
5738
5880
  "comment": {
@@ -5777,15 +5919,14 @@
5777
5919
  "$ref": "#/definitions/type._inputs.*.cascade"
5778
5920
  },
5779
5921
  "type": {
5780
- "title": "Type",
5781
- "description": "This key defines the input type, which controls how this input appears and behaves.",
5782
5922
  "type": "string",
5783
5923
  "const": "color",
5924
+ "title": "Type",
5925
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
5784
5926
  "documented": true,
5785
5927
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
5786
5928
  },
5787
5929
  "options": {
5788
- "description": "This key defines options that are specific to Color Inputs.",
5789
5930
  "type": "object",
5790
5931
  "properties": {
5791
5932
  "max_length": {
@@ -5800,6 +5941,33 @@
5800
5941
  "min_length_message": {
5801
5942
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5802
5943
  },
5944
+ "max_words": {
5945
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5946
+ },
5947
+ "max_words_message": {
5948
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5949
+ },
5950
+ "min_words": {
5951
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5952
+ },
5953
+ "min_words_message": {
5954
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5955
+ },
5956
+ "max_graphemes": {
5957
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5958
+ },
5959
+ "max_graphemes_message": {
5960
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5961
+ },
5962
+ "min_graphemes": {
5963
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5964
+ },
5965
+ "min_graphemes_message": {
5966
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5967
+ },
5968
+ "locale": {
5969
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5970
+ },
5803
5971
  "pattern": {
5804
5972
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5805
5973
  },
@@ -5868,6 +6036,7 @@
5868
6036
  }
5869
6037
  },
5870
6038
  "additionalProperties": false,
6039
+ "description": "This key defines options that are specific to Color Inputs.",
5871
6040
  "documented": true,
5872
6041
  "title": "options",
5873
6042
  "markdownDescription": "This key defines options that are specific to Color Inputs."
@@ -5877,12 +6046,12 @@
5877
6046
  "type"
5878
6047
  ],
5879
6048
  "additionalProperties": false,
6049
+ "title": "Color Input",
6050
+ "description": "This key defines an editing interface for color values.",
5880
6051
  "documented": true,
5881
6052
  "markdownDescription": "This key defines an editing interface for color values."
5882
6053
  },
5883
6054
  "BooleanInput": {
5884
- "title": "Boolean Input",
5885
- "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```",
5886
6055
  "type": "object",
5887
6056
  "properties": {
5888
6057
  "comment": {
@@ -5927,13 +6096,13 @@
5927
6096
  "$ref": "#/definitions/type._inputs.*.cascade"
5928
6097
  },
5929
6098
  "type": {
5930
- "title": "Type",
5931
- "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```",
5932
6099
  "type": "string",
5933
6100
  "enum": [
5934
6101
  "checkbox",
5935
6102
  "switch"
5936
6103
  ],
6104
+ "title": "Type",
6105
+ "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```",
5937
6106
  "documented": true,
5938
6107
  "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```"
5939
6108
  }
@@ -5942,12 +6111,12 @@
5942
6111
  "type"
5943
6112
  ],
5944
6113
  "additionalProperties": false,
6114
+ "title": "Boolean Input",
6115
+ "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```",
5945
6116
  "documented": true,
5946
6117
  "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```"
5947
6118
  },
5948
6119
  "NumberInput": {
5949
- "title": "Number Input",
5950
- "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```",
5951
6120
  "type": "object",
5952
6121
  "properties": {
5953
6122
  "comment": {
@@ -5992,15 +6161,14 @@
5992
6161
  "$ref": "#/definitions/type._inputs.*.cascade"
5993
6162
  },
5994
6163
  "type": {
5995
- "title": "Type",
5996
- "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```",
5997
6164
  "type": "string",
5998
6165
  "const": "number",
6166
+ "title": "Type",
6167
+ "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```",
5999
6168
  "documented": true,
6000
6169
  "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```"
6001
6170
  },
6002
6171
  "options": {
6003
- "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```",
6004
6172
  "type": "object",
6005
6173
  "properties": {
6006
6174
  "required": {
@@ -6047,6 +6215,7 @@
6047
6215
  }
6048
6216
  },
6049
6217
  "additionalProperties": false,
6218
+ "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```",
6050
6219
  "documented": true,
6051
6220
  "title": "options",
6052
6221
  "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```"
@@ -6056,12 +6225,14 @@
6056
6225
  "type"
6057
6226
  ],
6058
6227
  "additionalProperties": false,
6228
+ "title": "Number Input",
6229
+ "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```",
6059
6230
  "documented": true,
6060
6231
  "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```"
6061
6232
  },
6062
6233
  "type._inputs.*.options.empty_type(number)": {
6063
- "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```",
6064
6234
  "default": "null",
6235
+ "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```",
6065
6236
  "type": "string",
6066
6237
  "enum": [
6067
6238
  "null",
@@ -6072,15 +6243,15 @@
6072
6243
  "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```"
6073
6244
  },
6074
6245
  "type._inputs.*.options.min": {
6075
- "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```",
6076
6246
  "type": "number",
6247
+ "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```",
6077
6248
  "documented": true,
6078
6249
  "title": "min",
6079
6250
  "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```"
6080
6251
  },
6081
6252
  "type._inputs.*.options.max": {
6082
- "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```",
6083
6253
  "type": "number",
6254
+ "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```",
6084
6255
  "documented": true,
6085
6256
  "title": "max",
6086
6257
  "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```"
@@ -6107,8 +6278,6 @@
6107
6278
  "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```"
6108
6279
  },
6109
6280
  "RangeInput": {
6110
- "title": "Range Input",
6111
- "description": "This key defines a slider interface for selecting a numeric value.",
6112
6281
  "type": "object",
6113
6282
  "properties": {
6114
6283
  "comment": {
@@ -6153,15 +6322,14 @@
6153
6322
  "$ref": "#/definitions/type._inputs.*.cascade"
6154
6323
  },
6155
6324
  "type": {
6156
- "title": "Type",
6157
- "description": "This key defines the input type, which controls how this input appears and behaves.",
6158
6325
  "type": "string",
6159
6326
  "const": "range",
6327
+ "title": "Type",
6328
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
6160
6329
  "documented": true,
6161
6330
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
6162
6331
  },
6163
6332
  "options": {
6164
- "description": "This key defines options that are specific to Range Inputs.",
6165
6333
  "type": "object",
6166
6334
  "properties": {
6167
6335
  "required": {
@@ -6200,6 +6368,7 @@
6200
6368
  "max"
6201
6369
  ],
6202
6370
  "additionalProperties": false,
6371
+ "description": "This key defines options that are specific to Range Inputs.",
6203
6372
  "documented": true,
6204
6373
  "title": "options",
6205
6374
  "markdownDescription": "This key defines options that are specific to Range Inputs."
@@ -6209,12 +6378,12 @@
6209
6378
  "type"
6210
6379
  ],
6211
6380
  "additionalProperties": false,
6381
+ "title": "Range Input",
6382
+ "description": "This key defines a slider interface for selecting a numeric value.",
6212
6383
  "documented": true,
6213
6384
  "markdownDescription": "This key defines a slider interface for selecting a numeric value."
6214
6385
  },
6215
6386
  "RichTextInput": {
6216
- "title": "Rich Text Input",
6217
- "description": "This key defines an editing interface for HTML markup content.",
6218
6387
  "type": "object",
6219
6388
  "properties": {
6220
6389
  "comment": {
@@ -6259,18 +6428,17 @@
6259
6428
  "$ref": "#/definitions/type._inputs.*.cascade"
6260
6429
  },
6261
6430
  "type": {
6262
- "title": "Type",
6263
- "description": "This key defines the input type, which controls how this input appears and behaves.",
6264
6431
  "type": "string",
6265
6432
  "enum": [
6266
6433
  "html",
6267
6434
  "markdown"
6268
6435
  ],
6436
+ "title": "Type",
6437
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
6269
6438
  "documented": true,
6270
6439
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
6271
6440
  },
6272
6441
  "options": {
6273
- "description": "This key defines options that are specific to Rich Text Inputs.",
6274
6442
  "type": "object",
6275
6443
  "properties": {
6276
6444
  "mime_type": {
@@ -6423,6 +6591,33 @@
6423
6591
  "min_length_message": {
6424
6592
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
6425
6593
  },
6594
+ "max_words": {
6595
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
6596
+ },
6597
+ "max_words_message": {
6598
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
6599
+ },
6600
+ "min_words": {
6601
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
6602
+ },
6603
+ "min_words_message": {
6604
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
6605
+ },
6606
+ "max_graphemes": {
6607
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
6608
+ },
6609
+ "max_graphemes_message": {
6610
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
6611
+ },
6612
+ "min_graphemes": {
6613
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
6614
+ },
6615
+ "min_graphemes_message": {
6616
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
6617
+ },
6618
+ "locale": {
6619
+ "$ref": "#/definitions/type._inputs.*.options.locale"
6620
+ },
6426
6621
  "pattern": {
6427
6622
  "$ref": "#/definitions/type._inputs.*.options.pattern"
6428
6623
  },
@@ -6448,12 +6643,20 @@
6448
6643
  "title": "empty_type"
6449
6644
  },
6450
6645
  "allow_resize": {
6451
- "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).",
6452
- "default": false,
6646
+ "deprecated": true,
6453
6647
  "type": "boolean",
6454
6648
  "documented": true,
6455
6649
  "title": "allow_resize",
6456
- "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)."
6650
+ "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).",
6651
+ "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)."
6652
+ },
6653
+ "prevent_resize": {
6654
+ "description": "Shows or hides the resize handler to vertically resize the input.",
6655
+ "default": false,
6656
+ "type": "boolean",
6657
+ "documented": true,
6658
+ "title": "prevent_resize",
6659
+ "markdownDescription": "Shows or hides the resize handler to vertically resize the input."
6457
6660
  },
6458
6661
  "initial_height": {
6459
6662
  "description": "This key defines the initial height of this input in pixels (px).",
@@ -6464,6 +6667,7 @@
6464
6667
  }
6465
6668
  },
6466
6669
  "additionalProperties": false,
6670
+ "description": "This key defines options that are specific to Rich Text Inputs.",
6467
6671
  "documented": true,
6468
6672
  "title": "options",
6469
6673
  "markdownDescription": "This key defines options that are specific to Rich Text Inputs."
@@ -6473,6 +6677,8 @@
6473
6677
  "type"
6474
6678
  ],
6475
6679
  "additionalProperties": false,
6680
+ "title": "Rich Text Input",
6681
+ "description": "This key defines an editing interface for HTML markup content.",
6476
6682
  "documented": true,
6477
6683
  "markdownDescription": "This key defines an editing interface for HTML markup content."
6478
6684
  },
@@ -6562,8 +6768,8 @@
6562
6768
  "type": "object",
6563
6769
  "properties": {
6564
6770
  "size": {
6565
- "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```",
6566
6771
  "type": "string",
6772
+ "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```",
6567
6773
  "documented": true,
6568
6774
  "title": "size",
6569
6775
  "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```"
@@ -6823,11 +7029,11 @@
6823
7029
  "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."
6824
7030
  },
6825
7031
  "type._editables.*.styles": {
6826
- "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.",
7032
+ "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```",
6827
7033
  "type": "string",
6828
7034
  "documented": true,
6829
7035
  "title": "styles",
6830
- "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."
7036
+ "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```"
6831
7037
  },
6832
7038
  "type._editables.*.table": {
6833
7039
  "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.",
@@ -6854,8 +7060,6 @@
6854
7060
  "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."
6855
7061
  },
6856
7062
  "DateInput": {
6857
- "title": "Date/Datetime Input",
6858
- "description": "This key defines an editing interface for date and/or time values.",
6859
7063
  "type": "object",
6860
7064
  "properties": {
6861
7065
  "comment": {
@@ -6900,18 +7104,17 @@
6900
7104
  "$ref": "#/definitions/type._inputs.*.cascade"
6901
7105
  },
6902
7106
  "type": {
6903
- "title": "Type",
6904
- "description": "This key defines the input type, which controls how this input appears and behaves.",
6905
7107
  "type": "string",
6906
7108
  "enum": [
6907
7109
  "date",
6908
7110
  "datetime"
6909
7111
  ],
7112
+ "title": "Type",
7113
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
6910
7114
  "documented": true,
6911
7115
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
6912
7116
  },
6913
7117
  "options": {
6914
- "description": "This key defines options that are specific to Date Inputs.",
6915
7118
  "type": "object",
6916
7119
  "properties": {
6917
7120
  "required": {
@@ -6944,10 +7147,10 @@
6944
7147
  "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```",
6945
7148
  "anyOf": [
6946
7149
  {
6947
- "title": "String Start From",
6948
7150
  "type": "string",
6949
7151
  "format": "date-time",
6950
7152
  "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)))$",
7153
+ "title": "String Start From",
6951
7154
  "documented": true,
6952
7155
  "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.",
6953
7156
  "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."
@@ -6974,10 +7177,10 @@
6974
7177
  "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```",
6975
7178
  "anyOf": [
6976
7179
  {
6977
- "title": "String End Before",
6978
7180
  "type": "string",
6979
7181
  "format": "date-time",
6980
7182
  "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)))$",
7183
+ "title": "String End Before",
6981
7184
  "documented": true,
6982
7185
  "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.",
6983
7186
  "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."
@@ -7002,6 +7205,7 @@
7002
7205
  }
7003
7206
  },
7004
7207
  "additionalProperties": false,
7208
+ "description": "This key defines options that are specific to Date Inputs.",
7005
7209
  "documented": true,
7006
7210
  "title": "options",
7007
7211
  "markdownDescription": "This key defines options that are specific to Date Inputs."
@@ -7011,11 +7215,12 @@
7011
7215
  "type"
7012
7216
  ],
7013
7217
  "additionalProperties": false,
7218
+ "title": "Date/Datetime Input",
7219
+ "description": "This key defines an editing interface for date and/or time values.",
7014
7220
  "documented": true,
7015
7221
  "markdownDescription": "This key defines an editing interface for date and/or time values."
7016
7222
  },
7017
7223
  "type.timezone": {
7018
- "title": "Timezone",
7019
7224
  "type": "string",
7020
7225
  "enum": [
7021
7226
  "Africa/Abidjan",
@@ -7614,13 +7819,12 @@
7614
7819
  "WET",
7615
7820
  "Zulu"
7616
7821
  ],
7822
+ "title": "Timezone",
7617
7823
  "documented": true,
7618
7824
  "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/).",
7619
7825
  "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/)."
7620
7826
  },
7621
7827
  "TimeInput": {
7622
- "title": "Time Input",
7623
- "description": "This key defines an editing interface for time values only.",
7624
7828
  "type": "object",
7625
7829
  "properties": {
7626
7830
  "comment": {
@@ -7665,15 +7869,14 @@
7665
7869
  "$ref": "#/definitions/type._inputs.*.cascade"
7666
7870
  },
7667
7871
  "type": {
7668
- "title": "Type",
7669
- "description": "This key defines the input type, which controls how this input appears and behaves.",
7670
7872
  "type": "string",
7671
7873
  "const": "time",
7874
+ "title": "Type",
7875
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
7672
7876
  "documented": true,
7673
7877
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
7674
7878
  },
7675
7879
  "options": {
7676
- "description": "This key defines options that are specific to Time Inputs.",
7677
7880
  "type": "object",
7678
7881
  "properties": {
7679
7882
  "required": {
@@ -7693,6 +7896,7 @@
7693
7896
  }
7694
7897
  },
7695
7898
  "additionalProperties": false,
7899
+ "description": "This key defines options that are specific to Time Inputs.",
7696
7900
  "documented": true,
7697
7901
  "title": "options",
7698
7902
  "markdownDescription": "This key defines options that are specific to Time Inputs."
@@ -7702,12 +7906,12 @@
7702
7906
  "type"
7703
7907
  ],
7704
7908
  "additionalProperties": false,
7909
+ "title": "Time Input",
7910
+ "description": "This key defines an editing interface for time values only.",
7705
7911
  "documented": true,
7706
7912
  "markdownDescription": "This key defines an editing interface for time values only."
7707
7913
  },
7708
7914
  "FileInput": {
7709
- "title": "File Input",
7710
- "description": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
7711
7915
  "type": "object",
7712
7916
  "properties": {
7713
7917
  "comment": {
@@ -7752,19 +7956,18 @@
7752
7956
  "$ref": "#/definitions/type._inputs.*.cascade"
7753
7957
  },
7754
7958
  "type": {
7755
- "title": "Type",
7756
- "description": "This key defines the input type, which controls how this input appears and behaves.",
7757
7959
  "type": "string",
7758
7960
  "enum": [
7759
7961
  "file",
7760
7962
  "document",
7761
7963
  "image"
7762
7964
  ],
7965
+ "title": "Type",
7966
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
7763
7967
  "documented": true,
7764
7968
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
7765
7969
  },
7766
7970
  "options": {
7767
- "description": "This key defines options that are specific to File Inputs.",
7768
7971
  "type": "object",
7769
7972
  "properties": {
7770
7973
  "mime_type": {
@@ -7806,6 +8009,33 @@
7806
8009
  "min_length_message": {
7807
8010
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
7808
8011
  },
8012
+ "max_words": {
8013
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8014
+ },
8015
+ "max_words_message": {
8016
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8017
+ },
8018
+ "min_words": {
8019
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8020
+ },
8021
+ "min_words_message": {
8022
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8023
+ },
8024
+ "max_graphemes": {
8025
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8026
+ },
8027
+ "max_graphemes_message": {
8028
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8029
+ },
8030
+ "min_graphemes": {
8031
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8032
+ },
8033
+ "min_graphemes_message": {
8034
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8035
+ },
8036
+ "locale": {
8037
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8038
+ },
7809
8039
  "pattern": {
7810
8040
  "$ref": "#/definitions/type._inputs.*.options.pattern"
7811
8041
  },
@@ -7859,6 +8089,7 @@
7859
8089
  }
7860
8090
  },
7861
8091
  "additionalProperties": false,
8092
+ "description": "This key defines options that are specific to File Inputs.",
7862
8093
  "documented": true,
7863
8094
  "title": "options",
7864
8095
  "markdownDescription": "This key defines options that are specific to File Inputs."
@@ -7868,6 +8099,8 @@
7868
8099
  "type"
7869
8100
  ],
7870
8101
  "additionalProperties": false,
8102
+ "title": "File Input",
8103
+ "description": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
7871
8104
  "documented": true,
7872
8105
  "markdownDescription": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets."
7873
8106
  },
@@ -7875,18 +8108,18 @@
7875
8108
  "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```",
7876
8109
  "anyOf": [
7877
8110
  {
7878
- "title": "Comma Separated Accepts Mime Types",
7879
8111
  "type": "string",
8112
+ "title": "Comma Separated Accepts Mime Types",
7880
8113
  "documented": true,
7881
8114
  "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```",
7882
8115
  "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```"
7883
8116
  },
7884
8117
  {
7885
- "title": "Array Accepts Mime Types",
7886
8118
  "type": "array",
7887
8119
  "items": {
7888
8120
  "$ref": "#/definitions/MimeType"
7889
8121
  },
8122
+ "title": "Array Accepts Mime Types",
7890
8123
  "documented": true,
7891
8124
  "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```",
7892
8125
  "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```"
@@ -7897,8 +8130,6 @@
7897
8130
  "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```"
7898
8131
  },
7899
8132
  "MimeType": {
7900
- "title": "Mime Type",
7901
- "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```",
7902
8133
  "type": "string",
7903
8134
  "enum": [
7904
8135
  "x-world/x-3dmf",
@@ -8335,6 +8566,8 @@
8335
8566
  "multipart/x-zip",
8336
8567
  "text/x-script.zsh"
8337
8568
  ],
8569
+ "title": "Mime Type",
8570
+ "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```",
8338
8571
  "documented": true,
8339
8572
  "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```"
8340
8573
  },
@@ -8377,8 +8610,6 @@
8377
8610
  "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```"
8378
8611
  },
8379
8612
  "UrlInput": {
8380
- "title": "URL Input",
8381
- "description": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
8382
8613
  "type": "object",
8383
8614
  "properties": {
8384
8615
  "comment": {
@@ -8423,15 +8654,14 @@
8423
8654
  "$ref": "#/definitions/type._inputs.*.cascade"
8424
8655
  },
8425
8656
  "type": {
8426
- "title": "Type",
8427
- "description": "This key defines the input type, which controls how this input appears and behaves.",
8428
8657
  "type": "string",
8429
8658
  "const": "url",
8659
+ "title": "Type",
8660
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
8430
8661
  "documented": true,
8431
8662
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
8432
8663
  },
8433
8664
  "options": {
8434
- "description": "This key defines options that are specific to URL Inputs.",
8435
8665
  "type": "object",
8436
8666
  "properties": {
8437
8667
  "mime_type": {
@@ -8473,6 +8703,33 @@
8473
8703
  "min_length_message": {
8474
8704
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8475
8705
  },
8706
+ "max_words": {
8707
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8708
+ },
8709
+ "max_words_message": {
8710
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8711
+ },
8712
+ "min_words": {
8713
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8714
+ },
8715
+ "min_words_message": {
8716
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8717
+ },
8718
+ "max_graphemes": {
8719
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8720
+ },
8721
+ "max_graphemes_message": {
8722
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8723
+ },
8724
+ "min_graphemes": {
8725
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8726
+ },
8727
+ "min_graphemes_message": {
8728
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8729
+ },
8730
+ "locale": {
8731
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8732
+ },
8476
8733
  "pattern": {
8477
8734
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8478
8735
  },
@@ -8558,6 +8815,7 @@
8558
8815
  }
8559
8816
  },
8560
8817
  "additionalProperties": false,
8818
+ "description": "This key defines options that are specific to URL Inputs.",
8561
8819
  "documented": true,
8562
8820
  "title": "options",
8563
8821
  "markdownDescription": "This key defines options that are specific to URL Inputs."
@@ -8567,12 +8825,12 @@
8567
8825
  "type"
8568
8826
  ],
8569
8827
  "additionalProperties": false,
8828
+ "title": "URL Input",
8829
+ "description": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
8570
8830
  "documented": true,
8571
8831
  "markdownDescription": "This key defines an editing interface for relative, absolute, and fully qualified URLs."
8572
8832
  },
8573
8833
  "SelectInput": {
8574
- "title": "Select Input",
8575
- "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```",
8576
8834
  "type": "object",
8577
8835
  "properties": {
8578
8836
  "comment": {
@@ -8617,15 +8875,14 @@
8617
8875
  "$ref": "#/definitions/type._inputs.*.cascade"
8618
8876
  },
8619
8877
  "type": {
8620
- "title": "Type",
8621
- "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```",
8622
8878
  "type": "string",
8623
8879
  "const": "select",
8880
+ "title": "Type",
8881
+ "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```",
8624
8882
  "documented": true,
8625
8883
  "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```"
8626
8884
  },
8627
8885
  "options": {
8628
- "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```",
8629
8886
  "type": "object",
8630
8887
  "properties": {
8631
8888
  "required": {
@@ -8682,6 +8939,33 @@
8682
8939
  "min_length_message": {
8683
8940
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8684
8941
  },
8942
+ "max_words": {
8943
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8944
+ },
8945
+ "max_words_message": {
8946
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8947
+ },
8948
+ "min_words": {
8949
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8950
+ },
8951
+ "min_words_message": {
8952
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8953
+ },
8954
+ "max_graphemes": {
8955
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8956
+ },
8957
+ "max_graphemes_message": {
8958
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8959
+ },
8960
+ "min_graphemes": {
8961
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8962
+ },
8963
+ "min_graphemes_message": {
8964
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8965
+ },
8966
+ "locale": {
8967
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8968
+ },
8685
8969
  "pattern": {
8686
8970
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8687
8971
  },
@@ -8702,6 +8986,7 @@
8702
8986
  }
8703
8987
  },
8704
8988
  "additionalProperties": false,
8989
+ "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```",
8705
8990
  "documented": true,
8706
8991
  "title": "options",
8707
8992
  "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```"
@@ -8711,11 +8996,12 @@
8711
8996
  "type"
8712
8997
  ],
8713
8998
  "additionalProperties": false,
8999
+ "title": "Select Input",
9000
+ "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```",
8714
9001
  "documented": true,
8715
9002
  "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```"
8716
9003
  },
8717
9004
  "type.preview": {
8718
- "title": "Preview",
8719
9005
  "type": "object",
8720
9006
  "properties": {
8721
9007
  "text": {
@@ -8747,6 +9033,7 @@
8747
9033
  }
8748
9034
  },
8749
9035
  "additionalProperties": false,
9036
+ "title": "Preview",
8750
9037
  "documented": true,
8751
9038
  "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```",
8752
9039
  "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```"
@@ -8942,38 +9229,36 @@
8942
9229
  "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```"
8943
9230
  },
8944
9231
  "type._inputs.*.options.allow_empty": {
8945
- "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```",
8946
- "default": true,
9232
+ "deprecated": true,
9233
+ "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```",
8947
9234
  "type": "boolean",
8948
9235
  "documented": true,
8949
9236
  "title": "allow_empty",
8950
- "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```"
9237
+ "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```"
8951
9238
  },
8952
9239
  "type._inputs.*.options.values": {
8953
9240
  "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```",
8954
9241
  "anyOf": [
8955
9242
  {
9243
+ "type": "string",
8956
9244
  "title": "Dataset Reference Values",
8957
9245
  "description": "This key defines a reference to a dataset.",
8958
- "type": "string",
8959
9246
  "documented": true,
8960
9247
  "markdownDescription": "This key defines a reference to a dataset."
8961
9248
  },
8962
9249
  {
8963
- "description": "Data formats for populating select and multiselect input options, supporting arrays and objects.",
8964
9250
  "anyOf": [
8965
9251
  {
8966
- "title": "Text Array",
8967
9252
  "type": "array",
8968
9253
  "items": {
8969
9254
  "type": "string",
8970
9255
  "documented": false,
8971
9256
  "title": "values(any-of-1)(text-array)[*]"
8972
9257
  },
9258
+ "title": "Text Array",
8973
9259
  "documented": false
8974
9260
  },
8975
9261
  {
8976
- "title": "Text Object",
8977
9262
  "type": "object",
8978
9263
  "propertyNames": {
8979
9264
  "type": "string"
@@ -8983,10 +9268,10 @@
8983
9268
  "documented": false,
8984
9269
  "title": "values(any-of-1)(text-object).*"
8985
9270
  },
9271
+ "title": "Text Object",
8986
9272
  "documented": false
8987
9273
  },
8988
9274
  {
8989
- "title": "Object Array",
8990
9275
  "type": "array",
8991
9276
  "items": {
8992
9277
  "type": "object",
@@ -8997,18 +9282,20 @@
8997
9282
  "documented": false,
8998
9283
  "title": "values(any-of-1)(object-array)[*]"
8999
9284
  },
9285
+ "title": "Object Array",
9000
9286
  "documented": false
9001
9287
  },
9002
9288
  {
9003
- "title": "Object",
9004
9289
  "type": "object",
9005
9290
  "propertyNames": {
9006
9291
  "type": "string"
9007
9292
  },
9008
9293
  "additionalProperties": {},
9294
+ "title": "Object",
9009
9295
  "documented": false
9010
9296
  }
9011
9297
  ],
9298
+ "description": "Data formats for populating select and multiselect input options, supporting arrays and objects.",
9012
9299
  "documented": false,
9013
9300
  "title": "values(any-of-1)",
9014
9301
  "markdownDescription": "Data formats for populating select and multiselect input options, supporting arrays and objects."
@@ -9052,8 +9339,6 @@
9052
9339
  "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```"
9053
9340
  },
9054
9341
  "MultiselectInput": {
9055
- "title": "Multiselect Input",
9056
- "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```",
9057
9342
  "type": "object",
9058
9343
  "properties": {
9059
9344
  "comment": {
@@ -9098,15 +9383,14 @@
9098
9383
  "$ref": "#/definitions/type._inputs.*.cascade"
9099
9384
  },
9100
9385
  "type": {
9101
- "title": "Type",
9102
- "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```",
9103
9386
  "type": "string",
9104
9387
  "const": "multiselect",
9388
+ "title": "Type",
9389
+ "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```",
9105
9390
  "documented": true,
9106
9391
  "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```"
9107
9392
  },
9108
9393
  "options": {
9109
- "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```",
9110
9394
  "type": "object",
9111
9395
  "properties": {
9112
9396
  "required": {
@@ -9180,6 +9464,7 @@
9180
9464
  }
9181
9465
  },
9182
9466
  "additionalProperties": false,
9467
+ "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```",
9183
9468
  "documented": true,
9184
9469
  "title": "options",
9185
9470
  "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```"
@@ -9189,6 +9474,8 @@
9189
9474
  "type"
9190
9475
  ],
9191
9476
  "additionalProperties": false,
9477
+ "title": "Multiselect Input",
9478
+ "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```",
9192
9479
  "documented": true,
9193
9480
  "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```"
9194
9481
  },
@@ -9235,8 +9522,8 @@
9235
9522
  "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```"
9236
9523
  },
9237
9524
  "type._inputs.*.options.empty_type(array)": {
9238
- "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```",
9239
9525
  "default": "null",
9526
+ "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```",
9240
9527
  "type": "string",
9241
9528
  "enum": [
9242
9529
  "null",
@@ -9247,8 +9534,6 @@
9247
9534
  "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```"
9248
9535
  },
9249
9536
  "ChoiceInput": {
9250
- "title": "Choice Input",
9251
- "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```",
9252
9537
  "type": "object",
9253
9538
  "properties": {
9254
9539
  "comment": {
@@ -9293,15 +9578,14 @@
9293
9578
  "$ref": "#/definitions/type._inputs.*.cascade"
9294
9579
  },
9295
9580
  "type": {
9296
- "title": "Type",
9297
- "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```",
9298
9581
  "type": "string",
9299
9582
  "const": "choice",
9583
+ "title": "Type",
9584
+ "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```",
9300
9585
  "documented": true,
9301
9586
  "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```"
9302
9587
  },
9303
9588
  "options": {
9304
- "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```",
9305
9589
  "type": "object",
9306
9590
  "properties": {
9307
9591
  "required": {
@@ -9355,6 +9639,33 @@
9355
9639
  "min_length_message": {
9356
9640
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
9357
9641
  },
9642
+ "max_words": {
9643
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
9644
+ },
9645
+ "max_words_message": {
9646
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
9647
+ },
9648
+ "min_words": {
9649
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
9650
+ },
9651
+ "min_words_message": {
9652
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
9653
+ },
9654
+ "max_graphemes": {
9655
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
9656
+ },
9657
+ "max_graphemes_message": {
9658
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
9659
+ },
9660
+ "min_graphemes": {
9661
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
9662
+ },
9663
+ "min_graphemes_message": {
9664
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
9665
+ },
9666
+ "locale": {
9667
+ "$ref": "#/definitions/type._inputs.*.options.locale"
9668
+ },
9358
9669
  "pattern": {
9359
9670
  "$ref": "#/definitions/type._inputs.*.options.pattern"
9360
9671
  },
@@ -9375,6 +9686,7 @@
9375
9686
  }
9376
9687
  },
9377
9688
  "additionalProperties": false,
9689
+ "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```",
9378
9690
  "documented": true,
9379
9691
  "title": "options",
9380
9692
  "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```"
@@ -9384,12 +9696,12 @@
9384
9696
  "type"
9385
9697
  ],
9386
9698
  "additionalProperties": false,
9699
+ "title": "Choice Input",
9700
+ "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```",
9387
9701
  "documented": true,
9388
9702
  "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```"
9389
9703
  },
9390
9704
  "MultichoiceInput": {
9391
- "title": "Multichoice Input",
9392
- "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```",
9393
9705
  "type": "object",
9394
9706
  "properties": {
9395
9707
  "comment": {
@@ -9434,15 +9746,14 @@
9434
9746
  "$ref": "#/definitions/type._inputs.*.cascade"
9435
9747
  },
9436
9748
  "type": {
9437
- "title": "Type",
9438
- "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```",
9439
9749
  "type": "string",
9440
9750
  "const": "multichoice",
9751
+ "title": "Type",
9752
+ "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```",
9441
9753
  "documented": true,
9442
9754
  "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```"
9443
9755
  },
9444
9756
  "options": {
9445
- "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```",
9446
9757
  "type": "object",
9447
9758
  "properties": {
9448
9759
  "required": {
@@ -9513,6 +9824,7 @@
9513
9824
  }
9514
9825
  },
9515
9826
  "additionalProperties": false,
9827
+ "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```",
9516
9828
  "documented": true,
9517
9829
  "title": "options",
9518
9830
  "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```"
@@ -9522,12 +9834,12 @@
9522
9834
  "type"
9523
9835
  ],
9524
9836
  "additionalProperties": false,
9837
+ "title": "Multichoice Input",
9838
+ "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```",
9525
9839
  "documented": true,
9526
9840
  "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```"
9527
9841
  },
9528
9842
  "ObjectInput": {
9529
- "title": "Object Input",
9530
- "description": "This key defines a user interface for a group of inputs.",
9531
9843
  "type": "object",
9532
9844
  "properties": {
9533
9845
  "comment": {
@@ -9572,15 +9884,14 @@
9572
9884
  "$ref": "#/definitions/type._inputs.*.cascade"
9573
9885
  },
9574
9886
  "type": {
9575
- "title": "Type",
9576
- "description": "This key defines the input type, which controls how this input appears and behaves.",
9577
9887
  "type": "string",
9578
9888
  "const": "object",
9889
+ "title": "Type",
9890
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
9579
9891
  "documented": true,
9580
9892
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
9581
9893
  },
9582
9894
  "options": {
9583
- "description": "This key defines options that are specific to Object Inputs.",
9584
9895
  "type": "object",
9585
9896
  "properties": {
9586
9897
  "required": {
@@ -9803,6 +10114,7 @@
9803
10114
  }
9804
10115
  },
9805
10116
  "additionalProperties": false,
10117
+ "description": "This key defines options that are specific to Object Inputs.",
9806
10118
  "documented": true,
9807
10119
  "title": "options",
9808
10120
  "markdownDescription": "This key defines options that are specific to Object Inputs."
@@ -9812,12 +10124,14 @@
9812
10124
  "type"
9813
10125
  ],
9814
10126
  "additionalProperties": false,
10127
+ "title": "Object Input",
10128
+ "description": "This key defines a user interface for a group of inputs.",
9815
10129
  "documented": true,
9816
10130
  "markdownDescription": "This key defines a user interface for a group of inputs."
9817
10131
  },
9818
10132
  "type._inputs.*.options.empty_type(object)": {
9819
- "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```",
9820
10133
  "default": "null",
10134
+ "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```",
9821
10135
  "type": "string",
9822
10136
  "enum": [
9823
10137
  "null",
@@ -9828,15 +10142,13 @@
9828
10142
  "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```"
9829
10143
  },
9830
10144
  "type.structure-reference": {
10145
+ "type": "string",
9831
10146
  "title": "Structure Reference",
9832
10147
  "description": "A reference to an existing structure.",
9833
- "type": "string",
9834
10148
  "documented": true,
9835
10149
  "markdownDescription": "A reference to an existing structure."
9836
10150
  },
9837
10151
  "type.structure": {
9838
- "title": "Structure",
9839
- "description": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
9840
10152
  "type": "object",
9841
10153
  "properties": {
9842
10154
  "reorder_inputs": {
@@ -9872,11 +10184,11 @@
9872
10184
  "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```"
9873
10185
  },
9874
10186
  "values": {
9875
- "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```",
9876
10187
  "type": "array",
9877
10188
  "items": {
9878
10189
  "$ref": "#/definitions/type.structure.values.[*]"
9879
10190
  },
10191
+ "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```",
9880
10192
  "documented": true,
9881
10193
  "title": "values",
9882
10194
  "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```"
@@ -9887,13 +10199,13 @@
9887
10199
  "type": "string",
9888
10200
  "documented": true,
9889
10201
  "title": "values_from_glob[*]",
9890
- "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```",
9891
- "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```"
10202
+ "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```",
10203
+ "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```"
9892
10204
  },
9893
10205
  "documented": true,
9894
10206
  "title": "values_from_glob",
9895
- "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```",
9896
- "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```"
10207
+ "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```",
10208
+ "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```"
9897
10209
  },
9898
10210
  "id_key": {
9899
10211
  "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```",
@@ -9920,12 +10232,12 @@
9920
10232
  "values"
9921
10233
  ],
9922
10234
  "additionalProperties": false,
10235
+ "title": "Structure",
10236
+ "description": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
9923
10237
  "documented": true,
9924
10238
  "markdownDescription": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values."
9925
10239
  },
9926
10240
  "type.structure.values.[*]": {
9927
- "title": "Structure Value",
9928
- "description": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
9929
10241
  "type": "object",
9930
10242
  "properties": {
9931
10243
  "reorder_inputs": {
@@ -10186,6 +10498,8 @@
10186
10498
  "value"
10187
10499
  ],
10188
10500
  "additionalProperties": false,
10501
+ "title": "Structure Value",
10502
+ "description": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
10189
10503
  "documented": true,
10190
10504
  "markdownDescription": "This key represents a single value option within a structure, defining the data format and appearance for content editors."
10191
10505
  },
@@ -10204,27 +10518,23 @@
10204
10518
  "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```"
10205
10519
  },
10206
10520
  "type._select_data": {
10207
- "title": "Select Data",
10208
- "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```",
10209
10521
  "type": "object",
10210
10522
  "propertyNames": {
10211
10523
  "type": "string"
10212
10524
  },
10213
10525
  "additionalProperties": {
10214
- "description": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects.",
10215
10526
  "anyOf": [
10216
10527
  {
10217
- "title": "Text Array Select Data",
10218
10528
  "type": "array",
10219
10529
  "items": {
10220
10530
  "type": "string",
10221
10531
  "documented": true,
10222
10532
  "title": "*(text-array)[*]"
10223
10533
  },
10534
+ "title": "Text Array Select Data",
10224
10535
  "documented": true
10225
10536
  },
10226
10537
  {
10227
- "title": "Text Object Select Data",
10228
10538
  "type": "object",
10229
10539
  "propertyNames": {
10230
10540
  "type": "string"
@@ -10234,10 +10544,10 @@
10234
10544
  "documented": true,
10235
10545
  "title": "*(text-object).*"
10236
10546
  },
10547
+ "title": "Text Object Select Data",
10237
10548
  "documented": true
10238
10549
  },
10239
10550
  {
10240
- "title": "Object Array Select Data",
10241
10551
  "type": "array",
10242
10552
  "items": {
10243
10553
  "type": "object",
@@ -10248,28 +10558,30 @@
10248
10558
  "documented": true,
10249
10559
  "title": "*(object-array)[*]"
10250
10560
  },
10561
+ "title": "Object Array Select Data",
10251
10562
  "documented": true
10252
10563
  },
10253
10564
  {
10254
- "title": "Object Select Data",
10255
10565
  "type": "object",
10256
10566
  "propertyNames": {
10257
10567
  "type": "string"
10258
10568
  },
10259
10569
  "additionalProperties": {},
10570
+ "title": "Object Select Data",
10260
10571
  "documented": true
10261
10572
  }
10262
10573
  ],
10574
+ "description": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects.",
10263
10575
  "documented": true,
10264
10576
  "title": "_select_data.*",
10265
10577
  "markdownDescription": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects."
10266
10578
  },
10579
+ "title": "Select Data",
10580
+ "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```",
10267
10581
  "documented": true,
10268
10582
  "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```"
10269
10583
  },
10270
10584
  "type._structures": {
10271
- "title": "Structures",
10272
- "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```",
10273
10585
  "type": "object",
10274
10586
  "propertyNames": {
10275
10587
  "type": "string"
@@ -10277,6 +10589,8 @@
10277
10589
  "additionalProperties": {
10278
10590
  "$ref": "#/definitions/type.structure"
10279
10591
  },
10592
+ "title": "Structures",
10593
+ "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```",
10280
10594
  "documented": true,
10281
10595
  "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```"
10282
10596
  },
@@ -10302,8 +10616,6 @@
10302
10616
  "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```"
10303
10617
  },
10304
10618
  "ArrayInput": {
10305
- "title": "Array Input",
10306
- "description": "This key defines a user interface for lists of inputs or input groups.",
10307
10619
  "type": "object",
10308
10620
  "properties": {
10309
10621
  "comment": {
@@ -10348,15 +10660,14 @@
10348
10660
  "$ref": "#/definitions/type._inputs.*.cascade"
10349
10661
  },
10350
10662
  "type": {
10351
- "title": "Type",
10352
- "description": "This key defines the input type, which controls how this input appears and behaves.",
10353
10663
  "type": "string",
10354
10664
  "const": "array",
10665
+ "title": "Type",
10666
+ "description": "This key defines the input type, which controls how this input appears and behaves.",
10355
10667
  "documented": true,
10356
10668
  "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
10357
10669
  },
10358
10670
  "options": {
10359
- "description": "This key defines options that are specific to Array Inputs.",
10360
10671
  "type": "object",
10361
10672
  "properties": {
10362
10673
  "required": {
@@ -10417,6 +10728,7 @@
10417
10728
  }
10418
10729
  },
10419
10730
  "additionalProperties": false,
10731
+ "description": "This key defines options that are specific to Array Inputs.",
10420
10732
  "documented": true,
10421
10733
  "title": "options",
10422
10734
  "markdownDescription": "This key defines options that are specific to Array Inputs."
@@ -10426,6 +10738,8 @@
10426
10738
  "type"
10427
10739
  ],
10428
10740
  "additionalProperties": false,
10741
+ "title": "Array Input",
10742
+ "description": "This key defines a user interface for lists of inputs or input groups.",
10429
10743
  "documented": true,
10430
10744
  "markdownDescription": "This key defines a user interface for lists of inputs or input groups."
10431
10745
  },
@@ -10454,9 +10768,6 @@
10454
10768
  "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)."
10455
10769
  },
10456
10770
  "AutoInput": {
10457
- "title": "Automatic Input",
10458
- "description": "Provides a default user interface based on the data contained.",
10459
- "excludeFromDocumentation": true,
10460
10771
  "type": "object",
10461
10772
  "properties": {
10462
10773
  "comment": {
@@ -10501,10 +10812,10 @@
10501
10812
  "$ref": "#/definitions/type._inputs.*.cascade"
10502
10813
  },
10503
10814
  "type": {
10504
- "title": "Type",
10505
- "description": "Sets an input type, which controls how this input appears and behaves.",
10506
10815
  "type": "string",
10507
10816
  "const": "auto",
10817
+ "title": "Type",
10818
+ "description": "Sets an input type, which controls how this input appears and behaves.",
10508
10819
  "documented": false,
10509
10820
  "markdownDescription": "Sets an input type, which controls how this input appears and behaves."
10510
10821
  },
@@ -10519,13 +10830,13 @@
10519
10830
  "type"
10520
10831
  ],
10521
10832
  "additionalProperties": false,
10833
+ "title": "Automatic Input",
10834
+ "description": "Provides a default user interface based on the data contained.",
10835
+ "excludeFromDocumentation": true,
10522
10836
  "documented": false,
10523
10837
  "markdownDescription": "Provides a default user interface based on the data contained."
10524
10838
  },
10525
10839
  "UnknownInput": {
10526
- "title": "Unknown Input",
10527
- "description": "Provides a default user interface based on the data contained.",
10528
- "excludeFromDocumentation": true,
10529
10840
  "type": "object",
10530
10841
  "properties": {
10531
10842
  "comment": {
@@ -10577,6 +10888,9 @@
10577
10888
  }
10578
10889
  },
10579
10890
  "additionalProperties": false,
10891
+ "title": "Unknown Input",
10892
+ "description": "Provides a default user interface based on the data contained.",
10893
+ "excludeFromDocumentation": true,
10580
10894
  "documented": false,
10581
10895
  "markdownDescription": "Provides a default user interface based on the data contained."
10582
10896
  },
@@ -11060,18 +11374,16 @@
11060
11374
  "markdownDescription": "This key defines custom order and grouping for Collections in your *Site Navigation*.\n\nThe value is an array of group objects. Each group object must contain a `heading` key and a `collections` key.\n\nIf undefined, CloudCannon will sort your Collections in the order they are defined under the `collections_config` key.\n\n## Examples\n\nIn this example, we have configured Collection groups to organize Collections into \"Content\" and \"Data Files\" sections in the *Site Navigation*.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```"
11061
11375
  },
11062
11376
  "CollectionGroup": {
11063
- "title": "Collection Group",
11064
11377
  "type": "object",
11065
11378
  "properties": {
11066
11379
  "heading": {
11067
- "description": "This key defines a short, descriptive label for a group of Collections displayed in the *Site Navigation*.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with a heading that labels the group in the *Site Navigation*.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11068
11380
  "type": "string",
11381
+ "description": "This key defines a short, descriptive label for a group of Collections displayed in the *Site Navigation*.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with a heading that labels the group in the *Site Navigation*.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11069
11382
  "documented": true,
11070
11383
  "title": "heading",
11071
11384
  "markdownDescription": "This key defines a short, descriptive label for a group of Collections displayed in the *Site Navigation*.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with a heading that labels the group in the *Site Navigation*.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```"
11072
11385
  },
11073
11386
  "collections": {
11074
- "description": "This key defines the Collections displayed in a group in the *Site Navigation*.\n\nThe value is an array of Collection key name strings, matching the keys defined in `collections_config`.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with collections arrays.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11075
11387
  "type": "array",
11076
11388
  "items": {
11077
11389
  "type": "string",
@@ -11080,6 +11392,7 @@
11080
11392
  "description": "This key represents an individual Collection key name string in the `collection_groups.[*].collections` array.\n\nThe value is a string that specifies the key name of a Collection defined in `collections_config` to include in a group in the *Site Navigation*.\n\n## Examples\n\nIn this example, we have configured a Collection group with multiple Collection key names in the collections array.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11081
11393
  "markdownDescription": "This key represents an individual Collection key name string in the `collection_groups.[*].collections` array.\n\nThe value is a string that specifies the key name of a Collection defined in `collections_config` to include in a group in the *Site Navigation*.\n\n## Examples\n\nIn this example, we have configured a Collection group with multiple Collection key names in the collections array.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```"
11082
11394
  },
11395
+ "description": "This key defines the Collections displayed in a group in the *Site Navigation*.\n\nThe value is an array of Collection key name strings, matching the keys defined in `collections_config`.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with collections arrays.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11083
11396
  "documented": true,
11084
11397
  "title": "collections",
11085
11398
  "markdownDescription": "This key defines the Collections displayed in a group in the *Site Navigation*.\n\nThe value is an array of Collection key name strings, matching the keys defined in `collections_config`.\n\nThis key is required for each group entry in the `collection_groups` array.\n\n## Examples\n\nIn this example, we have configured two Collection groups with collections arrays.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```"
@@ -11090,6 +11403,7 @@
11090
11403
  "collections"
11091
11404
  ],
11092
11405
  "additionalProperties": false,
11406
+ "title": "Collection Group",
11093
11407
  "documented": true,
11094
11408
  "description": "This key represents an individual group entry in the `collection_groups` array.\n\nThe value defines a group of Collections displayed in the *Site Navigation*. Each group entry must contain a `heading` key and a `collections` key.\n\n## Examples\n\nIn this example, we have configured two Collection groups with a heading and collections array.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```",
11095
11409
  "markdownDescription": "This key represents an individual group entry in the `collection_groups` array.\n\nThe value defines a group of Collections displayed in the *Site Navigation*. Each group entry must contain a `heading` key and a `collections` key.\n\n## Examples\n\nIn this example, we have configured two Collection groups with a heading and collections array.\n\n```yaml\ncollection_groups:\n - heading: Content\n collections:\n - pages\n - blog\n - heading: Data Files\n collections:\n - data\n```"
@@ -11148,24 +11462,24 @@
11148
11462
  "type": "object",
11149
11463
  "properties": {
11150
11464
  "glob": {
11151
- "description": "This key defines the glob pattern(s) targeting a path to one or more files.\n\n## Examples\n\nIn this example, we have configured a file config to target the `data/tabs.yml` file with object input configuration.\n\n```yaml\nfile_config:\n - glob: data/tabs.yml\n _inputs:\n $:\n type: object\n options:\n subtype: tabbed\n```",
11152
11465
  "anyOf": [
11153
11466
  {
11154
- "title": "Glob Array",
11155
11467
  "type": "array",
11156
11468
  "items": {
11157
11469
  "type": "string",
11158
11470
  "documented": true,
11159
11471
  "title": "glob(glob-array)[*]"
11160
11472
  },
11473
+ "title": "Glob Array",
11161
11474
  "documented": true
11162
11475
  },
11163
11476
  {
11164
- "title": "Glob",
11165
11477
  "type": "string",
11478
+ "title": "Glob",
11166
11479
  "documented": true
11167
11480
  }
11168
11481
  ],
11482
+ "description": "This key defines the glob pattern(s) targeting a path to one or more files.\n\n## Examples\n\nIn this example, we have configured a file config to target the `data/tabs.yml` file with object input configuration.\n\n```yaml\nfile_config:\n - glob: data/tabs.yml\n _inputs:\n $:\n type: object\n options:\n subtype: tabbed\n```",
11169
11483
  "documented": true,
11170
11484
  "title": "glob",
11171
11485
  "markdownDescription": "This key defines the glob pattern(s) targeting a path to one or more files.\n\n## Examples\n\nIn this example, we have configured a file config to target the `data/tabs.yml` file with object input configuration.\n\n```yaml\nfile_config:\n - glob: data/tabs.yml\n _inputs:\n $:\n type: object\n options:\n subtype: tabbed\n```"
@@ -11313,8 +11627,6 @@
11313
11627
  "commit_templates": {
11314
11628
  "type": "array",
11315
11629
  "items": {
11316
- "title": "Commit Template",
11317
- "description": "This key represents an individual commit template object in the `commit_templates` array.\n\nThe value is an object that defines a template for commit messages when saving changes. Each template object can contain optional `label`, `template_path`, `template_string`, `wrap_width`, `extra_data`, and `_inputs` keys.\n\n## Examples\n\nIn this example, we have configured a commit template with a template string and input configuration.\n\n```yaml\ncommit_templates:\n - label: Default\n template_string: '{commit_type}: {message|trim}'\n _inputs:\n commit_type:\n type: select\n options:\n allow_empty: true\n values:\n - feature\n - fix\n - test\n cascade: true\n```",
11318
11630
  "type": "object",
11319
11631
  "properties": {
11320
11632
  "label": {
@@ -11373,6 +11685,8 @@
11373
11685
  }
11374
11686
  },
11375
11687
  "additionalProperties": false,
11688
+ "title": "Commit Template",
11689
+ "description": "This key represents an individual commit template object in the `commit_templates` array.\n\nThe value is an object that defines a template for commit messages when saving changes. Each template object can contain optional `label`, `template_path`, `template_string`, `wrap_width`, `extra_data`, and `_inputs` keys.\n\n## Examples\n\nIn this example, we have configured a commit template with a template string and input configuration.\n\n```yaml\ncommit_templates:\n - label: Default\n template_string: '{commit_type}: {message|trim}'\n _inputs:\n commit_type:\n type: select\n options:\n allow_empty: true\n values:\n - feature\n - fix\n - test\n cascade: true\n```",
11376
11690
  "documented": true,
11377
11691
  "markdownDescription": "This key represents an individual commit template object in the `commit_templates` array.\n\nThe value is an object that defines a template for commit messages when saving changes. Each template object can contain optional `label`, `template_path`, `template_string`, `wrap_width`, `extra_data`, and `_inputs` keys.\n\n## Examples\n\nIn this example, we have configured a commit template with a template string and input configuration.\n\n```yaml\ncommit_templates:\n - label: Default\n template_string: '{commit_type}: {message|trim}'\n _inputs:\n commit_type:\n type: select\n options:\n allow_empty: true\n values:\n - feature\n - fix\n - test\n cascade: true\n```"
11378
11692
  },
@@ -11389,8 +11703,6 @@
11389
11703
  "markdownDescription": "This key defines the commit template to use when pulling changes from the upstream repository.\n\nAn upstream commit message template can contain plain text and placeholders. Placeholders insert data related to the commit and use `[ ]` brackets. CloudCannon supports the following commit placeholders:\n\n* `[branch]` — the name of the current branch.\n* `[publish_branch]` — the name of the Publish Branch from which you merge upstream changes.\n* `[author]` — the email address of the person responsible for the upstream merge.\n* `[date]` — the date of the upstream merge in the format \"Tue Nov 28 2023 21:46:17 GMT+0000\".\n\n## Examples\n\nIn this example, we have configured a commit template with placeholders for upstream pulls.\n\n```yaml\nupstream_commit_template: \"Merge branch [publish_branch] into develop of [branch] by [author] at [date]\"\n```"
11390
11704
  },
11391
11705
  "markdown": {
11392
- "title": "Markdown Settings",
11393
- "description": "This key defines your markdown engine for parsing Markdown content into HTML and any configuration options for your engine.\n\n## Examples\n\nIn this example, we have configured CloudCannon to use the `commonmark` Markdown engine with various options including attributes and attribute elements.\n\n```yaml\nmarkdown:\n engine: commonmark\n options:\n attributes: true\n attributes_elements:\n inline: none\n block: space right\n ul: below\n ol: below\n blockquote: below\n p: below\n img: below\n hr: below\n table: below\n li: none\n```",
11394
11706
  "type": "object",
11395
11707
  "properties": {
11396
11708
  "engine": {
@@ -11555,7 +11867,6 @@
11555
11867
  },
11556
11868
  "attribute_elements": {
11557
11869
  "description": "This key defines positioning behavior of Markdown attributes for different element types when converting HTML to Markdown.\n\nThe value is an object that can contain `inline`, `block`, or element-specific properties. Each property value specifies where attribute lists should be positioned for that element type. Valid values are `none`, `right`, `space right`, `below`, `newline below`, or `right-of-prefix`.\n\nThis key only takes effect when `attributes` is enabled.\n\n## Examples\n\nIn this example, we have configured attribute positioning for inline and block elements.\n\n```yaml\nmarkdown:\n engine: commonmark\n options:\n attributes: true\n attribute_elements:\n inline: right\n block: below\n```",
11558
- "title": "Markdown Attribute Element Options",
11559
11870
  "type": "object",
11560
11871
  "properties": {
11561
11872
  "inline": {
@@ -11584,6 +11895,7 @@
11584
11895
  "additionalProperties": {
11585
11896
  "$ref": "#/definitions/AttributeListPosition"
11586
11897
  },
11898
+ "title": "Markdown Attribute Element Options",
11587
11899
  "documented": true,
11588
11900
  "markdownDescription": "This key defines positioning behavior of Markdown attributes for different element types when converting HTML to Markdown.\n\nThe value is an object that can contain `inline`, `block`, or element-specific properties. Each property value specifies where attribute lists should be positioned for that element type. Valid values are `none`, `right`, `space right`, `below`, `newline below`, or `right-of-prefix`.\n\nThis key only takes effect when `attributes` is enabled.\n\n## Examples\n\nIn this example, we have configured attribute positioning for inline and block elements.\n\n```yaml\nmarkdown:\n engine: commonmark\n options:\n attributes: true\n attribute_elements:\n inline: right\n block: below\n```"
11589
11901
  }
@@ -11596,12 +11908,12 @@
11596
11908
  }
11597
11909
  },
11598
11910
  "additionalProperties": false,
11911
+ "title": "Markdown Settings",
11912
+ "description": "This key defines your markdown engine for parsing Markdown content into HTML and any configuration options for your engine.\n\n## Examples\n\nIn this example, we have configured CloudCannon to use the `commonmark` Markdown engine with various options including attributes and attribute elements.\n\n```yaml\nmarkdown:\n engine: commonmark\n options:\n attributes: true\n attributes_elements:\n inline: none\n block: space right\n ul: below\n ol: below\n blockquote: below\n p: below\n img: below\n hr: below\n table: below\n li: none\n```",
11599
11913
  "documented": true,
11600
11914
  "markdownDescription": "This key defines your markdown engine for parsing Markdown content into HTML and any configuration options for your engine.\n\n## Examples\n\nIn this example, we have configured CloudCannon to use the `commonmark` Markdown engine with various options including attributes and attribute elements.\n\n```yaml\nmarkdown:\n engine: commonmark\n options:\n attributes: true\n attributes_elements:\n inline: none\n block: space right\n ul: below\n ol: below\n blockquote: below\n p: below\n img: below\n hr: below\n table: below\n li: none\n```"
11601
11915
  },
11602
11916
  "AttributeListPosition": {
11603
- "title": "Attribute List Position",
11604
- "description": "Positioning options for Markdown attribute elements.",
11605
11917
  "type": "string",
11606
11918
  "enum": [
11607
11919
  "none",
@@ -11611,6 +11923,8 @@
11611
11923
  "newline below",
11612
11924
  "right-of-prefix"
11613
11925
  ],
11926
+ "title": "Attribute List Position",
11927
+ "description": "Positioning options for Markdown attribute elements.",
11614
11928
  "documented": false,
11615
11929
  "markdownDescription": "Positioning options for Markdown attribute elements."
11616
11930
  },
@@ -11628,8 +11942,6 @@
11628
11942
  "markdownDescription": "This key defines custom snippets for your Site.\n\nThis key has no default."
11629
11943
  },
11630
11944
  "type.snippet": {
11631
- "title": "Snippet",
11632
- "description": "This key defines a snippet configuration.",
11633
11945
  "type": "object",
11634
11946
  "properties": {
11635
11947
  "_inputs": {
@@ -11760,7 +12072,6 @@
11760
12072
  "additionalProperties": {
11761
12073
  "anyOf": [
11762
12074
  {
11763
- "title": "Argument List Parser Configuration",
11764
12075
  "type": "object",
11765
12076
  "properties": {
11766
12077
  "parser": {
@@ -11800,12 +12111,12 @@
11800
12111
  "options"
11801
12112
  ],
11802
12113
  "additionalProperties": false,
12114
+ "title": "Argument List Parser Configuration",
11803
12115
  "documented": true,
11804
12116
  "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```",
11805
12117
  "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```"
11806
12118
  },
11807
12119
  {
11808
- "title": "Argument Parser Configuration",
11809
12120
  "type": "object",
11810
12121
  "properties": {
11811
12122
  "parser": {
@@ -11838,12 +12149,12 @@
11838
12149
  "options"
11839
12150
  ],
11840
12151
  "additionalProperties": false,
12152
+ "title": "Argument Parser Configuration",
11841
12153
  "documented": true,
11842
12154
  "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```",
11843
12155
  "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```"
11844
12156
  },
11845
12157
  {
11846
- "title": "Content Parser Configuration",
11847
12158
  "type": "object",
11848
12159
  "properties": {
11849
12160
  "parser": {
@@ -11975,12 +12286,12 @@
11975
12286
  "options"
11976
12287
  ],
11977
12288
  "additionalProperties": false,
12289
+ "title": "Content Parser Configuration",
11978
12290
  "documented": true,
11979
12291
  "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```",
11980
12292
  "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```"
11981
12293
  },
11982
12294
  {
11983
- "title": "Key Value List Parser Configuration",
11984
12295
  "type": "object",
11985
12296
  "properties": {
11986
12297
  "parser": {
@@ -12025,12 +12336,12 @@
12025
12336
  "parser"
12026
12337
  ],
12027
12338
  "additionalProperties": false,
12339
+ "title": "Key Value List Parser Configuration",
12028
12340
  "documented": true,
12029
12341
  "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```",
12030
12342
  "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```"
12031
12343
  },
12032
12344
  {
12033
- "title": "Literal Parser Configuration",
12034
12345
  "type": "object",
12035
12346
  "properties": {
12036
12347
  "parser": {
@@ -12091,12 +12402,12 @@
12091
12402
  "options"
12092
12403
  ],
12093
12404
  "additionalProperties": false,
12405
+ "title": "Literal Parser Configuration",
12094
12406
  "documented": true,
12095
12407
  "description": "This key defines a parser configuration that parses an exact literal value. Mainly useful when configuring a snippet template.",
12096
12408
  "markdownDescription": "This key defines a parser configuration that parses an exact literal value. Mainly useful when configuring a snippet template."
12097
12409
  },
12098
12410
  {
12099
- "title": "Optional Parser Configuration",
12100
12411
  "type": "object",
12101
12412
  "properties": {
12102
12413
  "parser": {
@@ -12140,12 +12451,12 @@
12140
12451
  "options"
12141
12452
  ],
12142
12453
  "additionalProperties": false,
12454
+ "title": "Optional Parser Configuration",
12143
12455
  "documented": true,
12144
12456
  "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).",
12145
12457
  "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)."
12146
12458
  },
12147
12459
  {
12148
- "title": "Repeating Literal Parser Config",
12149
12460
  "type": "object",
12150
12461
  "properties": {
12151
12462
  "parser": {
@@ -12203,12 +12514,12 @@
12203
12514
  "options"
12204
12515
  ],
12205
12516
  "additionalProperties": false,
12517
+ "title": "Repeating Literal Parser Config",
12206
12518
  "documented": true,
12207
12519
  "description": "This key defines a parser configuration that parses a repeating set of exact literal values.",
12208
12520
  "markdownDescription": "This key defines a parser configuration that parses a repeating set of exact literal values."
12209
12521
  },
12210
12522
  {
12211
- "title": "Repeating Parser Configuration",
12212
12523
  "type": "object",
12213
12524
  "properties": {
12214
12525
  "parser": {
@@ -12276,12 +12587,12 @@
12276
12587
  "options"
12277
12588
  ],
12278
12589
  "additionalProperties": false,
12590
+ "title": "Repeating Parser Configuration",
12279
12591
  "documented": true,
12280
12592
  "description": "This key defines a higher-order parser configuration that wraps a snippet string and allows it to repeat.",
12281
12593
  "markdownDescription": "This key defines a higher-order parser configuration that wraps a snippet string and allows it to repeat."
12282
12594
  },
12283
12595
  {
12284
- "title": "Wrapper Parser Configuration",
12285
12596
  "type": "object",
12286
12597
  "properties": {
12287
12598
  "parser": {
@@ -12328,6 +12639,7 @@
12328
12639
  "options"
12329
12640
  ],
12330
12641
  "additionalProperties": false,
12642
+ "title": "Wrapper Parser Configuration",
12331
12643
  "documented": true,
12332
12644
  "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```",
12333
12645
  "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```"
@@ -12343,6 +12655,8 @@
12343
12655
  }
12344
12656
  },
12345
12657
  "additionalProperties": false,
12658
+ "title": "Snippet",
12659
+ "description": "This key defines a snippet configuration.",
12346
12660
  "documented": true,
12347
12661
  "markdownDescription": "This key defines a snippet configuration."
12348
12662
  },
@@ -12796,7 +13110,6 @@
12796
13110
  "markdownDescription": "This key defines styling options for snippet output formatting.\n\nThe value is an object that can contain `output`, `inline`, and `block` properties. These options control how snippet content is parsed and formatted to produce cleaner source code.\n\n## Examples\n\nIn this example, we have configured snippet style with inline and block formatting options.\n\n```yaml\n_snippets:\n highlight:\n snippet: \"<<highlight>> [[content]] <</highlight>>\"\n params:\n content:\n parser: content\n options:\n style:\n inline:\n leading: ' '\n trailing: ' '\n block:\n leading: '\\n'\n trailing: '\\n'\n indent: ' '\n```"
12797
13111
  },
12798
13112
  "type._snippets_imports": {
12799
- "title": "Snippets Imports",
12800
13113
  "type": "object",
12801
13114
  "properties": {
12802
13115
  "hugo": {
@@ -12825,6 +13138,7 @@
12825
13138
  }
12826
13139
  },
12827
13140
  "additionalProperties": false,
13141
+ "title": "Snippets Imports",
12828
13142
  "documented": true,
12829
13143
  "description": "This key defines snippet templates or libraries for your Site.\n\nSome libraries are SSG specific while others work for most SSGs.\n\nFor more information, please read our documentation on [Docusaurus Components](https://cloudcannon.com/documentation/articles/snippets-using-docusaurus-components/),\n[Eleventy Shortcodes](https://cloudcannon.com/documentation/articles/snippets-using-eleventy-shortcodes/), [Hugo Shortcodes](https://cloudcannon.com/documentation/articles/snippets-using-hugo-shortcodes/), [MDX Components](https://cloudcannon.com/documentation/articles/snippets-using-mdx-components/), or [Python Markdown](https://cloudcannon.com/documentation/articles/snippets-using-python-markdown/).\n\n## Examples\n\nIn this example, we have configured Hugo shortcode imports for the Site.\n\n```yaml\n_snippets_imports:\n hugo:\n include:\n - figure\n - youtube\n```",
12830
13144
  "markdownDescription": "This key defines snippet templates or libraries for your Site.\n\nSome libraries are SSG specific while others work for most SSGs.\n\nFor more information, please read our documentation on [Docusaurus Components](https://cloudcannon.com/documentation/articles/snippets-using-docusaurus-components/),\n[Eleventy Shortcodes](https://cloudcannon.com/documentation/articles/snippets-using-eleventy-shortcodes/), [Hugo Shortcodes](https://cloudcannon.com/documentation/articles/snippets-using-hugo-shortcodes/), [MDX Components](https://cloudcannon.com/documentation/articles/snippets-using-mdx-components/), or [Python Markdown](https://cloudcannon.com/documentation/articles/snippets-using-python-markdown/).\n\n## Examples\n\nIn this example, we have configured Hugo shortcode imports for the Site.\n\n```yaml\n_snippets_imports:\n hugo:\n include:\n - figure\n - youtube\n```"
@@ -12836,7 +13150,6 @@
12836
13150
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
12837
13151
  },
12838
13152
  {
12839
- "title": "Snippets Imports Exclude List",
12840
13153
  "type": "object",
12841
13154
  "properties": {
12842
13155
  "exclude": {
@@ -12847,10 +13160,10 @@
12847
13160
  "exclude"
12848
13161
  ],
12849
13162
  "additionalProperties": false,
13163
+ "title": "Snippets Imports Exclude List",
12850
13164
  "documented": true
12851
13165
  },
12852
13166
  {
12853
- "title": "Snippets Imports Include List",
12854
13167
  "type": "object",
12855
13168
  "properties": {
12856
13169
  "include": {
@@ -12861,6 +13174,7 @@
12861
13174
  "include"
12862
13175
  ],
12863
13176
  "additionalProperties": false,
13177
+ "title": "Snippets Imports Include List",
12864
13178
  "documented": true
12865
13179
  }
12866
13180
  ],
@@ -12868,30 +13182,30 @@
12868
13182
  "title": "hugo"
12869
13183
  },
12870
13184
  "type._snippets_imports.*.(full-import)": {
12871
- "title": "Snippets Imports Full Import",
12872
13185
  "type": "boolean",
13186
+ "title": "Snippets Imports Full Import",
12873
13187
  "documented": true
12874
13188
  },
12875
13189
  "SnippetImportExclude": {
12876
- "description": "This key defines the list of excluded snippets.\n\nIf unset, all snippets are excluded unless defined in `include`.",
12877
13190
  "type": "array",
12878
13191
  "items": {
12879
13192
  "type": "string",
12880
13193
  "documented": true,
12881
13194
  "title": "exclude[*]"
12882
13195
  },
13196
+ "description": "This key defines the list of excluded snippets.\n\nIf unset, all snippets are excluded unless defined in `include`.",
12883
13197
  "documented": true,
12884
13198
  "title": "exclude",
12885
13199
  "markdownDescription": "This key defines the list of excluded snippets.\n\nIf unset, all snippets are excluded unless defined in `include`."
12886
13200
  },
12887
13201
  "SnippetImportInclude": {
12888
- "description": "This key defines the list of included snippets.\n\nIf unset, all snippets are included unless defined in `exclude`.",
12889
13202
  "type": "array",
12890
13203
  "items": {
12891
13204
  "type": "string",
12892
13205
  "documented": true,
12893
13206
  "title": "include[*]"
12894
13207
  },
13208
+ "description": "This key defines the list of included snippets.\n\nIf unset, all snippets are included unless defined in `exclude`.",
12895
13209
  "documented": true,
12896
13210
  "title": "include",
12897
13211
  "markdownDescription": "This key defines the list of included snippets.\n\nIf unset, all snippets are included unless defined in `exclude`."
@@ -12903,7 +13217,6 @@
12903
13217
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
12904
13218
  },
12905
13219
  {
12906
- "title": "Snippets Imports Exclude List",
12907
13220
  "type": "object",
12908
13221
  "properties": {
12909
13222
  "exclude": {
@@ -12914,10 +13227,10 @@
12914
13227
  "exclude"
12915
13228
  ],
12916
13229
  "additionalProperties": false,
13230
+ "title": "Snippets Imports Exclude List",
12917
13231
  "documented": true
12918
13232
  },
12919
13233
  {
12920
- "title": "Snippets Imports Include List",
12921
13234
  "type": "object",
12922
13235
  "properties": {
12923
13236
  "include": {
@@ -12928,6 +13241,7 @@
12928
13241
  "include"
12929
13242
  ],
12930
13243
  "additionalProperties": false,
13244
+ "title": "Snippets Imports Include List",
12931
13245
  "documented": true
12932
13246
  }
12933
13247
  ],
@@ -12941,7 +13255,6 @@
12941
13255
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
12942
13256
  },
12943
13257
  {
12944
- "title": "Snippets Imports Exclude List",
12945
13258
  "type": "object",
12946
13259
  "properties": {
12947
13260
  "exclude": {
@@ -12952,10 +13265,10 @@
12952
13265
  "exclude"
12953
13266
  ],
12954
13267
  "additionalProperties": false,
13268
+ "title": "Snippets Imports Exclude List",
12955
13269
  "documented": true
12956
13270
  },
12957
13271
  {
12958
- "title": "Snippets Imports Include List",
12959
13272
  "type": "object",
12960
13273
  "properties": {
12961
13274
  "include": {
@@ -12966,6 +13279,7 @@
12966
13279
  "include"
12967
13280
  ],
12968
13281
  "additionalProperties": false,
13282
+ "title": "Snippets Imports Include List",
12969
13283
  "documented": true
12970
13284
  }
12971
13285
  ],
@@ -12979,7 +13293,6 @@
12979
13293
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
12980
13294
  },
12981
13295
  {
12982
- "title": "Snippets Imports Exclude List",
12983
13296
  "type": "object",
12984
13297
  "properties": {
12985
13298
  "exclude": {
@@ -12990,10 +13303,10 @@
12990
13303
  "exclude"
12991
13304
  ],
12992
13305
  "additionalProperties": false,
13306
+ "title": "Snippets Imports Exclude List",
12993
13307
  "documented": true
12994
13308
  },
12995
13309
  {
12996
- "title": "Snippets Imports Include List",
12997
13310
  "type": "object",
12998
13311
  "properties": {
12999
13312
  "include": {
@@ -13004,6 +13317,7 @@
13004
13317
  "include"
13005
13318
  ],
13006
13319
  "additionalProperties": false,
13320
+ "title": "Snippets Imports Include List",
13007
13321
  "documented": true
13008
13322
  }
13009
13323
  ],
@@ -13017,7 +13331,6 @@
13017
13331
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
13018
13332
  },
13019
13333
  {
13020
- "title": "Snippets Imports Exclude List",
13021
13334
  "type": "object",
13022
13335
  "properties": {
13023
13336
  "exclude": {
@@ -13028,10 +13341,10 @@
13028
13341
  "exclude"
13029
13342
  ],
13030
13343
  "additionalProperties": false,
13344
+ "title": "Snippets Imports Exclude List",
13031
13345
  "documented": true
13032
13346
  },
13033
13347
  {
13034
- "title": "Snippets Imports Include List",
13035
13348
  "type": "object",
13036
13349
  "properties": {
13037
13350
  "include": {
@@ -13042,6 +13355,7 @@
13042
13355
  "include"
13043
13356
  ],
13044
13357
  "additionalProperties": false,
13358
+ "title": "Snippets Imports Include List",
13045
13359
  "documented": true
13046
13360
  }
13047
13361
  ],
@@ -13055,7 +13369,6 @@
13055
13369
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
13056
13370
  },
13057
13371
  {
13058
- "title": "Snippets Imports Exclude List",
13059
13372
  "type": "object",
13060
13373
  "properties": {
13061
13374
  "exclude": {
@@ -13066,10 +13379,10 @@
13066
13379
  "exclude"
13067
13380
  ],
13068
13381
  "additionalProperties": false,
13382
+ "title": "Snippets Imports Exclude List",
13069
13383
  "documented": true
13070
13384
  },
13071
13385
  {
13072
- "title": "Snippets Imports Include List",
13073
13386
  "type": "object",
13074
13387
  "properties": {
13075
13388
  "include": {
@@ -13080,6 +13393,7 @@
13080
13393
  "include"
13081
13394
  ],
13082
13395
  "additionalProperties": false,
13396
+ "title": "Snippets Imports Include List",
13083
13397
  "documented": true
13084
13398
  }
13085
13399
  ],
@@ -13093,7 +13407,6 @@
13093
13407
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
13094
13408
  },
13095
13409
  {
13096
- "title": "Snippets Imports Exclude List",
13097
13410
  "type": "object",
13098
13411
  "properties": {
13099
13412
  "exclude": {
@@ -13104,10 +13417,10 @@
13104
13417
  "exclude"
13105
13418
  ],
13106
13419
  "additionalProperties": false,
13420
+ "title": "Snippets Imports Exclude List",
13107
13421
  "documented": true
13108
13422
  },
13109
13423
  {
13110
- "title": "Snippets Imports Include List",
13111
13424
  "type": "object",
13112
13425
  "properties": {
13113
13426
  "include": {
@@ -13118,6 +13431,7 @@
13118
13431
  "include"
13119
13432
  ],
13120
13433
  "additionalProperties": false,
13434
+ "title": "Snippets Imports Include List",
13121
13435
  "documented": true
13122
13436
  }
13123
13437
  ],
@@ -13131,7 +13445,6 @@
13131
13445
  "$ref": "#/definitions/type._snippets_imports.*.(full-import)"
13132
13446
  },
13133
13447
  {
13134
- "title": "Snippets Imports Exclude List",
13135
13448
  "type": "object",
13136
13449
  "properties": {
13137
13450
  "exclude": {
@@ -13142,10 +13455,10 @@
13142
13455
  "exclude"
13143
13456
  ],
13144
13457
  "additionalProperties": false,
13458
+ "title": "Snippets Imports Exclude List",
13145
13459
  "documented": true
13146
13460
  },
13147
13461
  {
13148
- "title": "Snippets Imports Include List",
13149
13462
  "type": "object",
13150
13463
  "properties": {
13151
13464
  "include": {
@@ -13156,6 +13469,7 @@
13156
13469
  "include"
13157
13470
  ],
13158
13471
  "additionalProperties": false,
13472
+ "title": "Snippets Imports Include List",
13159
13473
  "documented": true
13160
13474
  }
13161
13475
  ],
@@ -13189,8 +13503,6 @@
13189
13503
  "markdownDescription": "A record of reusable values that can be referenced in snippet templates. Values are substituted using `{ ref: \"key\" }` for direct replacement or `{ spread_ref: \"key\" }` for spreading arrays/objects. Common definition types include parser formats, argument models, select option lists, and simple string values like shortcode names.\n\n## Examples\n\nDefine reusable values like shortcode names, argument models, and parser formats that can be referenced in snippet templates.\n\n```yaml\n_snippets_definitions:\n # Simple string value for the shortcode name\n shortcode_name: \"highlight\"\n content_key: \"content\"\n\n # Array of argument models for positional arguments\n positional_args:\n - editor_key: \"language\"\n type: \"string\"\n - editor_key: \"linenos\"\n type: \"boolean\"\n optional: true\n default: false\n\n # Parser format configuration\n custom_format:\n root_pair_delimiter:\n - \" \"\n root_value_delimiter: \"=\"\n string_boundary:\n - '\"'\n - \"'\"\n - \"\"\n allow_booleans: true\n allow_numbers: true\n```\n\nReference definitions in snippet templates using `{ ref: \"key\" }` syntax. This allows you to reuse common configurations across multiple snippets.\n\n```yaml\n_snippets_definitions:\n shortcode_name: \"figure\"\n named_args:\n - editor_key: \"src\"\n type: \"string\"\n - editor_key: \"alt\"\n type: \"string\"\n optional: true\n\n_snippets_templates:\n my_shortcode_template:\n snippet: \"{{< [[name]] [[args]] >}}\"\n params:\n name:\n parser: \"literal\"\n options:\n literal:\n ref: \"shortcode_name\"\n args:\n parser: \"key_values\"\n options:\n models:\n ref: \"named_args\"\n\n_snippets:\n figure:\n template: \"my_shortcode_template\"\n definitions:\n shortcode_name: \"figure\"\n named_args:\n - editor_key: \"src\"\n type: \"string\"\n - editor_key: \"alt\"\n type: \"string\"\n```\n\nDefine a list of select options for use in snippet inputs, such as a list of programming languages for a code highlighting snippet.\n\n```yaml\n_snippets_definitions:\n languages:\n - name: \"JavaScript\"\n value: \"js\"\n - name: \"Python\"\n value: \"python\"\n - name: \"Ruby\"\n value: \"ruby\"\n - name: \"HTML\"\n value: \"html\"\n - name: \"CSS\"\n value: \"css\"\n```"
13190
13504
  },
13191
13505
  "type.snippet-definition-value": {
13192
- "title": "Snippet Definition Value",
13193
- "description": "A reusable value that can be referenced in snippet templates via `{ ref: \"key\" }` or `{ spread_ref: \"key\" }`. Can be a string, number, boolean, parser format, parser model, array of models, or array of select options.",
13194
13506
  "anyOf": [
13195
13507
  {
13196
13508
  "$ref": "#/definitions/type.snippet-format"
@@ -13199,49 +13511,47 @@
13199
13511
  "$ref": "#/definitions/type.snippet-model"
13200
13512
  },
13201
13513
  {
13202
- "title": "Parser Model Array",
13203
- "description": "An array of parser model configurations. Typically used for `positional_args` or `named_args` definitions that specify the arguments a snippet accepts. Each model defines an argument's editor key, type, default value, and whether it's optional.",
13204
13514
  "type": "array",
13205
13515
  "items": {
13206
13516
  "$ref": "#/definitions/type.snippet-model"
13207
13517
  },
13518
+ "title": "Parser Model Array",
13519
+ "description": "An array of parser model configurations. Typically used for `positional_args` or `named_args` definitions that specify the arguments a snippet accepts. Each model defines an argument's editor key, type, default value, and whether it's optional.",
13208
13520
  "documented": true,
13209
13521
  "markdownDescription": "An array of parser model configurations. Typically used for `positional_args` or `named_args` definitions that specify the arguments a snippet accepts. Each model defines an argument's editor key, type, default value, and whether it's optional."
13210
13522
  },
13211
13523
  {
13212
- "title": "Select Values Array",
13213
- "description": "An array of select option values. Commonly used for language lists in code highlighting snippets, where each option has a display name and a value. For example: `[{ name: \"JavaScript\", value: \"js\" }, { name: \"Python\", value: \"python\" }]`.",
13214
13524
  "type": "array",
13215
13525
  "items": {
13216
13526
  "$ref": "#/definitions/type.snippet-definition-select-value"
13217
13527
  },
13528
+ "title": "Select Values Array",
13529
+ "description": "An array of select option values. Commonly used for language lists in code highlighting snippets, where each option has a display name and a value. For example: `[{ name: \"JavaScript\", value: \"js\" }, { name: \"Python\", value: \"python\" }]`.",
13218
13530
  "documented": true,
13219
13531
  "markdownDescription": "An array of select option values. Commonly used for language lists in code highlighting snippets, where each option has a display name and a value. For example: `[{ name: \"JavaScript\", value: \"js\" }, { name: \"Python\", value: \"python\" }]`."
13220
13532
  },
13221
13533
  {
13534
+ "type": "string",
13222
13535
  "title": "String Value",
13223
13536
  "description": "A string value definition. Commonly used for `shortcode_name`, `tag_name`, `content_key`, `include_name`, and similar definitions that identify snippet components by name.",
13224
- "type": "string",
13225
13537
  "documented": true,
13226
13538
  "markdownDescription": "A string value definition. Commonly used for `shortcode_name`, `tag_name`, `content_key`, `include_name`, and similar definitions that identify snippet components by name."
13227
13539
  },
13228
13540
  {
13541
+ "type": "number",
13229
13542
  "title": "Number Value",
13230
13543
  "description": "A numeric value definition. Use for counts, sizes, or other numeric values that can be referenced in snippet templates.",
13231
- "type": "number",
13232
13544
  "documented": true,
13233
13545
  "markdownDescription": "A numeric value definition. Use for counts, sizes, or other numeric values that can be referenced in snippet templates."
13234
13546
  },
13235
13547
  {
13548
+ "type": "boolean",
13236
13549
  "title": "Boolean Value",
13237
13550
  "description": "A boolean value definition. Use for flags and toggles that can be referenced in snippet templates.",
13238
- "type": "boolean",
13239
13551
  "documented": true,
13240
13552
  "markdownDescription": "A boolean value definition. Use for flags and toggles that can be referenced in snippet templates."
13241
13553
  },
13242
13554
  {
13243
- "title": "String Array",
13244
- "description": "An array of string values. Useful for defining lists of allowed values, delimiters, or other string collections that can be referenced in snippet templates.",
13245
13555
  "type": "array",
13246
13556
  "items": {
13247
13557
  "type": "string",
@@ -13250,16 +13560,18 @@
13250
13560
  "description": "A string item in the array.",
13251
13561
  "markdownDescription": "A string item in the array."
13252
13562
  },
13563
+ "title": "String Array",
13564
+ "description": "An array of string values. Useful for defining lists of allowed values, delimiters, or other string collections that can be referenced in snippet templates.",
13253
13565
  "documented": true,
13254
13566
  "markdownDescription": "An array of string values. Useful for defining lists of allowed values, delimiters, or other string collections that can be referenced in snippet templates."
13255
13567
  }
13256
13568
  ],
13569
+ "title": "Snippet Definition Value",
13570
+ "description": "A reusable value that can be referenced in snippet templates via `{ ref: \"key\" }` or `{ spread_ref: \"key\" }`. Can be a string, number, boolean, parser format, parser model, array of models, or array of select options.",
13257
13571
  "documented": true,
13258
13572
  "markdownDescription": "A reusable value that can be referenced in snippet templates via `{ ref: \"key\" }` or `{ spread_ref: \"key\" }`. Can be a string, number, boolean, parser format, parser model, array of models, or array of select options."
13259
13573
  },
13260
13574
  "type.snippet-definition-select-value": {
13261
- "title": "Snippet Definition Select Value",
13262
- "description": "A value option for select inputs, typically used in language lists. Contains a display name and the actual value to use.",
13263
13575
  "type": "object",
13264
13576
  "properties": {
13265
13577
  "name": {
@@ -13270,24 +13582,24 @@
13270
13582
  "markdownDescription": "The display name shown to users when selecting this option. For example, \"JavaScript\" for a language with value \"js\"."
13271
13583
  },
13272
13584
  "value": {
13273
- "description": "The actual value used when this option is selected. Can be a string, number, or boolean. For example, \"js\" for JavaScript or 4 for an indentation level.",
13274
13585
  "anyOf": [
13275
13586
  {
13276
- "title": "String Select Value",
13277
13587
  "type": "string",
13588
+ "title": "String Select Value",
13278
13589
  "documented": true
13279
13590
  },
13280
13591
  {
13281
- "title": "Number Select Value",
13282
13592
  "type": "number",
13593
+ "title": "Number Select Value",
13283
13594
  "documented": true
13284
13595
  },
13285
13596
  {
13286
- "title": "Boolean Select Value",
13287
13597
  "type": "boolean",
13598
+ "title": "Boolean Select Value",
13288
13599
  "documented": true
13289
13600
  }
13290
13601
  ],
13602
+ "description": "The actual value used when this option is selected. Can be a string, number, or boolean. For example, \"js\" for JavaScript or 4 for an indentation level.",
13291
13603
  "documented": true,
13292
13604
  "title": "value",
13293
13605
  "markdownDescription": "The actual value used when this option is selected. Can be a string, number, or boolean. For example, \"js\" for JavaScript or 4 for an indentation level."
@@ -13297,6 +13609,8 @@
13297
13609
  "value"
13298
13610
  ],
13299
13611
  "additionalProperties": false,
13612
+ "title": "Snippet Definition Select Value",
13613
+ "description": "A value option for select inputs, typically used in language lists. Contains a display name and the actual value to use.",
13300
13614
  "documented": true,
13301
13615
  "markdownDescription": "A value option for select inputs, typically used in language lists. Contains a display name and the actual value to use."
13302
13616
  }