Informazioni geografiche · Nuova risorsa

Sistema di design Esri Calcite.

Una guida pratica a Calcite per strumenti spaziali progettati per un uso mirato: superfici semantiche e azioni blu, pannelli di ispezione compatti, API reali per gli input e un esempio completo, eseguibile in locale, per la revisione di un sito.

Guida OpenDesign8 capitoli48 voci di riferimentoGuida applicativa originale
01

Anteprima dell’interfaccia di sistema di design Esri Calcite

Seleziona un sito dall’elenco o dallo schema, filtra gli stati di revisione e convalida una nota che resta associata al sito fino al ricaricamento.

Esamina siti fittizi e conserva note localiApri l’esempio completo
Interpretazione originale di HTML/CSS/JavaScript basata su riferimenti visivi documentati. L’illustrazione non è una mappa ArcGIS; non include runtime o font Esri. · Riferimento per l’implementazione
02

Riferimento di design di sistema di design Esri Calcite

Token di design di Calcite 4.1.0 e API del componente attuale, verificati insieme a Components 5.1.2. Il pacchetto dei token e quello dei componenti hanno numeri di versione distinti. L’esempio incorporato è un’interpretazione originale di HTML/CSS; non ridistribuisce il runtime di Calcite né dichiara di riprodurne il comportamento nativo.

Superfici, testo e interazioni del tema chiaro

Fonte
Nome / regolaValore / configurazioneUtilizzo
--calcite-color-surface-1#f7f7f7 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-surface-2#ffffff Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-surface-3#f2f2f2 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-surface-4#ebebeb Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-surface-highlight#d6efff Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-text-1#141414 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-text-2#4a4a4a Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-text-3#6b6b6b Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-text-inverse#ffffff Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-text-link#00619b Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-border-1#d4d4d4 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-border-2#dedede Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-border-3#ebebeb Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-border-input#949494 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-brand#007ac2 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-brand-hover#00619b Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.
--calcite-color-brand-press#004874 Riferimento semantico per il ruolo indicato dal token; la selezione e i bordi dei campi richiedono livelli di contrasto diversi.

Scala delle spaziature attuale

Fonte
Nome / regolaValore / configurazioneUtilizzo
--calcite-space-none0Famiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-px1pxFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-base2pxFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-2xs0.25remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-xs0.375remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-sm0.5remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-sm-plus0.625remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-md0.75remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-md-plus0.875remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-lg1remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-xl1.25remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-2xl1.5remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-3xl2remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.
--calcite-space-4xl2.75remFamiglia attuale di token per la spaziatura. Gli incrementi in rem seguono la dimensione radice; evita di mescolarli con alias di spaziatura deprecati.

Scala tipografica e dei raggi degli angoli

Fonte
Nome / regolaValore / configurazioneUtilizzo
--calcite-corner-radius-none0Valori pubblicati, non misure dedotte da uno screenshot.
--calcite-corner-radius-xs2pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-corner-radius-sm4pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-corner-radius-pill9999pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-xs10pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-sm12pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size14pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-md16pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-lg18pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-xl20pxValori pubblicati, non misure dedotte da uno screenshot.
--calcite-font-size-2xl24pxValori pubblicati, non misure dedotte da uno screenshot.

Componente di input API

Fonte
Nome / regolaValore / configurazioneUtilizzo
scales / m / l; default mModifica intenzionalmente la scala del componente; non equivale a cambiare lo zoom della pagina.
statusidle / valid / invalidComunica la validità del campo con un messaggio, non solo con il colore.
labelTextstringTesto dell’etichetta visibile nell’attuale input API.
validationMessagestringSpiega l’errore di inserimento accanto al controllo.
calciteInputInputeventLeggi event.target.value mentre l’utente digita.
setFocus()Promise<void>Dopo un errore di convalida dell’applicazione, sposta il focus sul componente nativo.
03

Guida completa di sistema di design Esri Calcite

Una guida pratica per scegliere, applicare e valutare questo sistema in un’interfaccia reale.

DESIGN-esri-calcite.md

Indicazioni complete, un punto di partenza per l’implementazione e link alle fonti.

Scarica la guida

Architettura di sistema di design Esri Calcite per aree di lavoro e pannelli

Mantieni visibile il contesto dell’oggetto

Un’attività spaziale ha di solito almeno due contesti: l’area esaminata e l’oggetto selezionato. L’esempio affianca un piccolo elenco di siti a uno schema originale e a un pannello di ispezione. Selezionando una riga dell’elenco o un pin si imposta lo stesso ID stabile del sito, così il nome, lo stato e la nota non possono riferirsi per errore a oggetti diversi.

Da questa guida su OpenDesign

Distingui l’illustrazione da una mappa reale

L’SVG mostra la relazione tra un elenco e una superficie spaziale. Non contiene proiezioni, coordinate, livelli, zoom, geocodifica né instradamento. La didascalia visibile lo definisce uno schema non in scala. Una vista ArcGIS di produzione richiede una propria integrazione con SDK, dati e interventi di accessibilità; un contenitore Calcite da solo non offre queste funzionalità.

Ruoli semantici dei colori di sistema di design Esri Calcite

Usa le superfici per separare gli strumenti senza ricorrere a riquadri marcati

Il riferimento distingue surface-1, surface-2, surface-3 e surface-4, riservando surface-highlight all’enfasi. L’esempio usa un pannello di ispezione bianco su uno sfondo bianco sporco, sobrio, e una riga selezionata azzurro pallido. Bordi neutri sottili delimitano i pannelli senza aggiungere un riquadro sospeso attorno a ogni campo.

Attribuisci al blu un significato coerente nelle interazioni

I colori del brand, di hover e di pressione formano una sequenza progressivamente più scura: da #007ac2 a #00619b e #004874. Il pin selezionato e l’azione primaria di salvataggio usano questa famiglia per ruoli di interazione diversi. Gli stati di revisione testuali e il messaggio di convalida della nota restano comprensibili anche senza fare affidamento soltanto sul colore.

Tipografia e densità informativa di sistema di design Esri Calcite

Mantieni la gerarchia delle informazioni in formato ridotto

I riferimenti tipografici assoluti pubblicati includono testo piccolo da 12px, testo base da 14px, testo medio da 16px e testo extra-large da 20px. L’esempio abbina un titolo dell’area di lavoro da 20px a intestazioni dei pannelli da 16px e controlli da 14px. I metadati sono più piccoli, ma non sono mai l’unico elemento che identifica l’oggetto selezionato.

Distingui un font di fallback da quello del brand

Questo esempio indipendente usa Arial e font di sistema di fallback. Non include font con il brand Esri né definisce Avenir tale font di fallback. Un’integrazione nativa autorizzata deve seguire le risorse e la configurazione del tema della versione di Calcite fissata. La modifica del font può influire sulle interruzioni di riga e sulla larghezza dei controlli: verifica quindi le risorse effettivamente distribuite.

Token di spaziatura e pannelli adattivi di sistema di design Esri Calcite

Scegli i nomi attuali dei token

Il riferimento usa la scala attuale --calcite-space-*, che combina valori in pixel per gli incrementi più piccoli e valori in rem per quelli più ampi. Per implementare un tema nativo, usa questi ruoli denominati in modo coerente. Il layout dell’applicazione in questo esempio usa valori CSS espliciti, così l’interpretazione può funzionare senza importare pacchetti con accesso limitato.

Ridispone il pannello di ispezione prima di comprimere il campo

Comportamento di selezione e filtraggio di sistema di design Esri Calcite

Usa un unico identificatore per la selezione

L’elenco e lo schema condividono la selezione tramite A-01, B-02 e C-03, non in base alla posizione corrente negli array. Filtrando per Checked viene selezionato il sito corrispondente disponibile e il pannello di ispezione si aggiorna di conseguenza. Gli stati di pressione sono esposti sia sul pulsante della riga nell’elenco sia sul pin corrispondente.

Tieni separate le note salvate dalle bozze non salvate

Una nota salvata viene archiviata in una Map indicizzata per ID del sito. Tornando al sito, la nota viene ripristinata; cambiando sito senza salvare, il testo non salvato viene sostituito. Il testo di supporto specifica esplicitamente che i dati sono locali. Un editor di produzione dovrebbe proteggere le modifiche non salvate se la perdita di una bozza comporta conseguenze rilevanti.

Convalida dell’input e recupero in sistema di design Esri Calcite

Quando adotti Calcite, usa l’effettivo input nativo API

L’esempio nativo usa labelText, value, status e validationMessage. L’evento calciteInputInput può rimuovere un errore non più attuale, mentre setFocus() riporta l’attenzione sul componente dopo l’esito negativo di una regola applicativa. Questi sono nomi pubblici di API, diversamente dall’accesso allo shadow root per trovare un input interno.

Non confondere una conferma locale con la persistenza di un servizio

L’anteprima indipendente richiede almeno dieci caratteri dopo aver rimosso gli spazi iniziali e finali e limita il campo a 240 caratteri. La conferma identifica il sito e specifica che il salvataggio è locale. Ricaricando la pagina, le note vengono cancellate. Una versione connessa alla rete richiederebbe comportamenti per attesa, errore, nuovo tentativo e conflitti; il messaggio di salvataggio locale non ne implica nessuno.

  1. Prova a salvare una nota vuota o breve e leggi l’errore.
  2. Inserisci una nota più lunga, salvala, seleziona un altro sito e poi torna al precedente.
  3. Ricarica la pagina per verificare che l’esempio non prometta la persistenza dei dati.

Alternative spaziali accessibili in sistema di design Esri Calcite

Fornisci un’alternativa in forma di elenco per ogni pin

Ogni pin interattivo ha un pulsante testuale nell’elenco dei siti. La mappa illustrata non è quindi l’unico modo per selezionare un oggetto. Il relativo SVG ha una descrizione concisa, mentre i controlli hanno nomi propri e indicatori di focus visibili. Una mappa reale richiede più di una semplice copia del testo alternativo dello schema.

Posiziona la convalida accanto al campo

La textarea fa riferimento sia al testo di supporto sia all’errore tramite aria-describedby. In caso di errore, riceve aria-invalid e il focus; quando si modifica il testo, lo stato di errore obsoleto viene rimosso. La conferma usa un’area di stato. Gli utenti da tastiera possono selezionare un sito, inserire una nota e salvarla senza interagire con una forma geografica disegnata.

Esri Calcite Versione del sistema di design e limiti di integrazione

Blocca le versioni dei pacchetti e verifica i requisiti di licenza

Components 5.1.2 e design tokens 4.1.0 sono pacchetti distinti. La pagina delle licenze attuale descrive la disponibilità con un account ArcGIS Online, Enterprise o Location Platform. Non applicare al pacchetto attuale ipotesi basate su una precedente versione open source. Il codice sorgente nativo qui sotto è destinato a un progetto che soddisfa tali requisiti.

  • Components: 5.1.2.
  • Riferimento dei design token: 4.1.0.
  • Anteprima: HTML, CSS e JavaScript indipendenti; nessun runtime Esri.

Registra solo i componenti che utilizzi

Esri Calcite Esempi di componenti del sistema di design

Esempio indipendente per l’ispezione dei siti

Esempio completo e autonomo di HTML, CSS e JavaScript utilizzato da questa anteprima. Salvalo come index.html e aprilo in un browser.

html
<!doctype html>
<html lang="en">
  <meta charset="utf-8" /><meta
    name="viewport"
    content="width=device-width,initial-scale=1"
  /><title>Site inspection panel</title
  ><style>
    * {
      box-sizing: border-box;
    }
    body {
      margin: 0;
      font:
        14px/1.5 Arial,
        sans-serif;
      color: #141414;
      background: #f7f7f7;
    }
    button,
    input,
    select,
    textarea {
      font: inherit;
    }
    button {
      cursor: pointer;
    }
    button:focus-visible,
    input:focus-visible,
    select:focus-visible,
    textarea:focus-visible {
      outline: 2px solid #007ac2;
      outline-offset: 3px;
    }
    header {
      padding: 20px 24px;
      background: #fff;
      border-bottom: 1px solid #d4d4d4;
      display: flex;
      justify-content: space-between;
      gap: 16px;
      align-items: center;
    }
    h1 {
      font-size: 20px;
      margin: 0;
    }
    header p {
      margin: 2px 0 0;
      color: #6b6b6b;
      font-size: 12px;
    }
    .badge {
      background: #d6efff;
      color: #004874;
      padding: 4px 8px;
      font-size: 12px;
    }
    .layout {
      display: grid;
      grid-template-columns: 240px minmax(0, 1fr) 280px;
      min-height: 510px;
    }
    .sites,
    .inspector {
      background: #fff;
      padding: 20px;
      border-right: 1px solid #d4d4d4;
    }
    .inspector {
      border-right: 0;
      border-left: 1px solid #d4d4d4;
    }
    h2 {
      font-size: 16px;
      margin: 0 0 16px;
    }
    label {
      display: block;
      font-weight: 600;
      margin: 12px 0 6px;
    }
    select,
    textarea {
      width: 100%;
      border: 1px solid #949494;
      background: #fff;
      padding: 8px;
      color: inherit;
    }
    textarea {
      resize: vertical;
      min-height: 96px;
    }
    .site {
      display: block;
      width: 100%;
      text-align: left;
      background: #fff;
      border: 1px solid #dedede;
      padding: 12px;
      margin-top: 8px;
    }
    .site[aria-pressed="true"] {
      border-left: 4px solid #007ac2;
      background: #d6efff;
    }
    .site small {
      display: block;
      color: #4a4a4a;
      margin-top: 3px;
    }
    .map {
      position: relative;
      overflow: hidden;
      min-height: 360px;
      background: #ebebe5;
    }
    .map svg {
      width: 100%;
      height: 100%;
      position: absolute;
      inset: 0;
    }
    .map-caption {
      position: absolute;
      bottom: 12px;
      left: 12px;
      padding: 4px 8px;
      background: #fff;
      font-size: 12px;
    }
    .pin {
      position: absolute;
      width: 36px;
      height: 36px;
      border-radius: 50%;
      border: 3px solid #fff;
      background: #007ac2;
      color: #fff;
      font-weight: bold;
      box-shadow: 0 2px 8px #0004;
    }
    .pin[aria-pressed="true"] {
      background: #004874;
      outline: 3px solid #007ac2;
      outline-offset: 3px;
    }
    .pin[hidden] {
      display: none;
    }
    dl {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
      font-size: 12px;
    }
    dt {
      color: #6b6b6b;
    }
    dd {
      margin: 0;
      text-align: right;
    }
    .primary {
      background: #007ac2;
      color: white;
      border: 0;
      width: 100%;
      padding: 10px;
      margin-top: 12px;
    }
    .primary:hover {
      background: #00619b;
    }
    .error {
      color: #a11b1b;
      font-size: 12px;
    }
    .saved {
      color: #237000;
      font-size: 12px;
    }
    footer {
      padding: 16px 24px;
      border-top: 1px solid #d4d4d4;
      color: #6b6b6b;
      font-size: 12px;
      background: #fff;
    }
    @media (max-width: 1000px) {
      .layout {
        grid-template-columns: 210px minmax(0, 1fr);
      }
      .inspector {
        grid-column: 1/-1;
        border-left: 0;
        border-top: 1px solid #d4d4d4;
      }
      .inspector form {
        max-width: 640px;
      }
    }
    @media (max-width: 550px) {
      header {
        align-items: flex-start;
        flex-direction: column;
      }
      .layout {
        display: flex;
        flex-direction: column;
      }
      .sites {
        border-right: 0;
      }
      .map {
        height: 300px;
        min-height: 300px;
      }
      .inspector {
        padding: 20px;
      }
      .site {
        display: inline-block;
        width: 100%;
      }
    }
  </style>
  <body>
    <header>
      <div>
        <h1>Field inspection workspace</h1>
        <p>Original Calcite-inspired layout study · fictional site data</p>
      </div>
      <span class="badge">Local notes only</span>
    </header>
    <main class="layout">
      <aside class="sites">
        <h2>Inspection sites</h2>
        <label for="filter">Show sites</label
        ><select id="filter">
          <option value="all">All sites</option>
          <option value="review">Needs review</option>
          <option value="checked">Checked</option>
        </select>
        <div id="site-list"></div>
        <p id="count" aria-live="polite"></p>
      </aside>
      <section class="map" aria-label="Illustrated site plan">
        <svg
          viewBox="0 0 700 510"
          preserveAspectRatio="xMidYMid slice"
          role="img"
          aria-label="Original schematic with a river, roads and three inspection sites; not a geographic map"
        >
          <rect width="700" height="510" fill="#e4e8db" />
          <path
            d="M480 -50Q230 110 440 260T360 570"
            fill="none"
            stroke="#b6dbe9"
            stroke-width="100"
          />
          <path
            d="M-20 150L720 280M160 -20L290 530M-20 400L720 80"
            stroke="#fff"
            stroke-width="22"
          />
          <path
            d="M-20 150L720 280M160 -20L290 530M-20 400L720 80"
            stroke="#c8c8bf"
            stroke-width="2"
          />
          <g fill="#c4cfb5">
            <rect x="50" y="50" width="100" height="70" />
            <rect x="510" y="340" width="130" height="80" />
            <rect x="80" y="260" width="70" height="60" />
          </g>
        </svg>
        <div id="pins"></div>
        <span class="map-caption">Schematic illustration · not to scale</span>
      </section>
      <aside class="inspector">
        <h2 id="site-title">North access</h2>
        <dl>
          <dt>Site ID</dt>
          <dd id="site-id"></dd>
          <dt>Review state</dt>
          <dd id="site-state"></dd>
        </dl>
        <form id="note-form" novalidate>
          <label for="note">Inspection note</label
          ><textarea
            id="note"
            aria-describedby="note-help error"
            maxlength="240"
          ></textarea>
          <p id="note-help">
            Add 10–240 characters. Notes stay in this page until reload.
          </p>
          <p id="error" class="error" hidden>
            Write at least 10 characters before saving.
          </p>
          <button class="primary" type="submit">Save local note</button>
          <p id="saved" class="saved" role="status"></p>
        </form>
      </aside>
    </main>
    <footer>
      Independent HTML/CSS interpretation by OpenDesign. No Calcite runtime,
      Esri fonts, ArcGIS map or service is loaded.
    </footer>
    <script>
      const sites = [
        { id: "A-01", name: "North access", state: "review", x: 29, y: 24 },
        { id: "B-02", name: "River crossing", state: "review", x: 62, y: 48 },
        { id: "C-03", name: "South garden", state: "checked", x: 34, y: 76 },
      ];
      let selected = "A-01";
      const notes = new Map(),
        list = document.querySelector("#site-list"),
        pins = document.querySelector("#pins"),
        filter = document.querySelector("#filter"),
        note = document.querySelector("#note"),
        error = document.querySelector("#error"),
        saved = document.querySelector("#saved");
      function render() {
        const visible = sites.filter(
          (s) => filter.value === "all" || s.state === filter.value,
        );
        if (!visible.some((s) => s.id === selected)) selected = visible[0]?.id;
        list.replaceChildren();
        pins.replaceChildren();
        for (const s of visible) {
          const b = document.createElement("button");
          b.type = "button";
          b.className = "site";
          b.setAttribute("aria-pressed", String(s.id === selected));
          b.textContent = s.name;
          const small = document.createElement("small");
          small.textContent =
            s.id + " · " + (s.state === "review" ? "Needs review" : "Checked");
          b.append(small);
          b.onclick = () => {
            selected = s.id;
            render();
          };
          list.append(b);
          const pin = document.createElement("button");
          pin.type = "button";
          pin.className = "pin";
          pin.style.left = s.x + "%";
          pin.style.top = s.y + "%";
          pin.textContent = s.id[0];
          pin.setAttribute("aria-label", "Select " + s.name);
          pin.setAttribute("aria-pressed", String(s.id === selected));
          pin.onclick = b.onclick;
          pins.append(pin);
        }
        const s = sites.find((s) => s.id === selected);
        document.querySelector("#count").textContent =
          visible.length + " sites shown";
        document.querySelector("#site-title").textContent = s.name;
        document.querySelector("#site-id").textContent = s.id;
        document.querySelector("#site-state").textContent =
          s.state === "review" ? "Needs review" : "Checked";
        note.value = notes.get(s.id) || "";
        error.hidden = true;
        note.removeAttribute("aria-invalid");
        saved.textContent = "";
      }
      filter.onchange = render;
      note.oninput = () => {
        error.hidden = true;
        note.removeAttribute("aria-invalid");
        saved.textContent = "";
      };
      document.querySelector("#note-form").onsubmit = (e) => {
        e.preventDefault();
        const value = note.value.trim();
        if (value.length < 10) {
          error.hidden = false;
          note.setAttribute("aria-invalid", "true");
          note.focus();
          return;
        }
        notes.set(selected, value);
        saved.textContent = "Note saved locally for " + selected + ".";
      };
      render();
    </script>
  </body>
</html>

Riferimento del codice

  • Schema originale e comportamento dell’applicazione. Non sono inclusi SDK per mappe, dati remoti o runtime Esri.

Alternativa nativa per Calcite Input

Sostituisci src/main.js in un progetto Vite vanilla il cui index.html contenga <div id="app"></div>.

js
import "@esri/calcite-components/components/calcite-input";
import "@esri/calcite-components/components/calcite-button";

document.querySelector("#app").innerHTML = `
  <calcite-input id="inspection-note" label-text="Inspection note"
    validation-message="Enter at least ten characters"></calcite-input>
  <calcite-button id="save-note">Validate note</calcite-button>
  <p id="result" role="status"></p>`;
const field = document.querySelector("#inspection-note");
const result = document.querySelector("#result");
field.addEventListener("calciteInputInput", () => {
  field.status = "idle";
  result.textContent = "";
});
document.querySelector("#save-note").addEventListener("click", async () => {
  if (field.value.trim().length < 10) {
    field.status = "invalid";
    await field.setFocus();
    return;
  }
  field.status = "valid";
  result.textContent = "The note passes the local rule. Nothing was sent.";
});

Riferimento del codice

  • Installa @esri/[email protected] dopo aver verificato i requisiti di licenza attuali. Questa alternativa è stata verificata con API; l’anteprima indipendente qui sopra è l’esempio testato nel browser.
04

Esri Calcite Configurazione dell’agente per il sistema di design

Punto di partenza per l’implementazione

Il pacchetto di componenti nativi richiede un account ArcGIS idoneo secondo le condizioni di licenza attuali. Se ospiti autonomamente le risorse dei componenti, verifica i requisiti relativi ai percorsi degli asset.

sh
# Independent specimen: save the complete HTML example as index.html.
# Native alternative for an appropriately licensed project:
npm create vite@latest calcite-note -- --template vanilla
cd calcite-note
npm install
npm install @esri/[email protected]
# Replace src/main.js with the native input example.
npm run dev

Un prompt per il tuo progetto

Prompt per l’agente
Crea un’area di lavoro mirata per l’ispezione spaziale usando i riferimenti Calcite. Mantieni coerente l’ID dell’oggetto selezionato tra l’elenco e il pannello di ispezione, rendi espliciti gli stati testuali e distingui le note locali dalla persistenza nel servizio. Parti dall’interpretazione autonoma oppure scegli consapevolmente il percorso con componenti nativi soggetto a licenza. Non descrivere lo schema originale come una mappa ArcGIS.
05

Esri Calcite Fonti e ambito del sistema di design

Guida applicativa OpenDesign. L’esempio illustrato è realizzato in modo indipendente e usa dati di fantasia. L’uso attuale di Calcite è regolato dalle licenze Esri e richiede un account ArcGIS idoneo; l’esempio di integrazione nativa è un’alternativa per progetti con licenza appropriata, non il runtime di questa anteprima.