{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "additionalProperties": false,
  "definitions": {
    "js-types-syntax": {
      "description": "Language in which JavaScript objects types are specified.",
      "type": "string",
      "enum": ["typescript"]
    },
    "description-markup": {
      "description": "Markup language in which descriptions are formatted.",
      "type": "string",
      "default": "none",
      "enum": ["html", "markdown", "none"]
    },
    "framework-config": {
      "description": "Provide configuration for the specified web framework. This is an advanced feature, which is used to provide support for templating frameworks like Angular, Vue, Svelte, etc.",
      "type": "object",
      "properties": {
        "enable-when": {
          "$ref": "#/definitions/enablement-rules"
        },
        "disable-when": {
          "$ref": "#/definitions/disablement-rules"
        },
        "canonical-names": {
          "description": "In many frameworks symbols can have multiple versions of a name. Specify canonical name conversion rule for names of particular symbol kinds against which comparisons will be made. Format of the 'canonical-names' property names is '{namespace}/{symbol kind}'. By default symbol names in HTML namespace are converted to lower-case, and in CSS and JS namespaces are left as-is. In case of name patterns, rules are applied to each part of the pattern separately, so even if the symbol with pattern is in HTML namespace, references to JS events will be case-sensitive.",
          "type": "object",
          "patternProperties": {
            "^/(html|css|js)/[^/\\n\\r]+$": {
              "$ref": "#/definitions/name-converter"
            }
          },
          "additionalProperties": false
        },
        "match-names": {
          "description": "Provide an array of name conversions, in which particular symbol kinds should be matched against canonical names of symbols. By default symbol names are converted using canonical-names rule.",
          "type": "object",
          "patternProperties": {
            "^/(html|css|js)/[^/\\n\\r]+$": {
              "$ref": "#/definitions/name-converters"
            }
          },
          "additionalProperties": false
        },
        "name-variants": {
          "description": "Provide an array of name conversions, in which particular symbol kinds should be proposed in auto completion. Format of the 'name-variants' property names is '{namespace}/{symbol kind}'. All symbol kinds are by default provided as-is.",
          "type": "object",
          "patternProperties": {
            "^/(html|css|js)/[^/\\n\\r]+$": {
              "$ref": "#/definitions/name-converters"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "enablement-rules": {
      "description": "Specify rules for enabling web framework support. Only one framework can be enabled in a particular file. If you need your contributions to be enabled in all files, regardless of the context, do not specify the framework.",
      "type": "object",
      "properties": {
        "node-packages": {
          "description": "Node.js package names, which enable framework support within the folder containing the package.json.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "script-url-patterns": {
          "description": "RegExps to match script URLs, which enable framework support within a particular HTML.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/pattern"
          }
        },
        "file-extensions": {
          "description": "Extensions of files, which should have the framework support enabled. Use this to support custom file extensions like '.vue' or '.svelte'. Never specify generic extensions like '.html', '.js' or '.ts'. If you need your contributions to be present in every file don't specify the framework at all",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "file-name-patterns": {
          "description": "RegExp patterns to match file names, which should have the framework support enabled. Use carefully as broken pattern may even freeze IDE.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/pattern"
          }
        },
        "ide-libraries": {
          "description": "Global JavaScript libraries names enabled within the IDE, which enable framework support in the whole project",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "disablement-rules": {
      "description": "Specify rules for disabling web framework support. These rules take precedence over enable-when rules. They allow to turn off framework support in case of some conflicts between frameworks priority.",
      "type": "object",
      "properties": {
        "file-extensions": {
          "description": "Extensions of files, which should have the framework support disabled",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "file-name-patterns": {
          "description": "RegExp patterns to match file names, which should have the framework support disabled",
          "type": "array",
          "items": {
            "$ref": "#/definitions/pattern"
          }
        }
      },
      "additionalProperties": false
    },
    "name-converters": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/name-converter"
      }
    },
    "name-converter": {
      "type": "string",
      "enum": [
        "as-is",
        "PascalCase",
        "camelCase",
        "lowercase",
        "UPPERCASE",
        "kebab-case",
        "snake_case"
      ]
    },
    "icon": {
      "description": "Relative path to the icon representing the symbol.",
      "type": "string"
    },
    "base-contribution": {
      "type": "object",
      "description": "The base for any contributions.",
      "javaAbstract": true,
      "javaInterfaces": ["GenericContributionsHost"],
      "properties": {
        "name": {
          "$ref": "#/definitions/name"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "description-sections": {
          "$ref": "#/definitions/description-sections"
        },
        "doc-url": {
          "$ref": "#/definitions/doc-url"
        },
        "icon": {
          "$ref": "#/definitions/icon"
        },
        "source": {
          "$ref": "#/definitions/source"
        },
        "deprecated": {
          "$ref": "#/definitions/deprecated"
        },
        "experimental": {
          "$ref": "#/definitions/experimental"
        },
        "priority": {
          "$ref": "#/definitions/priority"
        },
        "proximity": {
          "$ref": "#/definitions/proximity"
        },
        "virtual": {
          "$ref": "#/definitions/virtual"
        },
        "abstract": {
          "$ref": "#/definitions/abstract"
        },
        "extension": {
          "$ref": "#/definitions/extension"
        },
        "extends": {
          "$ref": "#/definitions/extends"
        },
        "pattern": {
          "$ref": "#/definitions/name-pattern-root"
        },
        "html": {
          "$ref": "#/definitions/html"
        },
        "css": {
          "$ref": "#/definitions/css"
        },
        "js": {
          "$ref": "#/definitions/js"
        },
        "exclusive-contributions": {
          "$ref": "#/definitions/exclusive-contributions"
        }
      }
    },
    "typed-contribution": {
      "type": "object",
      "description": "The base for any contribution, which can possibly have a JS type.",
      "javaAbstract": true,
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        }
      ],
      "properties": {
        "type": {
          "$ref": "#/definitions/type-list"
        }
      }
    },
    "generic-contribution": {
      "type": "object",
      "description": "A generic contribution. All contributions are of this type, except for HTML attributes and elements, as well as predefined CSS contribution kinds.",
      "javaAbstract": true,
      "allOf": [
        {
          "$ref": "#/definitions/typed-contribution"
        }
      ],
      "properties": {
        "default": {
          "$ref": "#/definitions/default"
        },
        "required": {
          "$ref": "#/definitions/required"
        },
        "attribute-value": {
          "$ref": "#/definitions/html-attribute-value"
        }
      }
    },
    "type-list": {
      "description": "Specify type according to selected language for type syntax. The type can be specified by a string expression, an object with list of imports and an expression, or an array of possible types.",
      "oneOf": [
        {
          "$ref": "#/definitions/type"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/type"
          }
        }
      ]
    },
    "type": {
      "oneOf": [
        {
          "$ref": "#/definitions/type-reference"
        },
        {
          "type": "string"
        }
      ]
    },
    "type-reference": {
      "type": "object",
      "properties": {
        "module": {
          "description": "Name of module, which exports the type. May be omitted, in which case it's assumed to be the name of the library.",
          "type": "string"
        },
        "name": {
          "description": "Name of the symbol to import",
          "type": "string"
        }
      },
      "required": ["name"],
      "additionalProperties": false
    },
    "html-value-type": {
      "oneOf": [
        {
          "type": "string",
          "description": "Provide one of special attribute value types:  \"enum\", \"of-match\", or a simple JavaScript type according to the specified type format."
        },
        {
          "$ref": "#/definitions/type-reference"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/type"
          }
        }
      ]
    },
    "source": {
      "description": "Allows to specify the source of the entity. For Vue.js component this may be for instance a class.",
      "type": "object",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "file": {
              "description": "Path to the file, relative to the web-types JSON.",
              "type": "string"
            },
            "offset": {
              "description": "Offset in the file under which the source symbol, like class name, is located.",
              "type": "integer"
            }
          },
          "required": ["file", "offset"],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "module": {
              "description": "Name of module, which exports the symbol. May be omitted, in which case it's assumed to be the name of the library.",
              "type": "string"
            },
            "symbol": {
              "description": "Name of the exported symbol.",
              "type": "string"
            }
          },
          "required": ["symbol"],
          "additionalProperties": false
        }
      ]
    },
    "name": {
      "type": "string"
    },
    "description": {
      "description": "Short description to be rendered in documentation popup. It will be rendered according to description-markup setting.",
      "type": "string"
    },
    "description-sections": {
      "description": "Custom sections to be shown below description in the documentation popup.",
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "doc-url": {
      "description": "Link to online documentation.",
      "type": "string"
    },
    "virtual": {
      "description": "Mark contribution as virtual. Virtual contributions can be filtered out if needed in references. A virtual contribution meaning may differ by framework or kind contexts, but usually means something synthetic or something, which gets erased in the runtime by the framework. E.g. Vue or Angular attribute bindings are virtual. ",
      "type": "boolean"
    },
    "abstract": {
      "description": "Mark contribution as abstract. Such contributions serve only as super contributions for other contributions.",
      "type": "boolean"
    },
    "extension": {
      "description": "Mark contribution as an extension. Such contributions do not define a new contribution on their own, but can provide additional properties or contributions to existing contributions.",
      "type": "boolean"
    },
    "priority": {
      "type": "string",
      "enum": ["lowest", "low", "normal", "high", "highest"]
    },
    "proximity": {
      "type": "integer"
    },
    "name-pattern-root": {
      "oneOf": [
        {
          "$ref": "#/definitions/name-pattern"
        },
        {
          "type": "string"
        }
      ]
    },
    "exclusive-contributions": {
      "description": "Specify list of contribution kinds qualified with a namespace, for which during reference resolution this will be the final contribution host. E.g. if a special HTML element does not accept standard attributes, add:\n\"exclusive-contributions\": [\"/html/attributes\"].",
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "/(html|js|css)/[^/\\n\\r]+"
      }
    },
    "name-pattern": {
      "type": "object",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "required": {
              "$ref": "#/definitions/required"
            },
            "unique": {
              "type": "boolean"
            },
            "repeat": {
              "type": "boolean"
            },
            "template": {
              "$ref": "#/definitions/name-pattern-template"
            },
            "or": {
              "$ref": "#/definitions/name-pattern-template"
            },
            "delegate": {
              "$ref": "#/definitions/reference"
            },
            "deprecated": {
              "$ref": "#/definitions/deprecated"
            },
            "priority": {
              "$ref": "#/definitions/priority"
            },
            "proximity": {
              "$ref": "#/definitions/proximity"
            },
            "items": {
              "$ref": "#/definitions/list-reference"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "regex": {
              "type": "string"
            },
            "case-sensitive": {
              "type": "boolean",
              "default": true
            }
          },
          "required": ["regex"],
          "additionalProperties": false
        }
      ]
    },
    "name-pattern-template": {
      "type": "array",
      "minItems": 1,
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "$ref": "#/definitions/name-pattern-template"
          },
          {
            "$ref": "#/definitions/name-pattern"
          }
        ]
      }
    },
    "list-reference": {
      "description": "A reference to an element in Web-Types model.",
      "oneOf": [
        {
          "$ref": "#/definitions/reference"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/reference"
          }
        }
      ]
    },
    "reference": {
      "description": "A reference to an element in Web-Types model.",
      "oneOf": [
        {
          "$ref": "#/definitions/reference-with-props"
        },
        {
          "type": "string"
        }
      ]
    },
    "reference-with-props": {
      "type": "object",
      "properties": {
        "path": {
          "type": "string"
        },
        "includeVirtual": {
          "type": "boolean",
          "default": true
        },
        "includeAbstract": {
          "type": "boolean"
        },
        "filter": {
          "type": "string"
        }
      },
      "required": ["path"]
    },
    "extends": {
      "$ref": "#/definitions/reference"
    },
    "default": {
      "type": "string"
    },
    "required": {
      "type": "boolean"
    },
    "deprecated": {
      "type": "boolean",
      "default": false
    },
    "experimental": {
      "type": "boolean",
      "default": false
    },
    "pattern": {
      "description": "A RegEx pattern to match whole content. Syntax should work with at least ECMA, Java and Python implementations.",
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "properties": {
            "regex": {
              "type": "string"
            },
            "case-sensitive": {
              "type": "boolean",
              "default": true
            }
          }
        }
      ]
    },
    "html-contributions-host": {
      "type": "object",
      "javaInterfaces": ["GenericContributionsHost"],
      "javaInterface": true,
      "properties": {
        "elements": {
          "description": "HTML elements.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/html-element"
          }
        },
        "attributes": {
          "description": "HTML attributes.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/html-attribute"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-html-contribution"
          },
          "description": "DOM events are deprecated in HTML namespace. Contribute events to JS namespace: /js/events",
          "deprecationMessage": "Contribute events to JS namespace: /js/events"
        }
      },
      "patternProperties": {
        "^(?!pattern$).*$": {
          "$ref": "#/definitions/generic-html-contributions"
        }
      }
    },
    "generic-html-contributions": {
      "javaLenientDeserialize": true,
      "oneOf": [
        {
          "$ref": "#/definitions/generic-html-contribution-or-property"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-html-contribution-or-property"
          }
        }
      ]
    },
    "generic-html-contribution-or-property": {
      "javaInterfaces": ["GenericContributionOrProperty"],
      "oneOf": [
        {
          "$ref": "#/definitions/generic-html-contribution"
        },
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        }
      ]
    },
    "generic-html-contribution": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/generic-contribution"
        },
        {
          "$ref": "#/definitions/html-contributions-host"
        }
      ]
    },
    "html": {
      "type": "object",
      "description": "Contains contributions to HTML namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - HTML elements and HTML attributes. There are also 2 deprecated kinds: tags (which is equivalent to 'elements') and 'events' (which was moved to JS namespace)",
      "allOf": [
        {
          "$ref": "#/definitions/html-contributions-host"
        }
      ],
      "properties": {
        "types-syntax": {
          "$ref": "#/definitions/deprecated-types-syntax"
        },
        "description-markup": {
          "$ref": "#/definitions/deprecated-description-markup"
        },
        "tags": {
          "type": "array",
          "description": "Deprecated, use `elements` property.",
          "deprecationMessage": "Use `elements` property.",
          "items": {
            "$ref": "#/definitions/html-element"
          }
        }
      }
    },
    "html-element": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/html-contributions-host"
        }
      ]
    },
    "html-attribute": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/html-contributions-host"
        }
      ],
      "properties": {
        "value": {
          "$ref": "#/definitions/html-attribute-value"
        },
        "default": {
          "type": "string"
        },
        "required": {
          "$ref": "#/definitions/required"
        },
        "vue-argument": {
          "$ref": "#/definitions/deprecated-html-attribute-vue-argument"
        },
        "vue-modifiers": {
          "description": "Deprecated vue-specific property - contribute Vue directives to /contributions/html/vue-directives",
          "deprecationMessage": "Contribute Vue directives to /contributions/html/vue-directives",
          "type": "array",
          "items": {
            "$ref": "#/definitions/deprecated-html-attribute-vue-modifier"
          }
        }
      }
    },
    "html-attribute-value": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": ["no-value", "plain", "expression"]
        },
        "type": {
          "$ref": "#/definitions/html-value-type"
        },
        "required": {
          "type": "boolean"
        },
        "default": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "css-contributions-host": {
      "type": "object",
      "javaInterfaces": ["GenericContributionsHost"],
      "javaInterface": true,
      "properties": {
        "properties": {
          "type": "array",
          "description": "CSS properties",
          "items": {
            "$ref": "#/definitions/css-property"
          }
        },
        "pseudo-elements": {
          "description": "CSS pseudo-elements",
          "type": "array",
          "items": {
            "$ref": "#/definitions/css-pseudo-element"
          }
        },
        "pseudo-classes": {
          "description": "CSS pseudo-classes",
          "type": "array",
          "items": {
            "$ref": "#/definitions/css-pseudo-class"
          }
        },
        "functions": {
          "description": "CSS functions",
          "type": "array",
          "items": {
            "$ref": "#/definitions/css-generic-item"
          }
        },
        "classes": {
          "description": "CSS classes",
          "type": "array",
          "items": {
            "$ref": "#/definitions/css-generic-item"
          }
        }
      },
      "patternProperties": {
        "^(?!pattern$).*$": {
          "$ref": "#/definitions/generic-css-contributions"
        }
      }
    },
    "generic-css-contributions": {
      "javaLenientDeserialize": true,
      "oneOf": [
        {
          "$ref": "#/definitions/generic-css-contribution-or-property"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-css-contribution-or-property"
          }
        }
      ]
    },
    "generic-css-contribution-or-property": {
      "javaInterfaces": ["GenericContributionOrProperty"],
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/generic-css-contribution"
        }
      ]
    },
    "generic-css-contribution": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/generic-contribution"
        },
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ]
    },
    "css": {
      "type": "object",
      "description": "Contains contributions to CSS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 5 predefined kinds, which integrate directly with IDE - properties, classes, functions, pseudo-elements and pseudo-classes.",
      "allOf": [
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ]
    },
    "css-property": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ],
      "properties": {
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "css-generic-item": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ]
    },
    "css-pseudo-element": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ],
      "properties": {
        "arguments": {
          "type": "boolean",
          "description": "Specify whether the pseudo-element requires arguments."
        }
      }
    },
    "css-pseudo-class": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/base-contribution"
        },
        {
          "$ref": "#/definitions/css-contributions-host"
        }
      ],
      "properties": {
        "arguments": {
          "type": "boolean",
          "description": "Specify whether the pseudo-class requires arguments."
        }
      }
    },
    "js-contributions-host": {
      "type": "object",
      "javaInterfaces": ["GenericContributionsHost"],
      "javaInterface": true,
      "properties": {
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-js-contribution"
          },
          "description": "DOM events"
        },
        "properties": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-js-contribution"
          },
          "description": "JavaScript properties of an object, HTML tag, framework component, etc."
        }
      },
      "patternProperties": {
        "^(?!pattern$).*$": {
          "$ref": "#/definitions/generic-js-contributions"
        }
      }
    },
    "generic-js-contributions": {
      "javaLenientDeserialize": true,
      "oneOf": [
        {
          "$ref": "#/definitions/generic-js-contribution-or-property"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/generic-js-contribution-or-property"
          }
        }
      ]
    },
    "generic-js-contribution-or-property": {
      "javaInterfaces": ["GenericContributionOrProperty"],
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/generic-js-contribution"
        }
      ]
    },
    "generic-js-contribution": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/generic-contribution"
        },
        {
          "$ref": "#/definitions/js-contributions-host"
        }
      ]
    },
    "js": {
      "type": "object",
      "description": "Contains contributions to JS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - properties and events.",
      "allOf": [
        {
          "$ref": "#/definitions/js-contributions-host"
        }
      ]
    },
    "deprecated-types-syntax": {
      "oneOf": [
        {
          "$ref": "#/definitions/js-types-syntax"
        }
      ],
      "description": "Deprecated, use top-level js-types-syntax property.",
      "deprecationMessage": "Use top-level js-types-syntax property."
    },
    "deprecated-description-markup": {
      "description": "Deprecated, use top-level property.",
      "deprecationMessage": "Use top-level property.",
      "oneOf": [
        {
          "$ref": "#/definitions/description-markup"
        }
      ]
    },
    "deprecated-html-attribute-vue-argument": {
      "type": "object",
      "description": "Deprecated vue-specific property - contribute Vue directives to /contributions/html/vue-directives",
      "deprecationMessage": "Contribute Vue directives to /contributions/html/vue-directives",
      "properties": {
        "pattern": {
          "$ref": "#/definitions/name-pattern-root"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "doc-url": {
          "$ref": "#/definitions/doc-url"
        },
        "required": {
          "description": "Whether directive requires an argument",
          "type": "boolean",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "deprecated-html-attribute-vue-modifier": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/name"
        },
        "pattern": {
          "$ref": "#/definitions/name-pattern-root"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "doc-url": {
          "$ref": "#/definitions/doc-url"
        }
      },
      "required": ["name"],
      "additionalProperties": false
    }
  },
  "id": "https://json.schemastore.org/web-types.json",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "framework": {
      "description": "Framework, for which the components are provided by the library. If the library is not enabled in a particular context, all symbols from this file will not be available as well. If you want symbols to be always available do not specify framework.",
      "type": "string"
    },
    "name": {
      "description": "Name of the library.",
      "type": "string"
    },
    "version": {
      "description": "Version of the library, for which Web-Types are provided.",
      "type": "string"
    },
    "js-types-syntax": {
      "$ref": "#/definitions/js-types-syntax"
    },
    "description-markup": {
      "$ref": "#/definitions/description-markup"
    },
    "framework-config": {
      "$ref": "#/definitions/framework-config"
    },
    "default-icon": {
      "$ref": "#/definitions/icon"
    },
    "contributions": {
      "description": "Symbol can be contributed to one of the 3 namespaces - HTML, CSS and JS. Within a particular namespace there can be different kinds of symbols. In each of the namespaces, there are several predefined kinds, which integrate directly with IDE, but providers are free to define their own.",
      "type": "object",
      "properties": {
        "html": {
          "$ref": "#/definitions/html"
        },
        "css": {
          "$ref": "#/definitions/css"
        },
        "js": {
          "$ref": "#/definitions/js"
        }
      },
      "additionalProperties": false
    }
  },
  "required": ["name", "version"],
  "title": "JSON schema for Web-Types",
  "type": "object"
}