{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "bone-flow-workspace.schema.json",
  "title": "Bone Flow Editor Workspace v1.0",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "flowId",
    "flowKey",
    "zoom",
    "pan",
    "panelSizes",
    "panelVisibility",
    "activePanel",
    "cursor",
    "selection",
    "gridVisible",
    "portVisible",
    "animationPreview",
    "definitionViewMode",
    "updatedAt",
    "shapeUiPositions"
  ],
  "properties": {
    "schemaVersion": {
      "const": "1.0"
    },
    "flowId": {
      "type": [
        "string",
        "null"
      ]
    },
    "flowKey": {
      "type": "string",
      "minLength": 1
    },
    "zoom": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 8
    },
    "pan": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "x",
        "y"
      ],
      "properties": {
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        }
      }
    },
    "panelSizes": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "source",
        "preview",
        "inspector",
        "validation",
        "definition",
        "console"
      ],
      "properties": {
        "source": {
          "type": "number",
          "minimum": 0
        },
        "preview": {
          "type": "number",
          "minimum": 0
        },
        "inspector": {
          "type": "number",
          "minimum": 0
        },
        "validation": {
          "type": "number",
          "minimum": 0
        },
        "definition": {
          "type": "number",
          "minimum": 0
        },
        "console": {
          "type": "number",
          "minimum": 0
        }
      }
    },
    "panelVisibility": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "source",
        "preview",
        "inspector",
        "validation",
        "definition",
        "console",
        "miniMap",
        "properties"
      ],
      "properties": {
        "source": {
          "type": "boolean"
        },
        "preview": {
          "type": "boolean"
        },
        "inspector": {
          "type": "boolean"
        },
        "validation": {
          "type": "boolean"
        },
        "definition": {
          "type": "boolean"
        },
        "console": {
          "type": "boolean"
        },
        "miniMap": {
          "type": "boolean"
        },
        "properties": {
          "type": "boolean"
        }
      }
    },
    "activePanel": {
      "enum": [
        "source",
        "preview",
        "validation",
        "definition",
        "console",
        "properties",
        "miniMap"
      ]
    },
    "cursor": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "line",
        "column"
      ],
      "properties": {
        "line": {
          "type": "integer",
          "minimum": 1
        },
        "column": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "selection": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "id"
      ],
      "properties": {
        "kind": {
          "enum": [
            "none",
            "node",
            "joint"
          ]
        },
        "id": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "gridVisible": {
      "type": "boolean"
    },
    "portVisible": {
      "type": "boolean"
    },
    "animationPreview": {
      "type": "boolean"
    },
    "definitionViewMode": {
      "enum": [
        "definition",
        "json"
      ]
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time"
    },
    "shapeUiPositions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tooltip",
          "comment"
        ],
        "properties": {
          "tooltip": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "x",
              "y"
            ],
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            }
          },
          "comment": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "bubbleX",
              "bubbleY",
              "outlineIndex",
              "anchorRate"
            ],
            "properties": {
              "bubbleX": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "bubbleY": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "outlineIndex": {
                "type": "integer",
                "minimum": 0
              },
              "anchorRate": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            }
          }
        }
      }
    }
  }
}
