{
  "type": "object",
  "required": [
    "datasets",
    "chart"
  ],
  "allOf": [
    {
      "title": "Source de données",
      "properties": {
        "datasets": {
          "type": "array",
          "items": [
            {
              "title": "Jeu de données",
              "description": "Ce jeu doit contenir au moins une colonne avec valeur numérique",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "href": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "schema": {
                  "type": "array"
                },
                "finalizedAt": {
                  "type": "string"
                }
              },
              "layout": {
                "getItems": {
                  "url": "api/v1/datasets?status=finalized&q={q}&select=id,title,schema&${context.datasetFilter}&sort=createdAt:-1",
                  "itemKey": "data[\"href\"]",
                  "itemTitle": "data[\"title\"]",
                  "itemsResults": "data[\"results\"]"
                }
              }
            }
          ]
        },
        "staticFilters": {
          "title": "Filtres prédéfinis",
          "type": "array",
          "items": {
            "type": "object",
            "default": {
              "type": "in"
            },
            "oneOf": [
              {
                "title": "Restreindre à des valeurs",
                "required": [
                  "type",
                  "field",
                  "values"
                ],
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "in"
                  },
                  "field": {
                    "type": "string",
                    "title": "Colonne de filtre",
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/schema?calculated=false",
                        "itemKey": "data[\"key\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  },
                  "values": {
                    "type": "array",
                    "title": "Valeurs",
                    "items": {
                      "type": "string"
                    },
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?q={q}&q_mode=complete&size=100&stringify=true",
                        "itemKey": "data[\"value\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  }
                }
              },
              {
                "title": "Restreindre à un interval de valeurs",
                "required": [
                  "type",
                  "field"
                ],
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "interval"
                  },
                  "field": {
                    "type": "string",
                    "title": "Colonne de filtre",
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/schema?calculated=false",
                        "itemKey": "data[\"key\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  },
                  "minValue": {
                    "type": "string",
                    "title": "Valeur min",
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?sort=asc&${parent.data.field}_gte={q}&stringify=true",
                        "itemKey": "data[\"value\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  },
                  "maxValue": {
                    "type": "string",
                    "title": "Valeur max",
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?sort=desc&${parent.data.field}_lte={q}&stringify=true",
                        "itemKey": "data[\"value\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  }
                }
              },
              {
                "title": "Exclure des valeurs",
                "required": [
                  "type",
                  "field",
                  "values"
                ],
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "out"
                  },
                  "field": {
                    "type": "string",
                    "title": "Colonne de filtre",
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/schema?calculated=false",
                        "itemKey": "data[\"key\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  },
                  "values": {
                    "type": "array",
                    "title": "Valeurs à exclure",
                    "items": {
                      "type": "string"
                    },
                    "layout": {
                      "getItems": {
                        "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?q={q}&q_mode=complete&size=100&stringify=true",
                        "itemKey": "data[\"value\"]",
                        "itemTitle": "data[\"label\"]"
                      }
                    }
                  }
                }
              }
            ]
          }
        },
        "qsFilter": {
          "type": "string",
          "default": "",
          "layout": "none"
        }
      }
    },
    {
      "title": "Type de visualisation",
      "properties": {
        "chart": {
          "type": "object",
          "default": {
            "type": "line"
          },
          "required": [
            "type",
            "config"
          ],
          "oneOf": [
            {
              "title": "Courbe",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "line"
                },
                "tension": {
                  "type": "integer",
                  "title": "Courbure",
                  "minimum": 0,
                  "maximum": 4,
                  "default": 1,
                  "layout": "slider"
                },
                "area": {
                  "type": "boolean",
                  "title": "Remplir l'aire en dessous",
                  "default": false
                },
                "yAxisStartsZero": {
                  "type": "boolean",
                  "title": "Commencer à partir de 0 pour l'axe des ordonnées"
                },
                "hidePoints": {
                  "type": "boolean",
                  "title": "Cacher les points"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une, couleur unique** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données et représentées avec une couleur unique.\n\n**Grouper les lignes** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les valeurs affichées sont obtenues par calcul (nombre de lignes, somme, moyenne, etc.) pour chaque groupe.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une, couleur unique",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesField"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesField": {
                          "type": "string",
                          "title": "Colonne de valeurs",
                          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "color": {
                          "type": "object",
                          "title": "Couleur",
                          "required": [],
                          "oneOf": [
                            {
                              "title": "Thème",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "theme"
                                },
                                "strValue": {
                                  "title": "Couleur",
                                  "type": "string",
                                  "oneOf": [
                                    {
                                      "const": "primary",
                                      "title": "Primaire"
                                    },
                                    {
                                      "const": "secondary",
                                      "title": "Secondaire"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Personnalisée",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "custom"
                                },
                                "hexValue": {
                                  "type": "string",
                                  "title": "Couleur",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "theme",
                            "strValue": "primary"
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "color": {
                          "type": "object",
                          "title": "Couleur",
                          "required": [],
                          "oneOf": [
                            {
                              "title": "Thème",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "theme"
                                },
                                "strValue": {
                                  "title": "Couleur",
                                  "type": "string",
                                  "oneOf": [
                                    {
                                      "const": "primary",
                                      "title": "Primaire"
                                    },
                                    {
                                      "const": "secondary",
                                      "title": "Secondaire"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Personnalisée",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "custom"
                                },
                                "hexValue": {
                                  "type": "string",
                                  "title": "Couleur",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "theme",
                            "strValue": "primary"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Histogramme",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "bar",
                  "title": "Type de visualisation"
                },
                "categorizable": {
                  "const": "true"
                },
                "hideYAxis": {
                  "type": "boolean",
                  "title": "Cacher l'axe Y",
                  "description": "Les valeurs apparaitront au au dessus ou à droite des barres. Cache l'axe des X en affichage horizontal"
                },
                "yAxisStartsZero": {
                  "type": "boolean",
                  "title": "Commencer à partir de 0 pour l'axe des ordonnées",
                  "default": true
                },
                "horizontal": {
                  "type": "boolean",
                  "title": "Affichage horizontal"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une, couleur unique** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données et représentées avec une couleur unique.\n\n**Lire les lignes une par une, plusieurs couleurs** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les valeurs affichées sont obtenues par calcul (nombre de lignes, somme, moyenne, etc.) pour chaque groupe.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une, couleur unique",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesField"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesField": {
                          "type": "string",
                          "title": "Colonne de valeurs",
                          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "color": {
                          "type": "object",
                          "title": "Couleur",
                          "required": [],
                          "oneOf": [
                            {
                              "title": "Thème",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "theme"
                                },
                                "strValue": {
                                  "title": "Couleur",
                                  "type": "string",
                                  "oneOf": [
                                    {
                                      "const": "primary",
                                      "title": "Primaire"
                                    },
                                    {
                                      "const": "secondary",
                                      "title": "Secondaire"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Personnalisée",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "custom"
                                },
                                "hexValue": {
                                  "type": "string",
                                  "title": "Couleur",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "theme",
                            "strValue": "primary"
                          }
                        }
                      }
                    },
                    {
                      "title": "Lire les lignes une par une, plusieurs couleurs",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesField",
                        "categoriesField"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBasedCategories"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesField": {
                          "type": "string",
                          "title": "Colonne de valeurs",
                          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "categoriesField": {
                          "type": "string",
                          "title": "Champ de catégorie",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.categoriesField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.categoriesField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.categoriesField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.categoriesField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "color": {
                          "type": "object",
                          "title": "Couleur",
                          "required": [],
                          "oneOf": [
                            {
                              "title": "Thème",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "theme"
                                },
                                "strValue": {
                                  "title": "Couleur",
                                  "type": "string",
                                  "oneOf": [
                                    {
                                      "const": "primary",
                                      "title": "Primaire"
                                    },
                                    {
                                      "const": "secondary",
                                      "title": "Secondaire"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Personnalisée",
                              "additionalProperties": false,
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "const": "custom"
                                },
                                "hexValue": {
                                  "type": "string",
                                  "title": "Couleur",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "theme",
                            "strValue": "primary"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Plusieurs courbes",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "multi-line"
                },
                "tension": {
                  "type": "integer",
                  "title": "Courbure",
                  "minimum": 0,
                  "maximum": 4,
                  "default": 1,
                  "layout": "slider"
                },
                "stacked": {
                  "type": "boolean",
                  "title": "Aires empilées"
                },
                "percentage": {
                  "type": "boolean",
                  "title": "Pourcentages"
                },
                "disableDynamicStack": {
                  "type": "boolean",
                  "title": "Désactiver la bascule d'empilement"
                },
                "yAxisStartsZero": {
                  "type": "boolean",
                  "title": "Commencer à partir de 0 pour l'axe des ordonnées"
                },
                "hidePoints": {
                  "type": "boolean",
                  "title": "Cacher les points"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux colonnes numériques sélectionnées.\n\n**Grouper les lignes, séries définies par une colonne de catégories** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes, séries définies par plusieurs colonnes numériques** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent à plusieurs colonnes numériques, agrégées indépendamment.\n\n**Grouper les lignes, abscisses définies par plusieurs colonnes** :\nles lignes sont groupées selon une colonne de catégories pour former les séries (affichées dans la légende). Les libellés sur l'axe des X correspondent à plusieurs colonnes numériques.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesFields"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesFields": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par une colonne de catégories",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "groupsField",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "groupsField": {
                          "type": "string",
                          "title": "Grouper les valeurs en fonction de cette colonne",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valuesCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedCategories"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "valuesCalc": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortField": {
                          "type": "string",
                          "title": "Champ de tri",
                          "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
                          "layout": {
                            "if": "parent.data.aggSortBy === 'value'",
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key",
                                      "label"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "labelsValues",
                        "valuesLabel"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedLabels"
                        },
                        "labelsValues": {
                          "type": "array",
                          "title": "Colonnes de libellés",
                          "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "valuesLabel": {
                          "type": "string",
                          "title": "Colonne de libellé des séries",
                          "description": "Choisissez une colonne des libellés des différentes séries.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Histogramme multivalué",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "multi-bar",
                  "title": "Type de visualisation"
                },
                "hideYAxis": {
                  "type": "boolean",
                  "title": "Cacher l'axe Y",
                  "description": "Les valeurs apparaitront au au dessus ou à droite des barres. Cache l'axe des X en affichage horizontal"
                },
                "yAxisStartsZero": {
                  "type": "boolean",
                  "title": "Commencer à partir de 0 pour l'axe des ordonnées",
                  "default": true
                },
                "horizontal": {
                  "type": "boolean",
                  "title": "Affichage horizontal"
                },
                "stacked": {
                  "type": "boolean",
                  "title": "Empiler les barres"
                },
                "percentage": {
                  "type": "boolean",
                  "title": "Pourcentages"
                },
                "disableDynamicStack": {
                  "type": "boolean",
                  "title": "Désactiver la bascule d'empilement"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux colonnes numériques sélectionnées.\n\n**Grouper les lignes, séries définies par une colonne de catégories** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes, séries définies par plusieurs colonnes numériques** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent à plusieurs colonnes numériques, agrégées indépendamment.\n\n**Grouper les lignes, abscisses définies par plusieurs colonnes** :\nles lignes sont groupées selon une colonne de catégories pour former les séries (affichées dans la légende). Les libellés sur l'axe des X correspondent à plusieurs colonnes numériques.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesFields"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesFields": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par une colonne de catégories",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "groupsField",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "groupsField": {
                          "type": "string",
                          "title": "Grouper les valeurs en fonction de cette colonne",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valuesCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedCategories"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "valuesCalc": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortField": {
                          "type": "string",
                          "title": "Champ de tri",
                          "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
                          "layout": {
                            "if": "parent.data.aggSortBy === 'value'",
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key",
                                      "label"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "labelsValues",
                        "valuesLabel"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedLabels"
                        },
                        "labelsValues": {
                          "type": "array",
                          "title": "Colonnes de libellés",
                          "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "valuesLabel": {
                          "type": "string",
                          "title": "Colonne de libellé des séries",
                          "description": "Choisissez une colonne des libellés des différentes séries.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Radar",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "radar"
                },
                "tension": {
                  "type": "integer",
                  "title": "Courbure",
                  "minimum": 0,
                  "maximum": 4,
                  "default": 1,
                  "layout": "slider"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux colonnes numériques sélectionnées.\n\n**Grouper les lignes, séries définies par une colonne de catégories** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes, séries définies par plusieurs colonnes numériques** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent à plusieurs colonnes numériques, agrégées indépendamment.\n\n**Grouper les lignes, abscisses définies par plusieurs colonnes** :\nles lignes sont groupées selon une colonne de catégories pour former les séries (affichées dans la légende). Les libellés sur l'axe des X correspondent à plusieurs colonnes numériques.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesFields"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesFields": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par une colonne de catégories",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "groupsField",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "groupsField": {
                          "type": "string",
                          "title": "Grouper les valeurs en fonction de cette colonne",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valuesCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedCategories"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "valuesCalc": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortField": {
                          "type": "string",
                          "title": "Champ de tri",
                          "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
                          "layout": {
                            "if": "parent.data.aggSortBy === 'value'",
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key",
                                      "label"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "labelsValues",
                        "valuesLabel"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedLabels"
                        },
                        "labelsValues": {
                          "type": "array",
                          "title": "Colonnes de libellés",
                          "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "valuesLabel": {
                          "type": "string",
                          "title": "Colonne de libellé des séries",
                          "description": "Choisissez une colonne des libellés des différentes séries.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Camembert",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "pie"
                },
                "cutout": {
                  "type": "integer",
                  "title": "Trou au milieu",
                  "minimum": 0,
                  "maximum": 80,
                  "default": 0,
                  "layout": "slider"
                },
                "rotation": {
                  "type": "integer",
                  "title": "Rotation",
                  "minimum": 0,
                  "maximum": 360,
                  "default": 0,
                  "layout": "slider"
                },
                "display": {
                  "type": "string",
                  "title": "Affichage",
                  "oneOf": [
                    {
                      "const": "label",
                      "title": "Libellé uniquement"
                    },
                    {
                      "const": "values",
                      "title": "Valeurs"
                    },
                    {
                      "const": "percentages",
                      "title": "Pourcentages"
                    },
                    {
                      "const": "both",
                      "title": "Valeurs et pourcentages"
                    }
                  ],
                  "default": "values"
                },
                "sumInTitle": {
                  "type": "boolean",
                  "title": "Afficher la somme dans le titre"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données.\n\n**Grouper les lignes** :\nles lignes sont groupées selon un critère. Les valeurs affichées sont obtenues par calcul (nombre de lignes, somme, moyenne, etc.) pour chaque groupe.\n\n**Sommes calculées sur plusieurs colonnes** :\nles valeurs affichées sont obtenues en faisant la somme de plusieurs colonnes numériques sur l'ensemble du jeu de données. Chaque colonne devient une part du graphique.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "labelsField",
                        "valuesField"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "default": 5,
                          "minimum": 1,
                          "maximum": 12
                        },
                        "valuesField": {
                          "type": "string",
                          "title": "Colonne de valeurs",
                          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.labelsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.labelsField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.labelsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.labelsField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "groupBy",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "default": 5,
                          "minimum": 1,
                          "maximum": 12
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupBy?.field",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupBy.field}&interval=${rootData.chart.config.groupBy.interval}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupBy?.field",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupBy.field}&interval=${rootData.chart.config.groupBy.interval}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                },
                                "defaultColor": {
                                  "type": "string",
                                  "title": "Couleur par défaut",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Sommes calculées sur plusieurs colonnes",
                      "type": "object",
                      "required": [
                        "type",
                        "valuesFields"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsLabels"
                        },
                        "valuesFields": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                },
                                "defaultColor": {
                                  "type": "string",
                                  "title": "Couleur par défaut",
                                  "default": "#828282",
                                  "layout": "color-picker"
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "title": "Paire d'histogrammes",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "paired-histogram",
                  "title": "Type de visualisation"
                },
                "config": {
                  "type": "object",
                  "title": "Préparation des données",
                  "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux colonnes numériques sélectionnées.\n\n**Grouper les lignes, séries définies par une colonne de catégories** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes, séries définies par plusieurs colonnes numériques** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent à plusieurs colonnes numériques, agrégées indépendamment.\n\n**Grouper les lignes, abscisses définies par plusieurs colonnes** :\nles lignes sont groupées selon une colonne de catégories pour former les séries (affichées dans la légende). Les libellés sur l'axe des X correspondent à plusieurs colonnes numériques.",
                  "oneOf": [
                    {
                      "title": "Lire les lignes une par une",
                      "type": "object",
                      "required": [
                        "type",
                        "rowSortBy",
                        "sortOrder",
                        "size",
                        "labelsField",
                        "valuesFields"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "rowsBased"
                        },
                        "labelsField": {
                          "type": "string",
                          "title": "Colonne de libellés",
                          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valuesFields": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "rowSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "row",
                          "oneOf": [
                            {
                              "const": "row",
                              "title": "Ligne"
                            },
                            {
                              "const": "value",
                              "title": "Valeur"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesFields?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par une colonne de catégories",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "groupsField",
                        "valueCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBased"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "groupsField": {
                          "type": "string",
                          "title": "Grouper les valeurs en fonction de cette colonne",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "valueCalc": {
                          "title": "Calcul de la valeur",
                          "type": "object",
                          "default": {
                            "type": "count"
                          },
                          "oneOf": [
                            {
                              "title": "Nombre de lignes",
                              "required": [
                                "type"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "count"
                                }
                              }
                            },
                            {
                              "title": "Calcul depuis les valeurs d'une colonne",
                              "required": [
                                "type",
                                "field",
                                "metric"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "metric"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "metric": {
                                  "type": "string",
                                  "title": "Type de calcul",
                                  "default": "sum",
                                  "oneOf": [
                                    {
                                      "const": "avg",
                                      "title": "Moyenne"
                                    },
                                    {
                                      "const": "min",
                                      "title": "Valeur minimale"
                                    },
                                    {
                                      "const": "max",
                                      "title": "Valeur maximale"
                                    },
                                    {
                                      "const": "sum",
                                      "title": "Somme"
                                    },
                                    {
                                      "const": "cardinality",
                                      "title": "Cardinalité"
                                    }
                                  ]
                                },
                                "dynamicMetric": {
                                  "type": "boolean",
                                  "title": "Choix dynamique de la métrique",
                                  "default": false
                                }
                              }
                            }
                          ]
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.groupsField",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
                      "type": "object",
                      "required": [
                        "type",
                        "aggSortBy",
                        "sortOrder",
                        "size",
                        "groupBy",
                        "valuesCalc"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedCategories"
                        },
                        "groupBy": {
                          "type": "object",
                          "required": [],
                          "default": {
                            "type": "value"
                          },
                          "oneOf": [
                            {
                              "title": "Valeurs exactes d'une colonne",
                              "required": [
                                "type",
                                "field"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "value",
                                  "title": "Grouper par"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "const": ""
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne de type date",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "date"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "string",
                                  "title": "Taille des intervalles",
                                  "default": "day",
                                  "oneOf": [
                                    {
                                      "const": "hour",
                                      "title": "Heure"
                                    },
                                    {
                                      "const": "day",
                                      "title": "Jour"
                                    },
                                    {
                                      "const": "week",
                                      "title": "Semaine"
                                    },
                                    {
                                      "const": "month",
                                      "title": "Mois"
                                    },
                                    {
                                      "const": "year",
                                      "title": "Année"
                                    }
                                  ]
                                }
                              }
                            },
                            {
                              "title": "Intervalles d'une colonne numérique",
                              "required": [
                                "type",
                                "field",
                                "interval"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "number"
                                },
                                "field": {
                                  "type": "string",
                                  "title": "Grouper en fonction de cette colonne",
                                  "layout": {
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                                      "itemKey": "data[\"key\"]",
                                      "itemTitle": "data[\"label\"]"
                                    }
                                  }
                                },
                                "interval": {
                                  "type": "integer",
                                  "title": "Taille des intervalles",
                                  "default": 100
                                }
                              }
                            }
                          ],
                          "oneOfLayout": {
                            "label": "Grouper par"
                          }
                        },
                        "valuesCalc": {
                          "type": "array",
                          "title": "Colonnes de valeurs",
                          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
                          "minItems": 1,
                          "maxItems": 12,
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "aggSortBy": {
                          "type": "string",
                          "title": "Trier par",
                          "default": "label",
                          "oneOf": [
                            {
                              "const": "value",
                              "title": "Valeur calculée"
                            },
                            {
                              "const": "label",
                              "title": "Libellé"
                            }
                          ]
                        },
                        "sortField": {
                          "type": "string",
                          "title": "Champ de tri",
                          "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
                          "layout": {
                            "if": "parent.data.aggSortBy === 'value'",
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "sortOrder": {
                          "type": "string",
                          "title": "Ordre",
                          "default": "asc",
                          "oneOf": [
                            {
                              "const": "asc",
                              "title": "Ascendant"
                            },
                            {
                              "const": "desc",
                              "title": "Descendant"
                            }
                          ]
                        },
                        "dynamicSort": {
                          "type": "boolean",
                          "title": "Trier dynamiquement",
                          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
                          "default": false
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemValue": "data['key']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key",
                                      "label"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "label": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesCalc?.length",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['label']",
                                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    },
                    {
                      "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
                      "type": "object",
                      "required": [
                        "type",
                        "size",
                        "labelsValues",
                        "valuesLabel"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "type": {
                          "const": "aggsBasedLabels"
                        },
                        "labelsValues": {
                          "type": "array",
                          "title": "Colonnes de libellés",
                          "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
                          "items": {
                            "type": "string"
                          },
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "removeFromLabels": {
                          "title": "Texte à retirer des libellés",
                          "type": "string",
                          "default": ""
                        },
                        "valuesLabel": {
                          "type": "string",
                          "title": "Colonne de libellé des séries",
                          "description": "Choisissez une colonne des libellés des différentes séries.",
                          "layout": {
                            "getItems": {
                              "url": "${rootData.datasets[0].href}/schema?calculated=false",
                              "itemKey": "data[\"key\"]",
                              "itemTitle": "data[\"label\"]"
                            }
                          }
                        },
                        "missingLabel": {
                          "type": "string",
                          "title": "Groupe pour les éléments non renseignés",
                          "default": ""
                        },
                        "metric": {
                          "type": "string",
                          "title": "Type de calcul",
                          "default": "sum",
                          "oneOf": [
                            {
                              "const": "avg",
                              "title": "Moyenne"
                            },
                            {
                              "const": "min",
                              "title": "Valeur minimale"
                            },
                            {
                              "const": "max",
                              "title": "Valeur maximale"
                            },
                            {
                              "const": "sum",
                              "title": "Somme"
                            },
                            {
                              "const": "cardinality",
                              "title": "Cardinalité"
                            }
                          ]
                        },
                        "dynamicMetric": {
                          "type": "boolean",
                          "title": "Choix dynamique de la métrique",
                          "default": false
                        },
                        "size": {
                          "type": "integer",
                          "title": "Nombre maximal d'élements",
                          "minimum": 1,
                          "maximum": 200,
                          "default": 10
                        },
                        "colorOrder": {
                          "type": "object",
                          "title": "Couleurs et ordre",
                          "oneOf": [
                            {
                              "title": "Palette précalculée",
                              "allOf": [
                                {
                                  "title": "Palette précalculée",
                                  "required": [
                                    "type",
                                    "name"
                                  ],
                                  "properties": {
                                    "type": {
                                      "const": "palette"
                                    },
                                    "name": {
                                      "type": "string",
                                      "oneOf": [
                                        {
                                          "const": "Accent",
                                          "title": "Accent"
                                        },
                                        {
                                          "const": "Dark2",
                                          "title": "Foncé"
                                        },
                                        {
                                          "const": "Paired",
                                          "title": "Paires"
                                        },
                                        {
                                          "const": "Set1",
                                          "title": "Ensemble 1"
                                        },
                                        {
                                          "const": "Set2",
                                          "title": "Ensemble 2"
                                        },
                                        {
                                          "const": "Set3",
                                          "title": "Ensemble 3"
                                        },
                                        {
                                          "const": "Pastel1",
                                          "title": "Pastel 1"
                                        },
                                        {
                                          "const": "Pastel2",
                                          "title": "Pastel 2"
                                        }
                                      ],
                                      "default": "Accent"
                                    },
                                    "offset": {
                                      "type": "integer",
                                      "title": "Décallage",
                                      "default": 0
                                    }
                                  }
                                }
                              ],
                              "properties": {
                                "seriesOrder": {
                                  "type": "array",
                                  "title": "Ordre des séries",
                                  "items": {
                                    "type": "string",
                                    "readOnly": true
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data[\"value\"]",
                                      "itemValue": "data[\"value\"]",
                                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            },
                            {
                              "title": "Palette personnalisée",
                              "required": [
                                "type",
                                "entries"
                              ],
                              "additionalProperties": false,
                              "properties": {
                                "type": {
                                  "const": "manual"
                                },
                                "entries": {
                                  "title": "Valeurs",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "key"
                                    ],
                                    "additionalProperties": false,
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "layout": "none"
                                      },
                                      "color": {
                                        "type": "string",
                                        "title": "Couleur",
                                        "default": "#828282",
                                        "layout": "color-picker"
                                      }
                                    }
                                  },
                                  "layout": {
                                    "comp": "list",
                                    "listActions": [
                                      "edit",
                                      "sort"
                                    ],
                                    "if": "rootData.chart.config.valuesLabel",
                                    "getItems": {
                                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                                      "itemKey": "data['key']",
                                      "itemTitle": "data['key']",
                                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                                    }
                                  }
                                }
                              }
                            }
                          ],
                          "default": {
                            "type": "palette",
                            "name": "Accent",
                            "offset": 0
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    },
    {
      "title": "Options",
      "properties": {
        "title": {
          "title": "Titre du graphique",
          "type": "string"
        },
        "xTitle": {
          "title": "Titre des abscisses",
          "type": "string"
        },
        "yTitle": {
          "title": "Titre des ordonnées",
          "type": "string"
        },
        "disableTooltip": {
          "type": "boolean",
          "title": "Désactiver l'infobulle",
          "default": false
        },
        "labelsMaxWidth": {
          "type": "integer",
          "title": "Longueur maximum des libellés",
          "minimum": 20,
          "maximum": 60,
          "default": 30,
          "layout": "slider"
        },
        "unit": {
          "type": "string",
          "title": "Unité"
        },
        "divider": {
          "type": "number",
          "title": "Diviseur",
          "default": 1
        },
        "legendPosition": {
          "type": "string",
          "title": "Position de la légende",
          "default": "top",
          "oneOf": [
            {
              "const": "top",
              "title": "Haut"
            },
            {
              "const": "bottom",
              "title": "Bas"
            },
            {
              "const": "left",
              "title": "Gauche"
            },
            {
              "const": "right",
              "title": "Droite"
            }
          ]
        }
      }
    }
  ],
  "definitions": {
    "datasets": {
      "type": "array",
      "items": [
        {
          "title": "Jeu de données",
          "description": "Ce jeu doit contenir au moins une colonne avec valeur numérique",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "href": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "id": {
              "type": "string"
            },
            "schema": {
              "type": "array"
            },
            "finalizedAt": {
              "type": "string"
            }
          },
          "layout": {
            "getItems": {
              "url": "api/v1/datasets?status=finalized&q={q}&select=id,title,schema&${context.datasetFilter}&sort=createdAt:-1",
              "itemKey": "data[\"href\"]",
              "itemTitle": "data[\"title\"]",
              "itemsResults": "data[\"results\"]"
            }
          }
        }
      ]
    },
    "size": {
      "type": "integer",
      "title": "Nombre maximal d'élements",
      "minimum": 1,
      "maximum": 200,
      "default": 10
    },
    "horizontal": {
      "type": "boolean",
      "title": "Affichage horizontal"
    },
    "hideYAxis": {
      "type": "boolean",
      "title": "Cacher l'axe Y",
      "description": "Les valeurs apparaitront au au dessus ou à droite des barres. Cache l'axe des X en affichage horizontal"
    },
    "labelsField": {
      "type": "string",
      "title": "Colonne de libellés",
      "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "valuesField": {
      "type": "string",
      "title": "Colonne de valeurs",
      "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "valuesFields": {
      "type": "array",
      "title": "Colonnes de valeurs",
      "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
      "minItems": 1,
      "maxItems": 12,
      "items": {
        "type": "string"
      },
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "labelsValues": {
      "type": "array",
      "title": "Colonnes de libellés",
      "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
      "items": {
        "type": "string"
      },
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "valuesLabel": {
      "type": "string",
      "title": "Colonne de libellé des séries",
      "description": "Choisissez une colonne des libellés des différentes séries.",
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "rowSort": {
      "type": "string",
      "title": "Trier par",
      "default": "row",
      "oneOf": [
        {
          "const": "row",
          "title": "Ligne"
        },
        {
          "const": "value",
          "title": "Valeur"
        },
        {
          "const": "label",
          "title": "Libellé"
        }
      ]
    },
    "aggSort": {
      "type": "string",
      "title": "Trier par",
      "default": "label",
      "oneOf": [
        {
          "const": "value",
          "title": "Valeur calculée"
        },
        {
          "const": "label",
          "title": "Libellé"
        }
      ]
    },
    "sortOrder": {
      "type": "string",
      "title": "Ordre",
      "default": "asc",
      "oneOf": [
        {
          "const": "asc",
          "title": "Ascendant"
        },
        {
          "const": "desc",
          "title": "Descendant"
        }
      ]
    },
    "dynamicSort": {
      "type": "boolean",
      "title": "Trier dynamiquement",
      "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
      "default": false
    },
    "tension": {
      "type": "integer",
      "title": "Courbure",
      "minimum": 0,
      "maximum": 4,
      "default": 1,
      "layout": "slider"
    },
    "hexColor": {
      "type": "string",
      "title": "Couleur",
      "default": "#828282",
      "layout": "color-picker"
    },
    "defaultColor": {
      "type": "string",
      "title": "Couleur par défaut",
      "default": "#828282",
      "layout": "color-picker"
    },
    "color": {
      "type": "object",
      "title": "Couleur",
      "required": [],
      "oneOf": [
        {
          "title": "Thème",
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "const": "theme"
            },
            "strValue": {
              "title": "Couleur",
              "type": "string",
              "oneOf": [
                {
                  "const": "primary",
                  "title": "Primaire"
                },
                {
                  "const": "secondary",
                  "title": "Secondaire"
                }
              ]
            }
          }
        },
        {
          "title": "Personnalisée",
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "const": "custom"
            },
            "hexValue": {
              "type": "string",
              "title": "Couleur",
              "default": "#828282",
              "layout": "color-picker"
            }
          }
        }
      ],
      "default": {
        "type": "theme",
        "strValue": "primary"
      }
    },
    "groupBy": {
      "type": "object",
      "required": [],
      "default": {
        "type": "value"
      },
      "oneOf": [
        {
          "title": "Valeurs exactes d'une colonne",
          "required": [
            "type",
            "field"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "value",
              "title": "Grouper par"
            },
            "field": {
              "type": "string",
              "title": "Grouper en fonction de cette colonne",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "interval": {
              "const": ""
            }
          }
        },
        {
          "title": "Intervalles d'une colonne de type date",
          "required": [
            "type",
            "field",
            "interval"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "date"
            },
            "field": {
              "type": "string",
              "title": "Grouper en fonction de cette colonne",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "interval": {
              "type": "string",
              "title": "Taille des intervalles",
              "default": "day",
              "oneOf": [
                {
                  "const": "hour",
                  "title": "Heure"
                },
                {
                  "const": "day",
                  "title": "Jour"
                },
                {
                  "const": "week",
                  "title": "Semaine"
                },
                {
                  "const": "month",
                  "title": "Mois"
                },
                {
                  "const": "year",
                  "title": "Année"
                }
              ]
            }
          }
        },
        {
          "title": "Intervalles d'une colonne numérique",
          "required": [
            "type",
            "field",
            "interval"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "number"
            },
            "field": {
              "type": "string",
              "title": "Grouper en fonction de cette colonne",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "interval": {
              "type": "integer",
              "title": "Taille des intervalles",
              "default": 100
            }
          }
        }
      ],
      "oneOfLayout": {
        "label": "Grouper par"
      }
    },
    "valueCalc": {
      "title": "Calcul de la valeur",
      "type": "object",
      "default": {
        "type": "count"
      },
      "oneOf": [
        {
          "title": "Nombre de lignes",
          "required": [
            "type"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "count"
            }
          }
        },
        {
          "title": "Calcul depuis les valeurs d'une colonne",
          "required": [
            "type",
            "field",
            "metric"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "metric"
            },
            "field": {
              "type": "string",
              "title": "Colonne",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "metric": {
              "type": "string",
              "title": "Type de calcul",
              "default": "sum",
              "oneOf": [
                {
                  "const": "avg",
                  "title": "Moyenne"
                },
                {
                  "const": "min",
                  "title": "Valeur minimale"
                },
                {
                  "const": "max",
                  "title": "Valeur maximale"
                },
                {
                  "const": "sum",
                  "title": "Somme"
                },
                {
                  "const": "cardinality",
                  "title": "Cardinalité"
                }
              ]
            },
            "dynamicMetric": {
              "type": "boolean",
              "title": "Choix dynamique de la métrique",
              "default": false
            }
          }
        }
      ]
    },
    "rowsDataSingle": {
      "title": "Lire les lignes une par une, couleur unique",
      "type": "object",
      "required": [
        "type",
        "rowSortBy",
        "sortOrder",
        "size",
        "labelsField",
        "valuesField"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "rowsBased"
        },
        "labelsField": {
          "type": "string",
          "title": "Colonne de libellés",
          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "valuesField": {
          "type": "string",
          "title": "Colonne de valeurs",
          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "rowSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "row",
          "oneOf": [
            {
              "const": "row",
              "title": "Ligne"
            },
            {
              "const": "value",
              "title": "Valeur"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "color": {
          "type": "object",
          "title": "Couleur",
          "required": [],
          "oneOf": [
            {
              "title": "Thème",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "theme"
                },
                "strValue": {
                  "title": "Couleur",
                  "type": "string",
                  "oneOf": [
                    {
                      "const": "primary",
                      "title": "Primaire"
                    },
                    {
                      "const": "secondary",
                      "title": "Secondaire"
                    }
                  ]
                }
              }
            },
            {
              "title": "Personnalisée",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "custom"
                },
                "hexValue": {
                  "type": "string",
                  "title": "Couleur",
                  "default": "#828282",
                  "layout": "color-picker"
                }
              }
            }
          ],
          "default": {
            "type": "theme",
            "strValue": "primary"
          }
        }
      }
    },
    "aggsDataSingle": {
      "title": "Grouper les lignes",
      "type": "object",
      "required": [
        "type",
        "aggSortBy",
        "sortOrder",
        "size",
        "groupBy",
        "valueCalc"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsBased"
        },
        "groupBy": {
          "type": "object",
          "required": [],
          "default": {
            "type": "value"
          },
          "oneOf": [
            {
              "title": "Valeurs exactes d'une colonne",
              "required": [
                "type",
                "field"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "value",
                  "title": "Grouper par"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "const": ""
                }
              }
            },
            {
              "title": "Intervalles d'une colonne de type date",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "date"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "string",
                  "title": "Taille des intervalles",
                  "default": "day",
                  "oneOf": [
                    {
                      "const": "hour",
                      "title": "Heure"
                    },
                    {
                      "const": "day",
                      "title": "Jour"
                    },
                    {
                      "const": "week",
                      "title": "Semaine"
                    },
                    {
                      "const": "month",
                      "title": "Mois"
                    },
                    {
                      "const": "year",
                      "title": "Année"
                    }
                  ]
                }
              }
            },
            {
              "title": "Intervalles d'une colonne numérique",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "number"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "integer",
                  "title": "Taille des intervalles",
                  "default": 100
                }
              }
            }
          ],
          "oneOfLayout": {
            "label": "Grouper par"
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "valueCalc": {
          "title": "Calcul de la valeur",
          "type": "object",
          "default": {
            "type": "count"
          },
          "oneOf": [
            {
              "title": "Nombre de lignes",
              "required": [
                "type"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "count"
                }
              }
            },
            {
              "title": "Calcul depuis les valeurs d'une colonne",
              "required": [
                "type",
                "field",
                "metric"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "metric"
                },
                "field": {
                  "type": "string",
                  "title": "Colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "metric": {
                  "type": "string",
                  "title": "Type de calcul",
                  "default": "sum",
                  "oneOf": [
                    {
                      "const": "avg",
                      "title": "Moyenne"
                    },
                    {
                      "const": "min",
                      "title": "Valeur minimale"
                    },
                    {
                      "const": "max",
                      "title": "Valeur maximale"
                    },
                    {
                      "const": "sum",
                      "title": "Somme"
                    },
                    {
                      "const": "cardinality",
                      "title": "Cardinalité"
                    }
                  ]
                },
                "dynamicMetric": {
                  "type": "boolean",
                  "title": "Choix dynamique de la métrique",
                  "default": false
                }
              }
            }
          ]
        },
        "missingLabel": {
          "type": "string",
          "title": "Groupe pour les éléments non renseignés",
          "default": ""
        },
        "aggSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "label",
          "oneOf": [
            {
              "const": "value",
              "title": "Valeur calculée"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "color": {
          "type": "object",
          "title": "Couleur",
          "required": [],
          "oneOf": [
            {
              "title": "Thème",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "theme"
                },
                "strValue": {
                  "title": "Couleur",
                  "type": "string",
                  "oneOf": [
                    {
                      "const": "primary",
                      "title": "Primaire"
                    },
                    {
                      "const": "secondary",
                      "title": "Secondaire"
                    }
                  ]
                }
              }
            },
            {
              "title": "Personnalisée",
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "properties": {
                "type": {
                  "const": "custom"
                },
                "hexValue": {
                  "type": "string",
                  "title": "Couleur",
                  "default": "#828282",
                  "layout": "color-picker"
                }
              }
            }
          ],
          "default": {
            "type": "theme",
            "strValue": "primary"
          }
        }
      }
    },
    "rowsDataSingleCategories": {
      "title": "Lire les lignes une par une, plusieurs couleurs",
      "type": "object",
      "required": [
        "type",
        "rowSortBy",
        "sortOrder",
        "size",
        "labelsField",
        "valuesField",
        "categoriesField"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "rowsBasedCategories"
        },
        "labelsField": {
          "type": "string",
          "title": "Colonne de libellés",
          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "valuesField": {
          "type": "string",
          "title": "Colonne de valeurs",
          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "categoriesField": {
          "type": "string",
          "title": "Champ de catégorie",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "rowSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "row",
          "oneOf": [
            {
              "const": "row",
              "title": "Ligne"
            },
            {
              "const": "value",
              "title": "Valeur"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.categoriesField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.categoriesField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data[\"value\"]",
                      "itemValue": "data[\"value\"]",
                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.categoriesField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.categoriesField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['key']",
                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "rowsDataMultiple": {
      "title": "Lire les lignes une par une",
      "type": "object",
      "required": [
        "type",
        "rowSortBy",
        "sortOrder",
        "size",
        "labelsField",
        "valuesFields"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "rowsBased"
        },
        "labelsField": {
          "type": "string",
          "title": "Colonne de libellés",
          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "valuesFields": {
          "type": "array",
          "title": "Colonnes de valeurs",
          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
          "minItems": 1,
          "maxItems": 12,
          "items": {
            "type": "string"
          },
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "removeFromLabels": {
          "title": "Texte à retirer des libellés",
          "type": "string",
          "default": ""
        },
        "rowSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "row",
          "oneOf": [
            {
              "const": "row",
              "title": "Ligne"
            },
            {
              "const": "value",
              "title": "Valeur"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesFields?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                      "itemKey": "data['key']",
                      "itemValue": "data['key']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "label": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesFields?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['label']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "aggsDataMultiple": {
      "title": "Grouper les lignes, séries définies par une colonne de catégories",
      "type": "object",
      "required": [
        "type",
        "aggSortBy",
        "sortOrder",
        "size",
        "groupBy",
        "groupsField",
        "valueCalc"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsBased"
        },
        "groupBy": {
          "type": "object",
          "required": [],
          "default": {
            "type": "value"
          },
          "oneOf": [
            {
              "title": "Valeurs exactes d'une colonne",
              "required": [
                "type",
                "field"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "value",
                  "title": "Grouper par"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "const": ""
                }
              }
            },
            {
              "title": "Intervalles d'une colonne de type date",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "date"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "string",
                  "title": "Taille des intervalles",
                  "default": "day",
                  "oneOf": [
                    {
                      "const": "hour",
                      "title": "Heure"
                    },
                    {
                      "const": "day",
                      "title": "Jour"
                    },
                    {
                      "const": "week",
                      "title": "Semaine"
                    },
                    {
                      "const": "month",
                      "title": "Mois"
                    },
                    {
                      "const": "year",
                      "title": "Année"
                    }
                  ]
                }
              }
            },
            {
              "title": "Intervalles d'une colonne numérique",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "number"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "integer",
                  "title": "Taille des intervalles",
                  "default": 100
                }
              }
            }
          ],
          "oneOfLayout": {
            "label": "Grouper par"
          }
        },
        "groupsField": {
          "type": "string",
          "title": "Grouper les valeurs en fonction de cette colonne",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "valueCalc": {
          "title": "Calcul de la valeur",
          "type": "object",
          "default": {
            "type": "count"
          },
          "oneOf": [
            {
              "title": "Nombre de lignes",
              "required": [
                "type"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "count"
                }
              }
            },
            {
              "title": "Calcul depuis les valeurs d'une colonne",
              "required": [
                "type",
                "field",
                "metric"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "metric"
                },
                "field": {
                  "type": "string",
                  "title": "Colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "metric": {
                  "type": "string",
                  "title": "Type de calcul",
                  "default": "sum",
                  "oneOf": [
                    {
                      "const": "avg",
                      "title": "Moyenne"
                    },
                    {
                      "const": "min",
                      "title": "Valeur minimale"
                    },
                    {
                      "const": "max",
                      "title": "Valeur maximale"
                    },
                    {
                      "const": "sum",
                      "title": "Somme"
                    },
                    {
                      "const": "cardinality",
                      "title": "Cardinalité"
                    }
                  ]
                },
                "dynamicMetric": {
                  "type": "boolean",
                  "title": "Choix dynamique de la métrique",
                  "default": false
                }
              }
            }
          ]
        },
        "missingLabel": {
          "type": "string",
          "title": "Groupe pour les éléments non renseignés",
          "default": ""
        },
        "aggSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "label",
          "oneOf": [
            {
              "const": "value",
              "title": "Valeur calculée"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.groupsField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                      "itemKey": "data[\"value\"]",
                      "itemValue": "data[\"value\"]",
                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.groupsField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['key']",
                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "aggsDataMultipleCategories": {
      "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
      "type": "object",
      "required": [
        "type",
        "aggSortBy",
        "sortOrder",
        "size",
        "groupBy",
        "valuesCalc"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsBasedCategories"
        },
        "groupBy": {
          "type": "object",
          "required": [],
          "default": {
            "type": "value"
          },
          "oneOf": [
            {
              "title": "Valeurs exactes d'une colonne",
              "required": [
                "type",
                "field"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "value",
                  "title": "Grouper par"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "const": ""
                }
              }
            },
            {
              "title": "Intervalles d'une colonne de type date",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "date"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "string",
                  "title": "Taille des intervalles",
                  "default": "day",
                  "oneOf": [
                    {
                      "const": "hour",
                      "title": "Heure"
                    },
                    {
                      "const": "day",
                      "title": "Jour"
                    },
                    {
                      "const": "week",
                      "title": "Semaine"
                    },
                    {
                      "const": "month",
                      "title": "Mois"
                    },
                    {
                      "const": "year",
                      "title": "Année"
                    }
                  ]
                }
              }
            },
            {
              "title": "Intervalles d'une colonne numérique",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "number"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "integer",
                  "title": "Taille des intervalles",
                  "default": 100
                }
              }
            }
          ],
          "oneOfLayout": {
            "label": "Grouper par"
          }
        },
        "valuesCalc": {
          "type": "array",
          "title": "Colonnes de valeurs",
          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
          "minItems": 1,
          "maxItems": 12,
          "items": {
            "type": "string"
          },
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "removeFromLabels": {
          "title": "Texte à retirer des libellés",
          "type": "string",
          "default": ""
        },
        "metric": {
          "type": "string",
          "title": "Type de calcul",
          "default": "sum",
          "oneOf": [
            {
              "const": "avg",
              "title": "Moyenne"
            },
            {
              "const": "min",
              "title": "Valeur minimale"
            },
            {
              "const": "max",
              "title": "Valeur maximale"
            },
            {
              "const": "sum",
              "title": "Somme"
            },
            {
              "const": "cardinality",
              "title": "Cardinalité"
            }
          ]
        },
        "dynamicMetric": {
          "type": "boolean",
          "title": "Choix dynamique de la métrique",
          "default": false
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "aggSortBy": {
          "type": "string",
          "title": "Trier par",
          "default": "label",
          "oneOf": [
            {
              "const": "value",
              "title": "Valeur calculée"
            },
            {
              "const": "label",
              "title": "Libellé"
            }
          ]
        },
        "sortField": {
          "type": "string",
          "title": "Champ de tri",
          "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
          "layout": {
            "if": "parent.data.aggSortBy === 'value'",
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "sortOrder": {
          "type": "string",
          "title": "Ordre",
          "default": "asc",
          "oneOf": [
            {
              "const": "asc",
              "title": "Ascendant"
            },
            {
              "const": "desc",
              "title": "Descendant"
            }
          ]
        },
        "dynamicSort": {
          "type": "boolean",
          "title": "Trier dynamiquement",
          "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
          "default": false
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesCalc?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                      "itemKey": "data['key']",
                      "itemValue": "data['key']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key",
                      "label"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "label": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesCalc?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['label']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "aggsDataMultipleLabels": {
      "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
      "type": "object",
      "required": [
        "type",
        "size",
        "labelsValues",
        "valuesLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsBasedLabels"
        },
        "labelsValues": {
          "type": "array",
          "title": "Colonnes de libellés",
          "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
          "items": {
            "type": "string"
          },
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "removeFromLabels": {
          "title": "Texte à retirer des libellés",
          "type": "string",
          "default": ""
        },
        "valuesLabel": {
          "type": "string",
          "title": "Colonne de libellé des séries",
          "description": "Choisissez une colonne des libellés des différentes séries.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "missingLabel": {
          "type": "string",
          "title": "Groupe pour les éléments non renseignés",
          "default": ""
        },
        "metric": {
          "type": "string",
          "title": "Type de calcul",
          "default": "sum",
          "oneOf": [
            {
              "const": "avg",
              "title": "Moyenne"
            },
            {
              "const": "min",
              "title": "Valeur minimale"
            },
            {
              "const": "max",
              "title": "Valeur maximale"
            },
            {
              "const": "sum",
              "title": "Somme"
            },
            {
              "const": "cardinality",
              "title": "Cardinalité"
            }
          ]
        },
        "dynamicMetric": {
          "type": "boolean",
          "title": "Choix dynamique de la métrique",
          "default": false
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "minimum": 1,
          "maximum": 200,
          "default": 10
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesLabel",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data[\"value\"]",
                      "itemValue": "data[\"value\"]",
                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesLabel",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['key']",
                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "multipleDataType": {
      "type": "object",
      "title": "Préparation des données",
      "description": "Choisissez la manière de traiter les données.\n\n**Lire les lignes une par une** :\nles valeurs sont lues directement depuis chaque ligne du jeu de données. Les différentes séries (affichées dans la légende) correspondent aux colonnes numériques sélectionnées.\n\n**Grouper les lignes, séries définies par une colonne de catégories** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent aux valeurs d'une colonne de catégories.\n\n**Grouper les lignes, séries définies par plusieurs colonnes numériques** :\nles lignes sont groupées selon un critère pour former les libellés sur l'axe des X. Les différentes séries (affichées dans la légende) correspondent à plusieurs colonnes numériques, agrégées indépendamment.\n\n**Grouper les lignes, abscisses définies par plusieurs colonnes** :\nles lignes sont groupées selon une colonne de catégories pour former les séries (affichées dans la légende). Les libellés sur l'axe des X correspondent à plusieurs colonnes numériques.",
      "oneOf": [
        {
          "title": "Lire les lignes une par une",
          "type": "object",
          "required": [
            "type",
            "rowSortBy",
            "sortOrder",
            "size",
            "labelsField",
            "valuesFields"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "rowsBased"
            },
            "labelsField": {
              "type": "string",
              "title": "Colonne de libellés",
              "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "size": {
              "type": "integer",
              "title": "Nombre maximal d'élements",
              "minimum": 1,
              "maximum": 200,
              "default": 10
            },
            "valuesFields": {
              "type": "array",
              "title": "Colonnes de valeurs",
              "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
              "minItems": 1,
              "maxItems": 12,
              "items": {
                "type": "string"
              },
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "removeFromLabels": {
              "title": "Texte à retirer des libellés",
              "type": "string",
              "default": ""
            },
            "rowSortBy": {
              "type": "string",
              "title": "Trier par",
              "default": "row",
              "oneOf": [
                {
                  "const": "row",
                  "title": "Ligne"
                },
                {
                  "const": "value",
                  "title": "Valeur"
                },
                {
                  "const": "label",
                  "title": "Libellé"
                }
              ]
            },
            "sortOrder": {
              "type": "string",
              "title": "Ordre",
              "default": "asc",
              "oneOf": [
                {
                  "const": "asc",
                  "title": "Ascendant"
                },
                {
                  "const": "desc",
                  "title": "Descendant"
                }
              ]
            },
            "dynamicSort": {
              "type": "boolean",
              "title": "Trier dynamiquement",
              "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
              "default": false
            },
            "colorOrder": {
              "type": "object",
              "title": "Couleurs et ordre",
              "oneOf": [
                {
                  "title": "Palette précalculée",
                  "allOf": [
                    {
                      "title": "Palette précalculée",
                      "required": [
                        "type",
                        "name"
                      ],
                      "properties": {
                        "type": {
                          "const": "palette"
                        },
                        "name": {
                          "type": "string",
                          "oneOf": [
                            {
                              "const": "Accent",
                              "title": "Accent"
                            },
                            {
                              "const": "Dark2",
                              "title": "Foncé"
                            },
                            {
                              "const": "Paired",
                              "title": "Paires"
                            },
                            {
                              "const": "Set1",
                              "title": "Ensemble 1"
                            },
                            {
                              "const": "Set2",
                              "title": "Ensemble 2"
                            },
                            {
                              "const": "Set3",
                              "title": "Ensemble 3"
                            },
                            {
                              "const": "Pastel1",
                              "title": "Pastel 1"
                            },
                            {
                              "const": "Pastel2",
                              "title": "Pastel 2"
                            }
                          ],
                          "default": "Accent"
                        },
                        "offset": {
                          "type": "integer",
                          "title": "Décallage",
                          "default": 0
                        }
                      }
                    }
                  ],
                  "properties": {
                    "seriesOrder": {
                      "type": "array",
                      "title": "Ordre des séries",
                      "items": {
                        "type": "string",
                        "readOnly": true
                      },
                      "layout": {
                        "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                        "comp": "list",
                        "listActions": [
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesFields?.length",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                          "itemKey": "data['key']",
                          "itemValue": "data['key']",
                          "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                        }
                      }
                    }
                  }
                },
                {
                  "title": "Palette personnalisée",
                  "required": [
                    "type",
                    "entries"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "manual"
                    },
                    "entries": {
                      "title": "Valeurs",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "key"
                        ],
                        "additionalProperties": false,
                        "properties": {
                          "key": {
                            "type": "string",
                            "layout": "none"
                          },
                          "label": {
                            "type": "string",
                            "layout": "none"
                          },
                          "color": {
                            "type": "string",
                            "title": "Couleur",
                            "default": "#828282",
                            "layout": "color-picker"
                          }
                        }
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "edit",
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesFields?.length",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                          "itemKey": "data['key']",
                          "itemTitle": "data['label']",
                          "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                        }
                      }
                    }
                  }
                }
              ],
              "default": {
                "type": "palette",
                "name": "Accent",
                "offset": 0
              }
            }
          }
        },
        {
          "title": "Grouper les lignes, séries définies par une colonne de catégories",
          "type": "object",
          "required": [
            "type",
            "aggSortBy",
            "sortOrder",
            "size",
            "groupBy",
            "groupsField",
            "valueCalc"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "aggsBased"
            },
            "groupBy": {
              "type": "object",
              "required": [],
              "default": {
                "type": "value"
              },
              "oneOf": [
                {
                  "title": "Valeurs exactes d'une colonne",
                  "required": [
                    "type",
                    "field"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "value",
                      "title": "Grouper par"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "const": ""
                    }
                  }
                },
                {
                  "title": "Intervalles d'une colonne de type date",
                  "required": [
                    "type",
                    "field",
                    "interval"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "date"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "type": "string",
                      "title": "Taille des intervalles",
                      "default": "day",
                      "oneOf": [
                        {
                          "const": "hour",
                          "title": "Heure"
                        },
                        {
                          "const": "day",
                          "title": "Jour"
                        },
                        {
                          "const": "week",
                          "title": "Semaine"
                        },
                        {
                          "const": "month",
                          "title": "Mois"
                        },
                        {
                          "const": "year",
                          "title": "Année"
                        }
                      ]
                    }
                  }
                },
                {
                  "title": "Intervalles d'une colonne numérique",
                  "required": [
                    "type",
                    "field",
                    "interval"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "number"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "type": "integer",
                      "title": "Taille des intervalles",
                      "default": 100
                    }
                  }
                }
              ],
              "oneOfLayout": {
                "label": "Grouper par"
              }
            },
            "groupsField": {
              "type": "string",
              "title": "Grouper les valeurs en fonction de cette colonne",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&maxCardinality=12",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "size": {
              "type": "integer",
              "title": "Nombre maximal d'élements",
              "minimum": 1,
              "maximum": 200,
              "default": 10
            },
            "valueCalc": {
              "title": "Calcul de la valeur",
              "type": "object",
              "default": {
                "type": "count"
              },
              "oneOf": [
                {
                  "title": "Nombre de lignes",
                  "required": [
                    "type"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "count"
                    }
                  }
                },
                {
                  "title": "Calcul depuis les valeurs d'une colonne",
                  "required": [
                    "type",
                    "field",
                    "metric"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "metric"
                    },
                    "field": {
                      "type": "string",
                      "title": "Colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "metric": {
                      "type": "string",
                      "title": "Type de calcul",
                      "default": "sum",
                      "oneOf": [
                        {
                          "const": "avg",
                          "title": "Moyenne"
                        },
                        {
                          "const": "min",
                          "title": "Valeur minimale"
                        },
                        {
                          "const": "max",
                          "title": "Valeur maximale"
                        },
                        {
                          "const": "sum",
                          "title": "Somme"
                        },
                        {
                          "const": "cardinality",
                          "title": "Cardinalité"
                        }
                      ]
                    },
                    "dynamicMetric": {
                      "type": "boolean",
                      "title": "Choix dynamique de la métrique",
                      "default": false
                    }
                  }
                }
              ]
            },
            "missingLabel": {
              "type": "string",
              "title": "Groupe pour les éléments non renseignés",
              "default": ""
            },
            "aggSortBy": {
              "type": "string",
              "title": "Trier par",
              "default": "label",
              "oneOf": [
                {
                  "const": "value",
                  "title": "Valeur calculée"
                },
                {
                  "const": "label",
                  "title": "Libellé"
                }
              ]
            },
            "sortOrder": {
              "type": "string",
              "title": "Ordre",
              "default": "asc",
              "oneOf": [
                {
                  "const": "asc",
                  "title": "Ascendant"
                },
                {
                  "const": "desc",
                  "title": "Descendant"
                }
              ]
            },
            "dynamicSort": {
              "type": "boolean",
              "title": "Trier dynamiquement",
              "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
              "default": false
            },
            "colorOrder": {
              "type": "object",
              "title": "Couleurs et ordre",
              "oneOf": [
                {
                  "title": "Palette précalculée",
                  "allOf": [
                    {
                      "title": "Palette précalculée",
                      "required": [
                        "type",
                        "name"
                      ],
                      "properties": {
                        "type": {
                          "const": "palette"
                        },
                        "name": {
                          "type": "string",
                          "oneOf": [
                            {
                              "const": "Accent",
                              "title": "Accent"
                            },
                            {
                              "const": "Dark2",
                              "title": "Foncé"
                            },
                            {
                              "const": "Paired",
                              "title": "Paires"
                            },
                            {
                              "const": "Set1",
                              "title": "Ensemble 1"
                            },
                            {
                              "const": "Set2",
                              "title": "Ensemble 2"
                            },
                            {
                              "const": "Set3",
                              "title": "Ensemble 3"
                            },
                            {
                              "const": "Pastel1",
                              "title": "Pastel 1"
                            },
                            {
                              "const": "Pastel2",
                              "title": "Pastel 2"
                            }
                          ],
                          "default": "Accent"
                        },
                        "offset": {
                          "type": "integer",
                          "title": "Décallage",
                          "default": 0
                        }
                      }
                    }
                  ],
                  "properties": {
                    "seriesOrder": {
                      "type": "array",
                      "title": "Ordre des séries",
                      "items": {
                        "type": "string",
                        "readOnly": true
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "sort"
                        ],
                        "if": "rootData.chart.config.groupsField",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                          "itemKey": "data[\"value\"]",
                          "itemValue": "data[\"value\"]",
                          "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                        }
                      }
                    }
                  }
                },
                {
                  "title": "Palette personnalisée",
                  "required": [
                    "type",
                    "entries"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "manual"
                    },
                    "entries": {
                      "title": "Valeurs",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "key"
                        ],
                        "additionalProperties": false,
                        "properties": {
                          "key": {
                            "type": "string",
                            "layout": "none"
                          },
                          "color": {
                            "type": "string",
                            "title": "Couleur",
                            "default": "#828282",
                            "layout": "color-picker"
                          }
                        }
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "edit",
                          "sort"
                        ],
                        "if": "rootData.chart.config.groupsField",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupsField}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                          "itemKey": "data['key']",
                          "itemTitle": "data['key']",
                          "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                        }
                      }
                    }
                  }
                }
              ],
              "default": {
                "type": "palette",
                "name": "Accent",
                "offset": 0
              }
            }
          }
        },
        {
          "title": "Grouper les lignes, séries définies par plusieurs colonnes numériques",
          "type": "object",
          "required": [
            "type",
            "aggSortBy",
            "sortOrder",
            "size",
            "groupBy",
            "valuesCalc"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "aggsBasedCategories"
            },
            "groupBy": {
              "type": "object",
              "required": [],
              "default": {
                "type": "value"
              },
              "oneOf": [
                {
                  "title": "Valeurs exactes d'une colonne",
                  "required": [
                    "type",
                    "field"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "value",
                      "title": "Grouper par"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "const": ""
                    }
                  }
                },
                {
                  "title": "Intervalles d'une colonne de type date",
                  "required": [
                    "type",
                    "field",
                    "interval"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "date"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "type": "string",
                      "title": "Taille des intervalles",
                      "default": "day",
                      "oneOf": [
                        {
                          "const": "hour",
                          "title": "Heure"
                        },
                        {
                          "const": "day",
                          "title": "Jour"
                        },
                        {
                          "const": "week",
                          "title": "Semaine"
                        },
                        {
                          "const": "month",
                          "title": "Mois"
                        },
                        {
                          "const": "year",
                          "title": "Année"
                        }
                      ]
                    }
                  }
                },
                {
                  "title": "Intervalles d'une colonne numérique",
                  "required": [
                    "type",
                    "field",
                    "interval"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "number"
                    },
                    "field": {
                      "type": "string",
                      "title": "Grouper en fonction de cette colonne",
                      "layout": {
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                          "itemKey": "data[\"key\"]",
                          "itemTitle": "data[\"label\"]"
                        }
                      }
                    },
                    "interval": {
                      "type": "integer",
                      "title": "Taille des intervalles",
                      "default": 100
                    }
                  }
                }
              ],
              "oneOfLayout": {
                "label": "Grouper par"
              }
            },
            "valuesCalc": {
              "type": "array",
              "title": "Colonnes de valeurs",
              "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
              "minItems": 1,
              "maxItems": 12,
              "items": {
                "type": "string"
              },
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "removeFromLabels": {
              "title": "Texte à retirer des libellés",
              "type": "string",
              "default": ""
            },
            "metric": {
              "type": "string",
              "title": "Type de calcul",
              "default": "sum",
              "oneOf": [
                {
                  "const": "avg",
                  "title": "Moyenne"
                },
                {
                  "const": "min",
                  "title": "Valeur minimale"
                },
                {
                  "const": "max",
                  "title": "Valeur maximale"
                },
                {
                  "const": "sum",
                  "title": "Somme"
                },
                {
                  "const": "cardinality",
                  "title": "Cardinalité"
                }
              ]
            },
            "dynamicMetric": {
              "type": "boolean",
              "title": "Choix dynamique de la métrique",
              "default": false
            },
            "size": {
              "type": "integer",
              "title": "Nombre maximal d'élements",
              "minimum": 1,
              "maximum": 200,
              "default": 10
            },
            "aggSortBy": {
              "type": "string",
              "title": "Trier par",
              "default": "label",
              "oneOf": [
                {
                  "const": "value",
                  "title": "Valeur calculée"
                },
                {
                  "const": "label",
                  "title": "Libellé"
                }
              ]
            },
            "sortField": {
              "type": "string",
              "title": "Champ de tri",
              "description": "Champ utilisé pour le tri par valeur. Par défaut le premier champ de la liste des valeurs est utilisé.",
              "layout": {
                "if": "parent.data.aggSortBy === 'value'",
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "sortOrder": {
              "type": "string",
              "title": "Ordre",
              "default": "asc",
              "oneOf": [
                {
                  "const": "asc",
                  "title": "Ascendant"
                },
                {
                  "const": "desc",
                  "title": "Descendant"
                }
              ]
            },
            "dynamicSort": {
              "type": "boolean",
              "title": "Trier dynamiquement",
              "description": "Si cette option est activée, l'utilisateur pourra choisir la colonne de tri et l'ordre de tri dans le formulaire de filtres interactifs.",
              "default": false
            },
            "colorOrder": {
              "type": "object",
              "title": "Couleurs et ordre",
              "oneOf": [
                {
                  "title": "Palette précalculée",
                  "allOf": [
                    {
                      "title": "Palette précalculée",
                      "required": [
                        "type",
                        "name"
                      ],
                      "properties": {
                        "type": {
                          "const": "palette"
                        },
                        "name": {
                          "type": "string",
                          "oneOf": [
                            {
                              "const": "Accent",
                              "title": "Accent"
                            },
                            {
                              "const": "Dark2",
                              "title": "Foncé"
                            },
                            {
                              "const": "Paired",
                              "title": "Paires"
                            },
                            {
                              "const": "Set1",
                              "title": "Ensemble 1"
                            },
                            {
                              "const": "Set2",
                              "title": "Ensemble 2"
                            },
                            {
                              "const": "Set3",
                              "title": "Ensemble 3"
                            },
                            {
                              "const": "Pastel1",
                              "title": "Pastel 1"
                            },
                            {
                              "const": "Pastel2",
                              "title": "Pastel 2"
                            }
                          ],
                          "default": "Accent"
                        },
                        "offset": {
                          "type": "integer",
                          "title": "Décallage",
                          "default": 0
                        }
                      }
                    }
                  ],
                  "properties": {
                    "seriesOrder": {
                      "type": "array",
                      "title": "Ordre des séries",
                      "items": {
                        "type": "string",
                        "readOnly": true
                      },
                      "layout": {
                        "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                        "comp": "list",
                        "listActions": [
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesCalc?.length",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                          "itemKey": "data['key']",
                          "itemValue": "data['key']",
                          "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                        }
                      }
                    }
                  }
                },
                {
                  "title": "Palette personnalisée",
                  "required": [
                    "type",
                    "entries"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "manual"
                    },
                    "entries": {
                      "title": "Valeurs",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "key",
                          "label"
                        ],
                        "additionalProperties": false,
                        "properties": {
                          "key": {
                            "type": "string",
                            "layout": "none"
                          },
                          "label": {
                            "type": "string",
                            "layout": "none"
                          },
                          "color": {
                            "type": "string",
                            "title": "Couleur",
                            "default": "#828282",
                            "layout": "color-picker"
                          }
                        }
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "edit",
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesCalc?.length",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesCalc?.length}",
                          "itemKey": "data['key']",
                          "itemTitle": "data['label']",
                          "itemsResults": "data.filter(f => rootData.chart.config.valuesCalc.includes(f.key))"
                        }
                      }
                    }
                  }
                }
              ],
              "default": {
                "type": "palette",
                "name": "Accent",
                "offset": 0
              }
            }
          }
        },
        {
          "title": "Grouper les lignes, abscisses définies par plusieurs colonnes",
          "type": "object",
          "required": [
            "type",
            "size",
            "labelsValues",
            "valuesLabel"
          ],
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "aggsBasedLabels"
            },
            "labelsValues": {
              "type": "array",
              "title": "Colonnes de libellés",
              "description": "Choisissez les colonnes de libellés à présenter dans le graphique.",
              "items": {
                "type": "string"
              },
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "removeFromLabels": {
              "title": "Texte à retirer des libellés",
              "type": "string",
              "default": ""
            },
            "valuesLabel": {
              "type": "string",
              "title": "Colonne de libellé des séries",
              "description": "Choisissez une colonne des libellés des différentes séries.",
              "layout": {
                "getItems": {
                  "url": "${rootData.datasets[0].href}/schema?calculated=false",
                  "itemKey": "data[\"key\"]",
                  "itemTitle": "data[\"label\"]"
                }
              }
            },
            "missingLabel": {
              "type": "string",
              "title": "Groupe pour les éléments non renseignés",
              "default": ""
            },
            "metric": {
              "type": "string",
              "title": "Type de calcul",
              "default": "sum",
              "oneOf": [
                {
                  "const": "avg",
                  "title": "Moyenne"
                },
                {
                  "const": "min",
                  "title": "Valeur minimale"
                },
                {
                  "const": "max",
                  "title": "Valeur maximale"
                },
                {
                  "const": "sum",
                  "title": "Somme"
                },
                {
                  "const": "cardinality",
                  "title": "Cardinalité"
                }
              ]
            },
            "dynamicMetric": {
              "type": "boolean",
              "title": "Choix dynamique de la métrique",
              "default": false
            },
            "size": {
              "type": "integer",
              "title": "Nombre maximal d'élements",
              "minimum": 1,
              "maximum": 200,
              "default": 10
            },
            "colorOrder": {
              "type": "object",
              "title": "Couleurs et ordre",
              "oneOf": [
                {
                  "title": "Palette précalculée",
                  "allOf": [
                    {
                      "title": "Palette précalculée",
                      "required": [
                        "type",
                        "name"
                      ],
                      "properties": {
                        "type": {
                          "const": "palette"
                        },
                        "name": {
                          "type": "string",
                          "oneOf": [
                            {
                              "const": "Accent",
                              "title": "Accent"
                            },
                            {
                              "const": "Dark2",
                              "title": "Foncé"
                            },
                            {
                              "const": "Paired",
                              "title": "Paires"
                            },
                            {
                              "const": "Set1",
                              "title": "Ensemble 1"
                            },
                            {
                              "const": "Set2",
                              "title": "Ensemble 2"
                            },
                            {
                              "const": "Set3",
                              "title": "Ensemble 3"
                            },
                            {
                              "const": "Pastel1",
                              "title": "Pastel 1"
                            },
                            {
                              "const": "Pastel2",
                              "title": "Pastel 2"
                            }
                          ],
                          "default": "Accent"
                        },
                        "offset": {
                          "type": "integer",
                          "title": "Décallage",
                          "default": 0
                        }
                      }
                    }
                  ],
                  "properties": {
                    "seriesOrder": {
                      "type": "array",
                      "title": "Ordre des séries",
                      "items": {
                        "type": "string",
                        "readOnly": true
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesLabel",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                          "itemKey": "data[\"value\"]",
                          "itemValue": "data[\"value\"]",
                          "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                        }
                      }
                    }
                  }
                },
                {
                  "title": "Palette personnalisée",
                  "required": [
                    "type",
                    "entries"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "manual"
                    },
                    "entries": {
                      "title": "Valeurs",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "key"
                        ],
                        "additionalProperties": false,
                        "properties": {
                          "key": {
                            "type": "string",
                            "layout": "none"
                          },
                          "color": {
                            "type": "string",
                            "title": "Couleur",
                            "default": "#828282",
                            "layout": "color-picker"
                          }
                        }
                      },
                      "layout": {
                        "comp": "list",
                        "listActions": [
                          "edit",
                          "sort"
                        ],
                        "if": "rootData.chart.config.valuesLabel",
                        "getItems": {
                          "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.valuesLabel}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                          "itemKey": "data['key']",
                          "itemTitle": "data['key']",
                          "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                        }
                      }
                    }
                  }
                }
              ],
              "default": {
                "type": "palette",
                "name": "Accent",
                "offset": 0
              }
            }
          }
        }
      ]
    },
    "rowsCategories": {
      "title": "Lire les lignes une par une",
      "type": "object",
      "required": [
        "type",
        "size",
        "labelsField",
        "valuesField"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "rowsBased"
        },
        "labelsField": {
          "type": "string",
          "title": "Colonne de libellés",
          "description": "Choisissez la colonne contenant les libellés à présenter en légende. Dans le cas d'un diagramme en ligne, cette colonne va correspondre aux valeurs présentées en abscisse.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "default": 5,
          "minimum": 1,
          "maximum": 12
        },
        "valuesField": {
          "type": "string",
          "title": "Colonne de valeurs",
          "description": "Choisissez une colonne de valeurs numériques à présenter dans le graphique.",
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.labelsField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.labelsField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data[\"value\"]",
                      "itemValue": "data[\"value\"]",
                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.labelsField",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.labelsField}&agg_size=12&size=0&qs=${rootData.qsFilter}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['key']",
                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                    }
                  }
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "aggsCategories": {
      "title": "Grouper les lignes",
      "type": "object",
      "required": [
        "type",
        "size",
        "groupBy",
        "valueCalc"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsBased"
        },
        "groupBy": {
          "type": "object",
          "required": [],
          "default": {
            "type": "value"
          },
          "oneOf": [
            {
              "title": "Valeurs exactes d'une colonne",
              "required": [
                "type",
                "field"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "value",
                  "title": "Grouper par"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "const": ""
                }
              }
            },
            {
              "title": "Intervalles d'une colonne de type date",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "date"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&format=date,date-time",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "string",
                  "title": "Taille des intervalles",
                  "default": "day",
                  "oneOf": [
                    {
                      "const": "hour",
                      "title": "Heure"
                    },
                    {
                      "const": "day",
                      "title": "Jour"
                    },
                    {
                      "const": "week",
                      "title": "Semaine"
                    },
                    {
                      "const": "month",
                      "title": "Mois"
                    },
                    {
                      "const": "year",
                      "title": "Année"
                    }
                  ]
                }
              }
            },
            {
              "title": "Intervalles d'une colonne numérique",
              "required": [
                "type",
                "field",
                "interval"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "number"
                },
                "field": {
                  "type": "string",
                  "title": "Grouper en fonction de cette colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "interval": {
                  "type": "integer",
                  "title": "Taille des intervalles",
                  "default": 100
                }
              }
            }
          ],
          "oneOfLayout": {
            "label": "Grouper par"
          }
        },
        "size": {
          "type": "integer",
          "title": "Nombre maximal d'élements",
          "default": 5,
          "minimum": 1,
          "maximum": 12
        },
        "valueCalc": {
          "title": "Calcul de la valeur",
          "type": "object",
          "default": {
            "type": "count"
          },
          "oneOf": [
            {
              "title": "Nombre de lignes",
              "required": [
                "type"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "count"
                }
              }
            },
            {
              "title": "Calcul depuis les valeurs d'une colonne",
              "required": [
                "type",
                "field",
                "metric"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "metric"
                },
                "field": {
                  "type": "string",
                  "title": "Colonne",
                  "layout": {
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
                      "itemKey": "data[\"key\"]",
                      "itemTitle": "data[\"label\"]"
                    }
                  }
                },
                "metric": {
                  "type": "string",
                  "title": "Type de calcul",
                  "default": "sum",
                  "oneOf": [
                    {
                      "const": "avg",
                      "title": "Moyenne"
                    },
                    {
                      "const": "min",
                      "title": "Valeur minimale"
                    },
                    {
                      "const": "max",
                      "title": "Valeur maximale"
                    },
                    {
                      "const": "sum",
                      "title": "Somme"
                    },
                    {
                      "const": "cardinality",
                      "title": "Cardinalité"
                    }
                  ]
                },
                "dynamicMetric": {
                  "type": "boolean",
                  "title": "Choix dynamique de la métrique",
                  "default": false
                }
              }
            }
          ]
        },
        "missingLabel": {
          "type": "string",
          "title": "Groupe pour les éléments non renseignés",
          "default": ""
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.groupBy?.field",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupBy.field}&interval=${rootData.chart.config.groupBy.interval}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                      "itemKey": "data[\"value\"]",
                      "itemValue": "data[\"value\"]",
                      "itemsResults": "data[\"aggs\"].map(a => ({ value: a.value + '' }))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.groupBy?.field",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/values_agg?field=${rootData.chart.config.groupBy.field}&interval=${rootData.chart.config.groupBy.interval}&agg_size=12&size=0&qs=${rootData.qsFilter}&missing=${rootData.chart.config.missingLabel}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['key']",
                      "itemsResults": "data['aggs'].map(a => ({ key: a.value + '' }))"
                    }
                  }
                },
                "defaultColor": {
                  "type": "string",
                  "title": "Couleur par défaut",
                  "default": "#828282",
                  "layout": "color-picker"
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "aggsLabels": {
      "title": "Sommes calculées sur plusieurs colonnes",
      "type": "object",
      "required": [
        "type",
        "valuesFields"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "aggsLabels"
        },
        "valuesFields": {
          "type": "array",
          "title": "Colonnes de valeurs",
          "description": "Choisissez les colonnes de valeurs numériques à présenter dans le graphique.",
          "minItems": 1,
          "maxItems": 12,
          "items": {
            "type": "string"
          },
          "layout": {
            "getItems": {
              "url": "${rootData.datasets[0].href}/schema?calculated=false&type=integer,number",
              "itemKey": "data[\"key\"]",
              "itemTitle": "data[\"label\"]"
            }
          }
        },
        "removeFromLabels": {
          "title": "Texte à retirer des libellés",
          "type": "string",
          "default": ""
        },
        "colorOrder": {
          "type": "object",
          "title": "Couleurs et ordre",
          "oneOf": [
            {
              "title": "Palette précalculée",
              "allOf": [
                {
                  "title": "Palette précalculée",
                  "required": [
                    "type",
                    "name"
                  ],
                  "properties": {
                    "type": {
                      "const": "palette"
                    },
                    "name": {
                      "type": "string",
                      "oneOf": [
                        {
                          "const": "Accent",
                          "title": "Accent"
                        },
                        {
                          "const": "Dark2",
                          "title": "Foncé"
                        },
                        {
                          "const": "Paired",
                          "title": "Paires"
                        },
                        {
                          "const": "Set1",
                          "title": "Ensemble 1"
                        },
                        {
                          "const": "Set2",
                          "title": "Ensemble 2"
                        },
                        {
                          "const": "Set3",
                          "title": "Ensemble 3"
                        },
                        {
                          "const": "Pastel1",
                          "title": "Pastel 1"
                        },
                        {
                          "const": "Pastel2",
                          "title": "Pastel 2"
                        }
                      ],
                      "default": "Accent"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Décallage",
                      "default": 0
                    }
                  }
                }
              ],
              "properties": {
                "seriesOrder": {
                  "type": "array",
                  "title": "Ordre des séries",
                  "items": {
                    "type": "string",
                    "readOnly": true
                  },
                  "layout": {
                    "itemTitle": "rootData.datasets[0].schema.find(f => f.key === data).title",
                    "comp": "list",
                    "listActions": [
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesFields?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                      "itemKey": "data['key']",
                      "itemValue": "data['key']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                    }
                  }
                }
              }
            },
            {
              "title": "Palette personnalisée",
              "required": [
                "type",
                "entries"
              ],
              "additionalProperties": false,
              "properties": {
                "type": {
                  "const": "manual"
                },
                "entries": {
                  "title": "Valeurs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "key": {
                        "type": "string",
                        "layout": "none"
                      },
                      "label": {
                        "type": "string",
                        "layout": "none"
                      },
                      "color": {
                        "type": "string",
                        "title": "Couleur",
                        "default": "#828282",
                        "layout": "color-picker"
                      }
                    }
                  },
                  "layout": {
                    "comp": "list",
                    "listActions": [
                      "edit",
                      "sort"
                    ],
                    "if": "rootData.chart.config.valuesFields?.length",
                    "getItems": {
                      "url": "${rootData.datasets[0].href}/schema?calculated=false&t=${rootData.chart.config.valuesFields?.length}",
                      "itemKey": "data['key']",
                      "itemTitle": "data['label']",
                      "itemsResults": "data.filter(f => rootData.chart.config.valuesFields.includes(f.key))"
                    }
                  }
                },
                "defaultColor": {
                  "type": "string",
                  "title": "Couleur par défaut",
                  "default": "#828282",
                  "layout": "color-picker"
                }
              }
            }
          ],
          "default": {
            "type": "palette",
            "name": "Accent",
            "offset": 0
          }
        }
      }
    },
    "filters": {
      "title": "Filtres prédéfinis",
      "type": "array",
      "items": {
        "type": "object",
        "default": {
          "type": "in"
        },
        "oneOf": [
          {
            "title": "Restreindre à des valeurs",
            "required": [
              "type",
              "field",
              "values"
            ],
            "additionalProperties": false,
            "properties": {
              "type": {
                "const": "in"
              },
              "field": {
                "type": "string",
                "title": "Colonne de filtre",
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/schema?calculated=false",
                    "itemKey": "data[\"key\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              },
              "values": {
                "type": "array",
                "title": "Valeurs",
                "items": {
                  "type": "string"
                },
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?q={q}&q_mode=complete&size=100&stringify=true",
                    "itemKey": "data[\"value\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              }
            }
          },
          {
            "title": "Restreindre à un interval de valeurs",
            "required": [
              "type",
              "field"
            ],
            "additionalProperties": false,
            "properties": {
              "type": {
                "const": "interval"
              },
              "field": {
                "type": "string",
                "title": "Colonne de filtre",
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/schema?calculated=false",
                    "itemKey": "data[\"key\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              },
              "minValue": {
                "type": "string",
                "title": "Valeur min",
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?sort=asc&${parent.data.field}_gte={q}&stringify=true",
                    "itemKey": "data[\"value\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              },
              "maxValue": {
                "type": "string",
                "title": "Valeur max",
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?sort=desc&${parent.data.field}_lte={q}&stringify=true",
                    "itemKey": "data[\"value\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              }
            }
          },
          {
            "title": "Exclure des valeurs",
            "required": [
              "type",
              "field",
              "values"
            ],
            "additionalProperties": false,
            "properties": {
              "type": {
                "const": "out"
              },
              "field": {
                "type": "string",
                "title": "Colonne de filtre",
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/schema?calculated=false",
                    "itemKey": "data[\"key\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              },
              "values": {
                "type": "array",
                "title": "Valeurs à exclure",
                "items": {
                  "type": "string"
                },
                "layout": {
                  "getItems": {
                    "url": "${rootData.datasets[0].href}/values-labels/${parent.data.field}?q={q}&q_mode=complete&size=100&stringify=true",
                    "itemKey": "data[\"value\"]",
                    "itemTitle": "data[\"label\"]"
                  }
                }
              }
            }
          }
        ]
      }
    },
    "filterField": {
      "type": "string",
      "title": "Colonne de filtre",
      "layout": {
        "getItems": {
          "url": "${rootData.datasets[0].href}/schema?calculated=false",
          "itemKey": "data[\"key\"]",
          "itemTitle": "data[\"label\"]"
        }
      }
    },
    "colorPalette": {
      "title": "Palette précalculée",
      "required": [
        "type",
        "name"
      ],
      "properties": {
        "type": {
          "const": "palette"
        },
        "name": {
          "type": "string",
          "oneOf": [
            {
              "const": "Accent",
              "title": "Accent"
            },
            {
              "const": "Dark2",
              "title": "Foncé"
            },
            {
              "const": "Paired",
              "title": "Paires"
            },
            {
              "const": "Set1",
              "title": "Ensemble 1"
            },
            {
              "const": "Set2",
              "title": "Ensemble 2"
            },
            {
              "const": "Set3",
              "title": "Ensemble 3"
            },
            {
              "const": "Pastel1",
              "title": "Pastel 1"
            },
            {
              "const": "Pastel2",
              "title": "Pastel 2"
            }
          ],
          "default": "Accent"
        },
        "offset": {
          "type": "integer",
          "title": "Décallage",
          "default": 0
        }
      }
    }
  },
  "$id": "_jl-resolved"
}