{
  "$schema": "http://json-schema.org/draft-07/schema",
  "title": "JupyterLab Plugin Settings/Preferences Schema",
  "description": "JupyterLab plugin settings/preferences schema",
  "version": "1.0.0",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "jupyter.lab.internationalization": {
      "type": "object",
      "properties": {
        "selectors": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          }
        },
        "domain": {
          "type": "string",
          "minLength": 1
        }
      }
    },
    "jupyter.lab.menus": {
      "type": "object",
      "properties": {
        "main": {
          "title": "Main menu entries",
          "description": "List of menu items to add to the main menubar.",
          "items": {
            "$ref": "#/definitions/menu"
          },
          "type": "array",
          "default": []
        },
        "context": {
          "title": "The application context menu.",
          "description": "List of context menu items.",
          "items": {
            "allOf": [
              { "$ref": "#/definitions/menuItem" },
              {
                "properties": {
                  "selector": {
                    "description": "The CSS selector for the context menu item.",
                    "type": "string"
                  }
                }
              }
            ]
          },
          "type": "array",
          "default": []
        }
      },
      "additionalProperties": false
    },
    "jupyter.lab.metadataforms": {
      "items": {
        "$ref": "#/definitions/metadataForm"
      },
      "type": "array",
      "default": []
    },
    "jupyter.lab.setting-deprecated": {
      "type": "boolean",
      "default": false
    },
    "jupyter.lab.setting-icon": {
      "type": "string",
      "default": ""
    },
    "jupyter.lab.setting-icon-class": {
      "type": "string",
      "default": ""
    },
    "jupyter.lab.setting-icon-label": {
      "type": "string",
      "default": "Plugin"
    },
    "jupyter.lab.shortcuts": {
      "items": {
        "$ref": "#/definitions/shortcut"
      },
      "type": "array",
      "default": []
    },
    "jupyter.lab.toolbars": {
      "properties": {
        "^\\w[\\w-\\.]*$": {
          "items": {
            "$ref": "#/definitions/toolbarItem"
          },
          "type": "array",
          "default": []
        }
      },
      "type": "object",
      "default": {}
    },
    "jupyter.lab.transform": {
      "type": "boolean",
      "default": false
    }
  },
  "definitions": {
    "menu": {
      "properties": {
        "disabled": {
          "description": "Whether the menu is disabled or not",
          "type": "boolean",
          "default": false
        },
        "icon": {
          "description": "Menu icon id",
          "type": "string"
        },
        "id": {
          "description": "Menu unique id",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "jp-menu-file",
                "jp-menu-file-new",
                "jp-menu-edit",
                "jp-menu-help",
                "jp-menu-kernel",
                "jp-menu-run",
                "jp-menu-settings",
                "jp-menu-view",
                "jp-menu-tabs"
              ]
            },
            { "type": "string", "pattern": "[a-z][a-z0-9\\-_]+" }
          ]
        },
        "items": {
          "description": "Menu items",
          "type": "array",
          "items": {
            "$ref": "#/definitions/menuItem"
          }
        },
        "label": {
          "description": "Menu label",
          "type": "string"
        },
        "mnemonic": {
          "description": "Mnemonic index for the label",
          "type": "number",
          "minimum": -1,
          "default": -1
        },
        "rank": {
          "description": "Menu rank",
          "type": "number",
          "minimum": 0
        }
      },
      "required": ["id"],
      "type": "object"
    },
    "menuItem": {
      "properties": {
        "args": {
          "description": "Command arguments",
          "type": "object"
        },
        "command": {
          "description": "Command id",
          "type": "string"
        },
        "disabled": {
          "description": "Whether the item is disabled or not",
          "type": "boolean",
          "default": false
        },
        "type": {
          "description": "Item type",
          "type": "string",
          "enum": ["command", "submenu", "separator"],
          "default": "command"
        },
        "rank": {
          "description": "Item rank",
          "type": "number",
          "minimum": 0
        },
        "submenu": {
          "oneOf": [
            {
              "$ref": "#/definitions/menu"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    },
    "shortcut": {
      "properties": {
        "args": {
          "title": "The arguments for the command",
          "type": "object"
        },
        "command": {
          "title": "The command id",
          "description": "The command executed when the binding is matched.",
          "type": "string"
        },
        "disabled": {
          "description": "Whether this shortcut is disabled or not.",
          "type": "boolean",
          "default": false
        },
        "keys": {
          "title": "The key sequence for the binding",
          "description": "The key shortcut like `Accel A` or the sequence of shortcuts to press like [`Accel A`, `B`]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "macKeys": {
          "title": "The key sequence for the binding on macOS",
          "description": "The key shortcut like `Cmd A` or the sequence of shortcuts to press like [`Cmd A`, `B`]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "winKeys": {
          "title": "The key sequence for the binding on Windows",
          "description": "The key shortcut like `Ctrl A` or the sequence of shortcuts to press like [`Ctrl A`, `B`]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "linuxKeys": {
          "title": "The key sequence for the binding on Linux",
          "description": "The key shortcut like `Ctrl A` or the sequence of shortcuts to press like [`Ctrl A`, `B`]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "selector": {
          "title": "CSS selector",
          "type": "string"
        }
      },
      "required": ["command", "keys", "selector"],
      "type": "object"
    },
    "toolbarItem": {
      "properties": {
        "name": {
          "title": "Unique name",
          "type": "string"
        },
        "args": {
          "title": "Command arguments",
          "type": "object"
        },
        "command": {
          "title": "Command id",
          "type": "string",
          "default": ""
        },
        "disabled": {
          "title": "Whether the item is ignored or not",
          "type": "boolean",
          "default": false
        },
        "icon": {
          "title": "Item icon id",
          "description": "If defined, it will override the command icon",
          "type": "string"
        },
        "label": {
          "title": "Item label",
          "description": "If defined, it will override the command label",
          "type": "string"
        },
        "caption": {
          "title": "Item caption",
          "description": "If defined, it will override the command caption",
          "type": "string"
        },
        "type": {
          "title": "Item type",
          "type": "string",
          "enum": ["command", "spacer"]
        },
        "rank": {
          "title": "Item rank",
          "type": "number",
          "minimum": 0,
          "default": 50
        }
      },
      "required": ["name"],
      "additionalProperties": false,
      "type": "object"
    },
    "metadataForm": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The section ID"
        },
        "metadataSchema": {
          "type": "object",
          "items": {
            "$ref": "#/definitions/metadataSchema"
          }
        },
        "uiSchema": {
          "type": "object"
        },
        "metadataOptions": {
          "type": "object",
          "items": {
            "$ref": "#/definitions/metadataOptions"
          }
        },
        "label": {
          "type": "string",
          "description": "The section label"
        },
        "rank": {
          "type": "integer",
          "description": "The rank of the section in the right panel"
        },
        "showModified": {
          "type": "boolean",
          "description": "Whether to show modified values from defaults"
        }
      },
      "required": ["id", "metadataSchema"]
    },
    "metadataSchema": {
      "properties": {
        "properties": {
          "type": "object",
          "description": "The property set up by extension",
          "properties": {
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "type": {
              "type": "string"
            }
          }
        }
      },
      "type": "object",
      "required": ["properties"]
    },
    "metadataOptions": {
      "properties": {
        "customRenderer": {
          "type": "string"
        },
        "metadataLevel": {
          "type": "string",
          "enum": ["cell", "notebook"],
          "default": "cell"
        },
        "cellTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["code", "markdown", "raw"]
          }
        },
        "writeDefault": {
          "type": "boolean"
        }
      },
      "type": "object"
    }
  }
}
