{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://openeik.org/schemas/0.1/project/detail-family.schema.json",
  "title": "Detail family",
  "description": "A parametric 2D detail family (documentation profile).",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^[^/]+$"
    },
    "name": {
      "type": "string",
      "minLength": 1
    },
    "revision": {
      "type": "integer",
      "minimum": 0
    },
    "category": {
      "type": "string",
      "const": "detail-item"
    },
    "description": {
      "type": "string",
      "maxLength": 2000
    },
    "parameters": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "unit": {
            "type": "string",
            "enum": [
              "mm",
              "degrees",
              "choice"
            ]
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 2,
            "maxItems": 20
          },
          "scope": {
            "type": "string",
            "enum": [
              "type",
              "instance"
            ]
          },
          "default": {
            "type": "number"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "name",
          "unit",
          "scope",
          "default",
          "min",
          "max"
        ],
        "x-eik-closed": true
      },
      "maxItems": 50
    },
    "types": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          },
          "source": {
            "type": "string",
            "maxLength": 400
          }
        },
        "required": [
          "id",
          "name",
          "values"
        ],
        "x-eik-closed": true
      },
      "minItems": 1,
      "maxItems": 100
    },
    "sketches": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "polyline",
              "arc",
              "mask",
              "zigzag",
              "thread"
            ]
          },
          "points": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "prefixItems": [
                {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        },
                        "offset": {
                          "type": "number",
                          "default": 0
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    {
                      "type": "object",
                      "properties": {
                        "terms": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "parameter": {
                                "type": "string",
                                "minLength": 1
                              },
                              "factor": {
                                "type": "number",
                                "default": 1
                              }
                            },
                            "required": [
                              "parameter"
                            ],
                            "x-eik-closed": true
                          },
                          "minItems": 1,
                          "maxItems": 6
                        },
                        "offset": {
                          "type": "number",
                          "default": 0
                        }
                      },
                      "required": [
                        "terms"
                      ],
                      "x-eik-closed": true
                    }
                  ]
                },
                {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        },
                        "offset": {
                          "type": "number",
                          "default": 0
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    {
                      "type": "object",
                      "properties": {
                        "terms": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "parameter": {
                                "type": "string",
                                "minLength": 1
                              },
                              "factor": {
                                "type": "number",
                                "default": 1
                              }
                            },
                            "required": [
                              "parameter"
                            ],
                            "x-eik-closed": true
                          },
                          "minItems": 1,
                          "maxItems": 6
                        },
                        "offset": {
                          "type": "number",
                          "default": 0
                        }
                      },
                      "required": [
                        "terms"
                      ],
                      "x-eik-closed": true
                    }
                  ]
                }
              ]
            },
            "minItems": 1,
            "maxItems": 500
          },
          "radius": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "startAngle": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "endAngle": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "amplitude": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "pitch": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "rotation": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "parameter": {
                    "type": "string",
                    "minLength": 1
                  },
                  "factor": {
                    "type": "number",
                    "default": 1
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "parameter"
                ],
                "x-eik-closed": true
              },
              {
                "type": "object",
                "properties": {
                  "terms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "parameter": {
                          "type": "string",
                          "minLength": 1
                        },
                        "factor": {
                          "type": "number",
                          "default": 1
                        }
                      },
                      "required": [
                        "parameter"
                      ],
                      "x-eik-closed": true
                    },
                    "minItems": 1,
                    "maxItems": 6
                  },
                  "offset": {
                    "type": "number",
                    "default": 0
                  }
                },
                "required": [
                  "terms"
                ],
                "x-eik-closed": true
              }
            ]
          },
          "origin": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "prefixItems": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "parameter": {
                        "type": "string",
                        "minLength": 1
                      },
                      "factor": {
                        "type": "number",
                        "default": 1
                      },
                      "offset": {
                        "type": "number",
                        "default": 0
                      }
                    },
                    "required": [
                      "parameter"
                    ],
                    "x-eik-closed": true
                  },
                  {
                    "type": "object",
                    "properties": {
                      "terms": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "parameter": {
                              "type": "string",
                              "minLength": 1
                            },
                            "factor": {
                              "type": "number",
                              "default": 1
                            }
                          },
                          "required": [
                            "parameter"
                          ],
                          "x-eik-closed": true
                        },
                        "minItems": 1,
                        "maxItems": 6
                      },
                      "offset": {
                        "type": "number",
                        "default": 0
                      }
                    },
                    "required": [
                      "terms"
                    ],
                    "x-eik-closed": true
                  }
                ]
              },
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "parameter": {
                        "type": "string",
                        "minLength": 1
                      },
                      "factor": {
                        "type": "number",
                        "default": 1
                      },
                      "offset": {
                        "type": "number",
                        "default": 0
                      }
                    },
                    "required": [
                      "parameter"
                    ],
                    "x-eik-closed": true
                  },
                  {
                    "type": "object",
                    "properties": {
                      "terms": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "parameter": {
                              "type": "string",
                              "minLength": 1
                            },
                            "factor": {
                              "type": "number",
                              "default": 1
                            }
                          },
                          "required": [
                            "parameter"
                          ],
                          "x-eik-closed": true
                        },
                        "minItems": 1,
                        "maxItems": 6
                      },
                      "offset": {
                        "type": "number",
                        "default": 0
                      }
                    },
                    "required": [
                      "terms"
                    ],
                    "x-eik-closed": true
                  }
                ]
              }
            ]
          },
          "lineWeight": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 3
          },
          "lineStyle": {
            "type": "string",
            "enum": [
              "solid",
              "dash",
              "center"
            ]
          },
          "detailLevels": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "coarse",
                "medium",
                "fine"
              ]
            },
            "minItems": 1,
            "maxItems": 3
          },
          "when": {
            "type": "object",
            "properties": {
              "parameter": {
                "type": "string",
                "minLength": 1
              },
              "oneOf": {
                "type": "array",
                "items": {
                  "type": "number"
                },
                "minItems": 1,
                "maxItems": 20
              }
            },
            "required": [
              "parameter",
              "oneOf"
            ],
            "x-eik-closed": true
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "points",
          "rotation",
          "origin",
          "lineWeight"
        ],
        "x-eik-closed": true
      },
      "maxItems": 500
    }
  },
  "required": [
    "id",
    "name",
    "revision",
    "parameters",
    "types",
    "sketches"
  ],
  "x-eik-closed": true
}
