{
	"title": "JSON schema for Eightshift blocks used in component manifest.json",
	"$schema": "http://json-schema.org/draft-04/schema#",
	"type": "object",
	"properties": {
		"$schema": {
			"type": "string"
		},
		"componentName": {
			"type": "string",
			"pattern": "^[^\/][a-z0-9-]*$",
			"description": "The name for a componentName is a unique string that identifies a componentName."
		},
		"title": {
			"type": "string",
			"description": "The display title of your component."
		},
		"componentClass": {
			"type": "string",
			"description": "The value your component class will have."
		},
		"description": {
			"type": "string",
			"description": "A short description for your block that can be translated with our translation functions. This will be shown in the block inspector."
		},
		"attributes": {
			"type": "object",
			"description": "Attributes provide the structured data needs of a block. They can exist in different forms when they are serialized, but they are declared together under a common interface.\n\nSee the attributes documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/ for more details.",
			"patternProperties": {
				"[a-zA-Z]": {
					"type": "object",
					"properties": {
						"type": {
							"description": "The type indicates the type of data that is stored by the attribute. It does not indicate where the data is stored, which is defined by the source field.\n\nA type is required, unless an enum is provided. A type can be used with an enum.\n\nNote that the validity of an object is determined by your source. For an example, see the query details below.",
							"oneOf": [{
									"type": "string",
									"enum": [
										"null",
										"boolean",
										"object",
										"array",
										"string",
										"integer",
										"number"
									]
								},
								{
									"type": "array",
									"uniqueItems": true,
									"items": {
										"type": "string",
										"enum": [
											"null",
											"boolean",
											"object",
											"array",
											"string",
											"integer",
											"number"
										]
									}
								}
							]
						},
						"enum": {
							"type": "array",
							"description": "An attribute can be defined as one of a fixed set of values. This is specified by an enum, which contains an array of allowed values:",
							"items": {
								"oneOf": [{
										"type": "boolean"
									},
									{
										"type": "number"
									},
									{
										"type": "string"
									}
								]
							}
						},
						"source": {
							"type": "string",
							"description": "Attribute sources are used to define how the attribute values are extracted from saved post content. They provide a mechanism to map from the saved markup to a JavaScript representation of a block.",
							"enum": [
								"attribute"
							]
						},
						"attribute": {
							"type": "string",
							"description": "Use an attribute source to extract the value from an attribute in the markup. The attribute is specified by the attribute field, which must be supplied.\n\nExample: Extract the src attribute from an image found in the block's markup."
						}
					},
					"required": [
						"type"
					]
				}
			},
			"additionalProperties": false
		},
		"example": {
			"type": "object",
			"description": "It provides structured example data for the block. This data is used to construct a preview for the block to be shown in the Inspector Help Panel when the user mouses over the block.\n\nSee the the example documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#example-optional for more details.",
			"properties": {
				"attributes": {
					"type": "object",
					"description": "Set the attribues for the block example"
				},
				"innerBlocks": {
					"type": "array",
					"description": "Set the inner blocks that should be used within the block example. The blocks should be defined as a nested array like this: \n\n [ [ 'core/heading', { content: 'This is an Example' }, [] ] ]\n\n Where each block itself is an array that contains the block name, the block attributes, and the blocks inner blocks."
				}
			}
		},
		"components": {
			"type": "object",
			"description": "This key gives you the ability to use component attributes in your block without mapping all the component's attributes every time. Please check https://eightshift.com/docs/basics/blocks-component-in-block/ chapter for more details."
		},
		"responsiveAttributes": {
			"type": "object",
			"description": "This key is used to combine multiple attributes with the similar name for the responsive breakpoints. Please check https://eightshift.com/docs/basics/blocks-styles/ chapter for more details."
		},
		"variables": {
			"type": "object",
			"description": "This key is used to provide output for CSS variables. Please check https://eightshift.com/docs/basics/blocks-styles/ chapter for more details."
		},
		"options": {
			"type": "object",
			"description": "This key is used to provide options used in the Block Editor options for components like SelectControl or RangeControl. With this key, you can pass options and change them depending on the component used. Please check https://eightshift.com/docs/basics/blocks-component-in-block/ chapter for more details."
		}
	},
	"required": [
		"componentName",
		"title"
	]
}
