Skip to content

optimatica-meters-react

React компонент MeterPhotoAnalyzer с тем же UX, что и Vue-версия. Поддерживает несколько фото за один раз (до 10): мультивыбор файлов, drag-and-drop пачкой и дозапись кадров с камеры.

Playground

Попробуйте компонент в браузере: React SDK Playground.

Установка

bash
npm install optimatica-meters-react optimatica-meters

Peer dependencies: react, react-dom (^18 || ^19)

Использование

tsx
import { MeterPhotoAnalyzer } from 'optimatica-meters-react'
import 'optimatica-meters-react/style.css'

export function App() {
  return (
    <MeterPhotoAnalyzer
      apiKey="eyJhbGci..."
      onSuccess={(result) => console.log(result.meter)}
    />
  )
}

Props

PropТипПо умолчаниюОписание
apiKeystringAPI-ключ (JWT)
showApiKeyInputbooleanautoПоле ввода ключа
showRawJsonbooleanfalseПоказать сырой JSON-ответ
disabledbooleanfalseОтключить UI
theme'light' | 'dark' | 'auto''auto'Цветовая тема. auto следует prefers-color-scheme
loadFontsbooleanfalseПодгрузить шрифты дизайна (Space Grotesk, IBM Plex) с Google Fonts

Темы и шрифты

Виджет поставляется в двух темах из дизайна — тёмной и светлой. theme="auto" (по умолчанию) следует prefers-color-scheme:

tsx
<MeterPhotoAnalyzer apiKey={apiKey} theme="dark" />

Типографика построена на Space Grotesk (заголовки) и IBM Plex Mono/Sans. По умолчанию используется системный стек со шрифтовыми фолбэками без внешних запросов. Для точного вида макета подключите шрифты на своей странице либо передайте loadFonts — виджет один раз добавит <link> на Google Fonts.

Callbacks

CallbackPayload
onAnalyzeStartFile (по разу на каждое отправленное фото)
onSuccess{ success: true, meter } (по разу на каждый распознанный счётчик)
onErrorstring
onComplete(response, error)response есть только при единственном фото
onResultsAnalyzeMeterResponse[] — массив результатов по всем фото

Hook

tsx
import { useMeterAnalyze } from 'optimatica-meters-react'

const { isLoading, response, responses, error, analyze, analyzeMany, reset } =
  useMeterAnalyze()

// одно фото
await analyze(file)
// несколько фото
await analyzeMany([file1, file2])

responses — массив результатов по всем фото; response хранит единственный результат (или null при пакетной отправке).

Стили

tsx
import 'optimatica-meters-react/style.css'

Возможности UI

  • Вкладки «Загрузка» / «Камера»
  • Drag-and-drop
  • getUserMedia + захват кадра
  • Мобильная галерея через <input capture="environment">

MIT License