{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/cloudcannon-configuration-inputs/latest.json",
  "title": "",
  "x-lintel": {
    "source": "https://github.com/cloudcannon/configuration-types/releases/latest/download/cloudcannon-inputs.schema.json",
    "sourceSha256": "3739f7ff03d25973d6d98b8b5a1b88d73a6a21c5551926d579f5a3f6f9a77809",
    "fileMatch": [
      "cloudcannon.inputs.yml",
      "cloudcannon.inputs.yaml",
      "cloudcannon.inputs.json",
      "*.cloudcannon.inputs.yml",
      "*.cloudcannon.inputs.yaml",
      "*.cloudcannon.inputs.json"
    ],
    "parsers": [
      "json",
      "yaml"
    ]
  },
  "documented": false,
  "$defs": {
    "Input": {
      "anyOf": [
        {
          "oneOf": [
            {
              "$ref": "#/$defs/TextInput"
            },
            {
              "$ref": "#/$defs/TextareaInput"
            },
            {
              "$ref": "#/$defs/CodeInput"
            },
            {
              "$ref": "#/$defs/ColorInput"
            },
            {
              "$ref": "#/$defs/BooleanInput"
            },
            {
              "$ref": "#/$defs/NumberInput"
            },
            {
              "$ref": "#/$defs/RangeInput"
            },
            {
              "$ref": "#/$defs/RichTextInput"
            },
            {
              "$ref": "#/$defs/DateInput"
            },
            {
              "$ref": "#/$defs/TimeInput"
            },
            {
              "$ref": "#/$defs/FileInput"
            },
            {
              "$ref": "#/$defs/UrlInput"
            },
            {
              "$ref": "#/$defs/SelectInput"
            },
            {
              "$ref": "#/$defs/MultiselectInput"
            },
            {
              "$ref": "#/$defs/ChoiceInput"
            },
            {
              "$ref": "#/$defs/MultichoiceInput"
            },
            {
              "$ref": "#/$defs/ObjectInput"
            },
            {
              "$ref": "#/$defs/ArrayInput"
            },
            {
              "$ref": "#/$defs/AutoInput"
            }
          ],
          "title": "Known Input",
          "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```",
          "documented": true,
          "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```"
        },
        {
          "$ref": "#/$defs/UnknownInput"
        }
      ],
      "title": "Input",
      "documented": true,
      "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```",
      "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```"
    },
    "TextInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "enum": [
            "text",
            "email",
            "disabled",
            "pinterest",
            "facebook",
            "twitter",
            "github",
            "instagram"
          ],
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "placeholder": {
              "description": "This key defines the text shown when this input has no value.\n\n## Examples\n\nIn this example, we have configured a placeholder for a *Text Input*.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    options:\n      placeholder: Enter a title\n```",
              "type": "string",
              "documented": true,
              "title": "placeholder",
              "markdownDescription": "This key defines the text shown when this input has no value.\n\n## Examples\n\nIn this example, we have configured a placeholder for a *Text Input*.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    options:\n      placeholder: Enter a title\n```"
            },
            "icon": {
              "description": "This key defines the icon shown beside the input.\n\n## Examples\n\nIn this example, we have configured an icon for the *Text Input* `title`.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    options:\n      icon: title\n```",
              "allOf": [
                {
                  "$ref": "#/$defs/icon"
                }
              ],
              "documented": true,
              "title": "icon",
              "markdownDescription": "This key defines the icon shown beside the input.\n\n## Examples\n\nIn this example, we have configured an icon for the *Text Input* `title`.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    options:\n      icon: title\n```"
            },
            "icon_color": {
              "allOf": [
                {
                  "$ref": "#/$defs/PreviewEntries"
                }
              ],
              "documented": true,
              "title": "icon_color",
              "description": "This key defines the color of the icon displayed beside a *Text Input*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon color for a text input with an array of values to provide fallback options. CloudCannon will use the value of `icon_color` first, then fall back to the static hex color value.\n\n```yaml\n_inputs:\n  email_address:\n    type: text\n    label: Email\n    options:\n      icon: email\n      icon_color:\n        - key: icon_color\n        - text: '#2196F3'\n```\n\nIn this example, we have configured the icon color to use a static CSS color value.\n\n```yaml\n_inputs:\n  phone_number:\n    type: text\n    label: Phone\n    options:\n      icon: phone\n      icon_color:\n        - text: 'blue'\n```",
              "markdownDescription": "This key defines the color of the icon displayed beside a *Text Input*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon color for a text input with an array of values to provide fallback options. CloudCannon will use the value of `icon_color` first, then fall back to the static hex color value.\n\n```yaml\n_inputs:\n  email_address:\n    type: text\n    label: Email\n    options:\n      icon: email\n      icon_color:\n        - key: icon_color\n        - text: '#2196F3'\n```\n\nIn this example, we have configured the icon color to use a static CSS color value.\n\n```yaml\n_inputs:\n  phone_number:\n    type: text\n    label: Phone\n    options:\n      icon: phone\n      icon_color:\n        - text: 'blue'\n```"
            },
            "icon_background_color": {
              "allOf": [
                {
                  "$ref": "#/$defs/PreviewEntries"
                }
              ],
              "documented": true,
              "title": "icon_background_color",
              "description": "This key defines the background color of the icon displayed beside a *Text Input*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon background color for a text input with an array of values to provide fallback options. CloudCannon will use the value of `icon_bg_color` first, then fall back to the static hex color value.\n\n```yaml\n_inputs:\n  email_address:\n    type: text\n    label: Email\n    options:\n      icon: email\n      icon_background_color:\n        - key: icon_bg_color\n        - text: '#e3f2fd'\n```\n\nIn this example, we have configured the icon background color to use a static CSS color value.\n\n```yaml\n_inputs:\n  phone_number:\n    type: text\n    label: Phone\n    options:\n      icon: phone\n      icon_background_color:\n        - text: 'lightblue'\n```",
              "markdownDescription": "This key defines the background color of the icon displayed beside a *Text Input*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon background color for a text input with an array of values to provide fallback options. CloudCannon will use the value of `icon_bg_color` first, then fall back to the static hex color value.\n\n```yaml\n_inputs:\n  email_address:\n    type: text\n    label: Email\n    options:\n      icon: email\n      icon_background_color:\n        - key: icon_bg_color\n        - text: '#e3f2fd'\n```\n\nIn this example, we have configured the icon background color to use a static CSS color value.\n\n```yaml\n_inputs:\n  phone_number:\n    type: text\n    label: Phone\n    options:\n      icon: phone\n      icon_background_color:\n        - text: 'lightblue'\n```"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Text Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.comment": {
      "description": "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```",
      "type": "string",
      "documented": true,
      "title": "comment",
      "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```"
    },
    "type._inputs.*.context": {
      "type": "object",
      "properties": {
        "content": {
          "description": "This key defines the text content inside the context box.\n\nCloudCannon supports a limited selection of Markdown formatting for the value of this key: links, headings, bold, italic, subscript, superscript, and\ninline code.\n\nThis key is required for the `context` object to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to provide detailed guidance for our `blog_tags` Input.\n\n```yaml\n_inputs:\n  blog_tags:\n    type: multiselect\n    label: Blog Tags\n    context:\n      title: Tag Guidelines\n      icon: help\n      content: |\n        # Tag Guidelines\n\n        Choose 3-5 relevant tags that best describe this article. Tags help readers find related content and improve SEO.\n\n        **Good examples:** technology, web development, tutorials\n        **Avoid:** generic terms like \"blog\" or \"article\"\n```",
          "type": "string",
          "documented": true,
          "title": "content",
          "markdownDescription": "This key defines the text content inside the context box.\n\nCloudCannon supports a limited selection of Markdown formatting for the value of this key: links, headings, bold, italic, subscript, superscript, and\ninline code.\n\nThis key is required for the `context` object to function.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to provide detailed guidance for our `blog_tags` Input.\n\n```yaml\n_inputs:\n  blog_tags:\n    type: multiselect\n    label: Blog Tags\n    context:\n      title: Tag Guidelines\n      icon: help\n      content: |\n        # Tag Guidelines\n\n        Choose 3-5 relevant tags that best describe this article. Tags help readers find related content and improve SEO.\n\n        **Good examples:** technology, web development, tutorials\n        **Avoid:** generic terms like \"blog\" or \"article\"\n```"
        },
        "open": {
          "description": "This key defines whether the context box is open to display text content by default.\n\nBy default, this key is `false` (i.e., closed).\n\n## Examples\n\nIn this example, we want the context box to be open by default so users can immediately see the help information.\n\n```yaml\n_inputs:\n  seo_description:\n    type: text\n    label: SEO Description\n    context:\n      open: true\n      title: SEO Guidelines\n      icon: info\n      content: Keep descriptions between 150-160 characters for optimal search engine display.\n```",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "open",
          "markdownDescription": "This key defines whether the context box is open to display text content by default.\n\nBy default, this key is `false` (i.e., closed).\n\n## Examples\n\nIn this example, we want the context box to be open by default so users can immediately see the help information.\n\n```yaml\n_inputs:\n  seo_description:\n    type: text\n    label: SEO Description\n    context:\n      open: true\n      title: SEO Guidelines\n      icon: info\n      content: Keep descriptions between 150-160 characters for optimal search engine display.\n```"
        },
        "title": {
          "description": "This key defines the title of the context box.\n\n## Examples\n\nIn this example, we want to customize the context box title to be more descriptive for our `author_bio` Input.\n\n```yaml\n_inputs:\n  author_bio:\n    type: textarea\n    label: Author Biography\n    context:\n      title: Writing Guidelines\n      icon: edit\n      content: Write a brief, professional biography (2-3 sentences) that highlights your expertise and experience.\n```",
          "type": "string",
          "documented": true,
          "title": "title",
          "markdownDescription": "This key defines the title of the context box.\n\n## Examples\n\nIn this example, we want to customize the context box title to be more descriptive for our `author_bio` Input.\n\n```yaml\n_inputs:\n  author_bio:\n    type: textarea\n    label: Author Biography\n    context:\n      title: Writing Guidelines\n      icon: edit\n      content: Write a brief, professional biography (2-3 sentences) that highlights your expertise and experience.\n```"
        },
        "icon": {
          "description": "This key defines which icon appears next to the context box title.\n\nThe value must match an icon name from [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded) list.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to use a warning icon to draw attention to important information about our `file_upload` Input.\n\n```yaml\n_inputs:\n  file_upload:\n    type: file\n    label: Upload Document\n    context:\n      title: File Requirements\n      icon: warning\n      content: Maximum file size is 10MB.\n    options:\n      max_file_size: 10000\n```",
          "allOf": [
            {
              "$ref": "#/$defs/icon"
            }
          ],
          "documented": true,
          "title": "icon",
          "markdownDescription": "This key defines which icon appears next to the context box title.\n\nThe value must match an icon name from [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded) list.\n\nThis key has no default.\n\n## Examples\n\nIn this example, we want to use a warning icon to draw attention to important information about our `file_upload` Input.\n\n```yaml\n_inputs:\n  file_upload:\n    type: file\n    label: Upload Document\n    context:\n      title: File Requirements\n      icon: warning\n      content: Maximum file size is 10MB.\n    options:\n      max_file_size: 10000\n```"
        }
      },
      "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```",
      "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```",
      "documented": true,
      "title": "context",
      "additionalProperties": false
    },
    "icon": {
      "type": "string",
      "enum": [
        "123",
        "360",
        "10k",
        "10mp",
        "11mp",
        "12mp",
        "13mp",
        "14mp",
        "15mp",
        "16mp",
        "17mp",
        "18_up_rating",
        "18mp",
        "19mp",
        "1k",
        "1k_plus",
        "1x_mobiledata",
        "1x_mobiledata_badge",
        "20mp",
        "21mp",
        "22mp",
        "23mp",
        "24fps_select",
        "24mp",
        "2d",
        "2k",
        "2k_plus",
        "2mp",
        "30fps",
        "30fps_select",
        "3d",
        "3d_rotation",
        "3g_mobiledata",
        "3g_mobiledata_badge",
        "3k",
        "3k_plus",
        "3mp",
        "3p",
        "4g_mobiledata",
        "4g_mobiledata_badge",
        "4g_plus_mobiledata",
        "4k",
        "4k_plus",
        "4mp",
        "50mp",
        "5g",
        "5g_mobiledata_badge",
        "5k",
        "5k_plus",
        "5mp",
        "60fps",
        "60fps_select",
        "6_ft_apart",
        "6k",
        "6k_plus",
        "6mp",
        "7k",
        "7k_plus",
        "7mp",
        "8k",
        "8k_plus",
        "8mp",
        "9k",
        "9k_plus",
        "9mp",
        "abc",
        "ac_unit",
        "accessibility",
        "accessibility_new",
        "accessible",
        "accessible_forward",
        "accessible_menu",
        "account_balance",
        "account_balance_wallet",
        "account_box",
        "account_child",
        "account_child_invert",
        "account_circle",
        "account_circle_off",
        "account_tree",
        "action_key",
        "activity_zone",
        "acute",
        "ad",
        "ad_group",
        "ad_group_off",
        "ad_off",
        "ad_units",
        "adaptive_audio_mic",
        "adaptive_audio_mic_off",
        "adb",
        "add",
        "add_2",
        "add_a_photo",
        "add_ad",
        "add_alert",
        "add_box",
        "add_business",
        "add_call",
        "add_card",
        "add_chart",
        "add_circle",
        "add_column_left",
        "add_column_right",
        "add_comment",
        "add_diamond",
        "add_home",
        "add_home_work",
        "add_link",
        "add_location",
        "add_location_alt",
        "add_moderator",
        "add_notes",
        "add_photo_alternate",
        "add_reaction",
        "add_road",
        "add_row_above",
        "add_row_below",
        "add_shopping_cart",
        "add_task",
        "add_to_drive",
        "add_to_home_screen",
        "add_to_queue",
        "add_triangle",
        "adf_scanner",
        "adjust",
        "admin_meds",
        "admin_panel_settings",
        "ads_click",
        "agender",
        "agriculture",
        "air",
        "air_freshener",
        "air_purifier",
        "air_purifier_gen",
        "airline_seat_flat",
        "airline_seat_flat_angled",
        "airline_seat_individual_suite",
        "airline_seat_legroom_extra",
        "airline_seat_legroom_normal",
        "airline_seat_legroom_reduced",
        "airline_seat_recline_extra",
        "airline_seat_recline_normal",
        "airline_stops",
        "airlines",
        "airplane_ticket",
        "airplanemode_inactive",
        "airplay",
        "airport_shuttle",
        "airware",
        "airwave",
        "alarm",
        "alarm_add",
        "alarm_off",
        "alarm_on",
        "alarm_pause",
        "alarm_smart_wake",
        "album",
        "align_center",
        "align_end",
        "align_flex_center",
        "align_flex_end",
        "align_flex_start",
        "align_horizontal_center",
        "align_horizontal_left",
        "align_horizontal_right",
        "align_items_stretch",
        "align_justify_center",
        "align_justify_flex_end",
        "align_justify_flex_start",
        "align_justify_space_around",
        "align_justify_space_between",
        "align_justify_space_even",
        "align_justify_stretch",
        "align_self_stretch",
        "align_space_around",
        "align_space_between",
        "align_space_even",
        "align_start",
        "align_stretch",
        "align_vertical_bottom",
        "align_vertical_center",
        "align_vertical_top",
        "all_inbox",
        "all_inclusive",
        "all_match",
        "all_out",
        "allergies",
        "allergy",
        "alt_route",
        "alternate_email",
        "altitude",
        "ambulance",
        "amend",
        "amp_stories",
        "analytics",
        "anchor",
        "android",
        "animated_images",
        "animation",
        "aod",
        "aod_tablet",
        "aod_watch",
        "apartment",
        "api",
        "apk_document",
        "apk_install",
        "app_badging",
        "app_blocking",
        "app_registration",
        "apparel",
        "approval",
        "approval_delegation",
        "apps",
        "apps_outage",
        "aq",
        "aq_indoor",
        "ar_on_you",
        "ar_stickers",
        "architecture",
        "archive",
        "area_chart",
        "arming_countdown",
        "arrow_and_edge",
        "arrow_back",
        "arrow_back_2",
        "arrow_back_ios",
        "arrow_back_ios_new",
        "arrow_circle_down",
        "arrow_circle_left",
        "arrow_circle_right",
        "arrow_circle_up",
        "arrow_cool_down",
        "arrow_downward",
        "arrow_downward_alt",
        "arrow_drop_down",
        "arrow_drop_down_circle",
        "arrow_drop_up",
        "arrow_forward",
        "arrow_forward_ios",
        "arrow_insert",
        "arrow_left",
        "arrow_left_alt",
        "arrow_menu_close",
        "arrow_menu_open",
        "arrow_or_edge",
        "arrow_outward",
        "arrow_range",
        "arrow_right",
        "arrow_right_alt",
        "arrow_selector_tool",
        "arrow_split",
        "arrow_top_left",
        "arrow_top_right",
        "arrow_upload_progress",
        "arrow_upload_ready",
        "arrow_upward",
        "arrow_upward_alt",
        "arrow_warm_up",
        "arrows_input",
        "arrows_more_down",
        "arrows_more_up",
        "arrows_output",
        "arrows_outward",
        "art_track",
        "article",
        "article_person",
        "article_shortcut",
        "artist",
        "aspect_ratio",
        "assignment",
        "assignment_add",
        "assignment_ind",
        "assignment_late",
        "assignment_return",
        "assignment_returned",
        "assignment_turned_in",
        "assist_walker",
        "assistant_device",
        "assistant_direction",
        "assistant_navigation",
        "assistant_on_hub",
        "assured_workload",
        "asterisk",
        "atm",
        "atr",
        "attach_email",
        "attach_file",
        "attach_file_add",
        "attach_file_off",
        "attach_money",
        "attachment",
        "attractions",
        "attribution",
        "audio_description",
        "audio_file",
        "audio_video_receiver",
        "auto_awesome_mosaic",
        "auto_awesome_motion",
        "auto_delete",
        "auto_read_pause",
        "auto_read_play",
        "auto_stories",
        "auto_towing",
        "auto_transmission",
        "autofps_select",
        "automation",
        "autopause",
        "autoplay",
        "autorenew",
        "autostop",
        "av1",
        "av_timer",
        "avc",
        "avg_pace",
        "avg_time",
        "award_star",
        "azm",
        "baby_changing_station",
        "back_hand",
        "back_to_tab",
        "background_dot_large",
        "background_dot_small",
        "background_grid_small",
        "background_replace",
        "backlight_high",
        "backlight_high_off",
        "backlight_low",
        "backpack",
        "backspace",
        "backup",
        "backup_table",
        "badge",
        "badge_critical_battery",
        "bakery_dining",
        "balance",
        "balcony",
        "ballot",
        "bar_chart",
        "bar_chart_4_bars",
        "bar_chart_off",
        "barcode",
        "barcode_reader",
        "barcode_scanner",
        "barefoot",
        "batch_prediction",
        "bath_outdoor",
        "bath_private",
        "bath_public_large",
        "bathroom",
        "bathtub",
        "battery_0_bar",
        "battery_1_bar",
        "battery_2_bar",
        "battery_3_bar",
        "battery_4_bar",
        "battery_5_bar",
        "battery_6_bar",
        "battery_alert",
        "battery_android_0",
        "battery_android_1",
        "battery_android_2",
        "battery_android_3",
        "battery_android_4",
        "battery_android_5",
        "battery_android_6",
        "battery_android_alert",
        "battery_android_bolt",
        "battery_android_full",
        "battery_android_plus",
        "battery_android_question",
        "battery_android_share",
        "battery_android_shield",
        "battery_change",
        "battery_charging_20",
        "battery_charging_30",
        "battery_charging_50",
        "battery_charging_60",
        "battery_charging_80",
        "battery_charging_90",
        "battery_charging_full",
        "battery_error",
        "battery_full",
        "battery_full_alt",
        "battery_horiz_000",
        "battery_horiz_050",
        "battery_horiz_075",
        "battery_low",
        "battery_plus",
        "battery_profile",
        "battery_saver",
        "battery_share",
        "battery_status_good",
        "battery_unknown",
        "battery_very_low",
        "beach_access",
        "bed",
        "bedroom_baby",
        "bedroom_child",
        "bedroom_parent",
        "bedtime",
        "bedtime_off",
        "beenhere",
        "bento",
        "bia",
        "bid_landscape",
        "bid_landscape_disabled",
        "bigtop_updates",
        "bike_dock",
        "bike_lane",
        "bike_scooter",
        "biotech",
        "blanket",
        "blender",
        "blind",
        "blinds",
        "blinds_closed",
        "block",
        "blood_pressure",
        "bloodtype",
        "bluetooth",
        "bluetooth_connected",
        "bluetooth_disabled",
        "bluetooth_drive",
        "bluetooth_searching",
        "blur_circular",
        "blur_linear",
        "blur_medium",
        "blur_off",
        "blur_on",
        "blur_short",
        "boat_bus",
        "boat_railway",
        "body_fat",
        "body_system",
        "bolt",
        "bomb",
        "book",
        "book_2",
        "book_3",
        "book_4",
        "book_5",
        "book_6",
        "book_online",
        "book_ribbon",
        "bookmark",
        "bookmark_add",
        "bookmark_added",
        "bookmark_bag",
        "bookmark_check",
        "bookmark_flag",
        "bookmark_heart",
        "bookmark_manager",
        "bookmark_remove",
        "bookmark_star",
        "bookmarks",
        "books_movies_and_music",
        "border_all",
        "border_bottom",
        "border_clear",
        "border_color",
        "border_horizontal",
        "border_inner",
        "border_left",
        "border_outer",
        "border_right",
        "border_style",
        "border_top",
        "border_vertical",
        "borg",
        "bottom_app_bar",
        "bottom_drawer",
        "bottom_navigation",
        "bottom_panel_close",
        "bottom_panel_open",
        "bottom_right_click",
        "bottom_sheets",
        "box",
        "box_add",
        "box_edit",
        "boy",
        "brand_awareness",
        "brand_family",
        "branding_watermark",
        "breakfast_dining",
        "breaking_news",
        "breaking_news_alt_1",
        "breastfeeding",
        "brick",
        "brightness_1",
        "brightness_2",
        "brightness_3",
        "brightness_4",
        "brightness_5",
        "brightness_6",
        "brightness_7",
        "brightness_alert",
        "brightness_auto",
        "brightness_empty",
        "brightness_medium",
        "bring_your_own_ip",
        "broadcast_on_home",
        "broadcast_on_personal",
        "broken_image",
        "browse",
        "browse_activity",
        "browse_gallery",
        "browser_updated",
        "brunch_dining",
        "brush",
        "bubble",
        "bubble_chart",
        "bubbles",
        "bug_report",
        "build",
        "build_circle",
        "bungalow",
        "burst_mode",
        "bus_alert",
        "bus_railway",
        "business_center",
        "business_chip",
        "business_messages",
        "buttons_alt",
        "cabin",
        "cable",
        "cable_car",
        "cached",
        "cadence",
        "cake",
        "cake_add",
        "calculate",
        "calendar_add_on",
        "calendar_apps_script",
        "calendar_clock",
        "calendar_month",
        "calendar_today",
        "calendar_view_day",
        "calendar_view_month",
        "calendar_view_week",
        "call",
        "call_end",
        "call_log",
        "call_made",
        "call_merge",
        "call_missed",
        "call_missed_outgoing",
        "call_quality",
        "call_received",
        "call_split",
        "call_to_action",
        "camera",
        "camera_front",
        "camera_indoor",
        "camera_outdoor",
        "camera_rear",
        "camera_roll",
        "camera_video",
        "cameraswitch",
        "campaign",
        "camping",
        "cancel",
        "cancel_presentation",
        "cancel_schedule_send",
        "candle",
        "candlestick_chart",
        "cannabis",
        "captive_portal",
        "capture",
        "car_crash",
        "car_defrost_left",
        "car_defrost_low_left",
        "car_defrost_low_right",
        "car_defrost_mid_low_left",
        "car_defrost_mid_right",
        "car_defrost_right",
        "car_fan_low_left",
        "car_fan_low_mid_left",
        "car_fan_low_right",
        "car_fan_mid_left",
        "car_fan_mid_low_right",
        "car_fan_mid_right",
        "car_fan_recirculate",
        "car_gear",
        "car_lock",
        "car_mirror_heat",
        "car_rental",
        "car_repair",
        "car_tag",
        "card_membership",
        "card_travel",
        "cardio_load",
        "cardiology",
        "cards",
        "cards_star",
        "carpenter",
        "carry_on_bag",
        "carry_on_bag_checked",
        "carry_on_bag_inactive",
        "carry_on_bag_question",
        "cases",
        "casino",
        "cast",
        "cast_connected",
        "cast_for_education",
        "cast_pause",
        "cast_warning",
        "castle",
        "category",
        "category_search",
        "celebration",
        "cell_merge",
        "cell_tower",
        "cell_wifi",
        "center_focus_strong",
        "center_focus_weak",
        "chair",
        "chair_alt",
        "chalet",
        "change_circle",
        "change_history",
        "charger",
        "charging_station",
        "chart_data",
        "chat",
        "chat_add_on",
        "chat_apps_script",
        "chat_bubble",
        "chat_error",
        "chat_info",
        "chat_paste_go",
        "chat_paste_go_2",
        "check",
        "check_box",
        "check_box_outline_blank",
        "check_circle",
        "check_in_out",
        "check_indeterminate_small",
        "check_small",
        "checkbook",
        "checked_bag",
        "checked_bag_question",
        "checklist",
        "checklist_rtl",
        "checkroom",
        "cheer",
        "chef_hat",
        "chess",
        "chess_pawn",
        "chevron_backward",
        "chevron_forward",
        "chevron_left",
        "chevron_right",
        "child_care",
        "child_friendly",
        "chip_extraction",
        "chips",
        "chrome_reader_mode",
        "chromecast_2",
        "chromecast_device",
        "chronic",
        "church",
        "cinematic_blur",
        "circle",
        "circle_notifications",
        "circles",
        "circles_ext",
        "clarify",
        "clean_hands",
        "cleaning",
        "cleaning_bucket",
        "cleaning_services",
        "clear_all",
        "clear_day",
        "climate_mini_split",
        "clinical_notes",
        "clock_arrow_down",
        "clock_arrow_up",
        "clock_loader_10",
        "clock_loader_20",
        "clock_loader_40",
        "clock_loader_60",
        "clock_loader_80",
        "clock_loader_90",
        "close",
        "close_fullscreen",
        "close_small",
        "closed_caption",
        "closed_caption_add",
        "closed_caption_disabled",
        "cloud",
        "cloud_alert",
        "cloud_circle",
        "cloud_done",
        "cloud_download",
        "cloud_lock",
        "cloud_off",
        "cloud_sync",
        "cloud_upload",
        "co2",
        "co_present",
        "code",
        "code_blocks",
        "code_off",
        "coffee",
        "coffee_maker",
        "cognition",
        "cognition_2",
        "collapse_all",
        "collapse_content",
        "collections_bookmark",
        "colorize",
        "colors",
        "combine_columns",
        "comedy_mask",
        "comic_bubble",
        "comment",
        "comment_bank",
        "comments_disabled",
        "commit",
        "communication",
        "communities",
        "commute",
        "compare",
        "compare_arrows",
        "compass_calibration",
        "component_exchange",
        "compost",
        "compress",
        "computer",
        "computer_arrow_up",
        "computer_cancel",
        "concierge",
        "conditions",
        "confirmation_number",
        "congenital",
        "connect_without_contact",
        "connected_tv",
        "connecting_airports",
        "construction",
        "contact_emergency",
        "contact_mail",
        "contact_page",
        "contact_phone",
        "contact_support",
        "contactless",
        "contactless_off",
        "contacts",
        "contacts_product",
        "content_copy",
        "content_cut",
        "content_paste",
        "content_paste_go",
        "content_paste_off",
        "content_paste_search",
        "contextual_token",
        "contextual_token_add",
        "contract",
        "contract_delete",
        "contract_edit",
        "contrast",
        "contrast_circle",
        "contrast_rtl_off",
        "contrast_square",
        "control_camera",
        "control_point_duplicate",
        "controller_gen",
        "conversion_path",
        "conversion_path_off",
        "convert_to_text",
        "conveyor_belt",
        "cookie",
        "cookie_off",
        "cooking",
        "cool_to_dry",
        "copy_all",
        "copyright",
        "coronavirus",
        "corporate_fare",
        "cottage",
        "counter_0",
        "counter_1",
        "counter_2",
        "counter_3",
        "counter_4",
        "counter_5",
        "counter_6",
        "counter_7",
        "counter_8",
        "counter_9",
        "countertops",
        "create_new_folder",
        "credit_card",
        "credit_card_clock",
        "credit_card_gear",
        "credit_card_heart",
        "credit_card_off",
        "credit_score",
        "crib",
        "crisis_alert",
        "crop",
        "crop_16_9",
        "crop_3_2",
        "crop_5_4",
        "crop_7_5",
        "crop_9_16",
        "crop_free",
        "crop_landscape",
        "crop_portrait",
        "crop_rotate",
        "crop_square",
        "crossword",
        "crowdsource",
        "crown",
        "cruelty_free",
        "css",
        "csv",
        "currency_bitcoin",
        "currency_exchange",
        "currency_franc",
        "currency_lira",
        "currency_pound",
        "currency_ruble",
        "currency_rupee",
        "currency_rupee_circle",
        "currency_yen",
        "currency_yuan",
        "curtains",
        "curtains_closed",
        "custom_typography",
        "cycle",
        "cyclone",
        "dangerous",
        "dark_mode",
        "dashboard",
        "dashboard_2",
        "dashboard_customize",
        "data_alert",
        "data_array",
        "data_check",
        "data_exploration",
        "data_info_alert",
        "data_loss_prevention",
        "data_object",
        "data_saver_on",
        "data_table",
        "data_thresholding",
        "data_usage",
        "database",
        "database_off",
        "database_search",
        "database_upload",
        "dataset",
        "dataset_linked",
        "date_range",
        "deblur",
        "deceased",
        "decimal_decrease",
        "decimal_increase",
        "deck",
        "dehaze",
        "delete",
        "delete_forever",
        "delete_history",
        "delete_sweep",
        "delivery_truck_bolt",
        "delivery_truck_speed",
        "demography",
        "density_large",
        "density_medium",
        "density_small",
        "dentistry",
        "departure_board",
        "deployed_code",
        "deployed_code_account",
        "deployed_code_alert",
        "deployed_code_history",
        "deployed_code_update",
        "dermatology",
        "description",
        "deselect",
        "design_services",
        "desk",
        "deskphone",
        "desktop_access_disabled",
        "desktop_cloud",
        "desktop_cloud_stack",
        "desktop_landscape",
        "desktop_landscape_add",
        "desktop_mac",
        "desktop_portrait",
        "desktop_windows",
        "destruction",
        "details",
        "detection_and_zone",
        "detector",
        "detector_alarm",
        "detector_battery",
        "detector_co",
        "detector_offline",
        "detector_smoke",
        "detector_status",
        "developer_board",
        "developer_board_off",
        "developer_guide",
        "developer_mode",
        "developer_mode_tv",
        "device_band",
        "device_hub",
        "device_thermostat",
        "device_unknown",
        "devices",
        "devices_fold",
        "devices_fold_2",
        "devices_off",
        "devices_other",
        "devices_wearables",
        "dew_point",
        "diagnosis",
        "diagonal_line",
        "dialer_sip",
        "dialogs",
        "dialpad",
        "diamond",
        "dictionary",
        "difference",
        "digital_out_of_home",
        "digital_wellbeing",
        "dining",
        "dinner_dining",
        "directions",
        "directions_alt",
        "directions_alt_off",
        "directions_bike",
        "directions_boat",
        "directions_bus",
        "directions_car",
        "directions_off",
        "directions_railway",
        "directions_railway_2",
        "directions_run",
        "directions_subway",
        "directions_walk",
        "directory_sync",
        "dirty_lens",
        "disabled_by_default",
        "disabled_visible",
        "disc_full",
        "discover_tune",
        "dishwasher",
        "dishwasher_gen",
        "display_external_input",
        "display_settings",
        "distance",
        "diversity_1",
        "diversity_2",
        "diversity_3",
        "diversity_4",
        "dns",
        "do_not_disturb_off",
        "do_not_disturb_on",
        "do_not_disturb_on_total_silence",
        "do_not_step",
        "do_not_touch",
        "dock",
        "dock_to_bottom",
        "dock_to_left",
        "dock_to_right",
        "docs",
        "docs_add_on",
        "docs_apps_script",
        "document_scanner",
        "document_search",
        "domain",
        "domain_add",
        "domain_disabled",
        "domain_verification",
        "domain_verification_off",
        "domino_mask",
        "done_all",
        "done_outline",
        "donut_large",
        "donut_small",
        "door_back",
        "door_front",
        "door_open",
        "door_sensor",
        "door_sliding",
        "doorbell",
        "doorbell_3p",
        "doorbell_chime",
        "double_arrow",
        "downhill_skiing",
        "download",
        "download_2",
        "download_done",
        "download_for_offline",
        "downloading",
        "draft",
        "draft_orders",
        "drafts",
        "drag_click",
        "drag_handle",
        "drag_indicator",
        "drag_pan",
        "draw",
        "draw_abstract",
        "draw_collage",
        "dresser",
        "drive_export",
        "drive_file_move",
        "drive_folder_upload",
        "dropdown",
        "dropper_eye",
        "dry",
        "dry_cleaning",
        "dual_screen",
        "duo",
        "dvr",
        "dynamic_feed",
        "dynamic_form",
        "e911_avatar",
        "e911_emergency",
        "e_mobiledata",
        "e_mobiledata_badge",
        "ear_sound",
        "earbud_case",
        "earbud_left",
        "earbud_right",
        "earbuds",
        "earbuds_2",
        "earbuds_battery",
        "early_on",
        "earthquake",
        "east",
        "ecg",
        "ecg_heart",
        "eco",
        "eda",
        "edgesensor_high",
        "edgesensor_low",
        "edit",
        "edit_arrow_down",
        "edit_arrow_up",
        "edit_attributes",
        "edit_audio",
        "edit_calendar",
        "edit_document",
        "edit_location",
        "edit_location_alt",
        "edit_note",
        "edit_notifications",
        "edit_off",
        "edit_road",
        "edit_square",
        "editor_choice",
        "egg",
        "egg_alt",
        "eject",
        "elderly",
        "elderly_woman",
        "electric_bike",
        "electric_bolt",
        "electric_car",
        "electric_meter",
        "electric_moped",
        "electric_rickshaw",
        "electric_scooter",
        "electrical_services",
        "elevation",
        "elevator",
        "emergency",
        "emergency_heat",
        "emergency_heat_2",
        "emergency_home",
        "emergency_recording",
        "emergency_share",
        "emergency_share_off",
        "emoji_food_beverage",
        "emoji_language",
        "emoji_nature",
        "emoji_objects",
        "emoji_people",
        "emoji_symbols",
        "emoji_transportation",
        "emoticon",
        "empty_dashboard",
        "enable",
        "encrypted",
        "encrypted_add",
        "encrypted_add_circle",
        "encrypted_minus_circle",
        "encrypted_off",
        "endocrinology",
        "energy",
        "energy_program_saving",
        "energy_program_time_used",
        "energy_savings_leaf",
        "engineering",
        "enhanced_encryption",
        "ent",
        "enterprise",
        "enterprise_off",
        "equal",
        "equalizer",
        "eraser_size_1",
        "eraser_size_2",
        "eraser_size_3",
        "eraser_size_4",
        "eraser_size_5",
        "error",
        "error_med",
        "escalator",
        "escalator_warning",
        "euro",
        "euro_symbol",
        "ev_mobiledata_badge",
        "ev_shadow",
        "ev_shadow_add",
        "ev_shadow_minus",
        "ev_station",
        "event",
        "event_available",
        "event_busy",
        "event_list",
        "event_note",
        "event_repeat",
        "event_seat",
        "event_upcoming",
        "exclamation",
        "exercise",
        "exit_to_app",
        "expand",
        "expand_all",
        "expand_circle_down",
        "expand_circle_right",
        "expand_circle_up",
        "expand_content",
        "expansion_panels",
        "experiment",
        "explicit",
        "explore",
        "explore_nearby",
        "explore_off",
        "explosion",
        "export_notes",
        "exposure",
        "exposure_neg_1",
        "exposure_neg_2",
        "exposure_plus_1",
        "exposure_plus_2",
        "exposure_zero",
        "extension",
        "extension_off",
        "eye_tracking",
        "eyeglasses",
        "eyeglasses_2",
        "face",
        "face_2",
        "face_3",
        "face_4",
        "face_5",
        "face_6",
        "face_down",
        "face_left",
        "face_nod",
        "face_retouching_off",
        "face_right",
        "face_shake",
        "face_up",
        "fact_check",
        "factory",
        "falling",
        "familiar_face_and_zone",
        "family_history",
        "family_home",
        "family_link",
        "family_restroom",
        "family_star",
        "fan_focus",
        "fan_indirect",
        "farsight_digital",
        "fast_forward",
        "fast_rewind",
        "fastfood",
        "faucet",
        "favorite",
        "fax",
        "feature_search",
        "featured_play_list",
        "featured_seasonal_and_gifts",
        "featured_video",
        "feedback",
        "female",
        "femur",
        "femur_alt",
        "fence",
        "fertile",
        "festival",
        "fiber_dvr",
        "fiber_manual_record",
        "fiber_new",
        "fiber_pin",
        "fiber_smart_record",
        "file_copy",
        "file_copy_off",
        "file_download_off",
        "file_export",
        "file_json",
        "file_map",
        "file_map_stack",
        "file_open",
        "file_png",
        "file_present",
        "file_save",
        "file_save_off",
        "file_upload_off",
        "files",
        "filter",
        "filter_1",
        "filter_2",
        "filter_3",
        "filter_4",
        "filter_5",
        "filter_6",
        "filter_7",
        "filter_8",
        "filter_9",
        "filter_9_plus",
        "filter_alt",
        "filter_alt_off",
        "filter_arrow_right",
        "filter_b_and_w",
        "filter_center_focus",
        "filter_drama",
        "filter_frames",
        "filter_hdr",
        "filter_list",
        "filter_list_off",
        "filter_none",
        "filter_retrolux",
        "filter_tilt_shift",
        "filter_vintage",
        "finance",
        "finance_chip",
        "finance_mode",
        "find_in_page",
        "find_replace",
        "fingerprint",
        "fingerprint_off",
        "fire_extinguisher",
        "fire_hydrant",
        "fire_truck",
        "fireplace",
        "first_page",
        "fit_page",
        "fit_page_height",
        "fit_page_width",
        "fit_screen",
        "fit_width",
        "fitness_center",
        "fitness_tracker",
        "flag",
        "flag_2",
        "flag_check",
        "flag_circle",
        "flaky",
        "flare",
        "flash_auto",
        "flash_off",
        "flash_on",
        "flashlight_off",
        "flashlight_on",
        "flatware",
        "flex_direction",
        "flex_no_wrap",
        "flex_wrap",
        "flight",
        "flight_class",
        "flight_land",
        "flight_takeoff",
        "flights_and_hotels",
        "flip",
        "flip_camera_android",
        "flip_camera_ios",
        "flip_to_back",
        "flip_to_front",
        "float_landscape_2",
        "float_portrait_2",
        "flood",
        "floor",
        "floor_lamp",
        "flowchart",
        "flowsheet",
        "fluid",
        "fluid_balance",
        "fluid_med",
        "fluorescent",
        "flutter",
        "flutter_dash",
        "flyover",
        "fmd_bad",
        "foggy",
        "folded_hands",
        "folder",
        "folder_check",
        "folder_check_2",
        "folder_code",
        "folder_copy",
        "folder_data",
        "folder_delete",
        "folder_eye",
        "folder_info",
        "folder_limited",
        "folder_managed",
        "folder_match",
        "folder_off",
        "folder_open",
        "folder_shared",
        "folder_special",
        "folder_supervised",
        "folder_zip",
        "follow_the_signs",
        "font_download",
        "font_download_off",
        "food_bank",
        "foot_bones",
        "footprint",
        "for_you",
        "forest",
        "fork_left",
        "fork_right",
        "fork_spoon",
        "forklift",
        "format_align_center",
        "format_align_justify",
        "format_align_left",
        "format_align_right",
        "format_bold",
        "format_clear",
        "format_color_fill",
        "format_color_reset",
        "format_color_text",
        "format_h1",
        "format_h2",
        "format_h3",
        "format_h4",
        "format_h5",
        "format_h6",
        "format_image_left",
        "format_image_right",
        "format_indent_decrease",
        "format_indent_increase",
        "format_ink_highlighter",
        "format_italic",
        "format_letter_spacing",
        "format_letter_spacing_2",
        "format_letter_spacing_standard",
        "format_letter_spacing_wide",
        "format_letter_spacing_wider",
        "format_line_spacing",
        "format_list_bulleted",
        "format_list_bulleted_add",
        "format_list_numbered",
        "format_list_numbered_rtl",
        "format_overline",
        "format_paint",
        "format_paragraph",
        "format_quote",
        "format_quote_off",
        "format_shapes",
        "format_size",
        "format_strikethrough",
        "format_text_clip",
        "format_text_overflow",
        "format_text_wrap",
        "format_textdirection_l_to_r",
        "format_textdirection_r_to_l",
        "format_textdirection_vertical",
        "format_underlined",
        "format_underlined_squiggle",
        "forms_add_on",
        "forms_apps_script",
        "fort",
        "forum",
        "forward",
        "forward_10",
        "forward_30",
        "forward_5",
        "forward_circle",
        "forward_media",
        "forward_to_inbox",
        "foundation",
        "fragrance",
        "frame_inspect",
        "frame_person",
        "frame_person_mic",
        "frame_person_off",
        "frame_reload",
        "frame_source",
        "free_cancellation",
        "front_hand",
        "front_loader",
        "full_coverage",
        "full_hd",
        "full_stacked_bar_chart",
        "fullscreen",
        "fullscreen_exit",
        "fullscreen_portrait",
        "function",
        "functions",
        "funicular",
        "g_mobiledata",
        "g_mobiledata_badge",
        "g_translate",
        "gallery_thumbnail",
        "gamepad",
        "garage",
        "garage_door",
        "garage_home",
        "garden_cart",
        "gas_meter",
        "gastroenterology",
        "gate",
        "gavel",
        "general_device",
        "genetics",
        "genres",
        "gesture",
        "gesture_select",
        "gif",
        "gif_2",
        "gif_box",
        "girl",
        "gite",
        "glass_cup",
        "globe",
        "globe_asia",
        "globe_book",
        "globe_location_pin",
        "globe_uk",
        "glucose",
        "glyphs",
        "go_to_line",
        "golf_course",
        "gondola_lift",
        "google_home_devices",
        "google_tv_remote",
        "google_wifi",
        "gpp_bad",
        "gpp_maybe",
        "gradient",
        "grading",
        "grain",
        "graph_1",
        "graph_2",
        "graph_3",
        "graph_4",
        "graph_5",
        "graph_6",
        "graph_7",
        "graphic_eq",
        "grass",
        "grid_3x3",
        "grid_3x3_off",
        "grid_4x4",
        "grid_goldenratio",
        "grid_guides",
        "grid_off",
        "grid_on",
        "grid_view",
        "grocery",
        "group",
        "group_add",
        "group_off",
        "group_remove",
        "group_search",
        "group_work",
        "grouped_bar_chart",
        "groups",
        "groups_2",
        "groups_3",
        "guardian",
        "gynecology",
        "h_mobiledata",
        "h_mobiledata_badge",
        "h_plus_mobiledata",
        "h_plus_mobiledata_badge",
        "hail",
        "hallway",
        "hand_bones",
        "hand_gesture",
        "hand_gesture_off",
        "handheld_controller",
        "handshake",
        "handyman",
        "hangout_video",
        "hangout_video_off",
        "hard_disk",
        "hard_drive",
        "hard_drive_2",
        "hardware",
        "hd",
        "hdr_auto",
        "hdr_auto_select",
        "hdr_enhanced_select",
        "hdr_off",
        "hdr_off_select",
        "hdr_on",
        "hdr_on_select",
        "hdr_plus",
        "hdr_plus_off",
        "hdr_strong",
        "hdr_weak",
        "head_mounted_device",
        "headphones",
        "headphones_battery",
        "headset_mic",
        "headset_off",
        "healing",
        "health_and_beauty",
        "health_and_safety",
        "health_metrics",
        "heap_snapshot_large",
        "heap_snapshot_multiple",
        "heap_snapshot_thumbnail",
        "hearing",
        "hearing_aid",
        "hearing_aid_disabled",
        "hearing_aid_disabled_left",
        "hearing_aid_left",
        "hearing_disabled",
        "heart_broken",
        "heart_check",
        "heart_minus",
        "heart_plus",
        "heat",
        "heat_pump",
        "heat_pump_balance",
        "height",
        "helicopter",
        "help",
        "help_center",
        "help_clinic",
        "hematology",
        "hevc",
        "hexagon",
        "hide",
        "hide_image",
        "hide_source",
        "high_density",
        "high_quality",
        "high_res",
        "highlight",
        "highlight_keyboard_focus",
        "highlight_mouse_cursor",
        "highlight_text_cursor",
        "highlighter_size_1",
        "highlighter_size_2",
        "highlighter_size_3",
        "highlighter_size_4",
        "highlighter_size_5",
        "hiking",
        "history",
        "history_2",
        "history_edu",
        "history_off",
        "history_toggle_off",
        "hive",
        "hls",
        "hls_off",
        "holiday_village",
        "home",
        "home_and_garden",
        "home_app_logo",
        "home_health",
        "home_improvement_and_tools",
        "home_iot_device",
        "home_max",
        "home_max_dots",
        "home_mini",
        "home_pin",
        "home_repair_service",
        "home_speaker",
        "home_storage",
        "home_work",
        "horizontal_distribute",
        "horizontal_rule",
        "horizontal_split",
        "host",
        "hot_tub",
        "hotel",
        "hotel_class",
        "hourglass",
        "hourglass_arrow_down",
        "hourglass_arrow_up",
        "hourglass_bottom",
        "hourglass_disabled",
        "hourglass_empty",
        "hourglass_pause",
        "hourglass_top",
        "house",
        "house_siding",
        "house_with_shield",
        "houseboat",
        "household_supplies",
        "hov",
        "how_to_reg",
        "how_to_vote",
        "hr_resting",
        "html",
        "http",
        "hub",
        "humerus",
        "humerus_alt",
        "humidity_high",
        "humidity_indoor",
        "humidity_low",
        "humidity_mid",
        "humidity_percentage",
        "hvac",
        "hvac_max_defrost",
        "ice_skating",
        "icecream",
        "id_card",
        "identity_aware_proxy",
        "identity_platform",
        "ifl",
        "iframe",
        "iframe_off",
        "image",
        "image_arrow_up",
        "image_aspect_ratio",
        "image_search",
        "imagesearch_roller",
        "imagesmode",
        "immunology",
        "import_contacts",
        "important_devices",
        "in_home_mode",
        "inactive_order",
        "inbox",
        "inbox_customize",
        "inbox_text",
        "inbox_text_asterisk",
        "inbox_text_person",
        "inbox_text_share",
        "incomplete_circle",
        "indeterminate_check_box",
        "indeterminate_question_box",
        "info",
        "info_i",
        "infrared",
        "ink_eraser",
        "ink_eraser_off",
        "ink_highlighter",
        "ink_highlighter_move",
        "ink_marker",
        "ink_pen",
        "ink_selection",
        "inpatient",
        "input",
        "input_circle",
        "insert_chart",
        "insert_page_break",
        "insert_text",
        "install_desktop",
        "instant_mix",
        "integration_instructions",
        "interactive_space",
        "interests",
        "interpreter_mode",
        "inventory",
        "inventory_2",
        "invert_colors",
        "invert_colors_off",
        "ios",
        "ios_share",
        "iron",
        "jamboard_kiosk",
        "javascript",
        "join",
        "join_inner",
        "join_left",
        "join_right",
        "joystick",
        "jump_to_element",
        "kayaking",
        "kebab_dining",
        "keep",
        "keep_off",
        "keep_public",
        "kettle",
        "key",
        "key_off",
        "key_vertical",
        "key_visualizer",
        "keyboard",
        "keyboard_alt",
        "keyboard_arrow_down",
        "keyboard_arrow_left",
        "keyboard_arrow_right",
        "keyboard_arrow_up",
        "keyboard_backspace",
        "keyboard_capslock",
        "keyboard_capslock_badge",
        "keyboard_command_key",
        "keyboard_control_key",
        "keyboard_double_arrow_down",
        "keyboard_double_arrow_left",
        "keyboard_double_arrow_right",
        "keyboard_double_arrow_up",
        "keyboard_external_input",
        "keyboard_full",
        "keyboard_hide",
        "keyboard_keys",
        "keyboard_lock",
        "keyboard_lock_off",
        "keyboard_off",
        "keyboard_onscreen",
        "keyboard_option_key",
        "keyboard_previous_language",
        "keyboard_return",
        "keyboard_tab",
        "keyboard_tab_rtl",
        "kid_star",
        "king_bed",
        "kitchen",
        "kitesurfing",
        "lab_panel",
        "lab_profile",
        "lab_research",
        "label",
        "label_important",
        "label_off",
        "labs",
        "lan",
        "landscape",
        "landscape_2",
        "landscape_2_edit",
        "landscape_2_off",
        "landslide",
        "language",
        "language_chinese_array",
        "language_chinese_cangjie",
        "language_chinese_dayi",
        "language_chinese_pinyin",
        "language_chinese_quick",
        "language_chinese_wubi",
        "language_french",
        "language_gb_english",
        "language_international",
        "language_japanese_kana",
        "language_korean_latin",
        "language_pinyin",
        "language_spanish",
        "language_us",
        "language_us_colemak",
        "language_us_dvorak",
        "laps",
        "laptop_car",
        "laptop_chromebook",
        "laptop_mac",
        "laptop_windows",
        "lasso_select",
        "last_page",
        "laundry",
        "layers",
        "layers_clear",
        "lda",
        "leaderboard",
        "leak_add",
        "leak_remove",
        "left_click",
        "left_panel_close",
        "left_panel_open",
        "legend_toggle",
        "lens_blur",
        "letter_switch",
        "library_add",
        "library_add_check",
        "library_books",
        "library_music",
        "license",
        "lift_to_talk",
        "light",
        "light_group",
        "light_mode",
        "light_off",
        "lightbulb",
        "lightbulb_2",
        "lightbulb_circle",
        "lightning_stand",
        "line_axis",
        "line_curve",
        "line_end",
        "line_end_arrow",
        "line_end_arrow_notch",
        "line_end_circle",
        "line_end_diamond",
        "line_end_square",
        "line_start",
        "line_start_arrow",
        "line_start_arrow_notch",
        "line_start_circle",
        "line_start_diamond",
        "line_start_square",
        "line_style",
        "line_weight",
        "linear_scale",
        "link",
        "link_off",
        "linked_camera",
        "linked_services",
        "liquor",
        "list",
        "list_alt",
        "list_alt_add",
        "list_alt_check",
        "lists",
        "live_help",
        "live_tv",
        "living",
        "local_activity",
        "local_atm",
        "local_bar",
        "local_cafe",
        "local_car_wash",
        "local_convenience_store",
        "local_dining",
        "local_drink",
        "local_fire_department",
        "local_florist",
        "local_gas_station",
        "local_hospital",
        "local_laundry_service",
        "local_library",
        "local_mall",
        "local_parking",
        "local_pharmacy",
        "local_pizza",
        "local_police",
        "local_post_office",
        "local_see",
        "local_shipping",
        "local_taxi",
        "location_away",
        "location_chip",
        "location_city",
        "location_disabled",
        "location_home",
        "location_off",
        "location_on",
        "location_searching",
        "lock",
        "lock_clock",
        "lock_open",
        "lock_open_circle",
        "lock_open_right",
        "lock_person",
        "lock_reset",
        "login",
        "logo_dev",
        "logout",
        "looks",
        "looks_3",
        "looks_4",
        "looks_5",
        "looks_6",
        "looks_one",
        "looks_two",
        "loupe",
        "low_density",
        "low_priority",
        "lowercase",
        "loyalty",
        "lte_mobiledata",
        "lte_mobiledata_badge",
        "lte_plus_mobiledata",
        "lte_plus_mobiledata_badge",
        "luggage",
        "lunch_dining",
        "lyrics",
        "macro_auto",
        "macro_off",
        "magnification_large",
        "magnification_small",
        "magnify_docked",
        "magnify_fullscreen",
        "mail",
        "mail_lock",
        "mail_off",
        "male",
        "man",
        "man_2",
        "man_3",
        "man_4",
        "manage_accounts",
        "manage_history",
        "manage_search",
        "manga",
        "manufacturing",
        "map",
        "map_search",
        "maps_ugc",
        "margin",
        "mark_as_unread",
        "mark_chat_read",
        "mark_chat_unread",
        "mark_email_read",
        "mark_email_unread",
        "mark_unread_chat_alt",
        "markdown",
        "markdown_copy",
        "markdown_paste",
        "markunread_mailbox",
        "masked_transitions",
        "masked_transitions_add",
        "masks",
        "match_case",
        "match_case_off",
        "match_word",
        "matter",
        "maximize",
        "measuring_tape",
        "media_bluetooth_off",
        "media_bluetooth_on",
        "media_link",
        "media_output",
        "media_output_off",
        "mediation",
        "medical_information",
        "medical_mask",
        "medical_services",
        "medication",
        "medication_liquid",
        "meeting_room",
        "memory",
        "memory_alt",
        "menstrual_health",
        "menu",
        "menu_book",
        "menu_open",
        "merge",
        "merge_type",
        "metabolism",
        "metro",
        "mfg_nest_yale_lock",
        "mic",
        "mic_alert",
        "mic_double",
        "mic_external_off",
        "mic_external_on",
        "mic_off",
        "microbiology",
        "microwave",
        "microwave_gen",
        "military_tech",
        "mimo",
        "mimo_disconnect",
        "mindfulness",
        "minimize",
        "minor_crash",
        "mintmark",
        "missed_video_call",
        "missing_controller",
        "mist",
        "mitre",
        "mixture_med",
        "mms",
        "mobile_hand",
        "mobile_hand_left",
        "mobile_hand_left_off",
        "mobile_hand_off",
        "mobile_loupe",
        "mobile_off",
        "mobile_screen_share",
        "mobile_screensaver",
        "mobile_sound_2",
        "mobile_speaker",
        "mobiledata_off",
        "mode_comment",
        "mode_cool",
        "mode_cool_off",
        "mode_dual",
        "mode_fan",
        "mode_fan_off",
        "mode_heat",
        "mode_heat_cool",
        "mode_heat_off",
        "mode_night",
        "mode_of_travel",
        "mode_off_on",
        "mode_standby",
        "model_training",
        "modeling",
        "money",
        "money_bag",
        "money_off",
        "monitor",
        "monitor_heart",
        "monitor_weight",
        "monitor_weight_gain",
        "monitor_weight_loss",
        "monitoring",
        "monochrome_photos",
        "monorail",
        "mood",
        "mood_bad",
        "moon_stars",
        "mop",
        "moped",
        "more",
        "more_down",
        "more_horiz",
        "more_time",
        "more_up",
        "more_vert",
        "mosque",
        "motion_blur",
        "motion_mode",
        "motion_photos_auto",
        "motion_photos_off",
        "motion_photos_on",
        "motion_photos_paused",
        "motion_play",
        "motion_sensor_active",
        "motion_sensor_alert",
        "motion_sensor_idle",
        "motion_sensor_urgent",
        "motorcycle",
        "mountain_flag",
        "mouse",
        "mouse_lock",
        "mouse_lock_off",
        "move",
        "move_down",
        "move_group",
        "move_item",
        "move_location",
        "move_selection_down",
        "move_selection_left",
        "move_selection_right",
        "move_selection_up",
        "move_to_inbox",
        "move_up",
        "moved_location",
        "movie",
        "movie_edit",
        "movie_info",
        "movie_off",
        "moving",
        "moving_beds",
        "moving_ministry",
        "mp",
        "multicooker",
        "multiline_chart",
        "multimodal_hand_eye",
        "multiple_airports",
        "multiple_stop",
        "museum",
        "music_cast",
        "music_note",
        "music_note_add",
        "music_off",
        "music_video",
        "my_location",
        "mystery",
        "nat",
        "nature",
        "nature_people",
        "navigation",
        "near_me",
        "near_me_disabled",
        "nearby",
        "nearby_error",
        "nearby_off",
        "nephrology",
        "nest_audio",
        "nest_cam_floodlight",
        "nest_cam_indoor",
        "nest_cam_iq",
        "nest_cam_iq_outdoor",
        "nest_cam_magnet_mount",
        "nest_cam_outdoor",
        "nest_cam_stand",
        "nest_cam_wall_mount",
        "nest_cam_wired_stand",
        "nest_clock_farsight_analog",
        "nest_clock_farsight_digital",
        "nest_connect",
        "nest_detect",
        "nest_display",
        "nest_display_max",
        "nest_doorbell_visitor",
        "nest_eco_leaf",
        "nest_farsight_weather",
        "nest_found_savings",
        "nest_heat_link_e",
        "nest_heat_link_gen_3",
        "nest_hello_doorbell",
        "nest_mini",
        "nest_multi_room",
        "nest_protect",
        "nest_remote",
        "nest_remote_comfort_sensor",
        "nest_secure_alarm",
        "nest_sunblock",
        "nest_tag",
        "nest_thermostat",
        "nest_thermostat_e_eu",
        "nest_thermostat_gen_3",
        "nest_thermostat_sensor",
        "nest_thermostat_sensor_eu",
        "nest_thermostat_zirconium_eu",
        "nest_true_radiant",
        "nest_wake_on_approach",
        "nest_wake_on_press",
        "nest_wifi_point",
        "nest_wifi_pro",
        "nest_wifi_pro_2",
        "nest_wifi_router",
        "network_cell",
        "network_check",
        "network_intel_node",
        "network_intelligence",
        "network_intelligence_history",
        "network_intelligence_update",
        "network_locked",
        "network_manage",
        "network_node",
        "network_ping",
        "network_wifi",
        "network_wifi_1_bar",
        "network_wifi_1_bar_locked",
        "network_wifi_2_bar",
        "network_wifi_2_bar_locked",
        "network_wifi_3_bar",
        "network_wifi_3_bar_locked",
        "network_wifi_locked",
        "neurology",
        "new_label",
        "new_window",
        "news",
        "newsmode",
        "newspaper",
        "newsstand",
        "next_plan",
        "next_week",
        "nfc",
        "nfc_off",
        "night_shelter",
        "night_sight_auto",
        "night_sight_auto_off",
        "night_sight_max",
        "nightlife",
        "nightlight",
        "nights_stay",
        "no_accounts",
        "no_adult_content",
        "no_backpack",
        "no_crash",
        "no_drinks",
        "no_encryption",
        "no_flash",
        "no_food",
        "no_luggage",
        "no_meals",
        "no_meeting_room",
        "no_photography",
        "no_sim",
        "no_sound",
        "no_stroller",
        "no_transfer",
        "noise_aware",
        "noise_control_off",
        "noise_control_on",
        "nordic_walking",
        "north",
        "north_east",
        "north_west",
        "not_accessible",
        "not_accessible_forward",
        "not_listed_location",
        "not_started",
        "note_add",
        "note_alt",
        "note_stack",
        "note_stack_add",
        "notes",
        "notification_add",
        "notification_important",
        "notification_multiple",
        "notification_settings",
        "notification_sound",
        "notifications",
        "notifications_active",
        "notifications_off",
        "notifications_paused",
        "notifications_unread",
        "numbers",
        "nutrition",
        "ods",
        "odt",
        "offline_bolt",
        "offline_pin",
        "offline_pin_off",
        "offline_share",
        "oil_barrel",
        "on_device_training",
        "on_hub_device",
        "oncology",
        "online_prediction",
        "onsen",
        "opacity",
        "open_in_browser",
        "open_in_full",
        "open_in_new",
        "open_in_new_down",
        "open_in_new_off",
        "open_jam",
        "open_run",
        "open_with",
        "ophthalmology",
        "oral_disease",
        "orbit",
        "order_approve",
        "order_play",
        "orders",
        "orthopedics",
        "other_admission",
        "other_houses",
        "outbound",
        "outbox",
        "outbox_alt",
        "outdoor_garden",
        "outdoor_grill",
        "outgoing_mail",
        "outlet",
        "outpatient",
        "outpatient_med",
        "output",
        "output_circle",
        "oven",
        "oven_gen",
        "overview",
        "overview_key",
        "owl",
        "oxygen_saturation",
        "p2p",
        "pace",
        "pacemaker",
        "package",
        "package_2",
        "padding",
        "page_control",
        "page_footer",
        "page_header",
        "page_info",
        "pageless",
        "pages",
        "pageview",
        "paid",
        "palette",
        "pallet",
        "pan_tool",
        "pan_tool_alt",
        "pan_zoom",
        "panorama",
        "panorama_horizontal",
        "panorama_photosphere",
        "panorama_vertical",
        "panorama_wide_angle",
        "paragliding",
        "park",
        "partly_cloudy_day",
        "partly_cloudy_night",
        "partner_exchange",
        "partner_reports",
        "party_mode",
        "passkey",
        "password",
        "password_2",
        "password_2_off",
        "patient_list",
        "pattern",
        "pause",
        "pause_circle",
        "pause_presentation",
        "payments",
        "pedal_bike",
        "pediatrics",
        "pen_size_1",
        "pen_size_2",
        "pen_size_3",
        "pen_size_4",
        "pen_size_5",
        "pending",
        "pending_actions",
        "pentagon",
        "percent",
        "pergola",
        "perm_camera_mic",
        "perm_contact_calendar",
        "perm_data_setting",
        "perm_device_information",
        "perm_media",
        "perm_phone_msg",
        "perm_scan_wifi",
        "person",
        "person_2",
        "person_3",
        "person_4",
        "person_add",
        "person_add_disabled",
        "person_alert",
        "person_apron",
        "person_book",
        "person_cancel",
        "person_celebrate",
        "person_check",
        "person_edit",
        "person_off",
        "person_pin",
        "person_pin_circle",
        "person_play",
        "person_raised_hand",
        "person_remove",
        "person_search",
        "person_shield",
        "personal_bag",
        "personal_bag_off",
        "personal_bag_question",
        "personal_injury",
        "personal_places",
        "pest_control",
        "pest_control_rodent",
        "pet_supplies",
        "pets",
        "phishing",
        "phone_android",
        "phone_bluetooth_speaker",
        "phone_callback",
        "phone_disabled",
        "phone_enabled",
        "phone_forwarded",
        "phone_in_talk",
        "phone_iphone",
        "phone_locked",
        "phone_missed",
        "phone_paused",
        "phonelink_erase",
        "phonelink_ring",
        "phonelink_ring_off",
        "phonelink_setup",
        "photo",
        "photo_album",
        "photo_auto_merge",
        "photo_camera",
        "photo_camera_back",
        "photo_camera_front",
        "photo_frame",
        "photo_library",
        "photo_prints",
        "photo_size_select_large",
        "photo_size_select_small",
        "php",
        "physical_therapy",
        "piano",
        "piano_off",
        "picture_as_pdf",
        "picture_in_picture",
        "picture_in_picture_alt",
        "picture_in_picture_center",
        "picture_in_picture_large",
        "picture_in_picture_medium",
        "picture_in_picture_mobile",
        "picture_in_picture_off",
        "picture_in_picture_small",
        "pie_chart",
        "pill",
        "pill_off",
        "pin",
        "pin_drop",
        "pin_end",
        "pin_invoke",
        "pinboard",
        "pinboard_unread",
        "pinch",
        "pinch_zoom_in",
        "pinch_zoom_out",
        "pip",
        "pip_exit",
        "pivot_table_chart",
        "place_item",
        "plagiarism",
        "planet",
        "planner_banner_ad_pt",
        "planner_review",
        "play_arrow",
        "play_circle",
        "play_disabled",
        "play_for_work",
        "play_lesson",
        "play_pause",
        "playing_cards",
        "playlist_add",
        "playlist_add_check",
        "playlist_add_check_circle",
        "playlist_add_circle",
        "playlist_play",
        "playlist_remove",
        "plug_connect",
        "plumbing",
        "podcasts",
        "podiatry",
        "podium",
        "point_of_sale",
        "point_scan",
        "poker_chip",
        "policy",
        "policy_alert",
        "polyline",
        "polymer",
        "pool",
        "portable_wifi_off",
        "position_bottom_left",
        "position_bottom_right",
        "position_top_right",
        "post",
        "post_add",
        "potted_plant",
        "power",
        "power_input",
        "power_off",
        "power_settings_circle",
        "power_settings_new",
        "prayer_times",
        "precision_manufacturing",
        "pregnancy",
        "pregnant_woman",
        "preliminary",
        "prescriptions",
        "present_to_all",
        "preview",
        "preview_off",
        "price_change",
        "price_check",
        "print",
        "print_add",
        "print_connect",
        "print_disabled",
        "print_error",
        "print_lock",
        "priority",
        "priority_high",
        "privacy",
        "privacy_tip",
        "private_connectivity",
        "problem",
        "procedure",
        "process_chart",
        "production_quantity_limits",
        "productivity",
        "progress_activity",
        "prompt_suggestion",
        "propane",
        "propane_tank",
        "psychiatry",
        "psychology",
        "psychology_alt",
        "public",
        "public_off",
        "publish",
        "published_with_changes",
        "pulmonology",
        "pulse_alert",
        "punch_clock",
        "qr_code",
        "qr_code_2",
        "qr_code_2_add",
        "qr_code_scanner",
        "query_stats",
        "question_exchange",
        "question_mark",
        "queue_music",
        "queue_play_next",
        "quick_phrases",
        "quick_reference",
        "quick_reference_all",
        "quick_reorder",
        "quickreply",
        "quiz",
        "r_mobiledata",
        "radar",
        "radio",
        "radio_button_checked",
        "radio_button_partial",
        "radio_button_unchecked",
        "radiology",
        "railway_alert",
        "railway_alert_2",
        "rainy",
        "rainy_heavy",
        "rainy_light",
        "rainy_snow",
        "ramen_dining",
        "ramp_left",
        "ramp_right",
        "range_hood",
        "rate_review",
        "raven",
        "raw_off",
        "raw_on",
        "read_more",
        "readiness_score",
        "real_estate_agent",
        "rear_camera",
        "rebase",
        "rebase_edit",
        "receipt",
        "receipt_long",
        "receipt_long_off",
        "recent_actors",
        "recent_patient",
        "recenter",
        "recommend",
        "record_voice_over",
        "rectangle",
        "recycling",
        "redeem",
        "redo",
        "reduce_capacity",
        "refresh",
        "regular_expression",
        "relax",
        "release_alert",
        "remember_me",
        "reminder",
        "remote_gen",
        "remove",
        "remove_done",
        "remove_from_queue",
        "remove_moderator",
        "remove_road",
        "remove_selection",
        "remove_shopping_cart",
        "reopen_window",
        "reorder",
        "repartition",
        "repeat",
        "repeat_on",
        "repeat_one",
        "repeat_one_on",
        "replace_audio",
        "replace_image",
        "replace_video",
        "replay",
        "replay_10",
        "replay_30",
        "replay_5",
        "reply",
        "reply_all",
        "report",
        "report_off",
        "request_page",
        "request_quote",
        "reset_brightness",
        "reset_focus",
        "reset_image",
        "reset_iso",
        "reset_settings",
        "reset_shadow",
        "reset_shutter_speed",
        "reset_tv",
        "reset_white_balance",
        "reset_wrench",
        "resize",
        "respiratory_rate",
        "responsive_layout",
        "restart_alt",
        "restaurant",
        "restore_from_trash",
        "restore_page",
        "resume",
        "reviews",
        "rewarded_ads",
        "rheumatology",
        "rib_cage",
        "rice_bowl",
        "right_click",
        "right_panel_close",
        "right_panel_open",
        "ring_volume",
        "ripples",
        "road",
        "robot",
        "robot_2",
        "rocket",
        "rocket_launch",
        "roller_shades",
        "roller_shades_closed",
        "roller_skating",
        "roofing",
        "room_preferences",
        "room_service",
        "rotate_90_degrees_ccw",
        "rotate_90_degrees_cw",
        "rotate_auto",
        "rotate_left",
        "rotate_right",
        "roundabout_left",
        "roundabout_right",
        "rounded_corner",
        "route",
        "router",
        "router_off",
        "routine",
        "rowing",
        "rss_feed",
        "rsvp",
        "rtt",
        "rubric",
        "rule",
        "rule_folder",
        "rule_settings",
        "run_circle",
        "running_with_errors",
        "rv_hookup",
        "safety_check",
        "safety_check_off",
        "safety_divider",
        "sailing",
        "salinity",
        "sanitizer",
        "satellite",
        "satellite_alt",
        "sauna",
        "save",
        "save_as",
        "save_clock",
        "saved_search",
        "savings",
        "scale",
        "scan",
        "scan_delete",
        "scanner",
        "scatter_plot",
        "scene",
        "schedule",
        "schedule_send",
        "schema",
        "school",
        "science",
        "science_off",
        "scooter",
        "score",
        "scoreboard",
        "screen_lock_landscape",
        "screen_lock_portrait",
        "screen_lock_rotation",
        "screen_record",
        "screen_rotation",
        "screen_rotation_alt",
        "screen_rotation_up",
        "screen_search_desktop",
        "screen_share",
        "screenshot",
        "screenshot_frame",
        "screenshot_frame_2",
        "screenshot_keyboard",
        "screenshot_monitor",
        "screenshot_region",
        "screenshot_tablet",
        "script",
        "scrollable_header",
        "scuba_diving",
        "sd",
        "sd_card",
        "sd_card_alert",
        "sdk",
        "search",
        "search_activity",
        "search_check",
        "search_check_2",
        "search_hands_free",
        "search_insights",
        "search_off",
        "seat_cool_left",
        "seat_cool_right",
        "seat_heat_left",
        "seat_heat_right",
        "seat_vent_left",
        "seat_vent_right",
        "security",
        "security_key",
        "security_update_good",
        "security_update_warning",
        "segment",
        "select",
        "select_all",
        "select_check_box",
        "select_to_speak",
        "select_window",
        "select_window_2",
        "select_window_off",
        "self_care",
        "self_improvement",
        "sell",
        "send",
        "send_and_archive",
        "send_money",
        "send_time_extension",
        "send_to_mobile",
        "sensor_door",
        "sensor_occupied",
        "sensor_window",
        "sensors",
        "sensors_krx",
        "sensors_krx_off",
        "sensors_off",
        "sentiment_calm",
        "sentiment_content",
        "sentiment_dissatisfied",
        "sentiment_excited",
        "sentiment_extremely_dissatisfied",
        "sentiment_frustrated",
        "sentiment_neutral",
        "sentiment_sad",
        "sentiment_satisfied",
        "sentiment_stressed",
        "sentiment_very_dissatisfied",
        "sentiment_very_satisfied",
        "sentiment_worried",
        "serif",
        "server_person",
        "service_toolbox",
        "set_meal",
        "settings",
        "settings_accessibility",
        "settings_account_box",
        "settings_alert",
        "settings_applications",
        "settings_b_roll",
        "settings_backup_restore",
        "settings_bluetooth",
        "settings_brightness",
        "settings_cell",
        "settings_cinematic_blur",
        "settings_ethernet",
        "settings_heart",
        "settings_input_antenna",
        "settings_input_component",
        "settings_input_hdmi",
        "settings_input_svideo",
        "settings_motion_mode",
        "settings_night_sight",
        "settings_overscan",
        "settings_panorama",
        "settings_phone",
        "settings_photo_camera",
        "settings_power",
        "settings_remote",
        "settings_slow_motion",
        "settings_system_daydream",
        "settings_timelapse",
        "settings_video_camera",
        "settings_voice",
        "settop_component",
        "severe_cold",
        "shadow",
        "shadow_add",
        "shadow_minus",
        "shape_line",
        "shapes",
        "share",
        "share_eta",
        "share_location",
        "share_off",
        "share_reviews",
        "share_windows",
        "sheets_rtl",
        "shelf_auto_hide",
        "shelf_position",
        "shelves",
        "shield",
        "shield_lock",
        "shield_locked",
        "shield_moon",
        "shield_person",
        "shield_question",
        "shield_watch",
        "shield_with_heart",
        "shield_with_house",
        "shift",
        "shift_lock",
        "shift_lock_off",
        "shop",
        "shop_two",
        "shopping_bag",
        "shopping_bag_speed",
        "shopping_basket",
        "shopping_cart",
        "shopping_cart_checkout",
        "shopping_cart_off",
        "shoppingmode",
        "short_stay",
        "short_text",
        "show_chart",
        "shower",
        "shuffle",
        "shuffle_on",
        "shutter_speed",
        "shutter_speed_add",
        "shutter_speed_minus",
        "sick",
        "side_navigation",
        "sign_language",
        "signal_cellular_0_bar",
        "signal_cellular_1_bar",
        "signal_cellular_2_bar",
        "signal_cellular_3_bar",
        "signal_cellular_4_bar",
        "signal_cellular_add",
        "signal_cellular_alt",
        "signal_cellular_alt_1_bar",
        "signal_cellular_alt_2_bar",
        "signal_cellular_connected_no_internet_0_bar",
        "signal_cellular_connected_no_internet_4_bar",
        "signal_cellular_nodata",
        "signal_cellular_null",
        "signal_cellular_off",
        "signal_cellular_pause",
        "signal_disconnected",
        "signal_wifi_0_bar",
        "signal_wifi_4_bar",
        "signal_wifi_bad",
        "signal_wifi_off",
        "signal_wifi_statusbar_not_connected",
        "signal_wifi_statusbar_null",
        "signature",
        "signpost",
        "sim_card",
        "sim_card_download",
        "simulation",
        "single_bed",
        "sip",
        "siren",
        "siren_check",
        "siren_open",
        "siren_question",
        "skateboarding",
        "skeleton",
        "skillet",
        "skillet_cooktop",
        "skip_next",
        "skip_previous",
        "skull",
        "skull_list",
        "slab_serif",
        "sledding",
        "sleep_score",
        "slide_library",
        "sliders",
        "slideshow",
        "slow_motion_video",
        "smart_card_reader",
        "smart_card_reader_off",
        "smart_display",
        "smart_outlet",
        "smart_screen",
        "smart_toy",
        "smartphone",
        "smartphone_camera",
        "smb_share",
        "smoke_free",
        "smoking_rooms",
        "sms",
        "snippet_folder",
        "snooze",
        "snowboarding",
        "snowing",
        "snowing_heavy",
        "snowmobile",
        "snowshoeing",
        "soap",
        "social_distance",
        "social_leaderboard",
        "solar_power",
        "sort",
        "sort_by_alpha",
        "sos",
        "sound_detection_dog_barking",
        "sound_detection_glass_break",
        "sound_detection_loud_sound",
        "sound_sampler",
        "soup_kitchen",
        "source_environment",
        "source_notes",
        "south",
        "south_america",
        "south_east",
        "south_west",
        "spa",
        "space_bar",
        "space_dashboard",
        "spatial_audio",
        "spatial_audio_off",
        "spatial_speaker",
        "spatial_tracking",
        "speaker",
        "speaker_group",
        "speaker_notes",
        "speaker_notes_off",
        "speaker_phone",
        "special_character",
        "specific_gravity",
        "speech_to_text",
        "speed",
        "speed_0_25",
        "speed_0_2x",
        "speed_0_5",
        "speed_0_5x",
        "speed_0_75",
        "speed_0_7x",
        "speed_1_2",
        "speed_1_25",
        "speed_1_2x",
        "speed_1_5",
        "speed_1_5x",
        "speed_1_75",
        "speed_1_7x",
        "speed_2x",
        "speed_camera",
        "spellcheck",
        "split_scene",
        "split_scene_down",
        "split_scene_left",
        "split_scene_right",
        "split_scene_up",
        "splitscreen",
        "splitscreen_add",
        "splitscreen_bottom",
        "splitscreen_landscape",
        "splitscreen_left",
        "splitscreen_portrait",
        "splitscreen_right",
        "splitscreen_top",
        "splitscreen_vertical_add",
        "spo2",
        "spoke",
        "sports",
        "sports_and_outdoors",
        "sports_bar",
        "sports_baseball",
        "sports_basketball",
        "sports_cricket",
        "sports_esports",
        "sports_football",
        "sports_golf",
        "sports_gymnastics",
        "sports_handball",
        "sports_hockey",
        "sports_kabaddi",
        "sports_martial_arts",
        "sports_mma",
        "sports_motorsports",
        "sports_rugby",
        "sports_score",
        "sports_soccer",
        "sports_tennis",
        "sports_volleyball",
        "sprinkler",
        "sprint",
        "square",
        "square_dot",
        "square_foot",
        "ssid_chart",
        "stack",
        "stack_group",
        "stack_hexagon",
        "stack_off",
        "stack_star",
        "stacked_bar_chart",
        "stacked_email",
        "stacked_inbox",
        "stacked_line_chart",
        "stacks",
        "stadia_controller",
        "stadium",
        "stairs",
        "stairs_2",
        "star",
        "star_half",
        "star_rate",
        "star_rate_half",
        "star_shine",
        "stars",
        "stars_2",
        "start",
        "stat_0",
        "stat_1",
        "stat_2",
        "stat_3",
        "stat_minus_1",
        "stat_minus_2",
        "stat_minus_3",
        "stay_current_landscape",
        "steering_wheel_heat",
        "step",
        "step_into",
        "step_out",
        "step_over",
        "steppers",
        "steps",
        "stethoscope",
        "stethoscope_arrow",
        "stethoscope_check",
        "sticky_note",
        "sticky_note_2",
        "stock_media",
        "stockpot",
        "stop",
        "stop_circle",
        "stop_screen_share",
        "storage",
        "store",
        "storefront",
        "storm",
        "straight",
        "straighten",
        "strategy",
        "stream",
        "stream_apps",
        "streetview",
        "stress_management",
        "strikethrough_s",
        "stroke_full",
        "stroke_partial",
        "stroller",
        "style",
        "styler",
        "stylus",
        "stylus_brush",
        "stylus_fountain_pen",
        "stylus_highlighter",
        "stylus_laser_pointer",
        "stylus_note",
        "stylus_pen",
        "stylus_pencil",
        "subdirectory_arrow_left",
        "subdirectory_arrow_right",
        "subheader",
        "subject",
        "subscript",
        "subscriptions",
        "subtitles",
        "subtitles_gear",
        "subtitles_off",
        "subway",
        "summarize",
        "sunny",
        "sunny_snowing",
        "superscript",
        "supervised_user_circle",
        "supervised_user_circle_off",
        "supervisor_account",
        "support",
        "support_agent",
        "surfing",
        "surgical",
        "surround_sound",
        "swap_calls",
        "swap_driving_apps",
        "swap_driving_apps_wheel",
        "swap_horiz",
        "swap_horizontal_circle",
        "swap_vert",
        "swap_vertical_circle",
        "sweep",
        "swipe",
        "swipe_down",
        "swipe_down_alt",
        "swipe_left",
        "swipe_left_alt",
        "swipe_right",
        "swipe_right_alt",
        "swipe_up",
        "swipe_up_alt",
        "swipe_vertical",
        "switch",
        "switch_access",
        "switch_access_2",
        "switch_access_3",
        "switch_access_shortcut",
        "switch_access_shortcut_add",
        "switch_account",
        "switch_camera",
        "switch_left",
        "switch_right",
        "switch_video",
        "switches",
        "sword_rose",
        "swords",
        "symptoms",
        "synagogue",
        "sync",
        "sync_alt",
        "sync_arrow_down",
        "sync_arrow_up",
        "sync_desktop",
        "sync_disabled",
        "sync_lock",
        "sync_problem",
        "sync_saved_locally",
        "syringe",
        "system_update",
        "system_update_alt",
        "tab",
        "tab_close",
        "tab_close_inactive",
        "tab_close_right",
        "tab_duplicate",
        "tab_group",
        "tab_inactive",
        "tab_move",
        "tab_new_right",
        "tab_recent",
        "tab_search",
        "tab_unselected",
        "table",
        "table_bar",
        "table_chart",
        "table_chart_view",
        "table_convert",
        "table_edit",
        "table_eye",
        "table_lamp",
        "table_restaurant",
        "table_rows",
        "table_rows_narrow",
        "table_view",
        "tablet",
        "tablet_android",
        "tablet_camera",
        "tablet_mac",
        "tabs",
        "tactic",
        "tag",
        "takeout_dining",
        "tamper_detection_off",
        "tamper_detection_on",
        "tap_and_play",
        "tapas",
        "target",
        "task",
        "task_alt",
        "taunt",
        "taxi_alert",
        "team_dashboard",
        "temp_preferences_eco",
        "temple_buddhist",
        "temple_hindu",
        "tenancy",
        "terminal",
        "text_ad",
        "text_compare",
        "text_decrease",
        "text_fields",
        "text_fields_alt",
        "text_format",
        "text_increase",
        "text_rotate_up",
        "text_rotate_vertical",
        "text_rotation_angledown",
        "text_rotation_angleup",
        "text_rotation_down",
        "text_rotation_none",
        "text_select_end",
        "text_select_jump_to_beginning",
        "text_select_jump_to_end",
        "text_select_move_back_character",
        "text_select_move_back_word",
        "text_select_move_down",
        "text_select_move_forward_character",
        "text_select_move_forward_word",
        "text_select_move_up",
        "text_select_start",
        "text_snippet",
        "text_to_speech",
        "text_up",
        "texture",
        "texture_add",
        "texture_minus",
        "theater_comedy",
        "theaters",
        "thermometer",
        "thermometer_add",
        "thermometer_gain",
        "thermometer_loss",
        "thermometer_minus",
        "thermostat",
        "thermostat_arrow_down",
        "thermostat_arrow_up",
        "thermostat_auto",
        "thermostat_carbon",
        "things_to_do",
        "thread_unread",
        "threat_intelligence",
        "thumb_down",
        "thumb_up",
        "thumbnail_bar",
        "thumbs_up_down",
        "thunderstorm",
        "tibia",
        "tibia_alt",
        "tile_large",
        "tile_medium",
        "tile_small",
        "time_auto",
        "timelapse",
        "timeline",
        "timer",
        "timer_10",
        "timer_10_alt_1",
        "timer_10_select",
        "timer_3",
        "timer_3_alt_1",
        "timer_3_select",
        "timer_5",
        "timer_5_shutter",
        "timer_arrow_down",
        "timer_arrow_up",
        "timer_off",
        "timer_pause",
        "timer_play",
        "tire_repair",
        "title",
        "titlecase",
        "toast",
        "toc",
        "today",
        "toggle_off",
        "toggle_on",
        "token",
        "toll",
        "tonality",
        "toolbar",
        "tools_flat_head",
        "tools_installation_kit",
        "tools_ladder",
        "tools_level",
        "tools_phillips",
        "tools_pliers_wire_stripper",
        "tools_power_drill",
        "tooltip",
        "tooltip_2",
        "top_panel_close",
        "top_panel_open",
        "topic",
        "tornado",
        "total_dissolved_solids",
        "touch_app",
        "touch_double",
        "touch_long",
        "touch_triple",
        "touchpad_mouse",
        "touchpad_mouse_off",
        "tour",
        "toys",
        "toys_and_games",
        "toys_fan",
        "track_changes",
        "trackpad_input",
        "trackpad_input_2",
        "trackpad_input_3",
        "traffic",
        "traffic_jam",
        "trail_length",
        "trail_length_medium",
        "trail_length_short",
        "train",
        "tram",
        "transcribe",
        "transfer_within_a_station",
        "transform",
        "transgender",
        "transit_enterexit",
        "transit_ticket",
        "transition_chop",
        "transition_dissolve",
        "transition_fade",
        "transition_push",
        "transition_slide",
        "translate",
        "transportation",
        "travel",
        "travel_explore",
        "travel_luggage_and_bags",
        "trending_down",
        "trending_flat",
        "trending_up",
        "trip",
        "trip_origin",
        "trolley",
        "trolley_cable_car",
        "trophy",
        "troubleshoot",
        "tsunami",
        "tsv",
        "tty",
        "tune",
        "turn_left",
        "turn_right",
        "turn_sharp_left",
        "turn_sharp_right",
        "turn_slight_left",
        "turn_slight_right",
        "tv",
        "tv_displays",
        "tv_gen",
        "tv_guide",
        "tv_next",
        "tv_off",
        "tv_options_edit_channels",
        "tv_options_input_settings",
        "tv_remote",
        "tv_signin",
        "tv_with_assistant",
        "two_pager",
        "two_pager_store",
        "two_wheeler",
        "type_specimen",
        "u_turn_left",
        "u_turn_right",
        "ulna_radius",
        "ulna_radius_alt",
        "umbrella",
        "unarchive",
        "undo",
        "unfold_less",
        "unfold_less_double",
        "unfold_more",
        "unfold_more_double",
        "ungroup",
        "universal_currency",
        "universal_currency_alt",
        "universal_local",
        "unknown_2",
        "unknown_5",
        "unknown_7",
        "unknown_document",
        "unknown_med",
        "unlicense",
        "unpaved_road",
        "unpublished",
        "unsubscribe",
        "upcoming",
        "update",
        "update_disabled",
        "upgrade",
        "upi_pay",
        "upload",
        "upload_2",
        "upload_file",
        "uppercase",
        "urology",
        "usb",
        "usb_off",
        "user_attributes",
        "vaccines",
        "vacuum",
        "valve",
        "vape_free",
        "vaping_rooms",
        "variable_add",
        "variable_insert",
        "variable_remove",
        "variables",
        "ventilator",
        "verified",
        "verified_off",
        "verified_user",
        "vertical_align_bottom",
        "vertical_align_center",
        "vertical_align_top",
        "vertical_distribute",
        "vertical_shades",
        "vertical_shades_closed",
        "vertical_split",
        "vibration",
        "video_call",
        "video_camera_back",
        "video_camera_back_add",
        "video_camera_front",
        "video_camera_front_off",
        "video_chat",
        "video_file",
        "video_label",
        "video_library",
        "video_search",
        "video_settings",
        "video_stable",
        "videocam",
        "videocam_alert",
        "videocam_off",
        "videogame_asset",
        "videogame_asset_off",
        "view_agenda",
        "view_apps",
        "view_array",
        "view_carousel",
        "view_column",
        "view_column_2",
        "view_comfy",
        "view_comfy_alt",
        "view_compact",
        "view_compact_alt",
        "view_cozy",
        "view_day",
        "view_headline",
        "view_in_ar",
        "view_in_ar_off",
        "view_kanban",
        "view_list",
        "view_module",
        "view_object_track",
        "view_quilt",
        "view_real_size",
        "view_sidebar",
        "view_stream",
        "view_timeline",
        "view_week",
        "vignette",
        "villa",
        "visibility",
        "visibility_lock",
        "visibility_off",
        "vital_signs",
        "vo2_max",
        "voice_chat",
        "voice_over_off",
        "voice_selection",
        "voice_selection_off",
        "voicemail",
        "voicemail_2",
        "volcano",
        "volume_down",
        "volume_down_alt",
        "volume_mute",
        "volume_off",
        "volume_up",
        "volunteer_activism",
        "voting_chip",
        "vpn_key",
        "vpn_key_alert",
        "vpn_key_off",
        "vpn_lock",
        "vpn_lock_2",
        "vr180_create2d",
        "vr180_create2d_off",
        "vrpano",
        "wall_art",
        "wall_lamp",
        "wallet",
        "wallpaper",
        "wallpaper_slideshow",
        "wand_shine",
        "wand_stars",
        "ward",
        "warehouse",
        "warning",
        "warning_off",
        "wash",
        "watch",
        "watch_arrow",
        "watch_button_press",
        "watch_check",
        "watch_off",
        "watch_screentime",
        "watch_vibration",
        "watch_wake",
        "water",
        "water_bottle",
        "water_bottle_large",
        "water_damage",
        "water_do",
        "water_drop",
        "water_ec",
        "water_full",
        "water_heater",
        "water_lock",
        "water_loss",
        "water_lux",
        "water_medium",
        "water_orp",
        "water_ph",
        "water_pump",
        "water_voc",
        "waterfall_chart",
        "waves",
        "waving_hand",
        "wb_auto",
        "wb_incandescent",
        "wb_iridescent",
        "wb_shade",
        "wb_sunny",
        "wb_twilight",
        "wc",
        "weather_hail",
        "weather_mix",
        "weather_snowy",
        "web",
        "web_asset",
        "web_asset_off",
        "web_stories",
        "web_traffic",
        "webhook",
        "weekend",
        "weight",
        "west",
        "whatshot",
        "wheelchair_pickup",
        "where_to_vote",
        "widget_medium",
        "widget_small",
        "widget_width",
        "widgets",
        "width_full",
        "width_normal",
        "width_wide",
        "wifi",
        "wifi_1_bar",
        "wifi_2_bar",
        "wifi_add",
        "wifi_calling",
        "wifi_calling_bar_1",
        "wifi_calling_bar_2",
        "wifi_calling_bar_3",
        "wifi_channel",
        "wifi_find",
        "wifi_home",
        "wifi_lock",
        "wifi_notification",
        "wifi_off",
        "wifi_password",
        "wifi_protected_setup",
        "wifi_proxy",
        "wifi_tethering",
        "wifi_tethering_error",
        "wifi_tethering_off",
        "wind_power",
        "window",
        "window_closed",
        "window_open",
        "window_sensor",
        "windshield_defrost_front",
        "windshield_defrost_rear",
        "windshield_heat_front",
        "wine_bar",
        "woman",
        "woman_2",
        "work",
        "work_alert",
        "work_history",
        "work_update",
        "workspace_premium",
        "workspaces",
        "wounds_injuries",
        "wrap_text",
        "wrist",
        "wrong_location",
        "wysiwyg",
        "yard",
        "your_trips",
        "youtube_activity",
        "youtube_searched_for",
        "zone_person_alert",
        "zone_person_idle",
        "zone_person_urgent",
        "zoom_in",
        "zoom_in_map",
        "zoom_out",
        "zoom_out_map"
      ],
      "title": "Icon",
      "description": "Material Symbol icon names available in CloudCannon for UI elements and content previews.",
      "documented": false,
      "markdownDescription": "Material Symbol icon names available in CloudCannon for UI elements and content previews."
    },
    "type.documentation": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "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```",
          "documented": true,
          "title": "url",
          "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```"
        },
        "text": {
          "description": "This key defines the link text for the documentation link at the top of a *Collection browser*.\n\n## Examples\n\nIn this example, the text for the documentation link is `CloudCannon Documentation`.\n\n```yaml\ncollections_config:\n  data:\n    documentation:\n      url: <https://cloudcannon.com/documentation/>\n      text: CloudCannon Documentation\n```",
          "type": "string",
          "documented": true,
          "title": "text",
          "markdownDescription": "This key defines the link text for the documentation link at the top of a *Collection browser*.\n\n## Examples\n\nIn this example, the text for the documentation link is `CloudCannon Documentation`.\n\n```yaml\ncollections_config:\n  data:\n    documentation:\n      url: https://cloudcannon.com/documentation/\n      text: CloudCannon Documentation\n```"
        },
        "icon": {
          "description": "This key defines the icon for the documentation link at the top of a *Collection browser*.\n\nValues can be from [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded) library.\n\n## Examples\n\nIn this example, we have configured the `star` icon for the `blog` Collection documentation link.\n\n```yaml\ncollections_config:\n  blog:\n    documentation:\n      url: <https://www.cloudcannon.com/documentation/>\n      icon: star\n```",
          "default": "auto_stories",
          "allOf": [
            {
              "$ref": "#/$defs/icon"
            }
          ],
          "documented": true,
          "title": "icon",
          "markdownDescription": "This key defines the icon for the documentation link at the top of a *Collection browser*.\n\nValues can be from [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded) library.\n\n## Examples\n\nIn this example, we have configured the `star` icon for the `blog` Collection documentation link.\n\n```yaml\ncollections_config:\n  blog:\n    documentation:\n      url: https://www.cloudcannon.com/documentation/\n      icon: star\n```"
        }
      },
      "required": [
        "url"
      ],
      "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```",
      "title": "Documentation",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.label": {
      "description": "This key defines the bold title text above an Input.\n\n## Examples\n\nIn this example, we want to customize the label for our `page_title` Input to be more descriptive.\n\n```yaml\n_inputs:\n  page_title:\n    type: text\n    label: Article Title\n    comment: Enter the main title for this article\n```",
      "type": "string",
      "documented": true,
      "title": "label",
      "markdownDescription": "This key defines the bold title text above an Input.\n\n## Examples\n\nIn this example, we want to customize the label for our `page_title` Input to be more descriptive.\n\n```yaml\n_inputs:\n  page_title:\n    type: text\n    label: Article Title\n    comment: Enter the main title for this article\n```"
    },
    "type._inputs.*.hidden": {
      "description": "This key defines the visibility of an input in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*.\n\nHidden inputs are useful when you want an input to exist, but not be visible or editable outside of the Source Editor.\n\nValue can be a boolean or a string. A boolean value of `true` will hide the input.\n\nA string value can hide an input based on the value of another input.\n\nYou can reverse the value with a `!` character at the beginning.\n\n* `published` hides an input when the sibling input `published` is truthy\n* `!published` hides an input when the sibling input `published` is falsy\n\nFor reverse values in `YAML` files, the string should be in `'` or `\"` quotation marks.\n\nBy default, this key follows the input naming convention where key names beginning with an underscore are hidden `true`.",
      "default": false,
      "anyOf": [
        {
          "type": "boolean",
          "title": "Boolean Hidden",
          "documented": true,
          "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```",
          "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```"
        },
        {
          "type": "string",
          "title": "Query String Hidden",
          "documented": true,
          "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```",
          "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```"
        }
      ],
      "documented": true,
      "title": "hidden",
      "markdownDescription": "This key defines the visibility of an input in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*.\n\nHidden inputs are useful when you want an input to exist, but not be visible or editable outside of the Source Editor.\n\nValue can be a boolean or a string. A boolean value of `true` will hide the input.\n\nA string value can hide an input based on the value of another input.\n\nYou can reverse the value with a `!` character at the beginning.\n\n* `published` hides an input when the sibling input `published` is truthy\n* `!published` hides an input when the sibling input `published` is falsy\n\nFor reverse values in `YAML` files, the string should be in `'` or `\"` quotation marks.\n\nBy default, this key follows the input naming convention where key names beginning with an underscore are hidden `true`."
    },
    "type._inputs.*.disabled": {
      "description": "This key defines whether the value of an input is editable in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*.\n\nDisabled inputs are useful if you want CloudCannon to display the input value, but prevent team members from editing the value outside of the Source\nEditor.\n\nThe value of this key can be a boolean or a string. A boolean value of `true` will prevent team members from editing the value.\n\nA string value can prevent team members from editing an input based on the value of another input.\n\nYou can reverse the value with a `!` character at the beginning.\n\n* `published` hides an input when the sibling input `published` is truthy\n* `!published` hides an input when the sibling input `published` is falsy\n\nFor reverse values in `YAML` files, the string should be in `'` or `\"` quotation marks.\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 the `date_created` Date 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    disabled: true\n    instance_value: NOW\n    options:\n      timezone: Etc/UTC\n```",
      "default": false,
      "anyOf": [
        {
          "type": "boolean",
          "title": "Boolean",
          "documented": true,
          "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```",
          "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```"
        },
        {
          "type": "string",
          "title": "Query String",
          "documented": true,
          "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```",
          "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```"
        }
      ],
      "documented": true,
      "title": "disabled",
      "markdownDescription": "This key defines whether the value of an input is editable in the *Data Editor* or the sidebar of the *Visual Editor* or *Content Editor*.\n\nDisabled inputs are useful if you want CloudCannon to display the input value, but prevent team members from editing the value outside of the Source\nEditor.\n\nThe value of this key can be a boolean or a string. A boolean value of `true` will prevent team members from editing the value.\n\nA string value can prevent team members from editing an input based on the value of another input.\n\nYou can reverse the value with a `!` character at the beginning.\n\n* `published` hides an input when the sibling input `published` is truthy\n* `!published` hides an input when the sibling input `published` is falsy\n\nFor reverse values in `YAML` files, the string should be in `'` or `\"` quotation marks.\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 the `date_created` Date 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    disabled: true\n    instance_value: NOW\n    options:\n      timezone: Etc/UTC\n```"
    },
    "type._inputs.*.instance_value": {
      "title": "Instance Value",
      "description": "This key defines whether an input is automatically populated with a value when the input is created.\n\nThis occurs when creating a new file, or adding array items containing this input.\n\nValid values are `UUID` or `NOW`.\n\n* `UUID` generates a uuidv4 key (<a href=\"<https://softwareengineering.stackexchange.com/a/130298>\" target=\"_blank\" rel=\"noopener\">extremely unlikely to generate duplicates)</a>, useful for identifying unique items (e.g. `6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b`)\n* `NOW` generates the current datetime in the Site's configured timezone\n\n## Examples\n\nIn this example, we have configured an input to automatically populate with a UUID when created.\n\n```yaml\n_inputs:\n  id:\n    type: text\n    instance_value: UUID\n```",
      "type": "string",
      "enum": [
        "UUID",
        "NOW"
      ],
      "documented": true,
      "markdownDescription": "This key defines whether an input is automatically populated with a value when the input is created.\n\nThis occurs when creating a new file, or adding array items containing this input.\n\nValid values are `UUID` or `NOW`.\n\n* `UUID` generates a uuidv4 key (<a href=\"https://softwareengineering.stackexchange.com/a/130298\" target=\"_blank\" rel=\"noopener\">extremely unlikely to generate duplicates)</a>, useful for identifying unique items (e.g. `6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b`)\n* `NOW` generates the current datetime in the Site's configured timezone\n\n## Examples\n\nIn this example, we have configured an input to automatically populate with a UUID when created.\n\n```yaml\n_inputs:\n  id:\n    type: text\n    instance_value: UUID\n```"
    },
    "type._inputs.*.disable_instance_value_rehydration": {
      "description": "This key toggles whether CloudCannon will rehydrate inputs configured with an `instance_value` with a new value when duplicated.\n\nSetting this key to `true` will prevent rehydration of instance values when inputs are duplicated.\n\n## Examples\n\nIn this example, CloudCannon will prevent rehydration of instance values when inputs are duplicated.\n\n```yaml\n_inputs:\n  id:\n    type: text\n    instance_value: UUID\n    disable_instance_value_rehydration: true\n```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_instance_value_rehydration",
      "markdownDescription": "This key toggles whether CloudCannon will rehydrate inputs configured with an `instance_value` with a new value when duplicated.\n\nSetting this key to `true` will prevent rehydration of instance values when inputs are duplicated.\n\n## Examples\n\nIn this example, CloudCannon will prevent rehydration of instance values when inputs are duplicated.\n\n```yaml\n_inputs:\n  id:\n    type: text\n    instance_value: UUID\n    disable_instance_value_rehydration: true\n```"
    },
    "type._inputs.*.cascade": {
      "description": "This key defines whether CloudCannon should merge this input configuration with any matching, less specific configurations elsewhere in the\nconfiguration cascade.\n\nThe [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/) works by finding the most specific `_inputs` entry.\n\nUsually, once an option is found in the cascade, there's no reason to keep looking.\n\nWhen this key is `true`, the cascade continues looking and each entry found is merged.\n\nThis key allows you to define some options globally while using specific options for other keys at different levels of the cascade.\n\nFor example, define a `comment` globally, but use collection-specific `label` for inputs in different collections.\n\nYou can stop the cascade at any point in the configuration cascade by setting `cascade` to `false`.\n\n## Examples\n\nIn this example, we have configured cascade to merge input configurations across the configuration cascade.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    cascade: true\n    comment: Global comment for all title inputs\n```",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "cascade",
      "markdownDescription": "This key defines whether CloudCannon should merge this input configuration with any matching, less specific configurations elsewhere in the\nconfiguration cascade.\n\nThe [configuration cascade](https://cloudcannon.com/documentation/articles/using-the-configuration-cascade/) works by finding the most specific `_inputs` entry.\n\nUsually, once an option is found in the cascade, there's no reason to keep looking.\n\nWhen this key is `true`, the cascade continues looking and each entry found is merged.\n\nThis key allows you to define some options globally while using specific options for other keys at different levels of the cascade.\n\nFor example, define a `comment` globally, but use collection-specific `label` for inputs in different collections.\n\nYou can stop the cascade at any point in the configuration cascade by setting `cascade` to `false`.\n\n## Examples\n\nIn this example, we have configured cascade to merge input configurations across the configuration cascade.\n\n```yaml\n_inputs:\n  title:\n    type: text\n    cascade: true\n    comment: Global comment for all title inputs\n```"
    },
    "type._inputs.*.options.max_length": {
      "description": "This key defines the maximum string length, in characters, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will warn you when an Input value is too long.\n\nIf the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your\nchanges, or discard your unsaved changes.\n\nValue can be any non-negative integer.\n\nIf this key is set to `0`, CloudCannon requires the Input to be empty.\n\nIf `options.min_length` is also configured, this key cannot be a smaller number.\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 enter a blog description using the Rich Text `seo_description` Input. This Input limits you to a maximum of 125 characters.\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      min_length: 25\n```",
      "type": "number",
      "documented": true,
      "title": "max_length",
      "markdownDescription": "This key defines the maximum string length, in characters, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will warn you when an Input value is too long.\n\nIf the Input already contains a longer value, CloudCannon will require you to remove characters until the Input contains a valid string to save your\nchanges, or discard your unsaved changes.\n\nValue can be any non-negative integer.\n\nIf this key is set to `0`, CloudCannon requires the Input to be empty.\n\nIf `options.min_length` is also configured, this key cannot be a smaller number.\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 enter a blog description using the Rich Text `seo_description` Input. This Input limits you to a maximum of 125 characters.\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      min_length: 25\n```"
    },
    "type._inputs.*.options.max_length_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_length`.\n\nThis key requires you to define `options.max_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```",
      "type": "string",
      "documented": true,
      "title": "max_length_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_length`.\n\nThis key requires you to define `options.max_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```"
    },
    "type._inputs.*.options.min_length": {
      "description": "This key defines the minimum string length, in characters, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will warn you when an Input value is too short.\n\nIf the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your\nchanges, or discard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.max_length` is also configured, this key cannot be a greater number.\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 enter a blog description using the Rich Text `seo_description` Input. This Input requires a minimum of 25 characters.\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      min_length: 25\n```",
      "type": "number",
      "documented": true,
      "title": "min_length",
      "markdownDescription": "This key defines the minimum string length, in characters, that CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will warn you when an Input value is too short.\n\nIf the Input already contains a shorter value, CloudCannon will require you to add characters until the Input contains a valid string to save your\nchanges, or discard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.max_length` is also configured, this key cannot be a greater number.\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 enter a blog description using the Rich Text `seo_description` Input. This Input requires a minimum of 25 characters.\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      min_length: 25\n```"
    },
    "type._inputs.*.options.min_length_message": {
      "description": "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```",
      "type": "string",
      "documented": true,
      "title": "min_length_message",
      "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```"
    },
    "type._inputs.*.options.max_words": {
      "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.",
      "type": "number",
      "documented": true,
      "title": "max_words",
      "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."
    },
    "type._inputs.*.options.max_words_message": {
      "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.",
      "type": "string",
      "documented": true,
      "title": "max_words_message",
      "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."
    },
    "type._inputs.*.options.min_words": {
      "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.",
      "type": "number",
      "documented": true,
      "title": "min_words",
      "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."
    },
    "type._inputs.*.options.min_words_message": {
      "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`.",
      "type": "string",
      "documented": true,
      "title": "min_words_message",
      "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`."
    },
    "type._inputs.*.options.max_graphemes": {
      "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.",
      "type": "number",
      "documented": true,
      "title": "max_graphemes",
      "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."
    },
    "type._inputs.*.options.max_graphemes_message": {
      "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.",
      "type": "string",
      "documented": true,
      "title": "max_graphemes_message",
      "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."
    },
    "type._inputs.*.options.min_graphemes": {
      "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.",
      "type": "number",
      "documented": true,
      "title": "min_graphemes",
      "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."
    },
    "type._inputs.*.options.min_graphemes_message": {
      "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`.",
      "type": "string",
      "documented": true,
      "title": "min_graphemes_message",
      "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`."
    },
    "type._inputs.*.options.locale": {
      "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.",
      "type": "string",
      "documented": true,
      "title": "locale",
      "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."
    },
    "type._inputs.*.options.pattern": {
      "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```",
      "type": "string",
      "documented": true,
      "title": "pattern",
      "markdownDescription": "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```"
    },
    "type._inputs.*.options.pattern_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.pattern`.\n\nThis key requires you to define `options.pattern`.\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 use the correct email format in the `contact_email` Input using a pattern message.\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```",
      "type": "string",
      "documented": true,
      "title": "pattern_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.pattern`.\n\nThis key requires you to define `options.pattern`.\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 use the correct email format in the `contact_email` Input using a pattern message.\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```"
    },
    "type._inputs.*.options.pattern_flags": {
      "description": "This key defines the flags (e.g. case-insensitive searching) for the regular expression set in `options.pattern`.\n\n## Examples\n\nIn this example, we have configured pattern flags for a text input to enable case-insensitive searching.\n\n```yaml\n_inputs:\n  search_term:\n    type: text\n    options:\n      pattern: \"^[a-z]+$\"\n      pattern_flags:\n        ignore_case: true\n```",
      "type": "object",
      "properties": {
        "global": {
          "description": "This key defines the `g` flag - Search globally.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "global",
          "markdownDescription": "This key defines the `g` flag - Search globally."
        },
        "ignore_case": {
          "description": "This key defines the `i` flag - Case-insensitive.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "ignore_case",
          "markdownDescription": "This key defines the `i` flag - Case-insensitive."
        },
        "multiline": {
          "description": "This key defines the `m` flag - `^` and `$` match the start and end of each line rather than the entire string.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "multiline",
          "markdownDescription": "This key defines the `m` flag - `^` and `$` match the start and end of each line rather than the entire string."
        },
        "dot_all": {
          "description": "This key defines the `s` flag - `.` matches newline characters.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "dot_all",
          "markdownDescription": "This key defines the `s` flag - `.` matches newline characters."
        },
        "unicode": {
          "description": "This key defines the `u` flag - Pattern is treated as a sequence of Unicode code points.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "unicode",
          "markdownDescription": "This key defines the `u` flag - Pattern is treated as a sequence of Unicode code points."
        },
        "unicode_sets": {
          "description": "This key defines the `v` flag for extended `unicode` mode.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "unicode_sets",
          "markdownDescription": "This key defines the `v` flag for extended `unicode` mode."
        }
      },
      "markdownDescription": "This key defines the flags (e.g. case-insensitive searching) for the regular expression set in `options.pattern`.\n\n## Examples\n\nIn this example, we have configured pattern flags for a text input to enable case-insensitive searching.\n\n```yaml\n_inputs:\n  search_term:\n    type: text\n    options:\n      pattern: \"^[a-z]+$\"\n      pattern_flags:\n        ignore_case: true\n```",
      "documented": true,
      "title": "pattern_flags",
      "additionalProperties": false
    },
    "type._inputs.*.options.required": {
      "description": "This key toggles whether CloudCannon requires this Input to have a value.\n\nSetting this key to `true` will require you to enter a value to save your changes, or discard your unsaved changes.\n\nBy default, this key is `false` (i.e., CloudCannon does not require this Input to have a value).\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 want to require our team to enter an `author` value for markup files with this Input.\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```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "required",
      "markdownDescription": "This key toggles whether CloudCannon requires this Input to have a value.\n\nSetting this key to `true` will require you to enter a value to save your changes, or discard your unsaved changes.\n\nBy default, this key is `false` (i.e., CloudCannon does not require this Input to have a value).\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 want to require our team to enter an `author` value for markup files with this Input.\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```"
    },
    "type._inputs.*.options.required_message": {
      "description": "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```",
      "type": "string",
      "documented": true,
      "title": "required_message",
      "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```"
    },
    "type._inputs.*.options.empty_type(text)": {
      "default": "null",
      "description": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values.",
      "type": "string",
      "enum": [
        "null",
        "string"
      ],
      "documented": true,
      "title": "Text Empty Type",
      "markdownDescription": "This key defines how an 'empty' value will be saved. Does not apply to existing empty values."
    },
    "PreviewEntries": {
      "anyOf": [
        {
          "$ref": "#/$defs/type.preview-entry.(array)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(raw-text)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(false)"
        }
      ],
      "documented": false,
      "title": "icon_color(previewentries)"
    },
    "type.preview-entry.(array)": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/type.preview-entry"
      },
      "title": "Array Preview Entry",
      "documented": true,
      "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```",
      "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```"
    },
    "type.preview-entry": {
      "anyOf": [
        {
          "$ref": "#/$defs/type.preview-entry.(key)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(template)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(text)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(raw-text)"
        },
        {
          "$ref": "#/$defs/type.preview-entry.(false)"
        }
      ],
      "title": "Preview Entry",
      "documented": true,
      "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```",
      "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```"
    },
    "type.preview-entry.(key)": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "title": "Key Value",
          "documented": true,
          "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```",
          "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```"
        }
      },
      "required": [
        "key"
      ],
      "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```",
      "title": "Key Preview Entry",
      "documented": true,
      "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```",
      "additionalProperties": false
    },
    "type.preview-entry.(template)": {
      "type": "object",
      "properties": {
        "template": {
          "type": "string",
          "title": "Template Value",
          "documented": true,
          "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```",
          "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```"
        }
      },
      "required": [
        "template"
      ],
      "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```",
      "title": "Template Preview Entry",
      "documented": true,
      "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```",
      "additionalProperties": false
    },
    "type.preview-entry.(text)": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "title": "Text Value",
          "documented": true,
          "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```",
          "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```"
        }
      },
      "required": [
        "text"
      ],
      "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```",
      "title": "Text Preview Entry",
      "documented": true,
      "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```",
      "additionalProperties": false
    },
    "type.preview-entry.(raw-text)": {
      "type": "string",
      "title": "Raw Text Preview Entry",
      "documented": true,
      "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```",
      "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```"
    },
    "type.preview-entry.(false)": {
      "type": "boolean",
      "const": false,
      "title": "False Preview Entry",
      "documented": true,
      "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```",
      "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```"
    },
    "TextareaInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "textarea",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "placeholder": {
              "description": "This key defines the text shown when this input has no value.\n\n## Examples\n\nIn this example, we have configured a placeholder for a *Textarea Input*.\n\n```yaml\n_inputs:\n  description:\n    type: textarea\n    options:\n      placeholder: Enter a description\n```",
              "type": "string",
              "documented": true,
              "title": "placeholder",
              "markdownDescription": "This key defines the text shown when this input has no value.\n\n## Examples\n\nIn this example, we have configured a placeholder for a *Textarea Input*.\n\n```yaml\n_inputs:\n  description:\n    type: textarea\n    options:\n      placeholder: Enter a description\n```"
            },
            "show_count": {
              "description": "This key toggles whether a character counter is shown below the input.\n\nSetting this key to `true` will show a character counter below the input.\n\n## Examples\n\nIn this example, CloudCannon will show a character counter below the *Textarea Input*.\n\n```yaml\n_inputs:\n  description:\n    type: textarea\n    options:\n      show_count: true\n```",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "show_count",
              "markdownDescription": "This key toggles whether a character counter is shown below the input.\n\nSetting this key to `true` will show a character counter below the input.\n\n## Examples\n\nIn this example, CloudCannon will show a character counter below the *Textarea Input*.\n\n```yaml\n_inputs:\n  description:\n    type: textarea\n    options:\n      show_count: true\n```"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Textarea Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "CodeInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "code",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "tab_size": {
              "default": 2,
              "type": "number",
              "documented": true,
              "title": "tab_size",
              "description": "This key defines the number of spaces inserted when the Tab key is pressed in a *Code Input*.\n\nThe value is a number representing the number of spaces. This affects both indentation behavior and how existing tabs are displayed.\n\n## Examples\n\nIn this example, we have configured a code input to use 4 spaces for indentation instead of the default 2.\n\n```yaml\n_inputs:\n  python_code:\n    type: code\n    label: Python Code\n    options:\n      tab_size: 4\n```",
              "markdownDescription": "This key defines the number of spaces inserted when the Tab key is pressed in a *Code Input*.\n\nThe value is a number representing the number of spaces. This affects both indentation behavior and how existing tabs are displayed.\n\n## Examples\n\nIn this example, we have configured a code input to use 4 spaces for indentation instead of the default 2.\n\n```yaml\n_inputs:\n  python_code:\n    type: code\n    label: Python Code\n    options:\n      tab_size: 4\n```"
            },
            "theme": {
              "default": "basic_dark",
              "allOf": [
                {
                  "$ref": "#/$defs/Theme"
                }
              ],
              "documented": true,
              "title": "theme",
              "description": "This key defines the color theme used for syntax highlighting in *Code Inputs*.\n\n\nBy default, this key is `basic_dark`.\n\n## Examples\n\nIn this example, we have configured a code input to use the `dracula` theme for a dark-colored editing experience.\n\n```yaml\n_inputs:\n  javascript_code:\n    type: code\n    label: JavaScript\n    options:\n      theme: dracula\n```",
              "markdownDescription": "This key defines the color theme used for syntax highlighting in *Code Inputs*.\n\n\nBy default, this key is `basic_dark`.\n\n## Examples\n\nIn this example, we have configured a code input to use the `dracula` theme for a dark-colored editing experience.\n\n```yaml\n_inputs:\n  javascript_code:\n    type: code\n    label: JavaScript\n    options:\n      theme: dracula\n```"
            },
            "show_gutter": {
              "default": true,
              "type": "boolean",
              "documented": true,
              "title": "show_gutter",
              "description": "This key toggles whether CloudCannon displays line numbers in the gutter of *Code Inputs*.\n\nSetting this key to `false` will hide line numbers in the left gutter of the code editor.\n\nBy default, this key is `true` (i.e., line numbers are displayed).\n\n## Examples\n\nIn this example, we have configured a code input to hide line numbers by setting `show_gutter` to `false`.\n\n```yaml\n_inputs:\n  css_code:\n    type: code\n    label: Custom CSS\n    options:\n      show_gutter: false\n```",
              "markdownDescription": "This key toggles whether CloudCannon displays line numbers in the gutter of *Code Inputs*.\n\nSetting this key to `false` will hide line numbers in the left gutter of the code editor.\n\nBy default, this key is `true` (i.e., line numbers are displayed).\n\n## Examples\n\nIn this example, we have configured a code input to hide line numbers by setting `show_gutter` to `false`.\n\n```yaml\n_inputs:\n  css_code:\n    type: code\n    label: Custom CSS\n    options:\n      show_gutter: false\n```"
            },
            "soft_wrap": {
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "soft_wrap",
              "description": "This key toggles whether long lines wrap to the next line in *Code Inputs*.\n\nSetting this key to `true` will wrap lines that exceed the width of the code area to the next line without adding a line break character.\n\nBy default, this key is `false` (i.e., long lines extend horizontally and require horizontal scrolling).\n\n## Examples\n\nIn this example, we have configured a code input to enable soft line wrapping for better readability of long lines.\n\n```yaml\n_inputs:\n  markdown_content:\n    type: code\n    label: Markdown\n    options:\n      soft_wrap: true\n```",
              "markdownDescription": "This key toggles whether long lines wrap to the next line in *Code Inputs*.\n\nSetting this key to `true` will wrap lines that exceed the width of the code area to the next line without adding a line break character.\n\nBy default, this key is `false` (i.e., long lines extend horizontally and require horizontal scrolling).\n\n## Examples\n\nIn this example, we have configured a code input to enable soft line wrapping for better readability of long lines.\n\n```yaml\n_inputs:\n  markdown_content:\n    type: code\n    label: Markdown\n    options:\n      soft_wrap: true\n```"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "max_visible_lines": {
              "description": "This key defines the maximum number of visible lines for this input, effectively controlling maximum height.\n\nWhen the containing text exceeds this number, the input becomes a scroll area.",
              "type": "number",
              "documented": true,
              "title": "max_visible_lines",
              "markdownDescription": "This key defines the maximum number of visible lines for this input, effectively controlling maximum height.\n\nWhen the containing text exceeds this number, the input becomes a scroll area."
            },
            "min_visible_lines": {
              "description": "This key defines the minimum number of visible lines for this input, effectively controlling initial height.\n\nWhen the containing text exceeds this number, the input grows line by line to the lines defined by `max_visible_lines`.",
              "type": "number",
              "documented": true,
              "title": "min_visible_lines",
              "markdownDescription": "This key defines the minimum number of visible lines for this input, effectively controlling initial height.\n\nWhen the containing text exceeds this number, the input grows line by line to the lines defined by `max_visible_lines`."
            },
            "syntax": {
              "description": "This key defines how the editor parses your content for syntax highlighting.\n\nShould be set to the language of the code going into the input.",
              "allOf": [
                {
                  "$ref": "#/$defs/Syntax"
                }
              ],
              "documented": true,
              "title": "syntax",
              "markdownDescription": "This key defines how the editor parses your content for syntax highlighting.\n\nShould be set to the language of the code going into the input."
            }
          },
          "markdownDescription": "This key defines options that are specific to Code Inputs.",
          "description": "This key defines options that are specific to Code Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for code or mono-spaced plain text content.",
      "title": "Code Input",
      "description": "This key defines an editing interface for code or mono-spaced plain text content.",
      "documented": true,
      "additionalProperties": false
    },
    "Theme": {
      "type": "string",
      "enum": [
        "atomone",
        "basic_dark",
        "basic_light",
        "darcula",
        "dracula",
        "duotone_dark",
        "duotone_light",
        "eclipse",
        "github_dark",
        "github_light",
        "gruvbox_dark",
        "gruvbox_light",
        "material_dark",
        "material_light",
        "solarized_dark",
        "solarized_light",
        "sublime",
        "tokyo_night",
        "tokyo_night_day",
        "tokyo_night_storm",
        "tomorrow_night_blue",
        "vscode_dark",
        "vscode_light",
        "xcode_dark",
        "xcode_light"
      ],
      "documented": false,
      "title": "theme(theme)"
    },
    "Syntax": {
      "type": "string",
      "enum": [
        "c_cpp",
        "clojure",
        "cobol",
        "coffee",
        "csharp",
        "css",
        "d",
        "dart",
        "diff",
        "dockerfile",
        "eiffel",
        "elm",
        "erlang",
        "forth",
        "fortran",
        "fsharp",
        "gherkin",
        "golang",
        "groovy",
        "haskell",
        "haskell_cabal",
        "haxe",
        "html",
        "java",
        "javascript",
        "json",
        "julia",
        "kotlin",
        "less",
        "liquid",
        "livescript",
        "lua",
        "markdown",
        "mysql",
        "nginx",
        "nsis",
        "objectivec",
        "ocaml",
        "pascal",
        "pgsql",
        "pig",
        "powershell",
        "properties",
        "protobuf",
        "puppet",
        "python",
        "r",
        "ruby",
        "rust",
        "sass",
        "scala",
        "scheme",
        "scss",
        "sh",
        "sql",
        "stylus",
        "swift",
        "tcl",
        "toml",
        "turtle",
        "typescript",
        "vbscript",
        "velocity",
        "verilog",
        "vhdl",
        "xml",
        "xquery",
        "yaml"
      ],
      "title": "Syntax",
      "description": "Available syntax highlighting languages for code editors in CloudCannon.",
      "documented": false,
      "markdownDescription": "Available syntax highlighting languages for code editors in CloudCannon."
    },
    "ColorInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "color",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "format": {
              "description": "This key defines what format the color value is saved as.\n\nDefaults to the naming convention, or \"hex\" if that is unset.",
              "type": "string",
              "enum": [
                "rgb",
                "hex",
                "hsl",
                "hsv"
              ],
              "documented": true,
              "title": "format",
              "markdownDescription": "This key defines what format the color value is saved as.\n\nDefaults to the naming convention, or \"hex\" if that is unset."
            },
            "alpha": {
              "description": "This key toggles whether CloudCannon will show a control for adjusting the transparency of the selected color.\n\nSetting this key to `true` will show a control for adjusting the transparency of the selected color.\n\nBy default, this key uses the naming convention (i.e., enabled if the input key ends with \"a\").",
              "type": "boolean",
              "documented": true,
              "title": "alpha",
              "markdownDescription": "This key toggles whether CloudCannon will show a control for adjusting the transparency of the selected color.\n\nSetting this key to `true` will show a control for adjusting the transparency of the selected color.\n\nBy default, this key uses the naming convention (i.e., enabled if the input key ends with \"a\")."
            },
            "palette": {
              "type": "array",
              "items": {
                "type": "string",
                "documented": true,
                "title": "palette[*]",
                "description": "This key represents an individual color string in the `_inputs.*.(color-input).options.palette` array.\n\nThe value is a string that specifies a color in the predefined palette for *Color Inputs*. Each string can be a hex code (e.g., `#ff0000`), CSS color name, or other valid color format.\n\n## Examples\n\nIn this example, we have configured a color input with a palette containing a hex code color value.\n\n```yaml\n_inputs:\n  primary_color:\n    type: color\n    label: Primary Color\n    options:\n      palette:\n        - '#ff0000'\n```\n\nIn this example, we have configured a color input with a palette containing a CSS color name.\n\n```yaml\n_inputs:\n  accent_color:\n    type: color\n    label: Accent Color\n    options:\n      palette:\n        - red\n```",
                "markdownDescription": "This key represents an individual color string in the `_inputs.*.(color-input).options.palette` array.\n\nThe value is a string that specifies a color in the predefined palette for *Color Inputs*. Each string can be a hex code (e.g., `#ff0000`), CSS color name, or other valid color format.\n\n## Examples\n\nIn this example, we have configured a color input with a palette containing a hex code color value.\n\n```yaml\n_inputs:\n  primary_color:\n    type: color\n    label: Primary Color\n    options:\n      palette:\n        - '#ff0000'\n```\n\nIn this example, we have configured a color input with a palette containing a CSS color name.\n\n```yaml\n_inputs:\n  accent_color:\n    type: color\n    label: Accent Color\n    options:\n      palette:\n        - red\n```"
              },
              "documented": true,
              "title": "palette",
              "description": "This key defines a predefined color palette for *Color Inputs*.\n\nThe value is an array of color strings. Each string can be a hex code (e.g., `#ff0000`), CSS color name, or other valid color format.\n\nWhen a palette is configured, users can select colors from the palette in addition to using the color picker (unless `hide_picker` is set to `true`).\n\n## Examples\n\nIn this example, we have configured a color input with a palette of brand colors for quick selection.\n\n```yaml\n_inputs:\n  primary_color:\n    type: color\n    label: Primary Color\n    options:\n      palette:\n        - '#ff0000'\n        - '#00ff00'\n        - '#0000ff'\n        - '#ffff00'\n```\n\nIn this example, we have configured a color input with a palette using CSS color names.\n\n```yaml\n_inputs:\n  accent_color:\n    type: color\n    label: Accent Color\n    options:\n      palette:\n        - red\n        - blue\n        - green\n        - yellow\n```",
              "markdownDescription": "This key defines a predefined color palette for *Color Inputs*.\n\nThe value is an array of color strings. Each string can be a hex code (e.g., `#ff0000`), CSS color name, or other valid color format.\n\nWhen a palette is configured, users can select colors from the palette in addition to using the color picker (unless `hide_picker` is set to `true`).\n\n## Examples\n\nIn this example, we have configured a color input with a palette of brand colors for quick selection.\n\n```yaml\n_inputs:\n  primary_color:\n    type: color\n    label: Primary Color\n    options:\n      palette:\n        - '#ff0000'\n        - '#00ff00'\n        - '#0000ff'\n        - '#ffff00'\n```\n\nIn this example, we have configured a color input with a palette using CSS color names.\n\n```yaml\n_inputs:\n  accent_color:\n    type: color\n    label: Accent Color\n    options:\n      palette:\n        - red\n        - blue\n        - green\n        - yellow\n```"
            },
            "hide_picker": {
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "hide_picker",
              "description": "This key toggles whether CloudCannon hides the color picker UI in *Color Inputs*.\n\nSetting this key to `true` will hide the color picker interface, requiring users to enter color values manually or select from a palette if one is configured.\n\nBy default, this key is `false` (i.e., the color picker is displayed).\n\n## Examples\n\nIn this example, we have configured a color input to hide the picker UI, requiring users to select from the predefined palette or enter values manually.\n\n```yaml\n_inputs:\n  brand_color:\n    type: color\n    label: Brand Color\n    options:\n      palette:\n        - '#ff0000'\n        - '#00ff00'\n        - '#0000ff'\n      hide_picker: true\n```",
              "markdownDescription": "This key toggles whether CloudCannon hides the color picker UI in *Color Inputs*.\n\nSetting this key to `true` will hide the color picker interface, requiring users to enter color values manually or select from a palette if one is configured.\n\nBy default, this key is `false` (i.e., the color picker is displayed).\n\n## Examples\n\nIn this example, we have configured a color input to hide the picker UI, requiring users to select from the predefined palette or enter values manually.\n\n```yaml\n_inputs:\n  brand_color:\n    type: color\n    label: Brand Color\n    options:\n      palette:\n        - '#ff0000'\n        - '#00ff00'\n        - '#0000ff'\n      hide_picker: true\n```"
            }
          },
          "markdownDescription": "This key defines options that are specific to Color Inputs.",
          "description": "This key defines options that are specific to Color Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for color values.",
      "title": "Color Input",
      "description": "This key defines an editing interface for color values.",
      "documented": true,
      "additionalProperties": false
    },
    "BooleanInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "enum": [
            "checkbox",
            "switch"
          ],
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Boolean Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "NumberInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "number",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(number)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "min": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.min"
                }
              ],
              "documented": false,
              "title": "min"
            },
            "max": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.max"
                }
              ],
              "documented": false,
              "title": "max"
            },
            "step": {
              "$ref": "#/$defs/type._inputs.*.options.step"
            },
            "min_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_message"
            },
            "max_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_message"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Number Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.options.empty_type(number)": {
      "default": "null",
      "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```",
      "type": "string",
      "enum": [
        "null",
        "number"
      ],
      "documented": true,
      "title": "Number Empty Type",
      "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```"
    },
    "type._inputs.*.options.min": {
      "type": "number",
      "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```",
      "documented": true,
      "title": "min",
      "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```"
    },
    "type._inputs.*.options.max": {
      "type": "number",
      "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```",
      "documented": true,
      "title": "max",
      "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```"
    },
    "type._inputs.*.options.step": {
      "description": "This key defines a number that specifies the granularity that the value must adhere to, or the special value any, which allows any decimal value between `max` and `min`.\n\n## Examples\n\nIn this example, we have configured a *Range Input* to use a step value of 5.\n\n```yaml\n_inputs:\n  rating:\n    type: range\n    options:\n      min: 0\n      max: 100\n      step: 5\n```",
      "type": "number",
      "documented": true,
      "title": "step",
      "markdownDescription": "This key defines a number that specifies the granularity that the value must adhere to, or the special value any, which allows any decimal value between `max` and `min`.\n\n## Examples\n\nIn this example, we have configured a *Range Input* to use a step value of 5.\n\n```yaml\n_inputs:\n  rating:\n    type: range\n    options:\n      min: 0\n      max: 100\n      step: 5\n```"
    },
    "type._inputs.*.options.min_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.min`.\nThis key requires you to define `options.min`.\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```",
      "type": "string",
      "documented": true,
      "title": "min_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.min`.\nThis key requires you to define `options.min`.\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```"
    },
    "type._inputs.*.options.max_message": {
      "description": "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```",
      "type": "string",
      "documented": true,
      "title": "max_message",
      "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```"
    },
    "RangeInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "range",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(number)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "min": {
              "$ref": "#/$defs/type._inputs.*.options.min"
            },
            "max": {
              "$ref": "#/$defs/type._inputs.*.options.max"
            },
            "step": {
              "$ref": "#/$defs/type._inputs.*.options.step"
            },
            "min_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_message"
            },
            "max_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_message"
            }
          },
          "required": [
            "min",
            "max"
          ],
          "markdownDescription": "This key defines options that are specific to Range Inputs.",
          "description": "This key defines options that are specific to Range Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines a slider interface for selecting a numeric value.",
      "title": "Range Input",
      "description": "This key defines a slider interface for selecting a numeric value.",
      "documented": true,
      "additionalProperties": false
    },
    "RichTextInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "enum": [
            "html",
            "markdown"
          ],
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "mime_type": {
              "$ref": "#/$defs/type._inputs.*.options.mime_type"
            },
            "resize_style": {
              "$ref": "#/$defs/type._inputs.*.options.resize_style"
            },
            "width": {
              "$ref": "#/$defs/type._inputs.*.options.width"
            },
            "height": {
              "$ref": "#/$defs/type._inputs.*.options.height"
            },
            "expandable": {
              "$ref": "#/$defs/type._inputs.*.options.expandable"
            },
            "image_size_attributes": {
              "$ref": "#/$defs/type._inputs.*.options.image_size_attributes"
            },
            "allowed_sources": {
              "$ref": "#/$defs/type._inputs.*.options.allowed_sources"
            },
            "prevent_resize_existing_files": {
              "$ref": "#/$defs/type._inputs.*.options.prevent_resize_existing_files"
            },
            "sizes": {
              "$ref": "#/$defs/type._inputs.*.options.sizes"
            },
            "paths": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.paths"
                }
              ],
              "documented": false,
              "title": "paths"
            },
            "bold": {
              "$ref": "#/$defs/type._editables.*.bold"
            },
            "copyformatting": {
              "$ref": "#/$defs/type._editables.*.copyformatting"
            },
            "italic": {
              "$ref": "#/$defs/type._editables.*.italic"
            },
            "link": {
              "$ref": "#/$defs/type._editables.*.link"
            },
            "redo": {
              "$ref": "#/$defs/type._editables.*.redo"
            },
            "removeformat": {
              "$ref": "#/$defs/type._editables.*.removeformat"
            },
            "strike": {
              "$ref": "#/$defs/type._editables.*.strike"
            },
            "subscript": {
              "$ref": "#/$defs/type._editables.*.subscript"
            },
            "superscript": {
              "$ref": "#/$defs/type._editables.*.superscript"
            },
            "underline": {
              "$ref": "#/$defs/type._editables.*.underline"
            },
            "undo": {
              "$ref": "#/$defs/type._editables.*.undo"
            },
            "remove_custom_markup": {
              "$ref": "#/$defs/type._editables.*.remove_custom_markup"
            },
            "allow_custom_markup": {
              "$ref": "#/$defs/type._editables.*.allow_custom_markup"
            },
            "blockquote": {
              "$ref": "#/$defs/type._editables.*.blockquote"
            },
            "bulletedlist": {
              "$ref": "#/$defs/type._editables.*.bulletedlist"
            },
            "center": {
              "$ref": "#/$defs/type._editables.*.center"
            },
            "code_inline": {
              "$ref": "#/$defs/type._editables.*.code_inline"
            },
            "code_block": {
              "$ref": "#/$defs/type._editables.*.code_block"
            },
            "code": {
              "$ref": "#/$defs/type._editables.*.code"
            },
            "embed": {
              "$ref": "#/$defs/type._editables.*.embed"
            },
            "format": {
              "$ref": "#/$defs/type._editables.*.format"
            },
            "horizontalrule": {
              "$ref": "#/$defs/type._editables.*.horizontalrule"
            },
            "image": {
              "$ref": "#/$defs/type._editables.*.image"
            },
            "indent": {
              "$ref": "#/$defs/type._editables.*.indent"
            },
            "justify": {
              "$ref": "#/$defs/type._editables.*.justify"
            },
            "left": {
              "$ref": "#/$defs/type._editables.*.left"
            },
            "numberedlist": {
              "$ref": "#/$defs/type._editables.*.numberedlist"
            },
            "outdent": {
              "$ref": "#/$defs/type._editables.*.outdent"
            },
            "right": {
              "$ref": "#/$defs/type._editables.*.right"
            },
            "snippet": {
              "$ref": "#/$defs/type._editables.*.snippet"
            },
            "styles": {
              "$ref": "#/$defs/type._editables.*.styles"
            },
            "table": {
              "$ref": "#/$defs/type._editables.*.table"
            },
            "join_above": {
              "$ref": "#/$defs/type._editables.*.join_above"
            },
            "join_below": {
              "$ref": "#/$defs/type._editables.*.join_below"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "allow_resize": {
              "deprecated": true,
              "type": "boolean",
              "documented": true,
              "title": "allow_resize",
              "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).",
              "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)."
            },
            "prevent_resize": {
              "description": "Shows or hides the resize handler to vertically resize the input.",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "prevent_resize",
              "markdownDescription": "Shows or hides the resize handler to vertically resize the input."
            },
            "initial_height": {
              "description": "This key defines the initial height of this input in pixels (px).",
              "type": "number",
              "documented": true,
              "title": "initial_height",
              "markdownDescription": "This key defines the initial height of this input in pixels (px)."
            }
          },
          "markdownDescription": "This key defines options that are specific to Rich Text Inputs.",
          "description": "This key defines options that are specific to Rich Text Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for HTML markup content.",
      "title": "Rich Text Input",
      "description": "This key defines an editing interface for HTML markup content.",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.options.mime_type": {
      "title": "Mime Type",
      "description": "This key defines what format an image is converted to prior to upload.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to convert images to WebP format prior to upload.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      mime_type: image/webp\n```",
      "type": "string",
      "enum": [
        "image/jpeg",
        "image/png",
        "image/webp"
      ],
      "documented": true,
      "markdownDescription": "This key defines what format an image is converted to prior to upload.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to convert images to WebP format prior to upload.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      mime_type: image/webp\n```"
    },
    "type._inputs.*.options.resize_style": {
      "title": "Resize Style",
      "description": "This key defines how image files are resized prior to upload, using a bounding box defined by `width` and `height` options.\n\nValid values are `cover`, `contain`, `crop`, or `stretch`:\n\n* `cover` keeps aspect ratio and ensures the image covers the bounding box\n* `contain` keeps aspect ratio and ensures the image fits inside the bounding box\n* `crop` prompts the user with and interface to select an aspect-ratio-respecting area\n* `stretch` ignores aspect ratio and resizes the image to the bounding box\n\nThis key does not apply to existing images, and does not work if `width` and `height` options are not defined.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to resize images using the `cover` style to ensure images cover the bounding box while maintaining aspect ratio.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n```",
      "default": "contain",
      "type": "string",
      "enum": [
        "cover",
        "contain",
        "stretch",
        "crop"
      ],
      "documented": true,
      "markdownDescription": "This key defines how image files are resized prior to upload, using a bounding box defined by `width` and `height` options.\n\nValid values are `cover`, `contain`, `crop`, or `stretch`:\n\n* `cover` keeps aspect ratio and ensures the image covers the bounding box\n* `contain` keeps aspect ratio and ensures the image fits inside the bounding box\n* `crop` prompts the user with and interface to select an aspect-ratio-respecting area\n* `stretch` ignores aspect ratio and resizes the image to the bounding box\n\nThis key does not apply to existing images, and does not work if `width` and `height` options are not defined.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to resize images using the `cover` style to ensure images cover the bounding box while maintaining aspect ratio.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n```"
    },
    "type._inputs.*.options.width": {
      "title": "Width",
      "description": "This key defines the width of the bounding box used in the resizing method defined by `resize_style`.",
      "type": "number",
      "documented": true,
      "markdownDescription": "This key defines the width of the bounding box used in the resizing method defined by `resize_style`."
    },
    "type._inputs.*.options.height": {
      "title": "Height",
      "description": "This key defines the height of the bounding box used in the resizing method defined by `resize_style`.\n\n## Examples\n\nIn this example, we have configured the height of the bounding box for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n```",
      "type": "number",
      "documented": true,
      "markdownDescription": "This key defines the height of the bounding box used in the resizing method defined by `resize_style`.\n\n## Examples\n\nIn this example, we have configured the height of the bounding box for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n```"
    },
    "type._inputs.*.options.expandable": {
      "title": "Expandable",
      "description": "This key defines whether you can upscale an image to fit the bounding box while resizing an image prior to upload.\n\nHas no effect if files are not resized.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to allow upscaling images to fit the bounding box while resizing.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n      expandable: true\n```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "markdownDescription": "This key defines whether you can upscale an image to fit the bounding box while resizing an image prior to upload.\n\nHas no effect if files are not resized.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to allow upscaling images to fit the bounding box while resizing.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n      expandable: true\n```"
    },
    "type._inputs.*.options.image_size_attributes": {
      "title": "Image Size Attributes",
      "description": "This key toggles whether CloudCannon will instruct a rich text editor to save `width` and `height` attributes on image elements.\n\nSetting this key to `true` will instruct the rich text editor to save `width` and `height` attributes on image elements. This can prevent pop-in as a page loads.\n\nBy default, this key is `false` (i.e., width and height attributes are not saved on image elements). This defaults to `true` if the [Image Size Attributes site flag](https://cloudcannon.com/documentation/articles/legacy-option-flags/#image-size-attributes-default-behaviour) is enabled (this is enabled for sites created before June 23 2023, in order to keep those sites working).\n\n## Examples\n\nIn this example, CloudCannon will save width and height attributes on image elements in a *Rich Text Input*.\n\n```yaml\n_inputs:\n  content:\n    type: markdown\n    options:\n      image_size_attributes: true\n```",
      "default": true,
      "type": "boolean",
      "documented": true,
      "markdownDescription": "This key toggles whether CloudCannon will instruct a rich text editor to save `width` and `height` attributes on image elements.\n\nSetting this key to `true` will instruct the rich text editor to save `width` and `height` attributes on image elements. This can prevent pop-in as a page loads.\n\nBy default, this key is `false` (i.e., width and height attributes are not saved on image elements). This defaults to `true` if the [Image Size Attributes site flag](https://cloudcannon.com/documentation/articles/legacy-option-flags/#image-size-attributes-default-behaviour) is enabled (this is enabled for sites created before June 23 2023, in order to keep those sites working).\n\n## Examples\n\nIn this example, CloudCannon will save width and height attributes on image elements in a *Rich Text Input*.\n\n```yaml\n_inputs:\n  content:\n    type: markdown\n    options:\n      image_size_attributes: true\n```"
    },
    "type._inputs.*.options.allowed_sources": {
      "title": "Allowed Sources",
      "description": "This key defines which sources and DAMs you are allowed to upload to and browse.\n\nThe value can be an array of strings. Valid values include `site-files` and the reference key for any DAM connected to your site.\n\nIf `site-files` is omitted from the array, site files will not be available as an asset source for this input.\n\n## Examples\n\nIn this example, we have configured allowed sources for an *Image Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      allowed_sources:\n        - site-files\n        - my-cloudinary-dam\n```",
      "type": "array",
      "items": {
        "type": "string",
        "documented": true,
        "title": "allowed_sources[*]",
        "description": "This key defines which sources and DAMs you are allowed to upload to and browse.\n\nThe value can be an array of strings. Valid values include `site-files` and the reference key for any DAM connected to your site.\n\nIf `site-files` is omitted from the array, site files will not be available as an asset source for this input.\n\n## Examples\n\nIn this example, we have configured allowed sources for an *Image Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      allowed_sources:\n        - site-files\n        - my-cloudinary-dam\n```",
        "markdownDescription": "This key defines which sources and DAMs you are allowed to upload to and browse.\n\nThe value can be an array of strings. Valid values include `site-files` and the reference key for any DAM connected to your site.\n\nIf `site-files` is omitted from the array, site files will not be available as an asset source for this input.\n\n## Examples\n\nIn this example, we have configured allowed sources for an *Image Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      allowed_sources:\n        - site-files\n        - my-cloudinary-dam\n```"
      },
      "documented": true,
      "markdownDescription": "This key defines which sources and DAMs you are allowed to upload to and browse.\n\nThe value can be an array of strings. Valid values include `site-files` and the reference key for any DAM connected to your site.\n\nIf `site-files` is omitted from the array, site files will not be available as an asset source for this input.\n\n## Examples\n\nIn this example, we have configured allowed sources for an *Image Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      allowed_sources:\n        - site-files\n        - my-cloudinary-dam\n```"
    },
    "type._inputs.*.options.prevent_resize_existing_files": {
      "title": "Prevent Resize Existing Files",
      "description": "This key toggles whether CloudCannon will skip the image resizing process configured for this input when selecting existing images.\n\nSetting this key to `true` will skip the image resizing process when selecting existing images.\n\n## Examples\n\nIn this example, CloudCannon will skip the image resizing process when selecting existing images for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n      prevent_resize_existing_files: true\n```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "markdownDescription": "This key toggles whether CloudCannon will skip the image resizing process configured for this input when selecting existing images.\n\nSetting this key to `true` will skip the image resizing process when selecting existing images.\n\n## Examples\n\nIn this example, CloudCannon will skip the image resizing process when selecting existing images for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      width: 1200\n      height: 600\n      resize_style: cover\n      prevent_resize_existing_files: true\n```"
    },
    "type._inputs.*.options.sizes": {
      "title": "Sizes",
      "description": "This key defines definitions for creating additional images of different sizes when uploading or selecting existing files.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to create additional images of different sizes when uploading or selecting files.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      sizes:\n        - size: 2x\n        - size: 3x\n```",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "size": {
            "type": "string",
            "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```",
            "documented": true,
            "title": "size",
            "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```"
          },
          "target": {
            "description": "This key defines a reference to another input that is given the path to this additional image file.",
            "type": "string",
            "documented": true,
            "title": "target",
            "markdownDescription": "This key defines a reference to another input that is given the path to this additional image file."
          }
        },
        "required": [
          "size"
        ],
        "markdownDescription": "This key represents an individual size definition in the `options.sizes` array for *Image Inputs*.\n\nThe value is an object that can contain `size` and `target` properties.\n\n## Examples\n\nIn this example, we have configured a size definition for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      sizes:\n        - size: 2x\n          target: hero_image_2x\n```",
        "documented": true,
        "title": "sizes[*]",
        "description": "This key represents an individual size definition in the `options.sizes` array for *Image Inputs*.\n\nThe value is an object that can contain `size` and `target` properties.\n\n## Examples\n\nIn this example, we have configured a size definition for an *Image Input*.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      sizes:\n        - size: 2x\n          target: hero_image_2x\n```",
        "additionalProperties": false
      },
      "documented": true,
      "markdownDescription": "This key defines definitions for creating additional images of different sizes when uploading or selecting existing files.\n\n## Examples\n\nIn this example, we have configured an *Image Input* to create additional images of different sizes when uploading or selecting files.\n\n```yaml\n_inputs:\n  hero_image:\n    type: image\n    options:\n      sizes:\n        - size: 2x\n        - size: 3x\n```"
    },
    "type.paths": {
      "type": "object",
      "properties": {
        "static": {
          "$ref": "#/$defs/paths.static"
        },
        "uploads": {
          "$ref": "#/$defs/paths.uploads"
        },
        "uploads_filename": {
          "$ref": "#/$defs/paths.uploads_filename"
        },
        "dam_uploads": {
          "$ref": "#/$defs/paths.dam_uploads"
        },
        "dam_uploads_filename": {
          "$ref": "#/$defs/paths.dam_uploads_filename"
        },
        "dam_static": {
          "$ref": "#/$defs/paths.dam_static"
        },
        "uploads_use_relative_path": {
          "$ref": "#/$defs/paths.uploads_use_relative_path"
        }
      },
      "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```",
      "title": "Paths",
      "documented": true,
      "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```",
      "additionalProperties": false
    },
    "paths.static": {
      "type": "string",
      "documented": true,
      "title": "static",
      "description": "This key defines the path for the location of statically copied assets.\n\n## Examples\n\nIn this example, we have configured the static path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      static: /assets/\n```",
      "markdownDescription": "This key defines the path for the location of statically copied assets.\n\n## Examples\n\nIn this example, we have configured the static path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      static: /assets/\n```"
    },
    "paths.uploads": {
      "default": "uploads",
      "type": "string",
      "documented": true,
      "title": "uploads",
      "description": "This key defines the paths for the default location of newly uploaded site files.\n\nYou can use [dynamic placeholders](https://cloudcannon.com/documentation/articles/configure-your-template-strings/) for `uploads` and `dam_uploads`.\n\n## Examples\n\nIn this example, we have configured the uploads path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      uploads: /uploads/blog/\n```",
      "markdownDescription": "This key defines the paths for the default location of newly uploaded site files.\n\nYou can use [dynamic placeholders](https://cloudcannon.com/documentation/articles/configure-your-template-strings/) for `uploads` and `dam_uploads`.\n\n## Examples\n\nIn this example, we have configured the uploads path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      uploads: /uploads/blog/\n```"
    },
    "paths.uploads_filename": {
      "type": "string",
      "documented": true,
      "title": "uploads_filename",
      "description": "This key defines the path for the name of the uploaded file.\n\n## Examples\n\nIn this example, we have configured the uploads filename path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      uploads_filename: '{filename|slugify}'\n```",
      "markdownDescription": "This key defines the path for the name of the uploaded file.\n\n## Examples\n\nIn this example, we have configured the uploads filename path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      uploads_filename: '{filename|slugify}'\n```"
    },
    "paths.dam_uploads": {
      "type": "string",
      "documented": true,
      "title": "dam_uploads",
      "description": "This key defines the path for the default location of newly uploaded [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/)\nfiles.\n\nYou can use [dynamic placeholders](https://cloudcannon.com/documentation/articles/configure-your-template-strings/) for `uploads` and `dam_uploads`.\n\n## Examples\n\nIn this example, we have configured the DAM uploads path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_uploads: /dam/uploads/blog/\n```",
      "markdownDescription": "This key defines the path for the default location of newly uploaded [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/)\nfiles.\n\nYou can use [dynamic placeholders](https://cloudcannon.com/documentation/articles/configure-your-template-strings/) for `uploads` and `dam_uploads`.\n\n## Examples\n\nIn this example, we have configured the DAM uploads path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_uploads: /dam/uploads/blog/\n```"
    },
    "paths.dam_uploads_filename": {
      "type": "string",
      "documented": true,
      "title": "dam_uploads_filename",
      "description": "This key defines the path for the name of the uploaded file, when uploading [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/) files.\n\n## Examples\n\nIn this example, we have configured the DAM uploads filename path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_uploads_filename: '{filename|slugify}'\n```",
      "markdownDescription": "This key defines the path for the name of the uploaded file, when uploading [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/) files.\n\n## Examples\n\nIn this example, we have configured the DAM uploads filename path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_uploads_filename: '{filename|slugify}'\n```"
    },
    "paths.dam_static": {
      "type": "string",
      "documented": true,
      "title": "dam_static",
      "description": "This key defines the path for the location of statically copied assets for [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/) files.\n\n## Examples\n\nIn this example, we have configured the DAM static path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_static: /assets/dam/\n```",
      "markdownDescription": "This key defines the path for the location of statically copied assets for [DAM](https://cloudcannon.com/documentation/articles/introduction-to-assets-and-dams/) files.\n\n## Examples\n\nIn this example, we have configured the DAM static path for the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    paths:\n      dam_static: /assets/dam/\n```"
    },
    "paths.uploads_use_relative_path": {
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "uploads_use_relative_path",
      "description": "This key toggles whether CloudCannon will use relative paths instead of absolute paths for uploaded files.\n\nSetting this key to `true` will make CloudCannon use relative paths for uploaded files, which are relative to the file being edited rather than the repository root.\n\n## Examples\n\nIn this example, we have configured uploads to use relative paths for files uploaded in the Content Editor.\n\n```yaml\n_editables:\n  content:\n    paths:\n      uploads_use_relative_path: true\n```",
      "markdownDescription": "This key toggles whether CloudCannon will use relative paths instead of absolute paths for uploaded files.\n\nSetting this key to `true` will make CloudCannon use relative paths for uploaded files, which are relative to the file being edited rather than the repository root.\n\n## Examples\n\nIn this example, we have configured uploads to use relative paths for files uploaded in the Content Editor.\n\n```yaml\n_editables:\n  content:\n    paths:\n      uploads_use_relative_path: true\n```"
    },
    "type._editables.*.bold": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to bold selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to bold selected text.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "bold",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to bold selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to bold selected text."
    },
    "type._editables.*.copyformatting": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to copy formatting from selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to copy formatting from selected text. Applies to `bold`, `italic`, `underline`, `strike`, `subscript`, and `superscript` formatting. Does not copy other styles or formatting.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "copyformatting",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to copy formatting from selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to copy formatting from selected text. Applies to `bold`, `italic`, `underline`, `strike`, `subscript`, and `superscript` formatting. Does not copy other styles or formatting."
    },
    "type._editables.*.italic": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to italicize selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to italicize selected text.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "italic",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to italicize selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to italicize selected text."
    },
    "type._editables.*.link": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to create a hyperlink around selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to create a hyperlink around selected text.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "link",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to create a hyperlink around selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to create a hyperlink around selected text."
    },
    "type._editables.*.redo": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to redo recent edits undone with `undo`.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to redo recent edits. Undo is always enabled through standard OS-specific keyboard shortcuts.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "redo",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to redo recent edits undone with `undo`.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to redo recent edits. Undo is always enabled through standard OS-specific keyboard shortcuts."
    },
    "type._editables.*.removeformat": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to remove formatting from selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to remove formatting. Applies to `bold`, `italic`, `underline`, `strike`, `subscript`, and `superscript` formatting. Does not remove other styles or formatting.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "removeformat",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to remove formatting from selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to remove formatting. Applies to `bold`, `italic`, `underline`, `strike`, `subscript`, and `superscript` formatting. Does not remove other styles or formatting."
    },
    "type._editables.*.strike": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to strike through selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to strike through selected text.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "strike",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to strike through selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to strike through selected text."
    },
    "type._editables.*.subscript": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to subscript selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to subscript selected text.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "subscript",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to subscript selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to subscript selected text."
    },
    "type._editables.*.superscript": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to superscript selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to superscript selected text.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "superscript",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to superscript selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to superscript selected text."
    },
    "type._editables.*.underline": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to underline selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to underline selected text.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "underline",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to underline selected text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to underline selected text."
    },
    "type._editables.*.undo": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to undo recent edits.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to undo recent edits. Undo is always enabled through standard OS-specific keyboard shortcuts.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "undo",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to undo recent edits.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to undo recent edits. Undo is always enabled through standard OS-specific keyboard shortcuts."
    },
    "type._editables.*.remove_custom_markup": {
      "description": "This key toggles whether CloudCannon will allow you to strip custom markup from content edited in a rich text editor, allowing you to clean files of unnecessary HTML content.\n\nSetting this key to `true` will enable stripping custom markup from content. The `remove_custom_markup` key is disabled if `allow_custom_markup` is enabled.",
      "type": "boolean",
      "documented": true,
      "title": "remove_custom_markup",
      "markdownDescription": "This key toggles whether CloudCannon will allow you to strip custom markup from content edited in a rich text editor, allowing you to clean files of unnecessary HTML content.\n\nSetting this key to `true` will enable stripping custom markup from content. The `remove_custom_markup` key is disabled if `allow_custom_markup` is enabled."
    },
    "type._editables.*.allow_custom_markup": {
      "description": "This key toggles whether CloudCannon will allow you to edit custom markup in rich text editors and explicitly accept the risk of unintentionally deleting elements that cannot be recreated.\n\nSetting this key to `true` will enable editing of custom markup. When using `allow_custom_markup` outside of editable regions, content that uses JavaScript will not be editable for security reasons. These inputs will appear as uneditable snippets.",
      "type": "boolean",
      "documented": true,
      "title": "allow_custom_markup",
      "markdownDescription": "This key toggles whether CloudCannon will allow you to edit custom markup in rich text editors and explicitly accept the risk of unintentionally deleting elements that cannot be recreated.\n\nSetting this key to `true` will enable editing of custom markup. When using `allow_custom_markup` outside of editable regions, content that uses JavaScript will not be editable for security reasons. These inputs will appear as uneditable snippets."
    },
    "type._editables.*.blockquote": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to wrap selected blocks of text in a block quote.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to wrap selected blocks of text in a block quote.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "blockquote",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to wrap selected blocks of text in a block quote.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to wrap selected blocks of text in a block quote."
    },
    "type._editables.*.bulletedlist": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an unordered list or convert selected text to an unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an unordered list or convert selected text to an unordered list.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "bulletedlist",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an unordered list or convert selected text to an unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an unordered list or convert selected text to an unordered list."
    },
    "type._editables.*.center": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to center align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to center align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file.",
      "type": "string",
      "documented": true,
      "title": "center",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to center align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to center align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file."
    },
    "type._editables.*.code_inline": {
      "description": "This key toggles whether CloudCannon will display a control in your WYSIWYG toolbar to create an inline code element, containing any selected text.\n\nSetting this key to `true` will enable a control in your WYSIWYG toolbar to create an inline code element.\n\nBy default, this key is `false` (i.e., the inline code control is not displayed).",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "code_inline",
      "markdownDescription": "This key toggles whether CloudCannon will display a control in your WYSIWYG toolbar to create an inline code element, containing any selected text.\n\nSetting this key to `true` will enable a control in your WYSIWYG toolbar to create an inline code element.\n\nBy default, this key is `false` (i.e., the inline code control is not displayed)."
    },
    "type._editables.*.code_block": {
      "description": "This key toggles whether CloudCannon will display a control in your WYSIWYG toolbar to insert a code block in editable regions.\n\nSetting this key to `true` will enable a control in your WYSIWYG toolbar to insert a code block.\n\nBy default, this key is `false` (i.e., the code block control is not displayed).",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "code_block",
      "markdownDescription": "This key toggles whether CloudCannon will display a control in your WYSIWYG toolbar to insert a code block in editable regions.\n\nSetting this key to `true` will enable a control in your WYSIWYG toolbar to insert a code block.\n\nBy default, this key is `false` (i.e., the code block control is not displayed)."
    },
    "type._editables.*.code": {
      "description": "This key toggles whether CloudCannon will display tools in your WYSIWYG toolbar to turn selected text into inline code and selected text into a code block.\n\nSetting this key to `true` will enable two tools in your WYSIWYG toolbar to turn selected text into inline code and selected text into a code block.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "code",
      "markdownDescription": "This key toggles whether CloudCannon will display tools in your WYSIWYG toolbar to turn selected text into inline code and selected text into a code block.\n\nSetting this key to `true` will enable two tools in your WYSIWYG toolbar to turn selected text into inline code and selected text into a code block."
    },
    "type._editables.*.embed": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a region of raw HTML for YouTube, Vimeo, social media posts, or other media.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a region of raw HTML. Embedded content is sanitized to mitigate XSS risks, which includes removing `style` tags. Embeds containing `script` tags are not loaded a rich text editor.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "embed",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a region of raw HTML for YouTube, Vimeo, social media posts, or other media.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a region of raw HTML. Embedded content is sanitized to mitigate XSS risks, which includes removing `style` tags. Embeds containing `script` tags are not loaded a rich text editor."
    },
    "type._editables.*.format": {
      "description": "This key toggles whether CloudCannon will display a dropdown menu tool in your WYSIWYG toolbar for structured text.\n\nSetting this key to `true` will enable a dropdown menu tool in your WYSIWYG toolbar for structured text. Valid values include for `p`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `pre`, `address`, and `div`. Include a space between each values, e.g. `format: p h1 h2`.",
      "default": "p h1 h2 h3 h4 h5 h6",
      "type": "string",
      "documented": true,
      "title": "format",
      "markdownDescription": "This key toggles whether CloudCannon will display a dropdown menu tool in your WYSIWYG toolbar for structured text.\n\nSetting this key to `true` will enable a dropdown menu tool in your WYSIWYG toolbar for structured text. Valid values include for `p`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `pre`, `address`, and `div`. Include a space between each values, e.g. `format: p h1 h2`."
    },
    "type._editables.*.horizontalrule": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a horizontal line.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a horizontal line.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "horizontalrule",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert a horizontal line.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert a horizontal line."
    },
    "type._editables.*.image": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an image and enter alternative text and title text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an image. Select an existing image, upload an image, or use an external link.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "image",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an image and enter alternative text and title text.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an image. Select an existing image, upload an image, or use an external link."
    },
    "type._editables.*.indent": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to increase the indentation of a list item in an ordered or unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to increase the indentation of a list item.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "indent",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to increase the indentation of a list item in an ordered or unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to increase the indentation of a list item."
    },
    "type._editables.*.justify": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to justify selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to justify selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file.",
      "type": "string",
      "documented": true,
      "title": "justify",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to justify selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to justify selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file."
    },
    "type._editables.*.left": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to left align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to left align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file.",
      "type": "string",
      "documented": true,
      "title": "left",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to left align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to left align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file."
    },
    "type._editables.*.numberedlist": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an ordered list or convert selected text to an ordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an ordered list or convert selected text to an ordered list.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "numberedlist",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to insert an ordered list or convert selected text to an ordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to insert an ordered list or convert selected text to an ordered list."
    },
    "type._editables.*.outdent": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to decrease the indentation of a list item in an ordered or unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to decrease the indentation of a list item.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "outdent",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to decrease the indentation of a list item in an ordered or unordered list.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to decrease the indentation of a list item."
    },
    "type._editables.*.right": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to right align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to right align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file.",
      "type": "string",
      "documented": true,
      "title": "right",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to right align selected text by toggling a class name for that text block.\n\nSetting this key to `true` will enable a tool in your WYSIWYG toolbar to right align selected text. The value is the class name to align the text. The styles for this class must be defined in the `styles` file."
    },
    "type._editables.*.snippet": {
      "description": "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.",
      "default": true,
      "type": "boolean",
      "documented": true,
      "title": "snippet",
      "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."
    },
    "type._editables.*.styles": {
      "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```",
      "type": "string",
      "documented": true,
      "title": "styles",
      "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```"
    },
    "type._editables.*.table": {
      "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.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "table",
      "markdownDescription": "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."
    },
    "type._editables.*.join_above": {
      "description": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to merge a list item with the item above 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 above it.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "join_above",
      "markdownDescription": "This key toggles whether CloudCannon will display a tool in your WYSIWYG toolbar to merge a list item with the item above 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 above it."
    },
    "type._editables.*.join_below": {
      "description": "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.",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "join_below",
      "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."
    },
    "DateInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "enum": [
            "date",
            "datetime"
          ],
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "timezone": {
              "description": "Specifies the time zone that dates are displayed and edited in. Also changes the suffix the date is persisted to the file with. Defaults to the global `timezone`.",
              "allOf": [
                {
                  "$ref": "#/$defs/type.timezone"
                }
              ],
              "documented": false,
              "title": "timezone",
              "markdownDescription": "Specifies the time zone that dates are displayed and edited in. Also changes the suffix the date is persisted to the file with. Defaults to the global `timezone`."
            },
            "start_from": {
              "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```",
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "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)))$",
                  "title": "String Start From",
                  "documented": true,
                  "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.",
                  "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."
                },
                {
                  "title": "Date Start From",
                  "documented": true,
                  "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 not 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.",
                  "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 not 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."
                }
              ],
              "documented": true,
              "title": "start_from",
              "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.\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```"
            },
            "start_from_message": {
              "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.start_from`.\nThis key requires you to define `options.start_from`.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid date using a custom message.\n\n```yaml\n_inputs:\n  2022_event:\n    type: datetime\n    options:\n      start_from: 2022-01-01T00:00:00Z\n      start_from_message: Date is too early. Must be during 2022.\n      end_before: 2023-01-01T00:00:00Z\n      end_before_message: Date is too late. Must be during 2022.\n```",
              "type": "string",
              "documented": true,
              "title": "start_from_message",
              "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.start_from`.\nThis key requires you to define `options.start_from`.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid date using a custom message.\n\n```yaml\n_inputs:\n  2022_event:\n    type: datetime\n    options:\n      start_from: 2022-01-01T00:00:00Z\n      start_from_message: Date is too early. Must be during 2022.\n      end_before: 2023-01-01T00:00:00Z\n      end_before_message: Date is too late. Must be during 2022.\n```"
            },
            "end_before": {
              "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```",
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "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)))$",
                  "title": "String End Before",
                  "documented": true,
                  "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.",
                  "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."
                },
                {
                  "title": "Date End Before",
                  "documented": true,
                  "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.",
                  "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."
                }
              ],
              "documented": true,
              "title": "end_before",
              "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\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```"
            },
            "end_before_message": {
              "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.end_before`.\nThis key requires you to define `options.end_before`.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid date using a custom message.\n\n```yaml\n_inputs:\n  2022_event:\n    type: datetime\n    options:\n      start_from: 2022-01-01T00:00:00Z\n      start_from_message: Date is too early. Must be during 2022.\n      end_before: 2023-01-01T00:00:00Z\n      end_before_message: Date is too late. Must be during 2022.\n```",
              "type": "string",
              "documented": true,
              "title": "end_before_message",
              "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.end_before`.\nThis key requires you to define `options.end_before`.\n\nThis key has no default.\n\nThis key is available for Date and Time Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid date using a custom message.\n\n```yaml\n_inputs:\n  2022_event:\n    type: datetime\n    options:\n      start_from: 2022-01-01T00:00:00Z\n      start_from_message: Date is too early. Must be during 2022.\n      end_before: 2023-01-01T00:00:00Z\n      end_before_message: Date is too late. Must be during 2022.\n```"
            }
          },
          "markdownDescription": "This key defines options that are specific to Date Inputs.",
          "description": "This key defines options that are specific to Date Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for date and/or time values.",
      "title": "Date/Datetime Input",
      "description": "This key defines an editing interface for date and/or time values.",
      "documented": true,
      "additionalProperties": false
    },
    "type.timezone": {
      "type": "string",
      "enum": [
        "Africa/Abidjan",
        "Africa/Accra",
        "Africa/Addis_Ababa",
        "Africa/Algiers",
        "Africa/Asmara",
        "Africa/Asmera",
        "Africa/Bamako",
        "Africa/Bangui",
        "Africa/Banjul",
        "Africa/Bissau",
        "Africa/Blantyre",
        "Africa/Brazzaville",
        "Africa/Bujumbura",
        "Africa/Cairo",
        "Africa/Casablanca",
        "Africa/Ceuta",
        "Africa/Conakry",
        "Africa/Dakar",
        "Africa/Dar_es_Salaam",
        "Africa/Djibouti",
        "Africa/Douala",
        "Africa/El_Aaiun",
        "Africa/Freetown",
        "Africa/Gaborone",
        "Africa/Harare",
        "Africa/Johannesburg",
        "Africa/Juba",
        "Africa/Kampala",
        "Africa/Khartoum",
        "Africa/Kigali",
        "Africa/Kinshasa",
        "Africa/Lagos",
        "Africa/Libreville",
        "Africa/Lome",
        "Africa/Luanda",
        "Africa/Lubumbashi",
        "Africa/Lusaka",
        "Africa/Malabo",
        "Africa/Maputo",
        "Africa/Maseru",
        "Africa/Mbabane",
        "Africa/Mogadishu",
        "Africa/Monrovia",
        "Africa/Nairobi",
        "Africa/Ndjamena",
        "Africa/Niamey",
        "Africa/Nouakchott",
        "Africa/Ouagadougou",
        "Africa/Porto-Novo",
        "Africa/Sao_Tome",
        "Africa/Timbuktu",
        "Africa/Tripoli",
        "Africa/Tunis",
        "Africa/Windhoek",
        "America/Adak",
        "America/Anchorage",
        "America/Anguilla",
        "America/Antigua",
        "America/Araguaina",
        "America/Argentina/Buenos_Aires",
        "America/Argentina/Catamarca",
        "America/Argentina/ComodRivadavia",
        "America/Argentina/Cordoba",
        "America/Argentina/Jujuy",
        "America/Argentina/La_Rioja",
        "America/Argentina/Mendoza",
        "America/Argentina/Rio_Gallegos",
        "America/Argentina/Salta",
        "America/Argentina/San_Juan",
        "America/Argentina/San_Luis",
        "America/Argentina/Tucuman",
        "America/Argentina/Ushuaia",
        "America/Aruba",
        "America/Asuncion",
        "America/Atikokan",
        "America/Atka",
        "America/Bahia",
        "America/Bahia_Banderas",
        "America/Barbados",
        "America/Belem",
        "America/Belize",
        "America/Blanc-Sablon",
        "America/Boa_Vista",
        "America/Bogota",
        "America/Boise",
        "America/Buenos_Aires",
        "America/Cambridge_Bay",
        "America/Campo_Grande",
        "America/Cancun",
        "America/Caracas",
        "America/Catamarca",
        "America/Cayenne",
        "America/Cayman",
        "America/Chicago",
        "America/Chihuahua",
        "America/Coral_Harbour",
        "America/Cordoba",
        "America/Costa_Rica",
        "America/Creston",
        "America/Cuiaba",
        "America/Curacao",
        "America/Danmarkshavn",
        "America/Dawson",
        "America/Dawson_Creek",
        "America/Denver",
        "America/Detroit",
        "America/Dominica",
        "America/Edmonton",
        "America/Eirunepe",
        "America/El_Salvador",
        "America/Ensenada",
        "America/Fort_Nelson",
        "America/Fort_Wayne",
        "America/Fortaleza",
        "America/Glace_Bay",
        "America/Godthab",
        "America/Goose_Bay",
        "America/Grand_Turk",
        "America/Grenada",
        "America/Guadeloupe",
        "America/Guatemala",
        "America/Guayaquil",
        "America/Guyana",
        "America/Halifax",
        "America/Havana",
        "America/Hermosillo",
        "America/Indiana/Indianapolis",
        "America/Indiana/Knox",
        "America/Indiana/Marengo",
        "America/Indiana/Petersburg",
        "America/Indiana/Tell_City",
        "America/Indiana/Vevay",
        "America/Indiana/Vincennes",
        "America/Indiana/Winamac",
        "America/Indianapolis",
        "America/Inuvik",
        "America/Iqaluit",
        "America/Jamaica",
        "America/Jujuy",
        "America/Juneau",
        "America/Kentucky/Louisville",
        "America/Kentucky/Monticello",
        "America/Knox_IN",
        "America/Kralendijk",
        "America/La_Paz",
        "America/Lima",
        "America/Los_Angeles",
        "America/Louisville",
        "America/Lower_Princes",
        "America/Maceio",
        "America/Managua",
        "America/Manaus",
        "America/Marigot",
        "America/Martinique",
        "America/Matamoros",
        "America/Mazatlan",
        "America/Mendoza",
        "America/Menominee",
        "America/Merida",
        "America/Metlakatla",
        "America/Mexico_City",
        "America/Miquelon",
        "America/Moncton",
        "America/Monterrey",
        "America/Montevideo",
        "America/Montreal",
        "America/Montserrat",
        "America/Nassau",
        "America/New_York",
        "America/Nipigon",
        "America/Nome",
        "America/Noronha",
        "America/North_Dakota/Beulah",
        "America/North_Dakota/Center",
        "America/North_Dakota/New_Salem",
        "America/Nuuk",
        "America/Ojinaga",
        "America/Panama",
        "America/Pangnirtung",
        "America/Paramaribo",
        "America/Phoenix",
        "America/Port_of_Spain",
        "America/Port-au-Prince",
        "America/Porto_Acre",
        "America/Porto_Velho",
        "America/Puerto_Rico",
        "America/Punta_Arenas",
        "America/Rainy_River",
        "America/Rankin_Inlet",
        "America/Recife",
        "America/Regina",
        "America/Resolute",
        "America/Rio_Branco",
        "America/Rosario",
        "America/Santa_Isabel",
        "America/Santarem",
        "America/Santiago",
        "America/Santo_Domingo",
        "America/Sao_Paulo",
        "America/Scoresbysund",
        "America/Shiprock",
        "America/Sitka",
        "America/St_Barthelemy",
        "America/St_Johns",
        "America/St_Kitts",
        "America/St_Lucia",
        "America/St_Thomas",
        "America/St_Vincent",
        "America/Swift_Current",
        "America/Tegucigalpa",
        "America/Thule",
        "America/Thunder_Bay",
        "America/Tijuana",
        "America/Toronto",
        "America/Tortola",
        "America/Vancouver",
        "America/Virgin",
        "America/Whitehorse",
        "America/Winnipeg",
        "America/Yakutat",
        "America/Yellowknife",
        "Antarctica/Casey",
        "Antarctica/Davis",
        "Antarctica/DumontDUrville",
        "Antarctica/Macquarie",
        "Antarctica/Mawson",
        "Antarctica/McMurdo",
        "Antarctica/Palmer",
        "Antarctica/Rothera",
        "Antarctica/South_Pole",
        "Antarctica/Syowa",
        "Antarctica/Troll",
        "Antarctica/Vostok",
        "Arctic/Longyearbyen",
        "Asia/Aden",
        "Asia/Almaty",
        "Asia/Amman",
        "Asia/Anadyr",
        "Asia/Aqtau",
        "Asia/Aqtobe",
        "Asia/Ashgabat",
        "Asia/Ashkhabad",
        "Asia/Atyrau",
        "Asia/Baghdad",
        "Asia/Bahrain",
        "Asia/Baku",
        "Asia/Bangkok",
        "Asia/Barnaul",
        "Asia/Beirut",
        "Asia/Bishkek",
        "Asia/Brunei",
        "Asia/Calcutta",
        "Asia/Chita",
        "Asia/Choibalsan",
        "Asia/Chongqing",
        "Asia/Chungking",
        "Asia/Colombo",
        "Asia/Dacca",
        "Asia/Damascus",
        "Asia/Dhaka",
        "Asia/Dili",
        "Asia/Dubai",
        "Asia/Dushanbe",
        "Asia/Famagusta",
        "Asia/Gaza",
        "Asia/Harbin",
        "Asia/Hebron",
        "Asia/Ho_Chi_Minh",
        "Asia/Hong_Kong",
        "Asia/Hovd",
        "Asia/Irkutsk",
        "Asia/Istanbul",
        "Asia/Jakarta",
        "Asia/Jayapura",
        "Asia/Jerusalem",
        "Asia/Kabul",
        "Asia/Kamchatka",
        "Asia/Karachi",
        "Asia/Kashgar",
        "Asia/Kathmandu",
        "Asia/Katmandu",
        "Asia/Khandyga",
        "Asia/Kolkata",
        "Asia/Krasnoyarsk",
        "Asia/Kuala_Lumpur",
        "Asia/Kuching",
        "Asia/Kuwait",
        "Asia/Macao",
        "Asia/Macau",
        "Asia/Magadan",
        "Asia/Makassar",
        "Asia/Manila",
        "Asia/Muscat",
        "Asia/Nicosia",
        "Asia/Novokuznetsk",
        "Asia/Novosibirsk",
        "Asia/Omsk",
        "Asia/Oral",
        "Asia/Phnom_Penh",
        "Asia/Pontianak",
        "Asia/Pyongyang",
        "Asia/Qatar",
        "Asia/Qostanay",
        "Asia/Qyzylorda",
        "Asia/Rangoon",
        "Asia/Riyadh",
        "Asia/Saigon",
        "Asia/Sakhalin",
        "Asia/Samarkand",
        "Asia/Seoul",
        "Asia/Shanghai",
        "Asia/Singapore",
        "Asia/Srednekolymsk",
        "Asia/Taipei",
        "Asia/Tashkent",
        "Asia/Tbilisi",
        "Asia/Tehran",
        "Asia/Tel_Aviv",
        "Asia/Thimbu",
        "Asia/Thimphu",
        "Asia/Tokyo",
        "Asia/Tomsk",
        "Asia/Ujung_Pandang",
        "Asia/Ulaanbaatar",
        "Asia/Ulan_Bator",
        "Asia/Urumqi",
        "Asia/Ust-Nera",
        "Asia/Vientiane",
        "Asia/Vladivostok",
        "Asia/Yakutsk",
        "Asia/Yangon",
        "Asia/Yekaterinburg",
        "Asia/Yerevan",
        "Atlantic/Azores",
        "Atlantic/Bermuda",
        "Atlantic/Canary",
        "Atlantic/Cape_Verde",
        "Atlantic/Faeroe",
        "Atlantic/Faroe",
        "Atlantic/Jan_Mayen",
        "Atlantic/Madeira",
        "Atlantic/Reykjavik",
        "Atlantic/South_Georgia",
        "Atlantic/St_Helena",
        "Atlantic/Stanley",
        "Australia/ACT",
        "Australia/Adelaide",
        "Australia/Brisbane",
        "Australia/Broken_Hill",
        "Australia/Canberra",
        "Australia/Currie",
        "Australia/Darwin",
        "Australia/Eucla",
        "Australia/Hobart",
        "Australia/LHI",
        "Australia/Lindeman",
        "Australia/Lord_Howe",
        "Australia/Melbourne",
        "Australia/North",
        "Australia/NSW",
        "Australia/Perth",
        "Australia/Queensland",
        "Australia/South",
        "Australia/Sydney",
        "Australia/Tasmania",
        "Australia/Victoria",
        "Australia/West",
        "Australia/Yancowinna",
        "Brazil/Acre",
        "Brazil/DeNoronha",
        "Brazil/East",
        "Brazil/West",
        "Canada/Atlantic",
        "Canada/Central",
        "Canada/Eastern",
        "Canada/Mountain",
        "Canada/Newfoundland",
        "Canada/Pacific",
        "Canada/Saskatchewan",
        "Canada/Yukon",
        "CET",
        "Chile/Continental",
        "Chile/EasterIsland",
        "CST6CDT",
        "Cuba",
        "EET",
        "Egypt",
        "Eire",
        "EST",
        "EST5EDT",
        "Etc/GMT",
        "Etc/GMT-0",
        "Etc/GMT-1",
        "Etc/GMT-10",
        "Etc/GMT-11",
        "Etc/GMT-12",
        "Etc/GMT-13",
        "Etc/GMT-14",
        "Etc/GMT-2",
        "Etc/GMT-3",
        "Etc/GMT-4",
        "Etc/GMT-5",
        "Etc/GMT-6",
        "Etc/GMT-7",
        "Etc/GMT-8",
        "Etc/GMT-9",
        "Etc/GMT+0",
        "Etc/GMT+1",
        "Etc/GMT+10",
        "Etc/GMT+11",
        "Etc/GMT+12",
        "Etc/GMT+2",
        "Etc/GMT+3",
        "Etc/GMT+4",
        "Etc/GMT+5",
        "Etc/GMT+6",
        "Etc/GMT+7",
        "Etc/GMT+8",
        "Etc/GMT+9",
        "Etc/GMT0",
        "Etc/Greenwich",
        "Etc/UCT",
        "Etc/Universal",
        "Etc/UTC",
        "Etc/Zulu",
        "Europe/Amsterdam",
        "Europe/Andorra",
        "Europe/Astrakhan",
        "Europe/Athens",
        "Europe/Belfast",
        "Europe/Belgrade",
        "Europe/Berlin",
        "Europe/Bratislava",
        "Europe/Brussels",
        "Europe/Bucharest",
        "Europe/Budapest",
        "Europe/Busingen",
        "Europe/Chisinau",
        "Europe/Copenhagen",
        "Europe/Dublin",
        "Europe/Gibraltar",
        "Europe/Guernsey",
        "Europe/Helsinki",
        "Europe/Isle_of_Man",
        "Europe/Istanbul",
        "Europe/Jersey",
        "Europe/Kaliningrad",
        "Europe/Kiev",
        "Europe/Kirov",
        "Europe/Kyiv",
        "Europe/Lisbon",
        "Europe/Ljubljana",
        "Europe/London",
        "Europe/Luxembourg",
        "Europe/Madrid",
        "Europe/Malta",
        "Europe/Mariehamn",
        "Europe/Minsk",
        "Europe/Monaco",
        "Europe/Moscow",
        "Europe/Nicosia",
        "Europe/Oslo",
        "Europe/Paris",
        "Europe/Podgorica",
        "Europe/Prague",
        "Europe/Riga",
        "Europe/Rome",
        "Europe/Samara",
        "Europe/San_Marino",
        "Europe/Sarajevo",
        "Europe/Saratov",
        "Europe/Simferopol",
        "Europe/Skopje",
        "Europe/Sofia",
        "Europe/Stockholm",
        "Europe/Tallinn",
        "Europe/Tirane",
        "Europe/Tiraspol",
        "Europe/Ulyanovsk",
        "Europe/Uzhgorod",
        "Europe/Vaduz",
        "Europe/Vatican",
        "Europe/Vienna",
        "Europe/Vilnius",
        "Europe/Volgograd",
        "Europe/Warsaw",
        "Europe/Zagreb",
        "Europe/Zaporozhye",
        "Europe/Zurich",
        "GB",
        "GB-Eire",
        "GMT",
        "GMT-0",
        "GMT+0",
        "GMT0",
        "Greenwich",
        "Hongkong",
        "HST",
        "Iceland",
        "Indian/Antananarivo",
        "Indian/Chagos",
        "Indian/Christmas",
        "Indian/Cocos",
        "Indian/Comoro",
        "Indian/Kerguelen",
        "Indian/Mahe",
        "Indian/Maldives",
        "Indian/Mauritius",
        "Indian/Mayotte",
        "Indian/Reunion",
        "Iran",
        "Israel",
        "Jamaica",
        "Japan",
        "Kwajalein",
        "Libya",
        "MET",
        "Mexico/BajaNorte",
        "Mexico/BajaSur",
        "Mexico/General",
        "MST",
        "MST7MDT",
        "Navajo",
        "NZ",
        "NZ-CHAT",
        "Pacific/Apia",
        "Pacific/Auckland",
        "Pacific/Bougainville",
        "Pacific/Chatham",
        "Pacific/Chuuk",
        "Pacific/Easter",
        "Pacific/Efate",
        "Pacific/Enderbury",
        "Pacific/Fakaofo",
        "Pacific/Fiji",
        "Pacific/Funafuti",
        "Pacific/Galapagos",
        "Pacific/Gambier",
        "Pacific/Guadalcanal",
        "Pacific/Guam",
        "Pacific/Honolulu",
        "Pacific/Johnston",
        "Pacific/Kanton",
        "Pacific/Kiritimati",
        "Pacific/Kosrae",
        "Pacific/Kwajalein",
        "Pacific/Majuro",
        "Pacific/Marquesas",
        "Pacific/Midway",
        "Pacific/Nauru",
        "Pacific/Niue",
        "Pacific/Norfolk",
        "Pacific/Noumea",
        "Pacific/Pago_Pago",
        "Pacific/Palau",
        "Pacific/Pitcairn",
        "Pacific/Pohnpei",
        "Pacific/Ponape",
        "Pacific/Port_Moresby",
        "Pacific/Rarotonga",
        "Pacific/Saipan",
        "Pacific/Samoa",
        "Pacific/Tahiti",
        "Pacific/Tarawa",
        "Pacific/Tongatapu",
        "Pacific/Truk",
        "Pacific/Wake",
        "Pacific/Wallis",
        "Pacific/Yap",
        "Poland",
        "Portugal",
        "PRC",
        "PST8PDT",
        "ROC",
        "ROK",
        "Singapore",
        "Turkey",
        "UCT",
        "Universal",
        "US/Alaska",
        "US/Aleutian",
        "US/Arizona",
        "US/Central",
        "US/East-Indiana",
        "US/Eastern",
        "US/Hawaii",
        "US/Indiana-Starke",
        "US/Michigan",
        "US/Mountain",
        "US/Pacific",
        "US/Samoa",
        "UTC",
        "W-SU",
        "WET",
        "Zulu"
      ],
      "title": "Timezone",
      "documented": true,
      "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/).",
      "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/)."
    },
    "TimeInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "time",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            }
          },
          "markdownDescription": "This key defines options that are specific to Time Inputs.",
          "description": "This key defines options that are specific to Time Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for time values only.",
      "title": "Time Input",
      "description": "This key defines an editing interface for time values only.",
      "documented": true,
      "additionalProperties": false
    },
    "FileInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "enum": [
            "file",
            "document",
            "image"
          ],
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "mime_type": {
              "$ref": "#/$defs/type._inputs.*.options.mime_type"
            },
            "resize_style": {
              "$ref": "#/$defs/type._inputs.*.options.resize_style"
            },
            "width": {
              "$ref": "#/$defs/type._inputs.*.options.width"
            },
            "height": {
              "$ref": "#/$defs/type._inputs.*.options.height"
            },
            "expandable": {
              "$ref": "#/$defs/type._inputs.*.options.expandable"
            },
            "image_size_attributes": {
              "$ref": "#/$defs/type._inputs.*.options.image_size_attributes"
            },
            "allowed_sources": {
              "$ref": "#/$defs/type._inputs.*.options.allowed_sources"
            },
            "prevent_resize_existing_files": {
              "$ref": "#/$defs/type._inputs.*.options.prevent_resize_existing_files"
            },
            "sizes": {
              "$ref": "#/$defs/type._inputs.*.options.sizes"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "paths": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.paths"
                }
              ],
              "documented": false,
              "title": "paths"
            },
            "accepts_mime_types": {
              "$ref": "#/$defs/type._inputs.*.options.accepts_mime_types"
            },
            "max_file_size": {
              "$ref": "#/$defs/type._inputs.*.options.max_file_size"
            },
            "max_file_size_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_file_size_message"
            },
            "disable_upload_file": {
              "$ref": "#/$defs/type._inputs.*.options.disable_upload_file"
            },
            "disable_direct_input": {
              "$ref": "#/$defs/type._inputs.*.options.disable_direct_input"
            },
            "disable_upload_file_in_file_browser": {
              "$ref": "#/$defs/type._inputs.*.options.disable_upload_file_in_file_browser"
            }
          },
          "markdownDescription": "This key defines options that are specific to File Inputs.",
          "description": "This key defines options that are specific to File Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
      "title": "File Input",
      "description": "This key defines an editing interface for uploading files to your repository or DAM and browsing existing assets.",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.options.accepts_mime_types": {
      "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```",
      "anyOf": [
        {
          "type": "string",
          "title": "Comma Separated Accepts Mime Types",
          "documented": true,
          "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```",
          "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```"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/MimeType"
          },
          "title": "Array Accepts Mime Types",
          "documented": true,
          "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```",
          "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```"
        }
      ],
      "documented": true,
      "title": "accepts_mime_types",
      "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```"
    },
    "MimeType": {
      "type": "string",
      "enum": [
        "x-world/x-3dmf",
        "application/x-authorware-bin",
        "application/x-authorware-map",
        "application/x-authorware-seg",
        "text/vnd.abc",
        "video/animaflex",
        "application/postscript",
        "audio/aiff",
        "audio/x-aiff",
        "application/x-aim",
        "text/x-audiosoft-intra",
        "application/x-navi-animation",
        "application/x-nokia-9000-communicator-add-on-software",
        "application/mime",
        "application/arj",
        "image/x-jg",
        "video/x-ms-asf",
        "text/x-asm",
        "text/asp",
        "application/x-mplayer2",
        "video/x-ms-asf-plugin",
        "audio/basic",
        "audio/x-au",
        "application/x-troff-msvideo",
        "video/avi",
        "video/msvideo",
        "video/x-msvideo",
        "video/avs-video",
        "application/x-bcpio",
        "application/mac-binary",
        "application/macbinary",
        "application/x-binary",
        "application/x-macbinary",
        "image/bmp",
        "image/x-windows-bmp",
        "application/book",
        "application/x-bsh",
        "application/x-bzip",
        "application/x-bzip2",
        "text/plain",
        "text/x-c",
        "application/vnd.ms-pki.seccat",
        "application/clariscad",
        "application/x-cocoa",
        "application/cdf",
        "application/x-cdf",
        "application/x-netcdf",
        "application/pkix-cert",
        "application/x-x509-ca-cert",
        "application/x-chat",
        "application/java",
        "application/java-byte-code",
        "application/x-java-class",
        "application/x-cpio",
        "application/mac-compactpro",
        "application/x-compactpro",
        "application/x-cpt",
        "application/pkcs-crl",
        "application/pkix-crl",
        "application/x-x509-user-cert",
        "application/x-csh",
        "text/x-script.csh",
        "application/x-pointplus",
        "text/css",
        "text/csv",
        "application/x-director",
        "application/x-deepv",
        "video/x-dv",
        "video/dl",
        "video/x-dl",
        "application/msword",
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "application/commonground",
        "application/drafting",
        "application/x-dvi",
        "drawing/x-dwf (old)",
        "model/vnd.dwf",
        "application/acad",
        "image/vnd.dwg",
        "image/x-dwg",
        "application/dxf",
        "text/x-script.elisp",
        "application/x-bytecode.elisp (compiled elisp)",
        "application/x-elc",
        "application/x-envoy",
        "application/x-esrehber",
        "text/x-setext",
        "application/envoy",
        "text/x-fortran",
        "application/vnd.fdf",
        "application/fractals",
        "image/fif",
        "video/fli",
        "video/x-fli",
        "image/florian",
        "text/vnd.fmi.flexstor",
        "video/x-atomic3d-feature",
        "image/vnd.fpx",
        "image/vnd.net-fpx",
        "application/freeloader",
        "audio/make",
        "image/g3fax",
        "image/gif",
        "video/gl",
        "video/x-gl",
        "audio/x-gsm",
        "application/x-gsp",
        "application/x-gss",
        "application/x-gtar",
        "application/x-compressed",
        "application/x-gzip",
        "multipart/x-gzip",
        "text/x-h",
        "application/x-hdf",
        "application/x-helpfile",
        "application/vnd.hp-hpgl",
        "text/x-script",
        "application/hlp",
        "application/x-winhelp",
        "application/binhex",
        "application/binhex4",
        "application/mac-binhex",
        "application/mac-binhex40",
        "application/x-binhex40",
        "application/x-mac-binhex40",
        "application/hta",
        "text/x-component",
        "text/html",
        "text/webviewhtml",
        "x-conference/x-cooltalk",
        "image/x-icon",
        "image/ief",
        "application/iges",
        "model/iges",
        "application/x-ima",
        "application/x-httpd-imap",
        "application/inf",
        "application/x-internett-signup",
        "application/x-ip2",
        "video/x-isvideo",
        "audio/it",
        "application/x-inventor",
        "i-world/i-vrml",
        "application/x-livescreen",
        "audio/x-jam",
        "text/x-java-source",
        "application/x-java-commerce",
        "image/jpeg",
        "image/pjpeg",
        "image/x-jps",
        "application/x-javascript",
        "application/javascript",
        "application/ecmascript",
        "text/javascript",
        "text/ecmascript",
        "application/json",
        "image/jutvision",
        "music/x-karaoke",
        "application/x-ksh",
        "text/x-script.ksh",
        "audio/nspaudio",
        "audio/x-nspaudio",
        "audio/x-liveaudio",
        "application/x-latex",
        "application/lha",
        "application/x-lha",
        "application/x-lisp",
        "text/x-script.lisp",
        "text/x-la-asf",
        "application/x-lzh",
        "application/lzx",
        "application/x-lzx",
        "text/x-m",
        "audio/mpeg",
        "audio/x-mpequrl",
        "audio/m4a",
        "audio/x-m4a",
        "application/x-troff-man",
        "application/x-navimap",
        "application/mbedlet",
        "application/x-magic-cap-package-1.0",
        "application/mcad",
        "application/x-mathcad",
        "image/vasa",
        "text/mcf",
        "application/netmc",
        "text/markdown",
        "application/x-troff-me",
        "message/rfc822",
        "application/x-midi",
        "audio/midi",
        "audio/x-mid",
        "audio/x-midi",
        "music/crescendo",
        "x-music/x-midi",
        "application/x-frame",
        "application/x-mif",
        "www/mime",
        "audio/x-vnd.audioexplosion.mjuicemediafile",
        "video/x-motion-jpeg",
        "application/base64",
        "application/x-meme",
        "audio/mod",
        "audio/x-mod",
        "video/quicktime",
        "video/x-sgi-movie",
        "audio/x-mpeg",
        "video/x-mpeg",
        "video/x-mpeq2a",
        "audio/mpeg3",
        "audio/x-mpeg-3",
        "video/mp4",
        "application/x-project",
        "video/mpeg",
        "application/vnd.ms-project",
        "application/marc",
        "application/x-troff-ms",
        "application/x-vnd.audioexplosion.mzz",
        "image/naplps",
        "application/vnd.nokia.configuration-message",
        "image/x-niff",
        "application/x-mix-transfer",
        "application/x-conference",
        "application/x-navidoc",
        "application/octet-stream",
        "application/oda",
        "audio/ogg",
        "application/ogg",
        "video/ogg",
        "application/x-omc",
        "application/x-omcdatamaker",
        "application/x-omcregerator",
        "text/x-pascal",
        "application/pkcs10",
        "application/x-pkcs10",
        "application/pkcs-12",
        "application/x-pkcs12",
        "application/x-pkcs7-signature",
        "application/pkcs7-mime",
        "application/x-pkcs7-mime",
        "application/x-pkcs7-certreqresp",
        "application/pkcs7-signature",
        "application/pro_eng",
        "text/pascal",
        "image/x-portable-bitmap",
        "application/vnd.hp-pcl",
        "application/x-pcl",
        "image/x-pict",
        "image/x-pcx",
        "chemical/x-pdb",
        "application/pdf",
        "audio/make.my.funk",
        "image/x-portable-graymap",
        "image/x-portable-greymap",
        "image/pict",
        "application/x-newton-compatible-pkg",
        "application/vnd.ms-pki.pko",
        "text/x-script.perl",
        "application/x-pixclscript",
        "image/x-xpixmap",
        "text/x-script.perl-module",
        "application/x-pagemaker",
        "image/png",
        "application/x-portable-anymap",
        "image/x-portable-anymap",
        "model/x-pov",
        "image/x-portable-pixmap",
        "application/mspowerpoint",
        "application/powerpoint",
        "application/vnd.ms-powerpoint",
        "application/x-mspowerpoint",
        "application/vnd.openxmlformats-officedocument.presentationml.presentation",
        "application/x-freelance",
        "paleovu/x-pv",
        "text/x-script.phyton",
        "application/x-bytecode.python",
        "audio/vnd.qcelp",
        "image/x-quicktime",
        "video/x-qtc",
        "audio/x-pn-realaudio",
        "audio/x-pn-realaudio-plugin",
        "audio/x-realaudio",
        "application/x-cmu-raster",
        "image/cmu-raster",
        "image/x-cmu-raster",
        "text/x-script.rexx",
        "image/vnd.rn-realflash",
        "image/x-rgb",
        "application/vnd.rn-realmedia",
        "audio/mid",
        "application/ringing-tones",
        "application/vnd.nokia.ringing-tone",
        "application/vnd.rn-realplayer",
        "application/x-troff",
        "image/vnd.rn-realpix",
        "application/x-rtf",
        "text/richtext",
        "application/rtf",
        "video/vnd.rn-realvideo",
        "audio/s3m",
        "application/x-tbook",
        "application/x-lotusscreencam",
        "text/x-script.guile",
        "text/x-script.scheme",
        "video/x-scm",
        "application/sdp",
        "application/x-sdp",
        "application/sounder",
        "application/sea",
        "application/x-sea",
        "application/set",
        "text/sgml",
        "text/x-sgml",
        "application/x-sh",
        "application/x-shar",
        "text/x-script.sh",
        "text/x-server-parsed-html",
        "audio/x-psid",
        "application/x-sit",
        "application/x-stuffit",
        "application/x-koan",
        "application/x-seelogo",
        "application/smil",
        "audio/x-adpcm",
        "application/solids",
        "application/x-pkcs7-certificates",
        "text/x-speech",
        "application/futuresplash",
        "application/x-sprite",
        "application/x-wais-source",
        "application/streamingmedia",
        "application/vnd.ms-pki.certstore",
        "application/step",
        "application/sla",
        "application/vnd.ms-pki.stl",
        "application/x-navistyle",
        "application/x-sv4cpio",
        "application/x-sv4crc",
        "image/svg+xml",
        "application/x-world",
        "x-world/x-svr",
        "application/x-shockwave-flash",
        "application/x-tar",
        "application/toolbook",
        "application/x-tcl",
        "text/x-script.tcl",
        "text/x-script.tcsh",
        "application/x-tex",
        "application/x-texinfo",
        "application/plain",
        "application/gnutar",
        "image/tiff",
        "image/x-tiff",
        "application/toml",
        "audio/tsp-audio",
        "application/dsptype",
        "audio/tsplayer",
        "text/tab-separated-values",
        "application/i-deas",
        "text/uri-list",
        "application/x-ustar",
        "multipart/x-ustar",
        "text/x-uuencode",
        "application/x-cdlink",
        "text/x-vcalendar",
        "application/vda",
        "video/vdo",
        "application/groupwise",
        "video/vivo",
        "video/vnd.vivo",
        "application/vocaltec-media-desc",
        "application/vocaltec-media-file",
        "audio/voc",
        "audio/x-voc",
        "video/vosaic",
        "audio/voxware",
        "audio/x-twinvq-plugin",
        "audio/x-twinvq",
        "application/x-vrml",
        "model/vrml",
        "x-world/x-vrml",
        "x-world/x-vrt",
        "application/x-visio",
        "application/wordperfect6.0",
        "application/wordperfect6.1",
        "audio/wav",
        "audio/x-wav",
        "application/x-qpro",
        "image/vnd.wap.wbmp",
        "application/vnd.xara",
        "video/webm",
        "audio/webm",
        "image/webp",
        "application/x-123",
        "windows/metafile",
        "text/vnd.wap.wml",
        "application/vnd.wap.wmlc",
        "text/vnd.wap.wmlscript",
        "application/vnd.wap.wmlscriptc",
        "video/x-ms-wmv",
        "application/wordperfect",
        "application/x-wpwin",
        "application/x-lotus",
        "application/mswrite",
        "application/x-wri",
        "text/scriplet",
        "application/x-wintalk",
        "image/x-xbitmap",
        "image/x-xbm",
        "image/xbm",
        "video/x-amt-demorun",
        "xgl/drawing",
        "image/vnd.xiff",
        "application/excel",
        "application/vnd.ms-excel",
        "application/x-excel",
        "application/x-msexcel",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "audio/xm",
        "application/xml",
        "text/xml",
        "xgl/movie",
        "application/x-vnd.ls-xpix",
        "image/xpm",
        "video/x-amt-showrun",
        "image/x-xwd",
        "image/x-xwindowdump",
        "text/vnd.yaml",
        "application/x-compress",
        "application/x-zip-compressed",
        "application/zip",
        "multipart/x-zip",
        "text/x-script.zsh"
      ],
      "title": "Mime Type",
      "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```",
      "documented": true,
      "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```"
    },
    "type._inputs.*.options.max_file_size": {
      "description": "This key defines the maximum file size in kB that CloudCannon will allow you to upload.\n\nWhen configured, CloudCannon will prevent you from saving your changes until you select a valid file size, or discard your unsaved changes.\n\nValue can be any positive integer.\n\nThis key has no default.\n\nThis key is available for File and URL Inputs.\n\n## Examples\n\nIn this example, we want our team to upload an image using the `feature_image` Input. This Input limits you to a maximum file size of 750 kB.\n\n```yaml\n_inputs:\n  feature_image:\n    type: image\n    comment: Select the feature image for the banner.\n    options:\n      max_file_size: 140\n```",
      "type": "number",
      "documented": true,
      "title": "max_file_size",
      "markdownDescription": "This key defines the maximum file size in kB that CloudCannon will allow you to upload.\n\nWhen configured, CloudCannon will prevent you from saving your changes until you select a valid file size, or discard your unsaved changes.\n\nValue can be any positive integer.\n\nThis key has no default.\n\nThis key is available for File and URL Inputs.\n\n## Examples\n\nIn this example, we want our team to upload an image using the `feature_image` Input. This Input limits you to a maximum file size of 750 kB.\n\n```yaml\n_inputs:\n  feature_image:\n    type: image\n    comment: Select the feature image for the banner.\n    options:\n      max_file_size: 140\n```"
    },
    "type._inputs.*.options.max_file_size_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_file_size`.\nThis key requires you to define `options.max_file_size`.\n\nThis key has no default.\n\nThis key is available for File and URL Inputs.\n\n## Examples\n\nIn this example, we want our team to upload an image using the `feature_image` Input. This Input limits you to a maximum file size of 750 kB.\n\n```yaml\n_inputs:\n  feature_image:\n    type: image\n    comment: Select the feature image for the banner.\n    options:\n      max_file_size: 140\n      max_file_size_message: For SEO, keep this under 140kB\n```",
      "type": "string",
      "documented": true,
      "title": "max_file_size_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_file_size`.\nThis key requires you to define `options.max_file_size`.\n\nThis key has no default.\n\nThis key is available for File and URL Inputs.\n\n## Examples\n\nIn this example, we want our team to upload an image using the `feature_image` Input. This Input limits you to a maximum file size of 750 kB.\n\n```yaml\n_inputs:\n  feature_image:\n    type: image\n    comment: Select the feature image for the banner.\n    options:\n      max_file_size: 140\n      max_file_size_message: For SEO, keep this under 140kB\n```"
    },
    "type._inputs.*.options.disable_upload_file": {
      "description": "This key toggles whether CloudCannon will disable the context menu option and the drop area for uploading files.\n\nSetting this key to `true` will disable the context menu option and prevent uploading file through drag-and-drop in a *File Input*.\n\n## Examples\n\nIn this example, CloudCannon will disable the option to upload a file in the context menu and prevent uploading file through drag-and-drop in a *File Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      disable_upload_file: true\n```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_upload_file",
      "markdownDescription": "This key toggles whether CloudCannon will disable the context menu option and the drop area for uploading files.\n\nSetting this key to `true` will disable the context menu option and prevent uploading file through drag-and-drop in a *File Input*.\n\n## Examples\n\nIn this example, CloudCannon will disable the option to upload a file in the context menu and prevent uploading file through drag-and-drop in a *File Input*.\n\n```yaml\n_inputs:\n  image:\n    type: image\n    options:\n      disable_upload_file: true\n```"
    },
    "type._inputs.*.options.disable_direct_input": {
      "description": "This key toggles whether CloudCannon will prevent typing into the *Text Input*, while still allowing context menu options to change the value.\n\nSetting this key to `true` will prevent typing into the *Text Input*.\n\n## Examples\n\nIn this example, CloudCannon will prevent typing into the *Text Input* `url`.\n\n```yaml\n_inputs:\n  url:\n    type: url\n    options:\n      disable_direct_input: true\n```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_direct_input",
      "markdownDescription": "This key toggles whether CloudCannon will prevent typing into the *Text Input*, while still allowing context menu options to change the value.\n\nSetting this key to `true` will prevent typing into the *Text Input*.\n\n## Examples\n\nIn this example, CloudCannon will prevent typing into the *Text Input* `url`.\n\n```yaml\n_inputs:\n  url:\n    type: url\n    options:\n      disable_direct_input: true\n```"
    },
    "type._inputs.*.options.disable_upload_file_in_file_browser": {
      "description": "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```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_upload_file_in_file_browser",
      "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```"
    },
    "UrlInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "url",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "mime_type": {
              "$ref": "#/$defs/type._inputs.*.options.mime_type"
            },
            "resize_style": {
              "$ref": "#/$defs/type._inputs.*.options.resize_style"
            },
            "width": {
              "$ref": "#/$defs/type._inputs.*.options.width"
            },
            "height": {
              "$ref": "#/$defs/type._inputs.*.options.height"
            },
            "expandable": {
              "$ref": "#/$defs/type._inputs.*.options.expandable"
            },
            "image_size_attributes": {
              "$ref": "#/$defs/type._inputs.*.options.image_size_attributes"
            },
            "allowed_sources": {
              "$ref": "#/$defs/type._inputs.*.options.allowed_sources"
            },
            "prevent_resize_existing_files": {
              "$ref": "#/$defs/type._inputs.*.options.prevent_resize_existing_files"
            },
            "sizes": {
              "$ref": "#/$defs/type._inputs.*.options.sizes"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "paths": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.paths"
                }
              ],
              "documented": false,
              "title": "paths"
            },
            "accepts_mime_types": {
              "$ref": "#/$defs/type._inputs.*.options.accepts_mime_types"
            },
            "max_file_size": {
              "$ref": "#/$defs/type._inputs.*.options.max_file_size"
            },
            "max_file_size_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_file_size_message"
            },
            "disable_upload_file": {
              "$ref": "#/$defs/type._inputs.*.options.disable_upload_file"
            },
            "disable_direct_input": {
              "$ref": "#/$defs/type._inputs.*.options.disable_direct_input"
            },
            "disable_upload_file_in_file_browser": {
              "$ref": "#/$defs/type._inputs.*.options.disable_upload_file_in_file_browser"
            },
            "hide_link_to_file": {
              "description": "This key toggles whether CloudCannon will hide the options to link to an existing file, and upload a new file.\n\nSetting this key to `true` will hide the options to link to an existing file and upload a new file. This does not prevent typing a file path in the input.\n\nBy default, this key is `false` (i.e., the options to link to an existing file and upload a new file are shown).",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "hide_link_to_file",
              "markdownDescription": "This key toggles whether CloudCannon will hide the options to link to an existing file, and upload a new file.\n\nSetting this key to `true` will hide the options to link to an existing file and upload a new file. This does not prevent typing a file path in the input.\n\nBy default, this key is `false` (i.e., the options to link to an existing file and upload a new file are shown)."
            },
            "hide_link_to_page": {
              "description": "This key toggles whether CloudCannon will hide the option to link to a page.\n\nSetting this key to `true` will hide the option to link to a page. This does not prevent typing a file's output URL in the input.\n\nBy default, this key is `false` (i.e., the option to link to a page is shown).",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "hide_link_to_page",
              "markdownDescription": "This key toggles whether CloudCannon will hide the option to link to a page.\n\nSetting this key to `true` will hide the option to link to a page. This does not prevent typing a file's output URL in the input.\n\nBy default, this key is `false` (i.e., the option to link to a page is shown)."
            },
            "hide_link_to_email_address": {
              "description": "This key toggles whether CloudCannon will hide the option to link to an email address.\n\nSetting this key to `true` will hide the option to link to an email address. This does not prevent typing a `mailto:` link in the input.\n\nBy default, this key is `false` (i.e., the option to link to an email address is shown).",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "hide_link_to_email_address",
              "markdownDescription": "This key toggles whether CloudCannon will hide the option to link to an email address.\n\nSetting this key to `true` will hide the option to link to an email address. This does not prevent typing a `mailto:` link in the input.\n\nBy default, this key is `false` (i.e., the option to link to an email address is shown)."
            },
            "hide_link_to_telephone": {
              "description": "This key toggles whether CloudCannon will hide the option to link to a telephone number.\n\nSetting this key to `true` will hide the option to link to a telephone number. This does not prevent typing a `tel:` link in the input.\n\nBy default, this key is `false` (i.e., the option to link to a telephone number is shown).",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "hide_link_to_telephone",
              "markdownDescription": "This key toggles whether CloudCannon will hide the option to link to a telephone number.\n\nSetting this key to `true` will hide the option to link to a telephone number. This does not prevent typing a `tel:` link in the input.\n\nBy default, this key is `false` (i.e., the option to link to a telephone number is shown)."
            }
          },
          "markdownDescription": "This key defines options that are specific to URL Inputs.",
          "description": "This key defines options that are specific to URL Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
      "title": "URL Input",
      "description": "This key defines an editing interface for relative, absolute, and fully qualified URLs.",
      "documented": true,
      "additionalProperties": false
    },
    "SelectInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "select",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.preview"
                }
              ],
              "documented": false,
              "title": "preview"
            },
            "picker_preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.picker_preview"
                }
              ],
              "documented": false,
              "title": "picker_preview"
            },
            "allow_create": {
              "$ref": "#/$defs/type._inputs.*.options.allow_create"
            },
            "allow_empty": {
              "$ref": "#/$defs/type._inputs.*.options.allow_empty"
            },
            "values": {
              "$ref": "#/$defs/type._inputs.*.options.values"
            },
            "value_key": {
              "$ref": "#/$defs/type._inputs.*.options.value_key"
            },
            "view": {
              "$ref": "#/$defs/type._inputs.*.options.view"
            },
            "picker_view": {
              "$ref": "#/$defs/type._inputs.*.options.picker_view"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Select Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "type.preview": {
      "type": "object",
      "properties": {
        "text": {
          "$ref": "#/$defs/type.preview.text"
        },
        "subtext": {
          "$ref": "#/$defs/type.preview.subtext"
        },
        "image": {
          "$ref": "#/$defs/type.preview.image"
        },
        "icon": {
          "$ref": "#/$defs/type.preview.icon"
        },
        "icon_color": {
          "$ref": "#/$defs/type.preview.icon_color"
        },
        "icon_background_color": {
          "$ref": "#/$defs/type.preview.icon_background_color"
        },
        "tags": {
          "$ref": "#/$defs/type.preview.tags"
        },
        "metadata": {
          "$ref": "#/$defs/type.preview.metadata"
        },
        "gallery": {
          "$ref": "#/$defs/type.preview.gallery"
        }
      },
      "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```",
      "title": "Preview",
      "documented": true,
      "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```",
      "additionalProperties": false
    },
    "type.preview.text": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "text",
      "description": "This key defines the main text displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the main text for *Cards* in the `blog` Collection 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 the main text for *Cards* in the `blog` Collection to display the `title` key.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      text:\n        - key: title\n```",
      "markdownDescription": "This key defines the main text displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the main text for *Cards* in the `blog` Collection 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 the main text for *Cards* in the `blog` Collection to display the `title` key.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      text:\n        - key: title\n```"
    },
    "type.preview.subtext": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "subtext",
      "description": "This key defines the secondary text displayed below the main text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the subtext for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `author` first, then the `{writer}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      subtext:\n        - key: author\n        - template: '{writer}'\n        - text: 'Unknown author'\n```\n\nIn this example, we have configured the subtext for *Cards* in the `blog` Collection to display the `author` key.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      subtext:\n        - key: author\n```",
      "markdownDescription": "This key defines the secondary text displayed below the main text on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the subtext for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `author` first, then the `{writer}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      subtext:\n        - key: author\n        - template: '{writer}'\n        - text: 'Unknown author'\n```\n\nIn this example, we have configured the subtext for *Cards* in the `blog` Collection to display the `author` key.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      subtext:\n        - key: author\n```"
    },
    "type.preview.image": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "image",
      "description": "This key defines the image displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string that results in a file path or URL to an image file. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the image for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `featured_image` first, then the `{thumbnail}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      image:\n        - key: featured_image\n        - template: '{thumbnail}'\n        - text: 'default-image.jpg'\n```\n\nIn this example, we have configured the image for *Structure Cards* to display the `profile_picture` key.\n\n```yaml\n_structures:\n  staff:\n    values:\n      - value:\n          _type: Employee\n          name:\n          profile_picture:\n        preview:\n          image:\n            - key: profile_picture\n```",
      "markdownDescription": "This key defines the image displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string that results in a file path or URL to an image file. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\n## Examples\n\nIn this example, we have configured the image for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `featured_image` first, then the `{thumbnail}` template, and finally fall back to the static text value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      image:\n        - key: featured_image\n        - template: '{thumbnail}'\n        - text: 'default-image.jpg'\n```\n\nIn this example, we have configured the image for *Structure Cards* to display the `profile_picture` key.\n\n```yaml\n_structures:\n  staff:\n    values:\n      - value:\n          _type: Employee\n          name:\n          profile_picture:\n        preview:\n          image:\n            - key: profile_picture\n```"
    },
    "type.preview.icon": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "icon",
      "description": "This key defines the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, text string, that results in one of [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded). When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nFor *Cards* in the *Collection Browser*, this key defaults to the value of `collections_config.*.icon`. Otherwise, this key has no default.\n\n## Examples\n\nIn this example, we have configured the icon for *Cards* in the `blog` Collection to use the `edit_note` icon.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon: edit_note\n```\n\nIn this example, we have configured the icon for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `logo` first, then fall back to the `edit_note` icon.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon:\n        - key: logo\n        - edit_note\n```",
      "markdownDescription": "This key defines the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, text string, that results in one of [Google's Material Symbols](https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded). When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nFor *Cards* in the *Collection Browser*, this key defaults to the value of `collections_config.*.icon`. Otherwise, this key has no default.\n\n## Examples\n\nIn this example, we have configured the icon for *Cards* in the `blog` Collection to use the `edit_note` icon.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon: edit_note\n```\n\nIn this example, we have configured the icon for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `logo` first, then fall back to the `edit_note` icon.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon:\n        - key: logo\n        - edit_note\n```"
    },
    "type.preview.icon_color": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "icon_color",
      "description": "This key defines the color of the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon color for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `color` first, then fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon_color:\n        - key: color\n        - text: '#ff0000'\n```",
      "markdownDescription": "This key defines the color of the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon color for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `color` first, then fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon_color:\n        - key: color\n        - text: '#ff0000'\n```"
    },
    "type.preview.icon_background_color": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "icon_background_color",
      "description": "This key defines the background color of the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon background color for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `bg_color` first, then fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon_background_color:\n        - key: bg_color\n        - text: '#f0f0f0'\n```",
      "markdownDescription": "This key defines the background color of the icon displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the icon background color for *Cards* in the `blog` Collection with an array of values to provide fallback options. CloudCannon will use the value of `bg_color` first, then fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      icon_background_color:\n        - key: bg_color\n        - text: '#f0f0f0'\n```"
    },
    "type.preview.tags": {
      "type": "array",
      "items": {
        "type": "string",
        "documented": true,
        "title": "tags[*]",
        "description": "This key represents an individual tag string in the `preview.tags` array.\n\nThe value is a string that specifies a tag to display on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured a tag for *Cards* in the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      tags:\n        - featured\n```",
        "markdownDescription": "This key represents an individual tag string in the `preview.tags` array.\n\nThe value is a string that specifies a tag to display on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured a tag for *Cards* in the `blog` Collection.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      tags:\n        - featured\n```"
      },
      "documented": true,
      "title": "tags",
      "description": "This key defines tags displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured tags for *Cards* in the `blog` Collection to display category tags.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      tags:\n        - featured\n        - tutorial\n```",
      "markdownDescription": "This key defines tags displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured tags for *Cards* in the `blog` Collection to display category tags.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      tags:\n        - featured\n        - tutorial\n```"
    },
    "type.preview.metadata": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PreviewMetadataEntry"
      },
      "documented": true,
      "title": "metadata",
      "description": "This key defines metadata entries displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an array of metadata entry objects. Each metadata entry can contain `text`, `image`, `icon`, `icon_color`, and `icon_background_color` properties.\n\nMetadata entries are typically used to display additional information about a card, such as publication dates, URLs, or other contextual data.\n\n## Examples\n\nIn this example, we have configured two metadata entries for *Cards* in the `blog` Collection to display the URL and publication date.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      metadata:\n        - text:\n          - key: url\n        - icon: event\n          icon_color: light-blue\n          text:\n            - template: 'Published on {date|date_long}'\n```",
      "markdownDescription": "This key defines metadata entries displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value is an array of metadata entry objects. Each metadata entry can contain `text`, `image`, `icon`, `icon_color`, and `icon_background_color` properties.\n\nMetadata entries are typically used to display additional information about a card, such as publication dates, URLs, or other contextual data.\n\n## Examples\n\nIn this example, we have configured two metadata entries for *Cards* in the `blog` Collection to display the URL and publication date.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      metadata:\n        - text:\n          - key: url\n        - icon: event\n          icon_color: light-blue\n          text:\n            - template: 'Published on {date|date_long}'\n```"
    },
    "PreviewMetadataEntry": {
      "type": "object",
      "properties": {
        "text": {
          "$ref": "#/$defs/type.preview.text"
        },
        "image": {
          "$ref": "#/$defs/type.preview.image"
        },
        "icon": {
          "$ref": "#/$defs/type.preview.icon"
        },
        "icon_color": {
          "$ref": "#/$defs/type.preview.icon_color"
        },
        "icon_background_color": {
          "$ref": "#/$defs/type.preview.icon_background_color"
        }
      },
      "markdownDescription": "This key represents an individual metadata entry object in the `preview.metadata` array.\n\nThe value is an object that can contain `text`, `image`, `icon`, `icon_color`, and `icon_background_color` properties. Each metadata entry is displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured a metadata entry for *Cards* in the `blog` Collection to display the URL using a template.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      metadata:\n        - template: '[url]'\n```",
      "documented": true,
      "title": "metadata[*]",
      "description": "This key represents an individual metadata entry object in the `preview.metadata` array.\n\nThe value is an object that can contain `text`, `image`, `icon`, `icon_color`, and `icon_background_color` properties. Each metadata entry is displayed on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured a metadata entry for *Cards* in the `blog` Collection to display the URL using a template.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      metadata:\n        - template: '[url]'\n```",
      "additionalProperties": false
    },
    "type.preview.gallery": {
      "type": "object",
      "properties": {
        "text": {
          "$ref": "#/$defs/type.preview.text"
        },
        "image": {
          "$ref": "#/$defs/type.preview.image"
        },
        "icon": {
          "$ref": "#/$defs/type.preview.icon"
        },
        "icon_color": {
          "$ref": "#/$defs/type.preview.icon_color"
        },
        "icon_background_color": {
          "$ref": "#/$defs/type.preview.icon_background_color"
        },
        "fit": {
          "$ref": "#/$defs/preview.gallery.fit"
        },
        "background_color": {
          "$ref": "#/$defs/type.preview.gallery.background_color"
        }
      },
      "markdownDescription": "This key defines the appearance of the gallery section on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the gallery section for *Cards* in the `blog` Collection to display the image stored under the `featured_image` key with a padded fit.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        fit: padded\n```",
      "documented": true,
      "title": "gallery",
      "description": "This key defines the appearance of the gallery section on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\n## Examples\n\nIn this example, we have configured the gallery section for *Cards* in the `blog` Collection to display the image stored under the `featured_image` key with a padded fit.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        fit: padded\n```",
      "additionalProperties": false
    },
    "preview.gallery.fit": {
      "default": "padded",
      "type": "string",
      "enum": [
        "padded",
        "cover",
        "contain",
        "cover-top"
      ],
      "documented": true,
      "title": "fit",
      "description": "This key defines how images fit within their containers in the gallery section of a *Card*.\n\nValid values are `padded` (default), `contain`, `cover`, or `cover-top`.\n\n* The `padded` value adds padding around images to maintain aspect ratio.\n* The `contain` value ensures images fit entirely within the container by setting the largest dimension of the image to the largest dimension of the container, while maintaining aspect ratio.\n* The `cover` value ensures images cover the entire container while maintaining aspect ratio, aligning the center of the image with the center of the container.\n* The `cover-top` value ensures images cover the entire container while maintaining aspect ratio, aligning the top of the image with the top of the container.\n\nThis key defaults to `contain`.\n\n## Examples\n\nIn this example, we have configured the gallery fit to use `cover` so images cover the entire container while maintaining aspect ratio, aligning the center of the image with the center of the container.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        fit: cover\n```",
      "markdownDescription": "This key defines how images fit within their containers in the gallery section of a *Card*.\n\nValid values are `padded` (default), `contain`, `cover`, or `cover-top`.\n\n* The `padded` value adds padding around images to maintain aspect ratio.\n* The `contain` value ensures images fit entirely within the container by setting the largest dimension of the image to the largest dimension of the container, while maintaining aspect ratio.\n* The `cover` value ensures images cover the entire container while maintaining aspect ratio, aligning the center of the image with the center of the container.\n* The `cover-top` value ensures images cover the entire container while maintaining aspect ratio, aligning the top of the image with the top of the container.\n\nThis key defaults to `contain`.\n\n## Examples\n\nIn this example, we have configured the gallery fit to use `cover` so images cover the entire container while maintaining aspect ratio, aligning the center of the image with the center of the container.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        fit: cover\n```"
    },
    "type.preview.gallery.background_color": {
      "allOf": [
        {
          "$ref": "#/$defs/PreviewEntries"
        }
      ],
      "documented": true,
      "title": "background_color",
      "description": "This key defines the background color of the gallery area on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the gallery background color with an array of values to provide fallback options. CloudCannon will use the value of `gallery_bg_color` first, then the `{bg_color}` template, and finally fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        background_color:\n          - key: gallery_bg_color\n          - template: '{bg_color}'\n          - text: '#ffffff'\n```\n\nIn this example, we have configured the gallery background color to use a static CSS color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        background_color:\n          - 'red'\n```",
      "markdownDescription": "This key defines the background color of the gallery area on *Cards* in the *Collection browser*, *Structures*, and *Snippets*.\n\nThe value can be an array or a single value, and reference a key, template, or text string. When multiple entries are provided, CloudCannon will use them in order as fallback options.\n\nColor values can be hex codes (e.g., `#ff0000`), CSS color names, or reference a data key that contains a color value.\n\n## Examples\n\nIn this example, we have configured the gallery background color with an array of values to provide fallback options. CloudCannon will use the value of `gallery_bg_color` first, then the `{bg_color}` template, and finally fall back to the static hex color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        background_color:\n          - key: gallery_bg_color\n          - template: '{bg_color}'\n          - text: '#ffffff'\n```\n\nIn this example, we have configured the gallery background color to use a static CSS color value.\n\n```yaml\ncollections_config:\n  blog:\n    preview:\n      gallery:\n        image:\n          - key: featured_image\n        background_color:\n          - 'red'\n```"
    },
    "type.picker_preview": {
      "title": "Picker Preview",
      "allOf": [
        {
          "$ref": "#/$defs/type.preview"
        }
      ],
      "documented": true,
      "description": "This key defines the appearance of a Card when choosing an item to create. This uses `preview` as a base, and keys inside this object are overrides.\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 Cards in inputs using the Structure `staff` when adding items.\n\n```yaml\n_structures:\n  staff:\n    values:\n      - value:\n          _type: Employee\n          name:\n          job_description:\n          profile_picture:\n        picker_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        picker_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```",
      "markdownDescription": "This key defines the appearance of a Card when choosing an item to create. This uses `preview` as a base, and keys inside this object are overrides.\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 Cards in inputs using the Structure `staff` when adding items.\n\n```yaml\n_structures:\n  staff:\n    values:\n      - value:\n          _type: Employee\n          name:\n          job_description:\n          profile_picture:\n        picker_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        picker_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```"
    },
    "type._inputs.*.options.allow_create": {
      "description": "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```",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "allow_create",
      "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```"
    },
    "type._inputs.*.options.allow_empty": {
      "deprecated": true,
      "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```",
      "type": "boolean",
      "documented": true,
      "title": "allow_empty",
      "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```"
    },
    "type._inputs.*.options.values": {
      "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```",
      "anyOf": [
        {
          "type": "string",
          "title": "Dataset Reference Values",
          "description": "This key defines a reference to a dataset.",
          "documented": true,
          "markdownDescription": "This key defines a reference to a dataset."
        },
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "documented": false,
                "title": "values(any-of-1)(text-array)[*]"
              },
              "title": "Text Array",
              "documented": false
            },
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "documented": false,
              "title": "Text Object",
              "additionalProperties": {
                "type": "string",
                "documented": false,
                "title": "values(any-of-1)(text-object).*"
              }
            },
            {
              "type": "array",
              "items": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "title": "values(any-of-1)(object-array)[*]",
                "documented": false,
                "additionalProperties": {}
              },
              "title": "Object Array",
              "documented": false
            },
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "documented": false,
              "title": "Object",
              "additionalProperties": {}
            }
          ],
          "description": "Data formats for populating select and multiselect input options, supporting arrays and objects.",
          "documented": false,
          "title": "values(any-of-1)",
          "markdownDescription": "Data formats for populating select and multiselect input options, supporting arrays and objects."
        }
      ],
      "documented": true,
      "title": "values",
      "markdownDescription": "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```"
    },
    "type._inputs.*.options.value_key": {
      "description": "This key defines the key used for mapping between saved values and objects in values.\n\nThis changes how the input saves selected values to match.\n\nDefaults to checking for \"id\", \"uuid\", \"path\", \"title\", then \"name\".\n\nHas no effect unless values is an array of objects, the key is used instead for objects, and the value itself is used for primitive types.",
      "type": "string",
      "documented": true,
      "title": "value_key",
      "markdownDescription": "This key defines the key used for mapping between saved values and objects in values.\n\nThis changes how the input saves selected values to match.\n\nDefaults to checking for \"id\", \"uuid\", \"path\", \"title\", then \"name\".\n\nHas no effect unless values is an array of objects, the key is used instead for objects, and the value itself is used for primitive types."
    },
    "type._inputs.*.options.view": {
      "description": "This key defines how selected items are rendered.",
      "type": "string",
      "enum": [
        "card",
        "text",
        "gallery",
        "gallery-left"
      ],
      "documented": true,
      "title": "view",
      "markdownDescription": "This key defines how selected items are rendered."
    },
    "type._inputs.*.options.picker_view": {
      "description": "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```",
      "type": "string",
      "enum": [
        "card",
        "text",
        "gallery",
        "gallery-left"
      ],
      "documented": true,
      "title": "picker_view",
      "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```"
    },
    "MultiselectInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "multiselect",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.preview"
                }
              ],
              "documented": false,
              "title": "preview"
            },
            "picker_preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.picker_preview"
                }
              ],
              "documented": false,
              "title": "picker_preview"
            },
            "allow_create": {
              "$ref": "#/$defs/type._inputs.*.options.allow_create"
            },
            "allow_empty": {
              "$ref": "#/$defs/type._inputs.*.options.allow_empty"
            },
            "values": {
              "$ref": "#/$defs/type._inputs.*.options.values"
            },
            "value_key": {
              "$ref": "#/$defs/type._inputs.*.options.value_key"
            },
            "view": {
              "$ref": "#/$defs/type._inputs.*.options.view"
            },
            "picker_view": {
              "$ref": "#/$defs/type._inputs.*.options.picker_view"
            },
            "max_items": {
              "$ref": "#/$defs/type._inputs.*.options.max_items"
            },
            "max_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_items_message"
            },
            "min_items": {
              "$ref": "#/$defs/type._inputs.*.options.min_items"
            },
            "min_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_items_message"
            },
            "unique_on": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on"
            },
            "unique_on_message": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(array)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Multiselect Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.options.max_items": {
      "description": "This key defines the maximum number of items CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from adding more items to this Input.\n\nIf the Input already contains more items, CloudCannon will require you to remove items until the Input contains a valid number to save your changes,\nor discard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.min_items` is also configured, this key cannot be a lesser number.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we want to add an array of filepaths to our homepage's `featured_posts` Input. This Input limits you to a maximum of five array items.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```",
      "type": "number",
      "documented": true,
      "title": "max_items",
      "markdownDescription": "This key defines the maximum number of items CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from adding more items to this Input.\n\nIf the Input already contains more items, CloudCannon will require you to remove items until the Input contains a valid number to save your changes,\nor discard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.min_items` is also configured, this key cannot be a lesser number.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we want to add an array of filepaths to our homepage's `featured_posts` Input. This Input limits you to a maximum of five array items.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```"
    },
    "type._inputs.*.options.max_items_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_items`.\n\nThis key requires you to define `options.max_items`.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number of items using a custom message.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```",
      "type": "string",
      "documented": true,
      "title": "max_items_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.max_items`.\n\nThis key requires you to define `options.max_items`.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number of items using a custom message.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```"
    },
    "type._inputs.*.options.min_items": {
      "description": "This key defines the minimum number of items CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from removing items from this Input below this value.\n\nIf the Input already contains fewer items, CloudCannon will require you to add items until the Input contains a valid number to save your changes, or\ndiscard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.min_items` is also configured, this key cannot be a greater number.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we want to add an array of filepaths to our homepage's `featured_posts` Input. This Input limits you to a maximum of two array items.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```",
      "type": "number",
      "documented": true,
      "title": "min_items",
      "markdownDescription": "This key defines the minimum number of items CloudCannon will allow in an Input.\n\nWhen configured, CloudCannon will prevent you from removing items from this Input below this value.\n\nIf the Input already contains fewer items, CloudCannon will require you to add items until the Input contains a valid number to save your changes, or\ndiscard your unsaved changes.\n\nValue can be any positive integer.\n\nIf `options.min_items` is also configured, this key cannot be a greater number.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we want to add an array of filepaths to our homepage's `featured_posts` Input. This Input limits you to a maximum of two array items.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```"
    },
    "type._inputs.*.options.min_items_message": {
      "description": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.min_items`.\n\nThis key requires you to define `options.min_items`.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number of items using a custom message.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```",
      "type": "string",
      "documented": true,
      "title": "min_items_message",
      "markdownDescription": "This key defines a custom error message that explains why a value has failed the validation criteria from `options.min_items`.\n\nThis key requires you to define `options.min_items`.\n\nThis key has no default.\n\nThis key is available for Array and Multiselect or Multichoice Inputs.\n\n## Examples\n\nIn this example, we prompt our team to enter a valid number of items using a custom message.\n\n```yaml\n_inputs:\n  featured_posts:\n    type: array\n    options:\n      max_items: 5\n      max_items_message: Cannot be more than 5\n      min_items: 2\n      min_items_message: Cannot be less than 2\n```"
    },
    "type._inputs.*.options.unique_on": {
      "description": "This key defines the JSON Path selector that CloudCannon should use to determine if the value of an Input is unique.\n\nWhen configured, CloudCannon will require the value of the Input to be unique compared to the value defined on the JSON Path.\n\nIf the Input already contains a non-unique value, CloudCannon will require you to change it to a valid value to save your changes, or discard your\nunsaved changes.\n\nValue must be a valid JSON Path.\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```\n\n```yaml\nrelated_articles:\n  - path: /articles/first-article.md\n    featured: true\n  - path: /articles/second-article.md\n    featured: false\n```",
      "type": "string",
      "documented": true,
      "title": "unique_on",
      "markdownDescription": "This key defines the JSON Path selector that CloudCannon should use to determine if the value of an Input is unique.\n\nWhen configured, CloudCannon will require the value of the Input to be unique compared to the value defined on the JSON Path.\n\nIf the Input already contains a non-unique value, CloudCannon will require you to change it to a valid value to save your changes, or discard your\nunsaved changes.\n\nValue must be a valid JSON Path.\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```\n\n```yaml\nrelated_articles:\n  - path: /articles/first-article.md\n    featured: true\n  - path: /articles/second-article.md\n    featured: false\n```"
    },
    "type._inputs.*.options.unique_on_message": {
      "description": "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```",
      "type": "string",
      "documented": true,
      "title": "unique_on_message",
      "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```"
    },
    "type._inputs.*.options.empty_type(array)": {
      "default": "null",
      "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```",
      "type": "string",
      "enum": [
        "null",
        "array"
      ],
      "documented": true,
      "title": "Array Empty Type",
      "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```"
    },
    "ChoiceInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "choice",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.preview"
                }
              ],
              "documented": false,
              "title": "preview"
            },
            "picker_preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.picker_preview"
                }
              ],
              "documented": false,
              "title": "picker_preview"
            },
            "allow_empty": {
              "$ref": "#/$defs/type._inputs.*.options.allow_empty"
            },
            "values": {
              "$ref": "#/$defs/type._inputs.*.options.values"
            },
            "value_key": {
              "$ref": "#/$defs/type._inputs.*.options.value_key"
            },
            "view": {
              "$ref": "#/$defs/type._inputs.*.options.view"
            },
            "picker_view": {
              "$ref": "#/$defs/type._inputs.*.options.picker_view"
            },
            "max_length": {
              "$ref": "#/$defs/type._inputs.*.options.max_length"
            },
            "max_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_length_message"
            },
            "min_length": {
              "$ref": "#/$defs/type._inputs.*.options.min_length"
            },
            "min_length_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_length_message"
            },
            "max_words": {
              "$ref": "#/$defs/type._inputs.*.options.max_words"
            },
            "max_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_words_message"
            },
            "min_words": {
              "$ref": "#/$defs/type._inputs.*.options.min_words"
            },
            "min_words_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_words_message"
            },
            "max_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes"
            },
            "max_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_graphemes_message"
            },
            "min_graphemes": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes"
            },
            "min_graphemes_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_graphemes_message"
            },
            "locale": {
              "$ref": "#/$defs/type._inputs.*.options.locale"
            },
            "pattern": {
              "$ref": "#/$defs/type._inputs.*.options.pattern"
            },
            "pattern_message": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_message"
            },
            "pattern_flags": {
              "$ref": "#/$defs/type._inputs.*.options.pattern_flags"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(text)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Choice Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "MultichoiceInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "multichoice",
          "title": "Type",
          "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```",
          "documented": true,
          "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```"
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.preview"
                }
              ],
              "documented": false,
              "title": "preview"
            },
            "picker_preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.picker_preview"
                }
              ],
              "documented": false,
              "title": "picker_preview"
            },
            "allow_empty": {
              "$ref": "#/$defs/type._inputs.*.options.allow_empty"
            },
            "values": {
              "$ref": "#/$defs/type._inputs.*.options.values"
            },
            "value_key": {
              "$ref": "#/$defs/type._inputs.*.options.value_key"
            },
            "view": {
              "$ref": "#/$defs/type._inputs.*.options.view"
            },
            "picker_view": {
              "$ref": "#/$defs/type._inputs.*.options.picker_view"
            },
            "max_items": {
              "$ref": "#/$defs/type._inputs.*.options.max_items"
            },
            "max_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_items_message"
            },
            "min_items": {
              "$ref": "#/$defs/type._inputs.*.options.min_items"
            },
            "min_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_items_message"
            },
            "unique_on": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on"
            },
            "unique_on_message": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(array)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            }
          },
          "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```",
          "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```",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "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```",
      "title": "Multichoice Input",
      "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```",
      "documented": true,
      "additionalProperties": false
    },
    "ObjectInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "object",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(object)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "preview": {
              "allOf": [
                {
                  "$ref": "#/$defs/type.preview"
                }
              ],
              "documented": false,
              "title": "preview"
            },
            "subtype": {
              "description": "This key defines the appearance and behavior of the input.",
              "type": "string",
              "enum": [
                "object",
                "mutable",
                "tabbed"
              ],
              "documented": true,
              "title": "subtype",
              "markdownDescription": "This key defines the appearance and behavior of the input."
            },
            "entries": {
              "description": "This key defines the appearance and function of entries in a mutable *Object Input*.\n\nThe value is an object that can contain optional `allowed_keys`, `structures`, `assigned_structures`, `comment`, and `documentation` keys.\n\nAvailable for Mutable Objects only.\n\n## Examples\n\nIn this example, we have configured entries options with assigned structures for specific allowed keys.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n        assigned_structures:\n          title:\n            - article_metadata\n            - page_metadata\n```",
              "type": "object",
              "properties": {
                "allowed_keys": {
                  "description": "This key defines a limited set of key names for nested keys within your *Object Input*.\n\nThe value is an array of key name strings. This affects entries when adding or renaming nested keys.\n\nThis set is used when entries are added and renamed with `allow_create` enabled. Has no effect if `allow_create` is not enabled.\n\nAvailable for Mutable Objects only.\n\nBy default, this key is `[]`.\n\n## Examples\n\nIn this example, we have configured an allowed key name for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n```",
                  "type": "array",
                  "items": {
                    "type": "string",
                    "documented": true,
                    "title": "allowed_keys[*]",
                    "description": "This key represents an individual allowed key string in the `_inputs.*(object-input).options.entries.allowed_keys` array.\n\nThe value is a string that specifies a key name that can exist on the data within an *Object Input*. This set is used when entries are added and renamed with `allow_create` enabled.\n\n## Examples\n\nIn this example, we have configured an allowed key name for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n```",
                    "markdownDescription": "This key represents an individual allowed key string in the `_inputs.*(object-input).options.entries.allowed_keys` array.\n\nThe value is a string that specifies a key name that can exist on the data within an *Object Input*. This set is used when entries are added and renamed with `allow_create` enabled.\n\n## Examples\n\nIn this example, we have configured an allowed key name for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n```"
                  },
                  "documented": true,
                  "title": "allowed_keys",
                  "markdownDescription": "This key defines a limited set of key names for nested keys within your *Object Input*.\n\nThe value is an array of key name strings. This affects entries when adding or renaming nested keys.\n\nThis set is used when entries are added and renamed with `allow_create` enabled. Has no effect if `allow_create` is not enabled.\n\nAvailable for Mutable Objects only.\n\nBy default, this key is `[]`.\n\n## Examples\n\nIn this example, we have configured an allowed key name for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n```"
                },
                "assigned_structures": {
                  "description": "This key defines how to assign structures to specific key names for entries in the *Object Input*.\n\nThe value is an object where each property key is an allowed key name, and each property value is an array of structure key name strings. When selecting an entry key name, CloudCannon will prompt team members to choose one of the assigned structures for that allowed key. Structure values are referred to by their `id`.\n\nAvailable for Mutable Objects only.",
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "markdownDescription": "This key defines how to assign structures to specific key names for entries in the *Object Input*.\n\nThe value is an object where each property key is an allowed key name, and each property value is an array of structure key name strings. When selecting an entry key name, CloudCannon will prompt team members to choose one of the assigned structures for that allowed key. Structure values are referred to by their `id`.\n\nAvailable for Mutable Objects only.",
                  "documented": true,
                  "title": "assigned_structures",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "documented": true,
                      "title": "*[*]",
                      "description": "This key represents an individual assigned structure string in the `_inputs.*(object-input).options.entries.assigned_structures.*` array.\n\nThe value is a string that specifies a structure key name assigned to entries in an *Object Input*.\n\n## Examples\n\nIn this example, we have configured an assigned structure for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n        assigned_structures:\n          title:\n            - article_metadata\n```",
                      "markdownDescription": "This key represents an individual assigned structure string in the `_inputs.*(object-input).options.entries.assigned_structures.*` array.\n\nThe value is a string that specifies a structure key name assigned to entries in an *Object Input*.\n\n## Examples\n\nIn this example, we have configured an assigned structure for entries in a mutable *Object Input*.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n        assigned_structures:\n          title:\n            - article_metadata\n```"
                    },
                    "documented": true,
                    "title": "assigned_structures.*",
                    "description": "This key represents the assigned structures for a specific allowed key name in the `_inputs.*(object-input).options.entries.assigned_structures` object.\n\nThe value is an array of structure key name strings. When team members select this allowed key name, CloudCannon will prompt them to choose one of these structures.\n\nAvailable for Mutable Objects only.",
                    "markdownDescription": "This key represents the assigned structures for a specific allowed key name in the `_inputs.*(object-input).options.entries.assigned_structures` object.\n\nThe value is an array of structure key name strings. When team members select this allowed key name, CloudCannon will prompt them to choose one of these structures.\n\nAvailable for Mutable Objects only."
                  }
                },
                "structures": {
                  "description": "This key defines which predefined templates to use for populating entries nested in the *Object Input*.\n\nThe value can be a string or an object. When configured, team members can select a [structure](https://cloudcannon.com/documentation/developer-articles/what-is-a-structure/) to populate the Object with input/input groups.\n\nIf configured as an object, CloudCannon will use the values directly. If configured as a string, CloudCannon will use the matching structures value defined under `_structures` in the [configuration cascade](https://cloudcannon.com/documentation/developer-articles/using-the-configuration-cascade/).\n\nAvailable for Mutable Objects only.\n\n> **Note:** This key looks similar to `structures`. However, the `structures` key applies to the Object input itself, while `entries.structures` applies to the entries within the object.\n\nThis key has no default.",
                  "anyOf": [
                    {
                      "$ref": "#/$defs/type.structure-reference"
                    },
                    {
                      "$ref": "#/$defs/type.structure"
                    }
                  ],
                  "documented": true,
                  "title": "structures",
                  "markdownDescription": "This key defines which predefined templates to use for populating entries nested in the *Object Input*.\n\nThe value can be a string or an object. When configured, team members can select a [structure](https://cloudcannon.com/documentation/developer-articles/what-is-a-structure/) to populate the Object with input/input groups.\n\nIf configured as an object, CloudCannon will use the values directly. If configured as a string, CloudCannon will use the matching structures value defined under `_structures` in the [configuration cascade](https://cloudcannon.com/documentation/developer-articles/using-the-configuration-cascade/).\n\nAvailable for Mutable Objects only.\n\n> **Note:** This key looks similar to `structures`. However, the `structures` key applies to the Object input itself, while `entries.structures` applies to the entries within the object.\n\nThis key has no default."
                },
                "comment": {
                  "$ref": "#/$defs/entries_comment"
                },
                "documentation": {
                  "description": "Provides a custom link for documentation for editors shown above the key input when adding/renaming within a mutable object input.",
                  "allOf": [
                    {
                      "$ref": "#/$defs/type.documentation"
                    }
                  ],
                  "documented": false,
                  "title": "documentation",
                  "markdownDescription": "Provides a custom link for documentation for editors shown above the key input when adding/renaming within a mutable object input."
                }
              },
              "markdownDescription": "This key defines the appearance and function of entries in a mutable *Object Input*.\n\nThe value is an object that can contain optional `allowed_keys`, `structures`, `assigned_structures`, `comment`, and `documentation` keys.\n\nAvailable for Mutable Objects only.\n\n## Examples\n\nIn this example, we have configured entries options with assigned structures for specific allowed keys.\n\n```yaml\n_inputs:\n  metadata:\n    type: object\n    options:\n      allow_create: true\n      entries:\n        allowed_keys:\n          - title\n        assigned_structures:\n          title:\n            - article_metadata\n            - page_metadata\n```",
              "documented": true,
              "title": "entries",
              "additionalProperties": false
            },
            "groups": {
              "description": "This key defines how you can group the inputs inside this object together without changing the data structure.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "heading": {
                    "description": "This key defines the main text for the group shown when collapsed or expanded.",
                    "type": "string",
                    "documented": true,
                    "title": "heading",
                    "markdownDescription": "This key defines the main text for the group shown when collapsed or expanded."
                  },
                  "comment": {
                    "description": "This key defines the subtext below the `heading`.\n\nSupports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed.",
                    "type": "string",
                    "documented": true,
                    "title": "comment",
                    "markdownDescription": "This key defines the subtext below the `heading`.\n\nSupports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed."
                  },
                  "collapsed": {
                    "description": "This key toggles whether this group is collapsed or expanded when first viewed.\n\nSetting this key to `true` will collapse this group when first viewed.\n\nBy default, this key is `false` (i.e., the group is expanded when first viewed).",
                    "default": false,
                    "type": "boolean",
                    "documented": true,
                    "title": "collapsed",
                    "markdownDescription": "This key toggles whether this group is collapsed or expanded when first viewed.\n\nSetting this key to `true` will collapse this group when first viewed.\n\nBy default, this key is `false` (i.e., the group is expanded when first viewed)."
                  },
                  "inputs": {
                    "description": "This key defines the keys of each input in this group.",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "documented": true,
                      "title": "inputs[*]",
                      "description": "This key represents an individual input key name string in the `_inputs.*(object-input).options.groups[*].inputs` array.\n\nThe value is a string that specifies the key name of an input to include in a group within an *Object Input*.",
                      "markdownDescription": "This key represents an individual input key name string in the `_inputs.*(object-input).options.groups[*].inputs` array.\n\nThe value is a string that specifies the key name of an input to include in a group within an *Object Input*."
                    },
                    "documented": true,
                    "title": "inputs",
                    "markdownDescription": "This key defines the keys of each input in this group."
                  },
                  "documentation": {
                    "description": "Provides a custom link for documentation for editors shown above the collection file list.",
                    "allOf": [
                      {
                        "$ref": "#/$defs/type.documentation"
                      }
                    ],
                    "documented": false,
                    "title": "documentation",
                    "markdownDescription": "Provides a custom link for documentation for editors shown above the collection file list."
                  }
                },
                "markdownDescription": "This key represents an individual group object in the `_inputs.*(object-input).options.groups` array.\n\nThe value is an object that groups inputs together inside an *Object Input* without changing the data structure. Each group typically contains a `heading` and `inputs` array.",
                "documented": true,
                "title": "groups[*]",
                "description": "This key represents an individual group object in the `_inputs.*(object-input).options.groups` array.\n\nThe value is an object that groups inputs together inside an *Object Input* without changing the data structure. Each group typically contains a `heading` and `inputs` array.",
                "additionalProperties": false
              },
              "documented": true,
              "title": "groups",
              "markdownDescription": "This key defines how you can group the inputs inside this object together without changing the data structure."
            },
            "place_groups_below": {
              "description": "This key defines which order input groups and ungrouped inputs appear in.",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "place_groups_below",
              "markdownDescription": "This key defines which order input groups and ungrouped inputs appear in."
            },
            "allow_label_formatting": {
              "description": "This key toggles whether labels on mutable object entries are formatted.\n\nSetting this key to `true` will format labels on mutable object entries.\n\nBy default, this key is `false` (i.e., labels are not formatted).",
              "default": false,
              "type": "boolean",
              "documented": true,
              "title": "allow_label_formatting",
              "markdownDescription": "This key toggles whether labels on mutable object entries are formatted.\n\nSetting this key to `true` will format labels on mutable object entries.\n\nBy default, this key is `false` (i.e., labels are not formatted)."
            },
            "view": {
              "description": "This key defines how object previews are rendered.",
              "type": "string",
              "enum": [
                "card",
                "gallery",
                "gallery-left"
              ],
              "documented": true,
              "title": "view",
              "markdownDescription": "This key defines how object previews are rendered."
            },
            "structures": {
              "description": "This key defines data formats for value of this object.\n\nWhen choosing an item, team members are prompted to choose from a number of values you have defined. `structures` applies to the object itself.",
              "anyOf": [
                {
                  "$ref": "#/$defs/type.structure-reference"
                },
                {
                  "$ref": "#/$defs/type.structure"
                }
              ],
              "documented": true,
              "title": "structures",
              "markdownDescription": "This key defines data formats for value of this object.\n\nWhen choosing an item, team members are prompted to choose from a number of values you have defined. `structures` applies to the object itself."
            }
          },
          "markdownDescription": "This key defines options that are specific to Object Inputs.",
          "description": "This key defines options that are specific to Object Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines a user interface for a group of inputs.",
      "title": "Object Input",
      "description": "This key defines a user interface for a group of inputs.",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs.*.options.empty_type(object)": {
      "default": "null",
      "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```",
      "type": "string",
      "enum": [
        "null",
        "object"
      ],
      "documented": true,
      "title": "Object Empty Type",
      "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```"
    },
    "type.structure-reference": {
      "type": "string",
      "title": "Structure Reference",
      "description": "A reference to an existing structure.",
      "documented": true,
      "markdownDescription": "A reference to an existing structure."
    },
    "type.structure": {
      "type": "object",
      "properties": {
        "reorder_inputs": {
          "description": "This key toggles whether CloudCannon will reorder inputs in a file to match the order defined in a given Structure.\n\nSetting this key to `false` will preserve the existing order of inputs in a file, regardless of the order defined in the Structure.\n\nBy default, this key is `true` (i.e., inputs are reordered to match the Structure).\n\nYou can also configure this behavior for specific values of a Structure using `values[*].reorder_inputs`.\n\n## Examples\n\nIn this example, we want to preserve the order of the inputs in a file over the order in the associated Structure.\n\n```yaml\n_structures:\n  related_articles:\n    reorder_inputs: false\n    values:\n      - value:\n        name:\n        description:\n        url:\n```",
          "default": true,
          "type": "boolean",
          "documented": true,
          "title": "reorder_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will reorder inputs in a file to match the order defined in a given Structure.\n\nSetting this key to `false` will preserve the existing order of inputs in a file, regardless of the order defined in the Structure.\n\nBy default, this key is `true` (i.e., inputs are reordered to match the Structure).\n\nYou can also configure this behavior for specific values of a Structure using `values[*].reorder_inputs`.\n\n## Examples\n\nIn this example, we want to preserve the order of the inputs in a file over the order in the associated Structure.\n\n```yaml\n_structures:\n  related_articles:\n    reorder_inputs: false\n    values:\n      - value:\n        name:\n        description:\n        url:\n```"
        },
        "hide_extra_inputs": {
          "description": "This key toggles whether CloudCannon will hide inputs that are not present in a Structure from the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\nSetting this key to `true` will hide inputs that are not present in a Structure from the Data Editor. Hiding these inputs does not delete the data. You can see non-structure data keys by opening a file in the [Source Editor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). This key has no effect if `remove_extra_inputs` is `true`.\n\nYou can also configure this behavior for specific values of a Structure using `values[*].hide_extra_inputs`.\n\n## Examples\n\nIn this example, we don't want inputs outside of those listed in the Structure (e.g., old inputs from deprecated versions of this Structure) to appear in the Data Editor.\n\n```yaml\n_structures:\n  related_articles:\n    hide_extra_inputs: true\n    values:\n      - value:\n        name:\n        description:\n        url:\n```",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "hide_extra_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will hide inputs that are not present in a Structure from the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\nSetting this key to `true` will hide inputs that are not present in a Structure from the Data Editor. Hiding these inputs does not delete the data. You can see non-structure data keys by opening a file in the [Source Editor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). This key has no effect if `remove_extra_inputs` is `true`.\n\nYou can also configure this behavior for specific values of a Structure using `values[*].hide_extra_inputs`.\n\n## Examples\n\nIn this example, we don't want inputs outside of those listed in the Structure (e.g., old inputs from deprecated versions of this Structure) to appear in the Data Editor.\n\n```yaml\n_structures:\n  related_articles:\n    hide_extra_inputs: true\n    values:\n      - value:\n        name:\n        description:\n        url:\n```"
        },
        "remove_empty_inputs": {
          "description": "This key toggles whether CloudCannon will remove empty nested inputs from an Object Input or Array Input using a given Structure before persisting\nthem to your file.\n\nSetting this key to `true` will remove empty nested inputs from an Object Input or Array Input using a given Structure before persisting\nthem to your file. CloudCannon considers an input to be empty when its value is `null`, `' '`, or undefined. If this key is true, empty inputs will be visible in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/) but not the [Source\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). For this key to function, you must also configure `id_key` for the Structure, as removing inputs prevents CloudCannon from comparing Structure values.\n\nBy default, this key is `false` (i.e., CloudCannon does not remove empty inputs).\n\nYou can also configure this behavior for specific values of a Structure using structure.values.[*].remove_empty_inputs.\n\n## Examples\n\nIn this example, we want to delete any unnecessary nested inputs (i.e., input we choose not to provide a value for) from Object or Array inputs referenceing the `event_details` Structure.\n\n```yaml\n_structures:\n  event_details:\n    remove_empty_inputs: true\n    values:\n      - value:\n        name:\n        description:\n        url:\n        time:\n        place:\n        sponsor:\n```",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "remove_empty_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will remove empty nested inputs from an Object Input or Array Input using a given Structure before persisting\nthem to your file.\n\nSetting this key to `true` will remove empty nested inputs from an Object Input or Array Input using a given Structure before persisting\nthem to your file. CloudCannon considers an input to be empty when its value is `null`, `' '`, or undefined. If this key is true, empty inputs will be visible in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/) but not the [Source\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). For this key to function, you must also configure `id_key` for the Structure, as removing inputs prevents CloudCannon from comparing Structure values.\n\nBy default, this key is `false` (i.e., CloudCannon does not remove empty inputs).\n\nYou can also configure this behavior for specific values of a Structure using structure.values.[*].remove_empty_inputs.\n\n## Examples\n\nIn this example, we want to delete any unnecessary nested inputs (i.e., input we choose not to provide a value for) from Object or Array inputs referenceing the `event_details` Structure.\n\n```yaml\n_structures:\n  event_details:\n    remove_empty_inputs: true\n    values:\n      - value:\n        name:\n        description:\n        url:\n        time:\n        place:\n        sponsor:\n```"
        },
        "remove_extra_inputs": {
          "description": "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```",
          "default": true,
          "type": "boolean",
          "documented": true,
          "title": "remove_extra_inputs",
          "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```"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/type.structure.values.%5B*%5D"
          },
          "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```",
          "documented": true,
          "title": "values",
          "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```"
        },
        "values_from_glob": {
          "type": "array",
          "items": {
            "type": "string",
            "documented": true,
            "title": "values_from_glob[*]",
            "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```",
            "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```"
          },
          "documented": true,
          "title": "values_from_glob",
          "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```",
          "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```"
        },
        "id_key": {
          "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```",
          "default": "_type",
          "type": "string",
          "documented": true,
          "title": "id_key",
          "markdownDescription": "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```"
        },
        "style": {
          "description": "This key defines how CloudCannon shows Structure options to populate an Object or Array input.\n\nThis can be using a select-style search bar or a pop-up modal.\n\nModals are useful when you have several value options for your Structure.\n\nValues can be one of the following: `select`, or `modal`.\n\n## Examples\n\nIn this example, the `related_articles` Structure only has one option so a `select` searchbar is appropriate.\n\n```yaml\n_structures:\n  related_articles:\n    style: select\n    values:\n      - value:\n        name:\n        description:\n        url:\n```",
          "default": "select",
          "type": "string",
          "enum": [
            "select",
            "modal"
          ],
          "documented": true,
          "title": "style",
          "markdownDescription": "This key defines how CloudCannon shows Structure options to populate an Object or Array input.\n\nThis can be using a select-style search bar or a pop-up modal.\n\nModals are useful when you have several value options for your Structure.\n\nValues can be one of the following: `select`, or `modal`.\n\n## Examples\n\nIn this example, the `related_articles` Structure only has one option so a `select` searchbar is appropriate.\n\n```yaml\n_structures:\n  related_articles:\n    style: select\n    values:\n      - value:\n        name:\n        description:\n        url:\n```"
        }
      },
      "required": [
        "values"
      ],
      "markdownDescription": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
      "title": "Structure",
      "description": "This key defines data formats when adding new items to arrays and objects, with options for how editors choose from available values.",
      "documented": true,
      "additionalProperties": false
    },
    "type.structure.values.[*]": {
      "type": "object",
      "properties": {
        "reorder_inputs": {
          "description": "This key toggles whether CloudCannon will reorder inputs in a file to match the order defined in a given value from a Structure.\n\nSetting this key to `false` will preserve the existing order of inputs in a file, regardless of the order defined in the Structure value.\n\nBy default, this key is `true` (i.e., inputs are reordered to match the Structure value).\n\nYou can also configure this behavior for all values of a Structure using `reorder_inputs` inside `_structures.*`.",
          "default": true,
          "type": "boolean",
          "documented": true,
          "title": "reorder_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will reorder inputs in a file to match the order defined in a given value from a Structure.\n\nSetting this key to `false` will preserve the existing order of inputs in a file, regardless of the order defined in the Structure value.\n\nBy default, this key is `true` (i.e., inputs are reordered to match the Structure value).\n\nYou can also configure this behavior for all values of a Structure using `reorder_inputs` inside `_structures.*`."
        },
        "hide_extra_inputs": {
          "description": "This key toggles whether CloudCannon will hide inputs that are not present in a given value from a Structure from the [Data\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\nSetting this key to `true` will hide inputs that are not present in a given value from a Structure from the Data Editor. Hiding these inputs does not delete the data. You can see non-structure data keys by opening a file in the [Source Editor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). This key has no effect if `remove_extra_inputs` is `true`.\n\nYou can also configure this behavior for all values of a Structure using `hide_extra_inputs` inside `_structures.*`.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "hide_extra_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will hide inputs that are not present in a given value from a Structure from the [Data\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/).\n\nSetting this key to `true` will hide inputs that are not present in a given value from a Structure from the Data Editor. Hiding these inputs does not delete the data. You can see non-structure data keys by opening a file in the [Source Editor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). This key has no effect if `remove_extra_inputs` is `true`.\n\nYou can also configure this behavior for all values of a Structure using `hide_extra_inputs` inside `_structures.*`."
        },
        "remove_empty_inputs": {
          "description": "This key toggles whether CloudCannon will remove empty nested inputs from an Object Input or Array Input using a given value from a Structure before\npersisting them to your file.\n\nSetting this key to `true` will remove empty nested inputs from an Object Input or Array Input using a given value from a Structure before\npersisting them to your file. CloudCannon considers an input to be empty when its value is `null`, `' '`, or undefined. If this key is true, empty inputs will be visible in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/) but not the [Source\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). For this key to function, you must also configure `id_key` for the Structure, as removing inputs prevents CloudCannon from comparing Structure values.\n\nYou can also configure this behavior for all values of a Structure using `remove_empty_inputs` inside `_structures.*`.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "remove_empty_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will remove empty nested inputs from an Object Input or Array Input using a given value from a Structure before\npersisting them to your file.\n\nSetting this key to `true` will remove empty nested inputs from an Object Input or Array Input using a given value from a Structure before\npersisting them to your file. CloudCannon considers an input to be empty when its value is `null`, `' '`, or undefined. If this key is true, empty inputs will be visible in the [Data Editor](https://cloudcannon.com/documentation/articles/what-is-the-data-editor/) but not the [Source\nEditor](https://cloudcannon.com/documentation/articles/what-is-the-source-editor/). For this key to function, you must also configure `id_key` for the Structure, as removing inputs prevents CloudCannon from comparing Structure values.\n\nYou can also configure this behavior for all values of a Structure using `remove_empty_inputs` inside `_structures.*`."
        },
        "remove_extra_inputs": {
          "description": "This key toggles whether CloudCannon will remove inputs that are not present in a given value from a Structure from a file before loading it in an\nEditing Interface.\n\nSetting this key to `true` will remove inputs that are not present in a given value from 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 all values of a Structure using `remove_extra_inputs` inside `_structures.*`.",
          "default": true,
          "type": "boolean",
          "documented": true,
          "title": "remove_extra_inputs",
          "markdownDescription": "This key toggles whether CloudCannon will remove inputs that are not present in a given value from a Structure from a file before loading it in an\nEditing Interface.\n\nSetting this key to `true` will remove inputs that are not present in a given value from 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 all values of a Structure using `remove_extra_inputs` inside `_structures.*`."
        },
        "preview": {
          "allOf": [
            {
              "$ref": "#/$defs/type.preview"
            }
          ],
          "documented": false,
          "title": "preview"
        },
        "picker_preview": {
          "allOf": [
            {
              "$ref": "#/$defs/type.picker_preview"
            }
          ],
          "documented": false,
          "title": "picker_preview"
        },
        "_inputs": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs"
            }
          ],
          "documented": false,
          "title": "_inputs"
        },
        "_inputs_from_glob": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs_from_glob"
            }
          ],
          "documented": false,
          "title": "_inputs_from_glob"
        },
        "_select_data": {
          "allOf": [
            {
              "$ref": "#/$defs/type._select_data"
            }
          ],
          "documented": false,
          "title": "_select_data"
        },
        "_structures": {
          "allOf": [
            {
              "$ref": "#/$defs/type._structures"
            }
          ],
          "documented": false,
          "title": "_structures"
        },
        "_structures_from_glob": {
          "allOf": [
            {
              "$ref": "#/$defs/type._structures_from_glob"
            }
          ],
          "documented": false,
          "title": "_structures_from_glob"
        },
        "id": {
          "description": "This key defines the string used to identify a given Structure value when refering to it from other input configuration.\n\n## Examples\n\nIn this example, we have configured the `blog_post` ID for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        id: blog_post\n```",
          "type": "string",
          "documented": true,
          "title": "id",
          "markdownDescription": "This key defines the string used to identify a given Structure value when refering to it from other input configuration.\n\n## Examples\n\nIn this example, we have configured the `blog_post` ID for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        id: blog_post\n```"
        },
        "default": {
          "description": "This key toggles whether CloudCannon should treat an entry in the `values` array as the default option for your Object or Array input.\n\nSetting this key to `true` will mark this entry as the default option for your Object or Array input. If multiple entries in the `values` array are set to `true`, CloudCannon will use the first entry. If CloudCannon cannot determine the type of an entry within the `values` array based on the `id_key` or matching inputs across `values[*].value` objects,\nit will fall back to the default entry.\n\n## Examples\n\nIn this example, we want the entry labelled `Employee` to be our default option for populating inputs configured with the `staff` Structure.\n\n```yaml\n_structures:\n  staff:\n    style: modal\n    values:\n      - label: Employee\n        default: true\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```",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "default",
          "markdownDescription": "This key toggles whether CloudCannon should treat an entry in the `values` array as the default option for your Object or Array input.\n\nSetting this key to `true` will mark this entry as the default option for your Object or Array input. If multiple entries in the `values` array are set to `true`, CloudCannon will use the first entry. If CloudCannon cannot determine the type of an entry within the `values` array based on the `id_key` or matching inputs across `values[*].value` objects,\nit will fall back to the default entry.\n\n## Examples\n\nIn this example, we want the entry labelled `Employee` to be our default option for populating inputs configured with the `staff` Structure.\n\n```yaml\n_structures:\n  staff:\n    style: modal\n    values:\n      - label: Employee\n        default: true\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```"
        },
        "icon": {
          "description": "This key defines an icon used when displaying the structure (defaults to either `format_list_bulleted` for items in arrays, or `notes` otherwise).\n\n## Examples\n\nIn this example, CloudCannon will display the `article` icon for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        icon: article\n```",
          "allOf": [
            {
              "$ref": "#/$defs/icon"
            }
          ],
          "documented": true,
          "title": "icon",
          "markdownDescription": "This key defines an icon used when displaying the structure (defaults to either `format_list_bulleted` for items in arrays, or `notes` otherwise).\n\n## Examples\n\nIn this example, CloudCannon will display the `article` icon for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        icon: article\n```"
        },
        "image": {
          "description": "This key defines the path to an image in your source files used when displaying the structure value.\n\nCan be either a source (has priority) or output path.\n\n## Examples\n\nIn this example, we have configured the `/images/blog-icon.png` image for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        image: /images/blog-icon.png\n```",
          "type": "string",
          "documented": true,
          "title": "image",
          "markdownDescription": "This key defines the path to an image in your source files used when displaying the structure value.\n\nCan be either a source (has priority) or output path.\n\n## Examples\n\nIn this example, we have configured the `/images/blog-icon.png` image for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        image: /images/blog-icon.png\n```"
        },
        "label": {
          "description": "This key defines the display name for a given value in a Structure.\n\nThe name will appear in the *+ Add* button dropdown below an Object or Array input or in the Structures modal (if configured).\n\nBy default, this key falls back to `unknown`.\n\n## Examples\n\nIn this example, we want two value options for our `staff` structure: one called `Manager` and one called `Employee`.\n\n```yaml\n_structures:\n  staff:\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```",
          "type": "string",
          "documented": true,
          "title": "label",
          "markdownDescription": "This key defines the display name for a given value in a Structure.\n\nThe name will appear in the *+ Add* button dropdown below an Object or Array input or in the Structures modal (if configured).\n\nBy default, this key falls back to `unknown`.\n\n## Examples\n\nIn this example, we want two value options for our `staff` structure: one called `Manager` and one called `Employee`.\n\n```yaml\n_structures:\n  staff:\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```"
        },
        "tags": {
          "description": "This key defines which tags are associated with a given value in a Structure.\n\nYou can use tags to group and filter Structure options when selecting from a modal.\n\nThis key has no default.\n\n## Examples\n\nIn this example we have three options for the `page_components` Structure: `Hero Component`, `Feature Component`, and `Video Component`. We can search the Structure modal using the `image`, `text`, `button`, and `video` tags to filter Structure values.\n\n```yaml\n_structures:\n  page_components:\n    style: modal\n    values:\n      - label: Hero Component\n        tags:\n          - image\n          - text\n        value:\n          title:\n          description:\n          image_path:\n          link:\n            text:\n            url:\n      - label: Feature Component\n        tags:\n          - image\n          - text\n          - button\n        value:\n          image_path:\n          title:\n          description:\n          button:\n            link:\n            text:\n          reversed_layout: false\n      - label: Video Component\n        tags:\n          - image\n          - video\n        value:\n          image_path:\n          videoUrl:\n```",
          "type": "array",
          "items": {
            "type": "string",
            "documented": true,
            "title": "tags[*]",
            "description": "This key represents an individual tag string in the `values[*].tags` array.\n\nThe value is a string that specifies a tag associated with a structure value.\n\n## Examples\n\nIn this example, we have configured the `featured` and `news` tags for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        tags:\n          - featured\n          - news\n```",
            "markdownDescription": "This key represents an individual tag string in the `values[*].tags` array.\n\nThe value is a string that specifies a tag associated with a structure value.\n\n## Examples\n\nIn this example, we have configured the `featured` and `news` tags for the entry labeled `Blog` in the `article_information` Structure.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        tags:\n          - featured\n          - news\n```"
          },
          "documented": true,
          "title": "tags",
          "markdownDescription": "This key defines which tags are associated with a given value in a Structure.\n\nYou can use tags to group and filter Structure options when selecting from a modal.\n\nThis key has no default.\n\n## Examples\n\nIn this example we have three options for the `page_components` Structure: `Hero Component`, `Feature Component`, and `Video Component`. We can search the Structure modal using the `image`, `text`, `button`, and `video` tags to filter Structure values.\n\n```yaml\n_structures:\n  page_components:\n    style: modal\n    values:\n      - label: Hero Component\n        tags:\n          - image\n          - text\n        value:\n          title:\n          description:\n          image_path:\n          link:\n            text:\n            url:\n      - label: Feature Component\n        tags:\n          - image\n          - text\n          - button\n        value:\n          image_path:\n          title:\n          description:\n          button:\n            link:\n            text:\n          reversed_layout: false\n      - label: Video Component\n        tags:\n          - image\n          - video\n        value:\n          image_path:\n          videoUrl:\n```"
        },
        "groups": {
          "description": "This key defines the order and custom grouping for inputs within a Structure.\n\nThe value is an array of group objects. Each group object can contain a `heading`, `comment`, `collapsed`, and `inputs` array.\n\n## Examples\n\nIn this example, we want to separate the inputs into two groups with descriptive headings: `title` and `subtitle` under the `Titles` heading, and `author` under the `Details` heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "heading": {
                "description": "This key defines the main text for the group shown when collapsed or expanded.\n\nThe value is a string that specifies the heading text displayed for the group.\n\n## Examples\n\nIn this example, we have configured a group heading to organize structure inputs under the \"Titles\" heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
                "type": "string",
                "documented": true,
                "title": "heading",
                "markdownDescription": "This key defines the main text for the group shown when collapsed or expanded.\n\nThe value is a string that specifies the heading text displayed for the group.\n\n## Examples\n\nIn this example, we have configured a group heading to organize structure inputs under the \"Titles\" heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
              },
              "comment": {
                "description": "This key defines the subtext displayed below the `heading` for a group.\n\nThe value is a string that supports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed.\n\n## Examples\n\nIn this example, we have configured a group comment with Markdown formatting to provide additional context below the heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            comment: Make these SEO-friendly\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
                "type": "string",
                "documented": true,
                "title": "comment",
                "markdownDescription": "This key defines the subtext displayed below the `heading` for a group.\n\nThe value is a string that supports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed.\n\n## Examples\n\nIn this example, we have configured a group comment with Markdown formatting to provide additional context below the heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            comment: Make these SEO-friendly\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
              },
              "collapsed": {
                "description": "This key defines whether a group is collapsed or expanded when first viewed.\n\nThe value is a boolean. When `true`, CloudCannon displays the group in a collapsed state. When `false`, CloudCannon displays the group in an expanded state.\n\nBy default, CloudCannon displays groups in an expanded state.\n\n## Examples\n\nIn this example, we have configured the \"Details\" group to be collapsed by default.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            collapsed: true\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
                "default": false,
                "type": "boolean",
                "documented": true,
                "title": "collapsed",
                "markdownDescription": "This key defines whether a group is collapsed or expanded when first viewed.\n\nThe value is a boolean. When `true`, CloudCannon displays the group in a collapsed state. When `false`, CloudCannon displays the group in an expanded state.\n\nBy default, CloudCannon displays groups in an expanded state.\n\n## Examples\n\nIn this example, we have configured the \"Details\" group to be collapsed by default.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            collapsed: true\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
              },
              "inputs": {
                "description": "This key defines which inputs are included in a group within a structure value.\n\nThe value is an array of input key name strings that specify which inputs belong to this group.\n\n## Examples\n\nIn this example, we have configured a group to include the `title` and `subtitle` inputs.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
                "type": "array",
                "items": {
                  "type": "string",
                  "documented": true,
                  "title": "inputs[*]",
                  "description": "This key represents an individual input key name string in the `values[*].groups[*].inputs` array.\n\nThe value is a string that specifies the key name of an input to include in a group within a structure value.\n\n## Examples\n\nIn this example, we have configured a group to include the `title` input.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
                  "markdownDescription": "This key represents an individual input key name string in the `values[*].groups[*].inputs` array.\n\nThe value is a string that specifies the key name of an input to include in a group within a structure value.\n\n## Examples\n\nIn this example, we have configured a group to include the `title` input.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
                },
                "documented": true,
                "title": "inputs",
                "markdownDescription": "This key defines which inputs are included in a group within a structure value.\n\nThe value is an array of input key name strings that specify which inputs belong to this group.\n\n## Examples\n\nIn this example, we have configured a group to include the `title` and `subtitle` inputs.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
              },
              "documentation": {
                "description": "Provides a custom link for documentation for editors shown above the collection file list.",
                "allOf": [
                  {
                    "$ref": "#/$defs/type.documentation"
                  }
                ],
                "documented": false,
                "title": "documentation",
                "markdownDescription": "Provides a custom link for documentation for editors shown above the collection file list."
              }
            },
            "markdownDescription": "This key represents an individual group object in the `values[*].groups` array.\n\nThe value is an object that groups inputs together within a structure value without changing the data structure. Each group typically contains a `heading` and `inputs` array.\n\n## Examples\n\nIn this example, we have configured a group with a heading and inputs array to organize structure inputs.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
            "documented": true,
            "title": "groups[*]",
            "description": "This key represents an individual group object in the `values[*].groups` array.\n\nThe value is an object that groups inputs together within a structure value without changing the data structure. Each group typically contains a `heading` and `inputs` array.\n\n## Examples\n\nIn this example, we have configured a group with a heading and inputs array to organize structure inputs.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```",
            "additionalProperties": false
          },
          "documented": true,
          "title": "groups",
          "markdownDescription": "This key defines the order and custom grouping for inputs within a Structure.\n\nThe value is an array of group objects. Each group object can contain a `heading`, `comment`, `collapsed`, and `inputs` array.\n\n## Examples\n\nIn this example, we want to separate the inputs into two groups with descriptive headings: `title` and `subtitle` under the `Titles` heading, and `author` under the `Details` heading.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n        groups:\n          - heading: Titles\n            inputs:\n              - title\n              - subtitle\n          - heading: Details\n            inputs:\n              - author\n```"
        },
        "place_groups_below": {
          "description": "This key defines which order input groups and ungrouped inputs appear in.",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "place_groups_below",
          "markdownDescription": "This key defines which order input groups and ungrouped inputs appear in."
        },
        "tabbed": {
          "description": "This key toggles whether CloudCannon should create tabs in the Data Editor if you have two layers of nested object within your Structure.\n\nSetting this key to `true` will create tabs in the Data Editor for two layers of nested objects within your Structure.\n\nBy default, this key is `false` (i.e., Object and Array inputs using this Structure option are not tabbed).\n\n## Examples\n\nIn this example, we want the `content` and `style` keys in our Structure to be tabs at the top of the Data Editor, with the `title` and `text`, and `color` and `font` keys nested within those tabs respectively.\n\n```yaml\n_structures:\n  components:\n    values:\n      - label: Component\n        tabbed: true\n        value:\n          content:\n            title:\n            text:\n          style:\n            color:\n            font:\n```",
          "default": false,
          "type": "boolean",
          "documented": true,
          "title": "tabbed",
          "markdownDescription": "This key toggles whether CloudCannon should create tabs in the Data Editor if you have two layers of nested object within your Structure.\n\nSetting this key to `true` will create tabs in the Data Editor for two layers of nested objects within your Structure.\n\nBy default, this key is `false` (i.e., Object and Array inputs using this Structure option are not tabbed).\n\n## Examples\n\nIn this example, we want the `content` and `style` keys in our Structure to be tabs at the top of the Data Editor, with the `title` and `text`, and `color` and `font` keys nested within those tabs respectively.\n\n```yaml\n_structures:\n  components:\n    values:\n      - label: Component\n        tabbed: true\n        value:\n          content:\n            title:\n            text:\n          style:\n            color:\n            font:\n```"
        },
        "value": {
          "description": "This key defines which nested inputs the Structure value should add to an Object or Array input.\n\nYou must define this key for the Structure value to function.\n\nNested keys can be any [input](https://cloudcannon.com/documentation/articles/what-are-inputs/) you require in your Object or Array.\n\nFor more information, please read our documentation on [configuring an Object input](https://cloudcannon.com/documentation/articles/configure-an-object-input/) and\n[configuring and Array input](https://cloudcannon.com/documentation/articles/configure-an-array-input/).\n\n## Examples\n\nIn this example we want to populate the `details` Object input with the nested keys `title`, `subtitle`, and `author` we have defined under the `values.value` key.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n_inputs:\n  details:\n    type: object\n    options:\n      structures: _structures.article_information\n```",
          "documented": true,
          "title": "value",
          "markdownDescription": "This key defines which nested inputs the Structure value should add to an Object or Array input.\n\nYou must define this key for the Structure value to function.\n\nNested keys can be any [input](https://cloudcannon.com/documentation/articles/what-are-inputs/) you require in your Object or Array.\n\nFor more information, please read our documentation on [configuring an Object input](https://cloudcannon.com/documentation/articles/configure-an-object-input/) and\n[configuring and Array input](https://cloudcannon.com/documentation/articles/configure-an-array-input/).\n\n## Examples\n\nIn this example we want to populate the `details` Object input with the nested keys `title`, `subtitle`, and `author` we have defined under the `values.value` key.\n\n```yaml\n_structures:\n  article_information:\n    values:\n      - label: Blog\n        value:\n          title:\n          subtitle:\n          author:\n_inputs:\n  details:\n    type: object\n    options:\n      structures: _structures.article_information\n```"
        },
        "description": {
          "description": "This key defines short descriptive text for editors shown in the Data Editor for expanded values matching this Structure value.\n\nHas no default.\n\nSupports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed.",
          "type": "string",
          "documented": true,
          "title": "description",
          "markdownDescription": "This key defines short descriptive text for editors shown in the Data Editor for expanded values matching this Structure value.\n\nHas no default.\n\nSupports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed."
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown in the Data Editor for expanded values matching this Structure value. Has no default.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown in the Data Editor for expanded values matching this Structure value. Has no default."
        }
      },
      "required": [
        "value"
      ],
      "markdownDescription": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
      "title": "Structure Value",
      "description": "This key represents a single value option within a structure, defining the data format and appearance for content editors.",
      "documented": true,
      "additionalProperties": false
    },
    "type._inputs": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "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```",
      "title": "Inputs",
      "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```",
      "documented": true,
      "additionalProperties": {
        "$ref": "#/$defs/Input"
      }
    },
    "type._inputs_from_glob": {
      "type": "array",
      "items": {
        "type": "string",
        "documented": true,
        "title": "_inputs_from_glob[*]",
        "description": "This key represents an individual glob pattern string in the `_inputs_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.inputs.yml`.\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/blog-details.cloudcannon.inputs.yml'\n```",
        "markdownDescription": "This key represents an individual glob pattern string in the `_inputs_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.inputs.yml`.\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/blog-details.cloudcannon.inputs.yml'\n```"
      },
      "documented": true,
      "title": "_inputs_from_glob",
      "description": "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```",
      "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```"
    },
    "type._select_data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "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```",
      "title": "Select Data",
      "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```",
      "documented": true,
      "additionalProperties": {
        "anyOf": [
          {
            "type": "array",
            "items": {
              "type": "string",
              "documented": true,
              "title": "*(text-array)[*]"
            },
            "title": "Text Array Select Data",
            "documented": true
          },
          {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "documented": true,
            "title": "Text Object Select Data",
            "additionalProperties": {
              "type": "string",
              "documented": true,
              "title": "*(text-object).*"
            }
          },
          {
            "type": "array",
            "items": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "title": "*(object-array)[*]",
              "documented": true,
              "additionalProperties": {}
            },
            "title": "Object Array Select Data",
            "documented": true
          },
          {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "documented": true,
            "title": "Object Select Data",
            "additionalProperties": {}
          }
        ],
        "description": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects.",
        "documented": true,
        "title": "_select_data.*",
        "markdownDescription": "This key defines data formats for populating select and multiselect input options, supporting arrays and objects."
      }
    },
    "type._structures": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "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```",
      "title": "Structures",
      "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```",
      "documented": true,
      "additionalProperties": {
        "$ref": "#/$defs/type.structure"
      }
    },
    "type._structures_from_glob": {
      "type": "array",
      "items": {
        "type": "string",
        "documented": true,
        "title": "_structures_from_glob[*]",
        "description": "This key represents an individual glob pattern string in the `_structures_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.structures.yml`.\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```",
        "markdownDescription": "This key represents an individual glob pattern string in the `_structures_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.structures.yml`.\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```"
      },
      "documented": true,
      "title": "_structures_from_glob",
      "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```",
      "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```"
    },
    "entries_comment": {
      "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```",
      "type": "string",
      "documented": true,
      "title": "comment",
      "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```"
    },
    "ArrayInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "array",
          "title": "Type",
          "description": "This key defines the input type, which controls how this input appears and behaves.",
          "documented": true,
          "markdownDescription": "This key defines the input type, which controls how this input appears and behaves."
        },
        "options": {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/$defs/type._inputs.*.options.required"
            },
            "required_message": {
              "$ref": "#/$defs/type._inputs.*.options.required_message"
            },
            "max_items": {
              "$ref": "#/$defs/type._inputs.*.options.max_items"
            },
            "max_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.max_items_message"
            },
            "min_items": {
              "$ref": "#/$defs/type._inputs.*.options.min_items"
            },
            "min_items_message": {
              "$ref": "#/$defs/type._inputs.*.options.min_items_message"
            },
            "unique_on": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on"
            },
            "unique_on_message": {
              "$ref": "#/$defs/type._inputs.*.options.unique_on_message"
            },
            "disable_add": {
              "$ref": "#/$defs/ArrayInput.disable_add"
            },
            "disable_remove": {
              "$ref": "#/$defs/disable_remove"
            },
            "disable_reorder": {
              "$ref": "#/$defs/disable_reorder"
            },
            "empty_type": {
              "allOf": [
                {
                  "$ref": "#/$defs/type._inputs.*.options.empty_type(array)"
                }
              ],
              "documented": false,
              "title": "empty_type"
            },
            "structures": {
              "description": "This key defines data formats for value of this object.\n\nWhen choosing an item, team members are prompted to choose from a number of values you have defined.",
              "anyOf": [
                {
                  "$ref": "#/$defs/type.structure-reference"
                },
                {
                  "$ref": "#/$defs/type.structure"
                }
              ],
              "documented": true,
              "title": "structures",
              "markdownDescription": "This key defines data formats for value of this object.\n\nWhen choosing an item, team members are prompted to choose from a number of values you have defined."
            }
          },
          "markdownDescription": "This key defines options that are specific to Array Inputs.",
          "description": "This key defines options that are specific to Array Inputs.",
          "documented": true,
          "title": "options",
          "additionalProperties": false
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "This key defines a user interface for lists of inputs or input groups.",
      "title": "Array Input",
      "description": "This key defines a user interface for lists of inputs or input groups.",
      "documented": true,
      "additionalProperties": false
    },
    "ArrayInput.disable_add": {
      "description": "This key toggles whether CloudCannon will hide the add button, and context menu actions on each item for adding new items to this Input.\n\nSetting this key to `true` will hide the add button and context menu actions for adding new items.\n\nBy default, this key is `false` (i.e., the add button and context menu actions are displayed).",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_add",
      "markdownDescription": "This key toggles whether CloudCannon will hide the add button, and context menu actions on each item for adding new items to this Input.\n\nSetting this key to `true` will hide the add button and context menu actions for adding new items.\n\nBy default, this key is `false` (i.e., the add button and context menu actions are displayed)."
    },
    "disable_remove": {
      "description": "This key toggles whether CloudCannon will hide the context menu actions on each item for removing them.\n\nSetting this key to `true` will hide the context menu actions for removing items.\n\nBy default, this key is `false` (i.e., the context menu actions for removing items are displayed).",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_remove",
      "markdownDescription": "This key toggles whether CloudCannon will hide the context menu actions on each item for removing them.\n\nSetting this key to `true` will hide the context menu actions for removing items.\n\nBy default, this key is `false` (i.e., the context menu actions for removing items are displayed)."
    },
    "disable_reorder": {
      "description": "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).",
      "default": false,
      "type": "boolean",
      "documented": true,
      "title": "disable_reorder",
      "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)."
    },
    "AutoInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "type": {
          "type": "string",
          "const": "auto",
          "title": "Type",
          "description": "Sets an input type, which controls how this input appears and behaves.",
          "documented": false,
          "markdownDescription": "Sets an input type, which controls how this input appears and behaves."
        },
        "options": {
          "description": "Options that are specific to this `type` of input.",
          "documented": false,
          "title": "options",
          "markdownDescription": "Options that are specific to this `type` of input."
        }
      },
      "required": [
        "type"
      ],
      "markdownDescription": "Provides a default user interface based on the data contained.",
      "title": "Automatic Input",
      "description": "Provides a default user interface based on the data contained.",
      "excludeFromDocumentation": true,
      "documented": false,
      "additionalProperties": false
    },
    "UnknownInput": {
      "type": "object",
      "properties": {
        "comment": {
          "$ref": "#/$defs/type._inputs.*.comment"
        },
        "context": {
          "allOf": [
            {
              "$ref": "#/$defs/type._inputs.*.context"
            }
          ],
          "documented": false,
          "title": "context"
        },
        "documentation": {
          "description": "Provides a custom link for documentation for editors shown above input.",
          "allOf": [
            {
              "$ref": "#/$defs/type.documentation"
            }
          ],
          "documented": false,
          "title": "documentation",
          "markdownDescription": "Provides a custom link for documentation for editors shown above input."
        },
        "label": {
          "$ref": "#/$defs/type._inputs.*.label"
        },
        "hidden": {
          "$ref": "#/$defs/type._inputs.*.hidden"
        },
        "disabled": {
          "$ref": "#/$defs/type._inputs.*.disabled"
        },
        "instance_value": {
          "$ref": "#/$defs/type._inputs.*.instance_value"
        },
        "disable_instance_value_rehydration": {
          "$ref": "#/$defs/type._inputs.*.disable_instance_value_rehydration"
        },
        "cascade": {
          "$ref": "#/$defs/type._inputs.*.cascade"
        },
        "options": {
          "description": "Options that are specific to this `type` of input.",
          "documented": false,
          "title": "options",
          "markdownDescription": "Options that are specific to this `type` of input."
        }
      },
      "markdownDescription": "Provides a default user interface based on the data contained.",
      "title": "Unknown Input",
      "description": "Provides a default user interface based on the data contained.",
      "excludeFromDocumentation": true,
      "documented": false,
      "additionalProperties": false
    }
  },
  "allOf": [
    {
      "$ref": "#/$defs/type._inputs"
    }
  ]
}
