
# Champs structurés et média

Six types de champs qui stockent une valeur plus façonnée qu'une chaîne ou un nombre : données imbriquées, listes, couleurs, code source, coordonnées et codes scannables. Tous partagent les [propriétés de base des champs](/fr/docs/tables-overview#proprits-de-base-des-champs).

| Type          | Stocke                                       |
| ------------- | -------------------------------------------- |
| `json`        | Des données JSON structurées.                |
| `array`       | Une liste de valeurs.                        |
| `color`       | Une valeur de couleur hexadécimale.          |
| `code`        | Du code source avec coloration syntaxique.   |
| `geolocation` | Des coordonnées latitude/longitude.          |
| `barcode`     | Une valeur de code-barres (catégorie média). |

Pour les types dérivés et interactifs — `formula`, `count`, `autonumber`, `button` — voir [Champs calculés et d'action](/fr/docs/advanced-fields).

## `json`

Stocke des données JSON structurées.

| Propriété | Description                           |
| --------- | ------------------------------------- |
| `schema`  | Objet optionnel, accepté et conservé. |

```yaml
- { id: 5, name: metadata, type: json, required: false }
```

:::callout
**`schema` ne valide rien.** Il est déclaré comme un objet vide dans le schéma du champ : n'importe quel objet est donc accepté, et aucune sémantique JSON Schema n'est appliquée à la valeur stockée. Validez la forme dans une automatisation ou à la frontière applicative si cela compte.
:::

## `array`

Stocke une liste de valeurs.

| Propriété  | Description                                      |
| ---------- | ------------------------------------------------ |
| `itemType` | Type de données des éléments (par ex. `string`). |
| `maxItems` | Nombre maximal d'éléments (entier ≥ 1).          |

```yaml
- { id: 6, name: tags, type: array, itemType: string, maxItems: 10 }
```

`maxItems` est appliqué ; `itemType` est une chaîne non contrainte : il documente donc l'intention plutôt qu'il ne restreint ce qui peut être stocké.

## `color`

Stocke une couleur au format hexadécimal, rendue avec un sélecteur de couleur.

| Propriété | Description                                                             |
| --------- | ----------------------------------------------------------------------- |
| `default` | Couleur par défaut, valeur hexadécimale à 6 chiffres précédée d'un `#`. |

```yaml
- { id: 7, name: brand_color, type: color, required: true, default: '#3B82F6' }
```

C'est le seul champ de cette page doté d'une véritable vérification de format : `default` doit correspondre à un `#` suivi d'exactement six chiffres hexadécimaux. La forme abrégée à trois chiffres (`#3BF`) et les couleurs nommées (`red`) sont rejetées au décodage de la configuration.

## `code`

Stocke du code source en texte brut, édité avec coloration syntaxique (CodeMirror 6).

| Propriété     | Description                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------ |
| `language`    | **Obligatoire.** Langage pour la coloration (par ex. `javascript`, `typescript`, `yaml`, `json`, `python`, `sql`). |
| `lineNumbers` | Booléen. Afficher les numéros de ligne.                                                                            |
| `readOnly`    | Booléen. Rendre l'éditeur en lecture seule.                                                                        |
| `minLines`    | Nombre minimal de lignes visibles (entier ≥ 1).                                                                    |
| `maxLines`    | Nombre maximal de lignes visibles avant défilement (entier ≥ 1).                                                   |
| `tabSize`     | Taille de tabulation en espaces. Entier de **1 à 8**.                                                              |

```yaml
- { id: 8, name: snippet, type: code, language: typescript, lineNumbers: true, tabSize: 2 }
```

`language` est obligatoire mais non contraint — les valeurs listées sont celles qui bénéficient d'une coloration, et une chaîne inconnue ou vide passe malgré tout la validation. `tabSize` n'a pas de valeur par défaut dans le schéma ; l'éditeur retombe sur `2` lorsque le champ l'omet.

## `geolocation`

Stocke des coordonnées géographiques (latitude et longitude) pour les fonctionnalités de localisation. Il ne prend aucune propriété spécifique au-delà des propriétés de base des champs.

```yaml
- { id: 9, name: office_location, type: geolocation, required: true }
```

## `barcode`

Stocke une valeur de code-barres pour l'identification de produits et l'inventaire. Il appartient à la catégorie média aux côtés des [champs pièce jointe](/fr/docs/attachment-fields), et est documenté ici avec les autres champs de valeur spécialisés.

| Propriété | Description                                          |
| --------- | ---------------------------------------------------- |
| `format`  | Format du code-barres (par ex. `EAN-13`, `CODE128`). |

```yaml
- { id: 10, name: product_barcode, type: barcode, required: true, format: EAN-13 }
```

`format` est une chaîne non contrainte : elle consigne la symbologie employée par la valeur, et rien ne vérifie la valeur contre elle.

## Pages connexes

- [Champs calculés et d'action](/fr/docs/advanced-fields) — `formula`, `count`, `autonumber`, `button`.
- [Champs pièce jointe](/fr/docs/attachment-fields) — les deux autres membres de la catégorie média.
- [Présentation des types de champs](/fr/docs/field-types-overview) — tous les types par catégorie.
- [Présentation des tables](/fr/docs/tables-overview) — les propriétés de base communes à tous les champs.
- [Validation de table](/fr/docs/table-validation) — imposer une forme là où le schéma du champ ne le fait pas.
