{
    "$schema": "http://json-schema.org/draft-07/schema",
    "$id": "https://raw.githubusercontent.com/Sebobo/Shel.Neos.Schema/main/NodeTypes.Schema.json",
    "title": "Neos NodeTypes Schema",
    "type": "object",
    "minProperties": 1,
    "definitions": {
        "position": {
            "oneOf": [
                {
                    "type": "string"
                },
                {
                    "type": "integer",
                    "minimum": 0
                }
            ]
        },
        "help": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "message": {
                    "type": "string"
                },
                "thumbnail": {
                    "type": "string"
                }
            }
        },
        "label": {
            "title": "Shown in the Neos UI",
            "description": "Can be \"i18n\" for automatic translation based on the name, a translation shorthand string like \"My.Package:NodeTypes.MyContent:ui.label\", or a simple string.",
            "x-intellij-html-description": "<p><b>Examples:</b></p>\n<ul><li><i>i18n</i> looks automatically for a matching translation based on the name</li><li><i>My.Package:NodeTypes.MyContent:ui.label</i> uses translation shorthand string</li><li><i>Some static label</i></li></ul>\n",
            "examples": [
                "i18n",
                "Neos.Neos:NodeTypes.Document:ui.label",
                "Some label"
            ],
            "default": "i18n",
            "anyOf": [
                {
                    "const": "i18n"
                },
                {
                    "type": [
                        "string",
                        "null"
                    ]
                }
            ]
        },
        "icon": {
            "type": "string",
            "title": "Shown in the Neos UI",
            "description": "All free FontAwesome 5 icons can be referenced by their icon-classes. For backwards compatibility reason you can still use a \"icon-\" prefix.",
            "x-intellij-html-description": "<p>All free <a href=\"https://fontawesome.com/icons?d=gallery&m=free\">FontAwesome 5 icons</a> can be referenced by their icon-classes. For backwards compatibility reason you can still use a \"icon-\" prefix.</p><p><b>Examples:</b></p>\n<ul><li><i>fas fa-home</i></li><li><i>icon-home</i></li></ul></p>",
            "examples": [
                "fas fa-home",
                "icon-home"
            ]
        },
        "editor": {
            "anyOf": [
                {
                    "properties": {
                        "editor": {
                            "type": "string",
                            "not": {
                                "enum": [
                                    "Neos.Neos/Inspector/Editors/TextAreaEditor",
                                    "Neos.Neos/Inspector/Editors/RichTextEditor",
                                    "Neos.Neos/Inspector/Editors/TextFieldEditor",
                                    "Neos.Neos/Inspector/Editors/SelectBoxEditor",
                                    "Neos.Neos/Inspector/Editors/CodeEditor",
                                    "Neos.Neos/Inspector/Editors/AssetEditor",
                                    "Neos.Neos/Inspector/Editors/BooleanEditor",
                                    "Neos.Neos/Inspector/Editors/ReferenceEditor",
                                    "Neos.Neos/Inspector/Editors/ReferencesEditor",
                                    "Neos.Neos/Inspector/Editors/LinkEditor",
                                    "Neos.Neos/Inspector/Editors/ImageEditor",
                                    "Neos.Neos/Inspector/Editors/DateTimeEditor",
                                    "Neos.Neos/Inspector/Editors/RangeEditor"
                                ]
                            }
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/TextAreaEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "disabled": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ],
                                    "default": false
                                },
                                "maxlength": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1,
                                    "default": null
                                },
                                "readonly": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ],
                                    "default": false
                                },
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "minRows": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1,
                                    "default": 2
                                },
                                "expandedRows": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 2,
                                    "default": 6
                                },
                                "maxRows": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "description": "Number of maximum rows (Neos 8.4+)",
                                    "minimum": 1,
                                    "default": 24
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/RichTextEditor"
                        },
                        "editorOptions": {
                            "$ref": "#/definitions/inlineEditorOptions"
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/SelectBoxEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "highlight": {
                                    "type": "boolean"
                                },
                                "dataSourceIdentifier": {
                                    "type": "string"
                                },
                                "dataSourceUri": {
                                    "type": "string"
                                },
                                "dataSourceDisableCaching": {
                                    "type": "boolean"
                                },
                                "dataSourceAdditionalData": {
                                    "type": "object"
                                },
                                "allowEmpty": {
                                    "type": "boolean"
                                },
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "placeholderIcon": {
                                    "$ref": "#/definitions/icon"
                                },
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                },
                                "multiple": {
                                    "type": "boolean"
                                },
                                "minimumResultsForSearch": {
                                    "type": "integer",
                                    "minimum": -1,
                                    "default": 5,
                                    "description": "The minimum number of items before the search box is shown. If set to -1 it will always be hidden."
                                },
                                "threshold": {
                                    "type": "integer",
                                    "default": 2,
                                    "minimum": 1
                                },
                                "values": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "object",
                                        "properties": {
                                            "label": {
                                                "$ref": "#/definitions/label"
                                            },
                                            "icon": {
                                                "$ref": "#/definitions/icon"
                                            },
                                            "group": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/AssetEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                },
                                "multiple": {
                                    "type": "boolean"
                                },
                                "accept": {
                                    "type": "string",
                                    "default": null
                                },
                                "constraints": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "mediaTypes": {
                                            "type": "array",
                                            "uniqueItems": true,
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "assetSources": {
                                            "type": "array",
                                            "uniqueItems": true,
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                },
                                "features": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "upload": {
                                            "type": "boolean",
                                            "default": true
                                        },
                                        "mediaBrowser": {
                                            "type": "boolean",
                                            "default": true
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "title": "Will render a checkbox in the Neos UI",
                            "const": "Neos.Neos/Inspector/Editors/BooleanEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/CodeEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "highlightingMode": {
                                    "type": "string",
                                    "default": "htmlmixed"
                                },
                                "buttonLabel": {
                                    "$ref": "#/definitions/label"
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/DateTimeEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "format": {
                                    "type": "string"
                                },
                                "disabled": {
                                    "type": "boolean"
                                },
                                "minuteStep": {
                                    "type": "integer",
                                    "default": 5
                                },
                                "timeConstraints": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "minutes": {
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                                "min": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "maximum": 59,
                                                    "default": 0
                                                },
                                                "max": {
                                                    "type": "integer",
                                                    "minimum": 1,
                                                    "maximum": 59,
                                                    "default": 59
                                                },
                                                "step": {
                                                    "type": "integer",
                                                    "minimum": 1,
                                                    "maximum": 30,
                                                    "default": 5
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/ImageEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                },
                                "maximumFileSize": {
                                    "type": [
                                        "integer",
                                        "string",
                                        "null"
                                    ],
                                    "default": null
                                },
                                "accept": {
                                    "type": "string",
                                    "default": null
                                },
                                "constraints": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "mediaTypes": {
                                            "type": "array",
                                            "uniqueItems": true,
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "assetSources": {
                                            "type": "array",
                                            "uniqueItems": true,
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                },
                                "features": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "crop": {
                                            "type": "boolean",
                                            "default": true
                                        },
                                        "resize": {
                                            "type": "boolean",
                                            "default": false
                                        },
                                        "mediaBrowser": {
                                            "type": "boolean",
                                            "default": true
                                        },
                                        "upload": {
                                            "type": "boolean",
                                            "default": true
                                        }
                                    }
                                },
                                "crop": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "aspectRatio": {
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                                "options": {
                                                    "type": "object",
                                                    "additionalProperties": {
                                                        "type": "object",
                                                        "additionalProperties": false,
                                                        "properties": {
                                                            "width": {
                                                                "type": "integer",
                                                                "minimum": 0
                                                            },
                                                            "height": {
                                                                "type": "integer",
                                                                "minimum": 0
                                                            },
                                                            "label": {
                                                                "$ref": "#/definitions/label"
                                                            }
                                                        }
                                                    }
                                                },
                                                "enableOriginal": {
                                                    "type": "boolean",
                                                    "default": true
                                                },
                                                "allowCustom": {
                                                    "type": "boolean",
                                                    "default": true
                                                },
                                                "forceCrop": {
                                                    "type": "boolean",
                                                    "default": false
                                                },
                                                "locked": {
                                                    "type": "object",
                                                    "additionalProperties": false,
                                                    "properties": {
                                                        "width": {
                                                            "type": "integer",
                                                            "minimum": 0
                                                        },
                                                        "height": {
                                                            "type": "integer",
                                                            "minimum": 0
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/LinkEditor"
                        },
                        "editorOptions": {
                            "$ref": "#/definitions/linkEditorOptions"
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/ReferenceEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "threshold": {
                                    "type": "integer",
                                    "default": 2,
                                    "minimum": 1
                                },
                                "nodeTypes": {
                                    "type": "array",
                                    "uniqueItems": true,
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "startingPoint": {
                                    "type": "string"
                                },
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                },
                                "createNew": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "path": {
                                            "type": "string"
                                        },
                                        "type": {
                                            "type": "string"
                                        },
                                        "titleProperty": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/ReferencesEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "threshold": {
                                    "type": "integer",
                                    "default": 2,
                                    "minimum": 1
                                },
                                "nodeTypes": {
                                    "type": "array",
                                    "uniqueItems": true,
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "startingPoint": {
                                    "type": "string"
                                },
                                "disabled": {
                                    "type": "boolean",
                                    "default": false
                                },
                                "createNew": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "path": {
                                            "type": "string"
                                        },
                                        "type": {
                                            "type": "string"
                                        },
                                        "titleProperty": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/TextFieldEditor"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "placeholder": {
                                    "$ref": "#/definitions/label"
                                },
                                "disabled": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ],
                                    "default": false
                                },
                                "maxlength": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1,
                                    "default": null
                                },
                                "readonly": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ],
                                    "default": false
                                }
                            }
                        }
                    }
                },
                {
                    "properties": {
                        "editor": {
                            "const": "Neos.Neos/Inspector/Editors/RangeEditor",
                            "title": "Range editor (since Neos 7.3)",
                            "description": "For selecting numeric values"
                        },
                        "editorOptions": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "minLabel": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "If set, this value is displayed instead of the minimum value."
                                },
                                "maxLabel": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "If set, this value is displayed instead of the maximum value."
                                },
                                "step": {
                                    "type": [
                                        "number",
                                        "null"
                                    ],
                                    "description": "The step attribute is a number that specifies the granularity that the value must adhere to."
                                },
                                "unit": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "The value gets displayed beside the current value, as well after the minimal value (only if `minLabel` is not set) and after the maximal value (only if ``maxLabel`` is not set). (The unit is just a visual indicator and will not be added to the resulting property value.)"
                                },
                                "disabled": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ],
                                    "default": false,
                                    "description": "If set to `true`, the range editor gets disabled."
                                },
                                "min": {
                                    "type": [
                                        "number",
                                        "null"
                                    ],
                                    "description": "The lowest value in the range of permitted values. This value must be less than or equal to the value of the max attribute."
                                },
                                "max": {
                                    "type": [
                                        "number",
                                        "null"
                                    ],
                                    "description": "The greatest value in the range of permitted values. This value must be greater than or equal to the value of the min attribute."
                                }
                            }
                        }
                    }
                }
            ]
        },
        "inlineEditorOptions": {
            "type": [
                "object",
                "null"
            ],
            "properties": {
                "autoparagraph": {
                    "type": "boolean"
                },
                "placeholder": {
                    "$ref": "#/definitions/label"
                },
                "linking": {
                    "anyOf": [
                        {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "anchor": {
                                    "type": "boolean"
                                },
                                "title": {
                                    "type": "boolean"
                                },
                                "relNoFollow": {
                                    "type": "boolean"
                                },
                                "targetBlank": {
                                    "type": "boolean"
                                }
                            }
                        },
                        {
                            "$ref": "#/definitions/linkEditorOptions"
                        }
                    ]
                },
                "formatting": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "boolean"
                    },
                    "properties": {
                        "strong": {
                            "type": "boolean"
                        },
                        "em": {
                            "type": "boolean"
                        },
                        "u": {
                            "type": "boolean"
                        },
                        "sub": {
                            "type": "boolean"
                        },
                        "sup": {
                            "type": "boolean"
                        },
                        "del": {
                            "type": "boolean"
                        },
                        "p": {
                            "type": "boolean"
                        },
                        "h1": {
                            "type": "boolean"
                        },
                        "h2": {
                            "type": "boolean"
                        },
                        "h3": {
                            "type": "boolean"
                        },
                        "h4": {
                            "type": "boolean"
                        },
                        "h5": {
                            "type": "boolean"
                        },
                        "h6": {
                            "type": "boolean"
                        },
                        "pre": {
                            "type": "boolean"
                        },
                        "underline": {
                            "type": "boolean"
                        },
                        "strikethrough": {
                            "type": "boolean"
                        },
                        "removeFormat": {
                            "type": "boolean"
                        },
                        "left": {
                            "type": "boolean"
                        },
                        "right": {
                            "type": "boolean"
                        },
                        "center": {
                            "type": "boolean"
                        },
                        "justify": {
                            "type": "boolean"
                        },
                        "table": {
                            "type": "boolean"
                        },
                        "ol": {
                            "type": "boolean"
                        },
                        "ul": {
                            "type": "boolean"
                        },
                        "a": {
                            "type": "boolean"
                        },
                        "blockquote": {
                            "type": "boolean",
                            "description": "Allows wrapping text in a blockquote tag (Neos 8.3+)"
                        },
                        "styleDefinitions": {
                            "type": "array",
                            "description": "Allows defining custom styles for the inline editor (Neos 9.1+)"
                        }
                    }
                }
            }
        },
        "linkEditorOptions": {
            "type": "object",
            "properties": {
                "nodeTypes": {
                    "oneOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "uniqueItems": true,
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "startingPoint": {
                    "type": "string"
                },
                "placeholder": {
                    "$ref": "#/definitions/label"
                },
                "disabled": {
                    "type": "boolean",
                    "default": false
                },
                "assets": {
                    "type": "boolean",
                    "default": true
                },
                "nodes": {
                    "type": "boolean",
                    "default": true
                }
            }
        },
        "simpleValidator": {
            "$comment": "This is the base validator definition for all validators. It is extended by the actual validators below.",
            "type": [
                "object",
                "null"
            ],
            "properties": {
                "validationErrorMessage": {
                    "type": "string",
                    "description": "The custom error message to be shown if the validation fails. Neos 8.0+"
                }
            }
        },
        "validation": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": {
                "type": [
                    "object",
                    "array",
                    "null"
                ]
            },
            "properties": {
                "Neos.Neos/Validation/BooleanValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "expectedValue": {
                            "type": "boolean"
                        }
                    }
                },
                "Neos.Neos/Validation/DateTimeValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "locale": {
                            "type": "string"
                        },
                        "strictMode": {
                            "type": "boolean"
                        },
                        "formatLength": {
                            "enum": [
                                "default",
                                "full",
                                "long",
                                "medium",
                                "short"
                            ]
                        },
                        "formatType": {
                            "enum": [
                                "date",
                                "time",
                                "dateTime"
                            ]
                        }
                    }
                },
                "Neos.Neos/Validation/DateTimeRangeValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "earliestDate": {
                            "type": "string"
                        },
                        "latestDate": {
                            "type": "string"
                        }
                    }
                },
                "Neos.Neos/Validation/EmailAddressValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "strict": {
                            "type": "boolean"
                        },
                        "checkDns": {
                            "type": "boolean"
                        }
                    }
                },
                "Neos.Neos/Validation/FloatValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/IntegerValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/LabelValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/LocaleIdentifierValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/NumberValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "locale": {
                            "type": "string"
                        },
                        "strictMode": {
                            "type": "boolean"
                        },
                        "formatLength": {
                            "enum": [
                                "default",
                                "full",
                                "long",
                                "medium",
                                "short"
                            ]
                        },
                        "formatType": {
                            "enum": [
                                "decimal",
                                "percent",
                                "currency"
                            ]
                        }
                    }
                },
                "Neos.Neos/Validation/NumberRangeValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "minimum": {
                            "type": "integer"
                        },
                        "maximum": {
                            "type": "integer"
                        }
                    }
                },
                "Neos.Neos/Validation/NotEmptyValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/RegularExpressionValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "regularExpression": {
                            "type": "string"
                        }
                    }
                },
                "Neos.Neos/Validation/StringValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/StringLengthValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true,
                        "minimum": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "maximum": {
                            "type": "integer",
                            "minimum": 1
                        },
                        "ignoreHtml": {
                            "type": "boolean"
                        }
                    }
                },
                "Neos.Neos/Validation/TextValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                },
                "Neos.Neos/Validation/UuidValidator": {
                    "$ref": "#/definitions/simpleValidator",
                    "additionalProperties": false,
                    "properties": {
                        "validationErrorMessage": true
                    }
                }
            }
        },
        "nodeTemplate": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
                "childNodes": {
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/nodeTemplateChildNode"
                    }
                },
                "properties": {
                    "type": "object"
                },
                "when": {
                    "$comment": "EEL-expression to determine whether the template should be applied",
                    "type": "string"
                },
                "withItems": {
                    "oneOf": [
                        {
                            "type": "array"
                        },
                        {
                            "$comment": "An EEL expression",
                            "type": "string"
                        }
                    ]
                }
            }
        },
        "nodeTemplateChildNode": {
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/definitions/nodeTemplate"
                }
            ],
            "properties": {
                "type": {
                    "type": "string"
                },
                "name": {
                    "$comment": "Identify the child node this template is applied to by this name",
                    "type": "string"
                }
            }
        },
        "defaultValueValidation": {
            "oneOf": [
                {
                    "properties": {
                        "type": {
                            "type": "null"
                        }
                    }
                },
                {
                    "not": {
                        "properties": {
                            "type": {
                                "enum": [
                                    "string",
                                    "integer",
                                    "number",
                                    "boolean"
                                ]
                            }
                        }
                    }
                },
                {
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "const": "string"
                        },
                        "defaultValue": {
                            "type": [
                                "string",
                                "null"
                            ]
                        }
                    }
                },
                {
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "const": "integer"
                        },
                        "defaultValue": {
                            "type": [
                                "integer",
                                "null"
                            ]
                        }
                    }
                },
                {
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "const": "number"
                        },
                        "defaultValue": {
                            "type": [
                                "number",
                                "null"
                            ]
                        }
                    }
                },
                {
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "const": "boolean"
                        },
                        "defaultValue": {
                            "type": [
                                "boolean",
                                "null"
                            ]
                        }
                    }
                }
            ]
        },
        "defaultValueType": {
            "type": [
                "string",
                "number",
                "boolean",
                "integer",
                "null",
                "array"
            ]
        },
        "scopeType": {
            "type": "string",
            "enum": [
                "node",
                "specializations",
                "nodeAggregate"
            ],
            "description": "Property scopes. Since Neos 9.0."
        },
        "propertyTypes": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "enum": [
                        "string",
                        "DateTime",
                        "boolean",
                        "integer",
                        "number",
                        "reference",
                        "references",
                        "array",
                        "Neos\\Media\\Domain\\Model\\Asset",
                        "array<Neos\\Media\\Domain\\Model\\Asset>",
                        "Neos\\Media\\Domain\\Model\\ImageInterface"
                    ]
                }
            ]
        },
        "propertyUIOptions": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "label": {
                    "$ref": "#/definitions/label"
                },
                "help": {
                    "$ref": "#/definitions/help"
                },
                "reloadIfChanged": {
                    "type": "boolean"
                },
                "reloadPageIfChanged": {
                    "type": "boolean"
                },
                "inlineEditable": {
                    "type": "boolean"
                },
                "inline": {
                    "type": [
                        "object",
                        "null"
                    ],
                    "properties": {
                        "editorOptions": {
                            "$ref": "#/definitions/inlineEditorOptions"
                        }
                    }
                },
                "showInCreationDialog": {
                    "type": [
                        "boolean",
                        "null"
                    ]
                },
                "inspector": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/editor"
                        },
                        {
                            "type": [
                                "object",
                                "null"
                            ],
                            "additionalProperties": false,
                            "properties": {
                                "hidden": {
                                    "type": [
                                        "boolean",
                                        "null",
                                        "string"
                                    ]
                                },
                                "group": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "position": {
                                    "$ref": "#/definitions/position"
                                },
                                "editorListeners": {
                                    "type": [
                                        "object",
                                        "null"
                                    ],
                                    "additionalProperties": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                            "property": {
                                                "type": "string"
                                            },
                                            "handler": {
                                                "type": "string"
                                            },
                                            "handlerOptions": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        }
    },
    "additionalProperties": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
            "abstract": {
                "type": "boolean"
            },
            "final": {
                "type": "boolean"
            },
            "aggregate": {
                "type": "boolean"
            },
            "label": {
                "$ref": "#/definitions/label"
            },
            "constraints": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "nodeTypes": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "boolean"
                        }
                    }
                }
            },
            "superTypes": {
                "type": "object",
                "additionalProperties": {
                    "type": "boolean",
                    "default": true
                },
                "$comment": "Provide the most commonly used supertypes for autocompletion",
                "properties": {
                    "Neos.Neos:Content": {
                        "type": "boolean",
                        "default": true
                    },
                    "Neos.Neos:ContentCollection": {
                        "type": "boolean",
                        "default": true
                    },
                    "Neos.Neos:Document": {
                        "type": "boolean",
                        "default": true
                    }
                }
            },
            "class": {
                "type": "string"
            },
            "search": {
                "type": "object",
                "properties": {
                    "fulltext": {
                        "type": "object",
                        "properties": {
                            "enable": {
                                "type": "boolean"
                            }
                        }
                    }
                }
            },
            "childNodes": {
                "type": [
                    "object",
                    "null"
                ],
                "propertyNames": {
                    "pattern": "^[a-z0-9\\-]+$"
                },
                "additionalProperties": {
                    "type": [
                        "object",
                        "null"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "label": {
                            "type": ["string", "null"],
                            "description": "Set a custom label for the node (Neos 8.4+)"
                        },
                        "position": {
                            "$ref": "#/definitions/position"
                        },
                        "type": {
                            "type": "string",
                            "anyOf": [
                                {
                                    "const": "Neos.Neos:ContentCollection"
                                },
                                {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            ]
                        },
                        "options": {
                            "type": "object",
                            "additionalProperties": true,
                            "properties": {
                                "preset": {
                                    "type": "string",
                                    "description": "A child node preset as configured in `Neos.Neos.nodeTypes.presets.childNodes`."
                                }
                            }
                        },
                        "constraints": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                                "nodeTypes"
                            ],
                            "properties": {
                                "nodeTypes": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "properties": {
                "type": [
                    "object",
                    "null"
                ],
                "additionalProperties": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "type": {
                            "$ref": "#/definitions/propertyTypes"
                        },
                        "defaultValue": {
                            "$ref": "#/definitions/defaultValueType"
                        },
                        "scope": {
                            "$ref": "#/definitions/scopeType"
                        },
                        "search": {
                            "type": "object",
                            "properties": {
                                "fulltextExtractor": {
                                    "type": "string"
                                }
                            }
                        },
                        "options": {
                            "type": "object",
                            "additionalProperties": true,
                            "properties": {
                                "preset": {
                                    "type": "string"
                                }
                            }
                        },
                        "ui": {
                            "$ref": "#/definitions/propertyUIOptions"
                        },
                        "validation": {
                            "$ref": "#/definitions/validation"
                        }
                    },
                    "$ref": "#/definitions/defaultValueValidation"
                }
            },
            "references": {
                "description": "References to other nodes. Since Neos 9.0, this is the recommended way to define reference properties. The old way using `properties` with type `reference` or `references` is still supported for backwards compatibility, but it is recommended to switch to this new syntax.",
                "type": [
                    "object",
                    "null"
                ],
                "additionalProperties": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "options": {
                            "type": "object",
                            "additionalProperties": true,
                            "properties": {
                                "preset": {
                                    "type": "string"
                                }
                            }
                        },
                        "scope": {
                            "$ref": "#/definitions/scopeType"
                        },
                        "ui": {
                            "$ref": "#/definitions/propertyUIOptions"
                        },
                        "validation": {
                            "$ref": "#/definitions/validation"
                        },
                        "constraints": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "nodeTypes": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "boolean"
                                    }
                                },
                                "maxItems": {
                                    "type": "integer",
                                    "minimum": 1
                                }
                            }
                        }
                    },
                    "$ref": "#/definitions/defaultValueValidation"
                }
            },
            "ui": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "label": {
                        "$ref": "#/definitions/label"
                    },
                    "icon": {
                        "$ref": "#/definitions/icon"
                    },
                    "previewIcon": {
                        "type": "string",
                        "description": "This setting defines the icon that will be used in the tile view of the NodeType selection dialog. Neos 8.0+",
                        "examples": [
                            "resource://Neos.Demo/Images/customIcon.svg"
                        ]
                    },
                    "previewIconSize": {
                        "type": "string",
                        "default": "2x",
                        "description": "The previewIconSize setting defines the size of the previewIcon. By default, the previewIcon has the size \"2x\". Neos 8.0+",
                        "enum": [
                            "xs",
                            "sm",
                            "lg",
                            "2x",
                            "3x"
                        ]
                    },
                    "group": {
                        "type": "string"
                    },
                    "inlineEditable": {
                        "type": "boolean"
                    },
                    "position": {
                        "$ref": "#/definitions/position"
                    },
                    "help": {
                        "$ref": "#/definitions/help"
                    },
                    "search": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "searchCategory": {
                                "type": "string"
                            }
                        }
                    },
                    "creationDialog": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "elements": {
                                "type": [
                                    "object",
                                    "null"
                                ],
                                "additionalProperties": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "type": {
                                            "$ref": "#/definitions/propertyTypes"
                                        },
                                        "defaultValue": {
                                            "$ref": "#/definitions/defaultValueType"
                                        },
                                        "ui": {
                                            "anyOf": [
                                                {
                                                    "$ref": "#/definitions/editor"
                                                },
                                                {
                                                    "type": "object",
                                                    "additionalProperties": false,
                                                    "properties": {
                                                        "label": {
                                                            "$ref": "#/definitions/label"
                                                        }
                                                    }
                                                }
                                            ]
                                        },
                                        "validation": {
                                            "$ref": "#/definitions/validation"
                                        }
                                    },
                                    "$ref": "#/definitions/defaultValueValidation"
                                }
                            }
                        }
                    },
                    "inspector": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "tabs": {
                                "type": "object",
                                "additionalProperties": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "label": {
                                            "$ref": "#/definitions/label"
                                        },
                                        "position": {
                                            "$ref": "#/definitions/position"
                                        },
                                        "icon": {
                                            "$ref": "#/definitions/icon"
                                        }
                                    }
                                }
                            },
                            "groups": {
                                "type": "object",
                                "additionalProperties": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "label": {
                                            "$ref": "#/definitions/label"
                                        },
                                        "position": {
                                            "$ref": "#/definitions/position"
                                        },
                                        "tab": {
                                            "type": "string"
                                        },
                                        "icon": {
                                            "$ref": "#/definitions/icon"
                                        },
                                        "collapsed": {
                                            "type": "boolean"
                                        }
                                    }
                                }
                            },
                            "views": {
                                "type": "object",
                                "additionalProperties": {
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "label": {
                                            "$ref": "#/definitions/label"
                                        },
                                        "position": {
                                            "$ref": "#/definitions/position"
                                        },
                                        "group": {
                                            "type": "string"
                                        },
                                        "view": {
                                            "type": "string"
                                        },
                                        "viewOptions": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "postprocessors": {
                "type": "object",
                "additionalProperties": {
                    "type": "object",
                    "properties": {
                        "postprocessor": {
                            "type": "string"
                        }
                    }
                }
            },
            "options": {
                "type": "object",
                "additionalProperties": true,
                "properties": {
                    "nodeCreationHandlers": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "fusion": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                            "prototypeGenerator": {
                                "type": [
                                    "null",
                                    "string"
                                ]
                            }
                        }
                    },
                    "template": {
                        "$comment": "Related to functionality provided by https://github.com/Flowpack/Flowpack.NodeTemplates",
                        "$ref": "#/definitions/nodeTemplate"
                    }
                }
            }
        }
    }
}
