{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "vscode-html-customdata",
  "version": 1.1,
  "title": "VS Code HTML Custom Data format",
  "description": "Format for loading Custom Data in VS Code's HTML support",
  "type": "object",
  "required": [
    "version"
  ],
  "definitions": {
    "references": {
      "type": "object",
      "required": [
        "name",
        "url"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the reference."
        },
        "url": {
          "type": "string",
          "description": "The URL of the reference.",
          "pattern": "https?:\/\/",
          "patternErrorMessage": "URL should start with http:// or https://"
        }
      }
    },
    "markupDescription": {
      "type": "object",
      "required": [
        "kind",
        "value"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Whether `description.value` should be rendered as plaintext or markdown",
          "enum": [
            "plaintext",
            "markdown"
          ]
        },
        "value": {
          "type": "string",
          "description": "Description shown in completion and hover"
        }
      }
    }
  },
  "properties": {
    "version": {
      "const": 1.1,
      "description": "The custom data version",
      "type": "number"
    },
    "tags": {
      "description": "Custom HTML tags",
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "defaultSnippets": [
          {
            "body": {
              "name": "$1",
              "description": "",
              "attributes": []
            }
          }
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of tag"
          },
          "description": {
            "description": "Description of tag shown in completion and hover",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/definitions/markupDescription"
              }
            ]
          },
          "attributes": {
            "type": "array",
            "description": "A list of possible attributes for the tag",
            "items": {
              "type": "object",
              "required": [
                "name"
              ],
              "defaultSnippets": [
                {
                  "body": {
                    "name": "$1",
                    "description": "",
                    "values": []
                  }
                }
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Name of attribute"
                },
                "description": {
                  "description": "Description of attribute shown in completion and hover",
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "$ref": "#/definitions/markupDescription"
                    }
                  ]
                },
                "valueSet": {
                  "type": "string",
                  "description": "Name of the matching attribute value set"
                },
                "values": {
                  "type": "array",
                  "description": "A list of possible values for the attribute",
                  "items": {
                    "type": "object",
                    "required": [
                      "name"
                    ],
                    "defaultSnippets": [
                      {
                        "body": {
                          "name": "$1",
                          "description": ""
                        }
                      }
                    ],
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "Name of attribute value"
                      },
                      "description": {
                        "description": "Description of attribute value shown in completion and hover",
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "$ref": "#/definitions/markupDescription"
                          }
                        ]
                      },
                      "references": {
                        "type": "array",
                        "description": "A list of references for the attribute value shown in completion and hover",
                        "items": {
                          "$ref": "#/definitions/references"
                        }
                      }
                    }
                  }
                },
                "references": {
                  "type": "array",
                  "description": "A list of references for the attribute shown in completion and hover",
                  "items": {
                    "$ref": "#/definitions/references"
                  }
                }
              }
            }
          },
          "references": {
            "type": "array",
            "description": "A list of references for the tag shown in completion and hover",
            "items": {
              "$ref": "#/definitions/references"
            }
          },
          "browsers": {
            "type": "array",
            "description": "Supported browsers",
            "items": {
              "type": "string",
              "pattern": "(E|FFA|FF|SM|S|CA|C|IE|O)([\\d|\\.]+)?",
              "patternErrorMessage": "Browser item must follow the format of `${browser}${version}`. `browser` is one of:\n- E: Edge\n- FF: Firefox\n- FM: Firefox Android\n- S: Safari\n- SM: Safari on iOS\n- C: Chrome\n- CM: Chrome on Android\n- IE: Internet Explorer\n- O: Opera"
            }
          },
          "baseline": {
            "type": "object",
            "description": "Baseline information for the feature",
            "properties": {
              "status": {
                "type": "string",
                "description": "Baseline status",
                "enum": [
                  "high",
                  "low",
                  "false"
                ]
              },
              "baseline_low_date": {
                "type": "string",
                "description": "Date when the feature became newly supported in all major browsers",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "patternErrorMessage": "Date must be in the format of `YYYY-MM-DD`"
              },
              "baseline_high_date": {
                "type": "string",
                "description": "Date when the feature became widely supported in all major browsers",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "patternErrorMessage": "Date must be in the format of `YYYY-MM-DD`"
              }
            }
          }
        }
      },
      "globalAttributes": {
        "description": "Custom HTML global attributes",
        "type": "array",
        "items": {
          "$ref": "#/properties/tags/items/properties/attributes/items"
        }
      },
      "valueSets": {
        "description": "A set of attribute value. When an attribute refers to an attribute set, its value completion will use value from that set",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "name"
          ],
          "defaultSnippets": [
            {
              "body": {
                "name": "$1",
                "description": "",
                "values": []
              }
            }
          ],
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of attribute value in value set"
            },
            "values": {
              "$ref": "#/properties/tags/items/properties/attributes/items/properties/values"
            }
          }
        }
      }
    }
  }
}