@cloudcannon/configuration-types 0.0.51 → 0.0.53

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.
@@ -392,12 +392,12 @@
392
392
  "markdownDescription": "This key toggles whether CloudCannon will generate an output URL for a given Collection.\n\nSetting this key to `true` will prevent CloudCannon from generating an output URL for a Collection.\n\n## Examples\n\nIn this example, `data` is an non-output Collection and we don't want output URLs generated.\n\n```yaml\ncollections_config:\n data:\n disable_url: true\n```"
393
393
  },
394
394
  "include_developer_files": {
395
- "description": "This key toggles whether CloudCannon removes developer files from your *Collection browser*. CloudCannon excludes files that probably shouldn't be edited in a CMS from your *Collection browser*, for example files like `README.md` or\n`package.json`. CloudCannon excludes these files even if you have configured globs to allow them.\n\nSetting this key to `true` will allow CloudCannon to show developer files,\nassuming they are not filtered out by any configured\n[globs](https://cloudcannon.com/documentation/articles/collections-reference/#glob).\n\n## Examples\n\nIn this example, we want to see developer files in the *Collection browser* for the `data` Collection.\n\n```yaml\ncollections_config:\n data:\n include_developer_files: true\n```",
395
+ "description": "This key toggles whether CloudCannon removes developer files from your *Collection browser*. CloudCannon excludes files that probably shouldn't be edited in a CMS from your *Collection browser*, for example files like `README.md` or\n`package.json`. CloudCannon excludes these files even if you have configured globs to allow them.\n\nSetting this key to `true` will allow CloudCannon to show developer files,\nassuming they are not filtered out by any configured\n[globs](https://cloudcannon.com/documentation/developer-reference/configuration-file/collections_config/*/glob/). \n\n## Examples\n\nIn this example, we want to see developer files in the *Collection browser* for the `data` Collection.\n\n```yaml\ncollections_config:\n data:\n include_developer_files: true\n```",
396
396
  "default": false,
397
397
  "type": "boolean",
398
398
  "documented": true,
399
399
  "title": "include_developer_files",
400
- "markdownDescription": "This key toggles whether CloudCannon removes developer files from your *Collection browser*. CloudCannon excludes files that probably shouldn't be edited in a CMS from your *Collection browser*, for example files like `README.md` or\n`package.json`. CloudCannon excludes these files even if you have configured globs to allow them.\n\nSetting this key to `true` will allow CloudCannon to show developer files,\nassuming they are not filtered out by any configured\n[globs](https://cloudcannon.com/documentation/articles/collections-reference/#glob).\n\n## Examples\n\nIn this example, we want to see developer files in the *Collection browser* for the `data` Collection.\n\n```yaml\ncollections_config:\n data:\n include_developer_files: true\n```"
400
+ "markdownDescription": "This key toggles whether CloudCannon removes developer files from your *Collection browser*. CloudCannon excludes files that probably shouldn't be edited in a CMS from your *Collection browser*, for example files like `README.md` or\n`package.json`. CloudCannon excludes these files even if you have configured globs to allow them.\n\nSetting this key to `true` will allow CloudCannon to show developer files,\nassuming they are not filtered out by any configured\n[globs](https://cloudcannon.com/documentation/developer-reference/configuration-file/collections_config/*/glob/). \n\n## Examples\n\nIn this example, we want to see developer files in the *Collection browser* for the `data` Collection.\n\n```yaml\ncollections_config:\n data:\n include_developer_files: true\n```"
401
401
  },
402
402
  "name": {
403
403
  "description": "This key defines the display name for a Collection.\n\nThe name appears in the *Site Navigation* and at the top of the *Collection browser*.\n\nChanging the display name does not affect the Collection key name.\n\nBy default, CloudCannon uses the Collection key name in title case (i.e., `blog_files` becomes \"Blog Files\").\n\n## Examples\n\nIn this example, CloudCannon will call the `blog` Collection \"Travel Blog\" in the *Site Navigation* and the *Collection browser*.\n\n```yaml\ncollections_config:\n blog:\n name: Travel Blog\n```",
@@ -512,7 +512,7 @@
512
512
  "markdownDescription": "This key defines the singular noun for your Collection name.\n\nCloudCannon uses the singular noun in the *\\+ Add* button in the top right of the *Collection browser* when you select the option to add a new file.\n\nThis is useful if your Collection name is an irregular plural (e.g., \"syllabi\" or \"syllabuses\" to \"syllabus\").\n\n## Examples\n\nIn this example, the *\\+ Add* button option to add a Collection file will read \"Add Team Member\" rather that \"Add Team\".\n\n```yaml\ncollections_config:\n team:\n singular_name: Team Member\n```"
513
513
  },
514
514
  "add_options": {
515
- "description": "This key defines the options available in the *\\+ Add* button dropdown at the top right of your *Collection browser*.\n\nConfiguring add options for a Collection will remove CloudCannon's default \"Add a file\" option from the *\\+ Add* button dropdown.\n\nAdditionally, any Schemas you have configured for a Collection will also appear in the *\\+ Add* dropdown.\n\nFor more information on these options, please read our reference documentation on [disable\\_add](https://cloudcannon.com/documentation/articles/collections-reference/#disable_add), [disable\\_add\\_folder](https://cloudcannon.com/documentation/articles/collections-reference/#disable_add_folder), and [schemas](https://cloudcannon.com/documentation/articles/schemas-reference/#schemas).\n\n## Examples\n\nIn this example, we have configured two standard add options for the `people` Collection. The first option uses the `employee` Schema, and the second option uses the `contractor` 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 - name: Add Contractor\n icon: support_agent\n schema: contractor\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n contractor:\n path: /.cloudcannon/schemas/contractor.yml\n```\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```",
515
+ "description": "This key defines the options available in the *\\+ Add* button dropdown at the top right of your *Collection browser*.\n\nConfiguring add options for a Collection will remove CloudCannon's default \"Add a file\" option from the *\\+ Add* button dropdown.\n\nAdditionally, any Schemas you have configured for a Collection will also appear in the *\\+ Add* dropdown.\n\n## Examples\n\nIn this example, we have configured two standard add options for the `people` Collection. The first option uses the `employee` Schema, and the second option uses the `contractor` 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 - name: Add Contractor\n icon: support_agent\n schema: contractor\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n contractor:\n path: /.cloudcannon/schemas/contractor.yml\n```\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```",
516
516
  "type": "array",
517
517
  "items": {
518
518
  "anyOf": [
@@ -551,11 +551,11 @@
551
551
  "markdownDescription": "This key defines which editing interface CloudCannon will use when you select an option from the *\\+ Add* button dropdown.\n\nValues can be one of the following: `visual`, `content`, or `data`.\n\nBy default, CloudCannon will open the new file in an appropriate editing interface for that file type.\n\nIf CloudCannon cannot determine an appropriate editing interface, it will show a warning.\n\n## Examples\n\nIn this example, we have configured a standard add option for the `people` Collection that opens new 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```"
552
552
  },
553
553
  "base_path": {
554
- "description": "This key defines a path for files created using an option in the *\\+ Add* button dropdown.\n\nThis path overrides the path for the current Collection and subfolder open in the *Collection browser*.\n\nThis key is useful if you need to specify a specific subfolder within a Collection.\n\nThe value for this key is relative to your Collection [path](https://cloudcannon.com/documentation/articles/collections-reference/#path).\n\n## Examples\n\nIn this example, we want team members in the `_posts` Collection to create new files in the`blog` subfolder of the `_drafts` Collection rather than the current *Collection browser* they have open. By configuring the `base_path` value to `/../_drafts/blog`, new files will be created in a different Collection subfolder (i.e., `_drafts`) when a team member selects this option from the *\\+ Add* button dropdown.\n\n```yaml\ncollections_config:\n _posts:\n add_options:\n - name: Add draft blog\n icon: post_add\n editor: content\n base_path: /../_drafts/blog\n```",
554
+ "description": "This key defines a path for files created using an option in the *\\+ Add* button dropdown.\n\nThis path overrides the path for the current Collection and subfolder open in the *Collection browser*.\n\nThis key is useful if you need to specify a specific subfolder within a Collection.\n\n## Examples\n\nIn this example, we want team members in the `_posts` Collection to create new files in the`blog` subfolder of the `_drafts` Collection rather than the current *Collection browser* they have open. By configuring the `base_path` value to `/../_drafts/blog`, new files will be created in a different Collection subfolder (i.e., `_drafts`) when a team member selects this option from the *\\+ Add* button dropdown.\n\n```yaml\ncollections_config:\n _posts:\n add_options:\n - name: Add draft blog\n icon: post_add\n editor: content\n base_path: /../_drafts/blog\n```",
555
555
  "type": "string",
556
556
  "documented": true,
557
557
  "title": "base_path",
558
- "markdownDescription": "This key defines a path for files created using an option in the *\\+ Add* button dropdown.\n\nThis path overrides the path for the current Collection and subfolder open in the *Collection browser*.\n\nThis key is useful if you need to specify a specific subfolder within a Collection.\n\nThe value for this key is relative to your Collection [path](https://cloudcannon.com/documentation/articles/collections-reference/#path).\n\n## Examples\n\nIn this example, we want team members in the `_posts` Collection to create new files in the`blog` subfolder of the `_drafts` Collection rather than the current *Collection browser* they have open. By configuring the `base_path` value to `/../_drafts/blog`, new files will be created in a different Collection subfolder (i.e., `_drafts`) when a team member selects this option from the *\\+ Add* button dropdown.\n\n```yaml\ncollections_config:\n _posts:\n add_options:\n - name: Add draft blog\n icon: post_add\n editor: content\n base_path: /../_drafts/blog\n```"
558
+ "markdownDescription": "This key defines a path for files created using an option in the *\\+ Add* button dropdown.\n\nThis path overrides the path for the current Collection and subfolder open in the *Collection browser*.\n\nThis key is useful if you need to specify a specific subfolder within a Collection.\n\n## Examples\n\nIn this example, we want team members in the `_posts` Collection to create new files in the`blog` subfolder of the `_drafts` Collection rather than the current *Collection browser* they have open. By configuring the `base_path` value to `/../_drafts/blog`, new files will be created in a different Collection subfolder (i.e., `_drafts`) when a team member selects this option from the *\\+ Add* button dropdown.\n\n```yaml\ncollections_config:\n _posts:\n add_options:\n - name: Add draft blog\n icon: post_add\n editor: content\n base_path: /../_drafts/blog\n```"
559
559
  },
560
560
  "collection": {
561
561
  "description": "This key defines the Collection for files created using an option in the *\\+ Add* button dropdown.\n\nThis Collections overrides the current Collection open in the *Collection browser*.\n\nThe value for this key should be the key name of a Collection.\n\nBy default, this key is the current Collection open in the *Collection browser*.\n\n## Examples\n\nIn this example, we want team members in the articles Collection to create new files in the `new_articles` Collection rather than the current Collection browser they have open. By configuring the `collection` value to `new_articles`, new files will be created in a different Collection (i.e., `new_articles`) when a team member selects this option from the + Add button dropdown.\n\n```yaml\ncollections_config:\n articles:\n add_options:\n - name: Add articles\n collection: new_articles\n schema: articles\n```",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "documented": true,
632
632
  "title": "add_options",
633
- "markdownDescription": "This key defines the options available in the *\\+ Add* button dropdown at the top right of your *Collection browser*.\n\nConfiguring add options for a Collection will remove CloudCannon's default \"Add a file\" option from the *\\+ Add* button dropdown.\n\nAdditionally, any Schemas you have configured for a Collection will also appear in the *\\+ Add* dropdown.\n\nFor more information on these options, please read our reference documentation on [disable\\_add](https://cloudcannon.com/documentation/articles/collections-reference/#disable_add), [disable\\_add\\_folder](https://cloudcannon.com/documentation/articles/collections-reference/#disable_add_folder), and [schemas](https://cloudcannon.com/documentation/articles/schemas-reference/#schemas).\n\n## Examples\n\nIn this example, we have configured two standard add options for the `people` Collection. The first option uses the `employee` Schema, and the second option uses the `contractor` 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 - name: Add Contractor\n icon: support_agent\n schema: contractor\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n contractor:\n path: /.cloudcannon/schemas/contractor.yml\n```\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```"
633
+ "markdownDescription": "This key defines the options available in the *\\+ Add* button dropdown at the top right of your *Collection browser*.\n\nConfiguring add options for a Collection will remove CloudCannon's default \"Add a file\" option from the *\\+ Add* button dropdown.\n\nAdditionally, any Schemas you have configured for a Collection will also appear in the *\\+ Add* dropdown.\n\n## Examples\n\nIn this example, we have configured two standard add options for the `people` Collection. The first option uses the `employee` Schema, and the second option uses the `contractor` 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 - name: Add Contractor\n icon: support_agent\n schema: contractor\n editor: data\n schemas:\n employee:\n path: /.cloudcannon/schemas/employee.yml\n contractor:\n path: /.cloudcannon/schemas/contractor.yml\n```\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```"
634
634
  },
635
635
  "create": {
636
636
  "allOf": [
@@ -938,14 +938,14 @@
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/articles/configuration-file-reference/#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```",
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
942
  "type": "string",
943
943
  "documented": true,
944
944
  "title": "path",
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/articles/configuration-file-reference/#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```"
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```"
946
946
  },
947
947
  "glob": {
948
- "description": "This key defines globs which filter the files visible in the *Collection browser* for a given Collection.\n\nValues in this array are relative to the Collection [path](https://cloudcannon.com/documentation/articles/collections-reference/#path).\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\n> For more information about developer files, please read our documentation on the [include\\_developer\\_files](https://cloudcannon.com/documentation/articles/collections-reference/#include_developer_files) key.\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```",
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
951
  "title": "Glob Array",
@@ -971,7 +971,7 @@
971
971
  ],
972
972
  "documented": true,
973
973
  "title": "glob",
974
- "markdownDescription": "This key defines globs which filter the files visible in the *Collection browser* for a given Collection.\n\nValues in this array are relative to the Collection [path](https://cloudcannon.com/documentation/articles/collections-reference/#path).\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\n> For more information about developer files, please read our documentation on the [include\\_developer\\_files](https://cloudcannon.com/documentation/articles/collections-reference/#include_developer_files) key.\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```"
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
977
  "title": "Icon",
@@ -4871,6 +4871,33 @@
4871
4871
  "min_length_message": {
4872
4872
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
4873
4873
  },
4874
+ "max_words": {
4875
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
4876
+ },
4877
+ "max_words_message": {
4878
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
4879
+ },
4880
+ "min_words": {
4881
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
4882
+ },
4883
+ "min_words_message": {
4884
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
4885
+ },
4886
+ "max_graphemes": {
4887
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
4888
+ },
4889
+ "max_graphemes_message": {
4890
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
4891
+ },
4892
+ "min_graphemes": {
4893
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
4894
+ },
4895
+ "min_graphemes_message": {
4896
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
4897
+ },
4898
+ "locale": {
4899
+ "$ref": "#/definitions/type._inputs.*.options.locale"
4900
+ },
4874
4901
  "pattern": {
4875
4902
  "$ref": "#/definitions/type._inputs.*.options.pattern"
4876
4903
  },
@@ -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",
@@ -5399,6 +5489,33 @@
5399
5489
  "min_length_message": {
5400
5490
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5401
5491
  },
5492
+ "max_words": {
5493
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5494
+ },
5495
+ "max_words_message": {
5496
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5497
+ },
5498
+ "min_words": {
5499
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5500
+ },
5501
+ "min_words_message": {
5502
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5503
+ },
5504
+ "max_graphemes": {
5505
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5506
+ },
5507
+ "max_graphemes_message": {
5508
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5509
+ },
5510
+ "min_graphemes": {
5511
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5512
+ },
5513
+ "min_graphemes_message": {
5514
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5515
+ },
5516
+ "locale": {
5517
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5518
+ },
5402
5519
  "pattern": {
5403
5520
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5404
5521
  },
@@ -5558,6 +5675,33 @@
5558
5675
  "min_length_message": {
5559
5676
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5560
5677
  },
5678
+ "max_words": {
5679
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5680
+ },
5681
+ "max_words_message": {
5682
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5683
+ },
5684
+ "min_words": {
5685
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5686
+ },
5687
+ "min_words_message": {
5688
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5689
+ },
5690
+ "max_graphemes": {
5691
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5692
+ },
5693
+ "max_graphemes_message": {
5694
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5695
+ },
5696
+ "min_graphemes": {
5697
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5698
+ },
5699
+ "min_graphemes_message": {
5700
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5701
+ },
5702
+ "locale": {
5703
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5704
+ },
5561
5705
  "pattern": {
5562
5706
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5563
5707
  },
@@ -5800,6 +5944,33 @@
5800
5944
  "min_length_message": {
5801
5945
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
5802
5946
  },
5947
+ "max_words": {
5948
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
5949
+ },
5950
+ "max_words_message": {
5951
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
5952
+ },
5953
+ "min_words": {
5954
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
5955
+ },
5956
+ "min_words_message": {
5957
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
5958
+ },
5959
+ "max_graphemes": {
5960
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
5961
+ },
5962
+ "max_graphemes_message": {
5963
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
5964
+ },
5965
+ "min_graphemes": {
5966
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
5967
+ },
5968
+ "min_graphemes_message": {
5969
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
5970
+ },
5971
+ "locale": {
5972
+ "$ref": "#/definitions/type._inputs.*.options.locale"
5973
+ },
5803
5974
  "pattern": {
5804
5975
  "$ref": "#/definitions/type._inputs.*.options.pattern"
5805
5976
  },
@@ -6423,6 +6594,33 @@
6423
6594
  "min_length_message": {
6424
6595
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
6425
6596
  },
6597
+ "max_words": {
6598
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
6599
+ },
6600
+ "max_words_message": {
6601
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
6602
+ },
6603
+ "min_words": {
6604
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
6605
+ },
6606
+ "min_words_message": {
6607
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
6608
+ },
6609
+ "max_graphemes": {
6610
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
6611
+ },
6612
+ "max_graphemes_message": {
6613
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
6614
+ },
6615
+ "min_graphemes": {
6616
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
6617
+ },
6618
+ "min_graphemes_message": {
6619
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
6620
+ },
6621
+ "locale": {
6622
+ "$ref": "#/definitions/type._inputs.*.options.locale"
6623
+ },
6426
6624
  "pattern": {
6427
6625
  "$ref": "#/definitions/type._inputs.*.options.pattern"
6428
6626
  },
@@ -6448,12 +6646,20 @@
6448
6646
  "title": "empty_type"
6449
6647
  },
6450
6648
  "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,
6649
+ "deprecated": true,
6650
+ "description": "**⚠️ DEPRECATED:** This key is deprecated. Use `preview_resize` instead.\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).",
6453
6651
  "type": "boolean",
6454
6652
  "documented": true,
6455
6653
  "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)."
6654
+ "markdownDescription": "**⚠️ DEPRECATED:** This key is deprecated. Use `preview_resize` instead.\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)."
6655
+ },
6656
+ "prevent_resize": {
6657
+ "description": "Shows or hides the resize handler to vertically resize the input.",
6658
+ "default": false,
6659
+ "type": "boolean",
6660
+ "documented": true,
6661
+ "title": "prevent_resize",
6662
+ "markdownDescription": "Shows or hides the resize handler to vertically resize the input."
6457
6663
  },
6458
6664
  "initial_height": {
6459
6665
  "description": "This key defines the initial height of this input in pixels (px).",
@@ -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.",
@@ -7806,6 +8012,33 @@
7806
8012
  "min_length_message": {
7807
8013
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
7808
8014
  },
8015
+ "max_words": {
8016
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8017
+ },
8018
+ "max_words_message": {
8019
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8020
+ },
8021
+ "min_words": {
8022
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8023
+ },
8024
+ "min_words_message": {
8025
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8026
+ },
8027
+ "max_graphemes": {
8028
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8029
+ },
8030
+ "max_graphemes_message": {
8031
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8032
+ },
8033
+ "min_graphemes": {
8034
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8035
+ },
8036
+ "min_graphemes_message": {
8037
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8038
+ },
8039
+ "locale": {
8040
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8041
+ },
7809
8042
  "pattern": {
7810
8043
  "$ref": "#/definitions/type._inputs.*.options.pattern"
7811
8044
  },
@@ -8473,6 +8706,33 @@
8473
8706
  "min_length_message": {
8474
8707
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8475
8708
  },
8709
+ "max_words": {
8710
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8711
+ },
8712
+ "max_words_message": {
8713
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8714
+ },
8715
+ "min_words": {
8716
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8717
+ },
8718
+ "min_words_message": {
8719
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8720
+ },
8721
+ "max_graphemes": {
8722
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8723
+ },
8724
+ "max_graphemes_message": {
8725
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8726
+ },
8727
+ "min_graphemes": {
8728
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8729
+ },
8730
+ "min_graphemes_message": {
8731
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8732
+ },
8733
+ "locale": {
8734
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8735
+ },
8476
8736
  "pattern": {
8477
8737
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8478
8738
  },
@@ -8682,6 +8942,33 @@
8682
8942
  "min_length_message": {
8683
8943
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
8684
8944
  },
8945
+ "max_words": {
8946
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
8947
+ },
8948
+ "max_words_message": {
8949
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
8950
+ },
8951
+ "min_words": {
8952
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
8953
+ },
8954
+ "min_words_message": {
8955
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
8956
+ },
8957
+ "max_graphemes": {
8958
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
8959
+ },
8960
+ "max_graphemes_message": {
8961
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
8962
+ },
8963
+ "min_graphemes": {
8964
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
8965
+ },
8966
+ "min_graphemes_message": {
8967
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
8968
+ },
8969
+ "locale": {
8970
+ "$ref": "#/definitions/type._inputs.*.options.locale"
8971
+ },
8685
8972
  "pattern": {
8686
8973
  "$ref": "#/definitions/type._inputs.*.options.pattern"
8687
8974
  },
@@ -8942,8 +9229,8 @@
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": {
9232
+ "deprecated": true,
8945
9233
  "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,
8947
9234
  "type": "boolean",
8948
9235
  "documented": true,
8949
9236
  "title": "allow_empty",
@@ -9355,6 +9642,33 @@
9355
9642
  "min_length_message": {
9356
9643
  "$ref": "#/definitions/type._inputs.*.options.min_length_message"
9357
9644
  },
9645
+ "max_words": {
9646
+ "$ref": "#/definitions/type._inputs.*.options.max_words"
9647
+ },
9648
+ "max_words_message": {
9649
+ "$ref": "#/definitions/type._inputs.*.options.max_words_message"
9650
+ },
9651
+ "min_words": {
9652
+ "$ref": "#/definitions/type._inputs.*.options.min_words"
9653
+ },
9654
+ "min_words_message": {
9655
+ "$ref": "#/definitions/type._inputs.*.options.min_words_message"
9656
+ },
9657
+ "max_graphemes": {
9658
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes"
9659
+ },
9660
+ "max_graphemes_message": {
9661
+ "$ref": "#/definitions/type._inputs.*.options.max_graphemes_message"
9662
+ },
9663
+ "min_graphemes": {
9664
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes"
9665
+ },
9666
+ "min_graphemes_message": {
9667
+ "$ref": "#/definitions/type._inputs.*.options.min_graphemes_message"
9668
+ },
9669
+ "locale": {
9670
+ "$ref": "#/definitions/type._inputs.*.options.locale"
9671
+ },
9358
9672
  "pattern": {
9359
9673
  "$ref": "#/definitions/type._inputs.*.options.pattern"
9360
9674
  },
@@ -9887,13 +10201,13 @@
9887
10201
  "type": "string",
9888
10202
  "documented": true,
9889
10203
  "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```"
10204
+ "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```",
10205
+ "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
10206
  },
9893
10207
  "documented": true,
9894
10208
  "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/articles/configuration-file-reference/#_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/articles/configuration-file-reference/#_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```"
10209
+ "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```",
10210
+ "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
10211
  },
9898
10212
  "id_key": {
9899
10213
  "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```",
@@ -10291,8 +10605,8 @@
10291
10605
  },
10292
10606
  "documented": true,
10293
10607
  "title": "_structures_from_glob",
10294
- "description": "This key defines globs that filter which files CloudCannon should use for *Structure* 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.structures.yml`.\n\nYou can use this key anywhere you would use the `_structures` key in the configuration cascade.\n\nPlease see our documentation on [values_from_glob](https://cloudcannon.com/documentation/articles/configuration-file-reference/#values_from_glob) for defining individual\n*Structure* values in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have several *Structure Configuration Files* in the `.cloudcannon/structures/` folder. The value of the `_structures_from_glob` key tells CloudCannon to use the `staffMembers.cloudcannon.structures.yml` file in that folder.\n\n```yaml\n_structures_from_glob:\n - '/.cloudcannon/structures/staffMembers.cloudcannon.structures.yml'\n```\n\n```yaml\nstaff:\n style: modal\n values:\n - label: Employee\n value:\n name:\n job_description:\n profile_picture:\n - label: Manager\n value:\n name:\n job_description:\n profile_picture:\n url:\n```",
10295
- "markdownDescription": "This key defines globs that filter which files CloudCannon should use for *Structure* 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.structures.yml`.\n\nYou can use this key anywhere you would use the `_structures` key in the configuration cascade.\n\nPlease see our documentation on [values_from_glob](https://cloudcannon.com/documentation/articles/configuration-file-reference/#values_from_glob) for defining individual\n*Structure* values in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have several *Structure Configuration Files* in the `.cloudcannon/structures/` folder. The value of the `_structures_from_glob` key tells CloudCannon to use the `staffMembers.cloudcannon.structures.yml` file in that folder.\n\n```yaml\n_structures_from_glob:\n - '/.cloudcannon/structures/staffMembers.cloudcannon.structures.yml'\n```\n\n```yaml\nstaff:\n style: modal\n values:\n - label: Employee\n value:\n name:\n job_description:\n profile_picture:\n - label: Manager\n value:\n name:\n job_description:\n profile_picture:\n url:\n```"
10608
+ "description": "This key defines globs that filter which files CloudCannon should use for *Structure* 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.structures.yml`.\n\nYou can use this key anywhere you would use the `_structures` key in the configuration cascade.\n\nPlease see our documentation on [values_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/structure/values_from_glob/) for defining individual\n*Structure* values in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have several *Structure Configuration Files* in the `.cloudcannon/structures/` folder. The value of the `_structures_from_glob` key tells CloudCannon to use the `staffMembers.cloudcannon.structures.yml` file in that folder.\n\n```yaml\n_structures_from_glob:\n - '/.cloudcannon/structures/staffMembers.cloudcannon.structures.yml'\n```\n\n```yaml\nstaff:\n style: modal\n values:\n - label: Employee\n value:\n name:\n job_description:\n profile_picture:\n - label: Manager\n value:\n name:\n job_description:\n profile_picture:\n url:\n```",
10609
+ "markdownDescription": "This key defines globs that filter which files CloudCannon should use for *Structure* 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.structures.yml`.\n\nYou can use this key anywhere you would use the `_structures` key in the configuration cascade.\n\nPlease see our documentation on [values_from_glob](https://cloudcannon.com/documentation/developer-reference/configuration-file/types/structure/values_from_glob/) for defining individual\n*Structure* values in a split *Configuration File*.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we have several *Structure Configuration Files* in the `.cloudcannon/structures/` folder. The value of the `_structures_from_glob` key tells CloudCannon to use the `staffMembers.cloudcannon.structures.yml` file in that folder.\n\n```yaml\n_structures_from_glob:\n - '/.cloudcannon/structures/staffMembers.cloudcannon.structures.yml'\n```\n\n```yaml\nstaff:\n style: modal\n values:\n - label: Employee\n value:\n name:\n job_description:\n profile_picture:\n - label: Manager\n value:\n name:\n job_description:\n profile_picture:\n url:\n```"
10296
10610
  },
10297
10611
  "entries_comment": {
10298
10612
  "description": "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```",