{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/theisegoria/chatgpt-skill-plugins/schemas/modelica-projects/canonical-v2.schema.json",
  "title": "Modelica Projects canonical project v2",
  "type": "object",
  "additionalProperties": false,
  "required": ["version", "package", "description", "mslVersion", "languageVersion", "dependencies", "files"],
  "properties": {
    "version": {"const": 2},
    "package": {"$ref": "#/$defs/id"},
    "description": {"$ref": "#/$defs/text"},
    "mslVersion": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+(?:\\.[0-9]+)?$"},
    "languageVersion": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+$"},
    "dependencies": {
      "type": "array",
      "maxItems": 512,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["name", "version"],
        "properties": {"name": {"$ref": "#/$defs/qid"}, "version": {"$ref": "#/$defs/text"}}
      }
    },
    "files": {"type": "array", "minItems": 1, "maxItems": 512, "items": {"$ref": "#/$defs/file"}}
  },
  "$defs": {
    "text": {"type": "string", "minLength": 1, "maxLength": 8388608},
    "optionalText": {"oneOf": [{"$ref": "#/$defs/text"}, {"type": "null"}]},
    "id": {"type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"},
    "qid": {"type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},
    "kind": {"type": "string", "pattern": "^(?:encapsulated )?(?:partial )?(?:class|model|(?:operator )?record|block|(?:expandable )?connector|type|package|(?:(?:pure|impure) )?(?:operator )?function|operator)$"},
    "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[A-Za-z_][A-Za-z0-9_]*(?:/[A-Za-z_][A-Za-z0-9_]*)*\\.mo$"},
    "number": {"type": "number", "minimum": -10000, "maximum": 10000},
    "point": {"type": "array", "minItems": 2, "maxItems": 2, "prefixItems": [{"$ref": "#/$defs/number"}, {"$ref": "#/$defs/number"}], "items": false},
    "size": {"type": "array", "minItems": 2, "maxItems": 2, "prefixItems": [{"type": "number", "exclusiveMinimum": 0, "maximum": 10000}, {"type": "number", "exclusiveMinimum": 0, "maximum": 10000}], "items": false},
    "extent": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/$defs/point"}},
    "textExtent": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/$defs/point"}},
    "rotation": {"type": "number", "minimum": -360, "maximum": 360},
    "rgb": {"type": "array", "minItems": 3, "maxItems": 3, "items": {"type": "integer", "minimum": 0, "maximum": 255}},
    "color": {"oneOf": [{"enum": ["black", "white", "gray", "blue", "orange", "green", "red"]}, {"$ref": "#/$defs/rgb"}]},
    "component": {
      "type": "object", "additionalProperties": false, "required": ["name"],
      "properties": {"name": {"$ref": "#/$defs/id"}, "origin": {"$ref": "#/$defs/point"}, "size": {"$ref": "#/$defs/size"}, "rotation": {"$ref": "#/$defs/rotation"}}
    },
    "connector": {
      "type": "object", "additionalProperties": false, "required": ["name", "side"],
      "properties": {"name": {"$ref": "#/$defs/id"}, "side": {"enum": ["left", "right", "top", "bottom"]}, "offset": {"$ref": "#/$defs/number"}, "size": {"$ref": "#/$defs/size"}}
    },
    "endpoint": {"type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\[[1-9][0-9]*(?:,[1-9][0-9]*)*\\])?(?:\\.[A-Za-z_][A-Za-z0-9_]*(?:\\[[1-9][0-9]*(?:,[1-9][0-9]*)*\\])?)*$"},
    "connection": {
      "type": "object", "additionalProperties": false, "required": ["from", "to"],
      "properties": {
        "from": {"$ref": "#/$defs/endpoint"}, "to": {"$ref": "#/$defs/endpoint"},
        "points": {"type": "array", "minItems": 2, "maxItems": 16, "items": {"$ref": "#/$defs/point"}},
        "color": {"$ref": "#/$defs/color"}, "pattern": {"enum": ["Solid", "Dash", "Dot", "DashDot"]},
        "thickness": {"type": "number", "exclusiveMinimum": 0, "maximum": 100}
      }
    },
    "rectangle": {
      "type": "object", "additionalProperties": false, "required": ["type", "extent"],
      "properties": {"type": {"const": "Rectangle"}, "visible": {"type": "boolean"}, "origin": {"$ref": "#/$defs/point"}, "rotation": {"$ref": "#/$defs/rotation"}, "lineColor": {"$ref": "#/$defs/color"}, "fillColor": {"$ref": "#/$defs/color"}, "fillPattern": {"enum": ["None", "Solid", "HorizontalCylinder", "VerticalCylinder", "Sphere"]}, "linePattern": {"enum": ["None", "Solid", "Dash", "Dot", "DashDot"]}, "thickness": {"type": "number", "exclusiveMinimum": 0, "maximum": 100}, "extent": {"$ref": "#/$defs/extent"}, "borderPattern": {"enum": ["None", "Raised", "Sunken", "Engraved"]}, "radius": {"type": "number", "minimum": 0, "maximum": 10000}}
    },
    "ellipse": {
      "type": "object", "additionalProperties": false, "required": ["type", "extent"],
      "properties": {"type": {"const": "Ellipse"}, "visible": {"type": "boolean"}, "origin": {"$ref": "#/$defs/point"}, "rotation": {"$ref": "#/$defs/rotation"}, "lineColor": {"$ref": "#/$defs/color"}, "fillColor": {"$ref": "#/$defs/color"}, "fillPattern": {"enum": ["None", "Solid", "HorizontalCylinder", "VerticalCylinder", "Sphere"]}, "linePattern": {"enum": ["None", "Solid", "Dash", "Dot", "DashDot"]}, "thickness": {"type": "number", "exclusiveMinimum": 0, "maximum": 100}, "extent": {"$ref": "#/$defs/extent"}, "startAngle": {"$ref": "#/$defs/rotation"}, "endAngle": {"$ref": "#/$defs/rotation"}, "closure": {"enum": ["None", "Chord", "Radial"]}}
    },
    "polygon": {
      "type": "object", "additionalProperties": false, "required": ["type", "points"],
      "properties": {"type": {"const": "Polygon"}, "visible": {"type": "boolean"}, "origin": {"$ref": "#/$defs/point"}, "rotation": {"$ref": "#/$defs/rotation"}, "lineColor": {"$ref": "#/$defs/color"}, "fillColor": {"$ref": "#/$defs/color"}, "fillPattern": {"enum": ["None", "Solid", "HorizontalCylinder", "VerticalCylinder", "Sphere"]}, "linePattern": {"enum": ["None", "Solid", "Dash", "Dot", "DashDot"]}, "thickness": {"type": "number", "exclusiveMinimum": 0, "maximum": 100}, "points": {"type": "array", "minItems": 3, "maxItems": 64, "items": {"$ref": "#/$defs/point"}}, "smooth": {"enum": ["None", "Bezier"]}}
    },
    "line": {
      "type": "object", "additionalProperties": false, "required": ["type", "points"],
      "properties": {"type": {"const": "Line"}, "visible": {"type": "boolean"}, "origin": {"$ref": "#/$defs/point"}, "rotation": {"$ref": "#/$defs/rotation"}, "points": {"type": "array", "minItems": 2, "maxItems": 64, "items": {"$ref": "#/$defs/point"}}, "lineColor": {"$ref": "#/$defs/color"}, "linePattern": {"enum": ["None", "Solid", "Dash", "Dot", "DashDot"]}, "thickness": {"type": "number", "exclusiveMinimum": 0, "maximum": 100}, "arrow": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"enum": ["None", "Open", "Filled", "Half"]}}, "smooth": {"enum": ["None", "Bezier"]}}
    },
    "textPrimitive": {
      "type": "object", "additionalProperties": false, "required": ["type", "extent", "text"],
      "properties": {"type": {"const": "Text"}, "visible": {"type": "boolean"}, "origin": {"$ref": "#/$defs/point"}, "rotation": {"$ref": "#/$defs/rotation"}, "extent": {"$ref": "#/$defs/textExtent"}, "text": {"$ref": "#/$defs/text"}, "lineColor": {"$ref": "#/$defs/color"}, "fontSize": {"type": "number", "minimum": 0, "maximum": 512}, "fontName": {"$ref": "#/$defs/text"}, "textStyle": {"type": "array", "uniqueItems": true, "items": {"enum": ["Bold", "Italic", "Underline"]}}, "horizontalAlignment": {"enum": ["Left", "Center", "Right"]}}
    },
    "primitive": {"oneOf": [{"$ref": "#/$defs/rectangle"}, {"$ref": "#/$defs/ellipse"}, {"$ref": "#/$defs/polygon"}, {"$ref": "#/$defs/line"}, {"$ref": "#/$defs/textPrimitive"}]},
    "visual": {
      "type": "object", "additionalProperties": false,
      "properties": {
        "direction": {"enum": ["LR", "TB"]},
        "coordinateSystem": {"$ref": "#/$defs/extent"},
        "components": {"type": "array", "maxItems": 512, "items": {"$ref": "#/$defs/component"}},
        "connectors": {"type": "array", "maxItems": 512, "items": {"$ref": "#/$defs/connector"}},
        "connections": {"type": "array", "maxItems": 4000, "items": {"$ref": "#/$defs/connection"}},
        "icon": {"type": "array", "maxItems": 512, "items": {"$ref": "#/$defs/primitive"}}
      }
    },
    "file": {
      "type": "object", "additionalProperties": false, "required": ["path", "source"],
      "properties": {
        "path": {"$ref": "#/$defs/path"}, "source": {"$ref": "#/$defs/text"},
        "kind": {"$ref": "#/$defs/kind"},
        "documentation": {"$ref": "#/$defs/optionalText"}, "example": {"type": "boolean"}, "test": {"type": "boolean"},
        "visual": {"oneOf": [{"$ref": "#/$defs/visual"}, {"type": "null"}]}
      }
    }
  }
}
