Files
web/packages/sdk-react/mod.ts
Dan Ditomaso f0eaf4da8b feat(sdk,web): live connect-progress overlay (terminal-style log)
Surfaces what the connection handshake is doing in real time. Per DDD,
the predicate + counters live in the SDK; the web overlay is a thin
consumer of the signal.

SDK
- New `MeshClient.progress: ReadonlySignal<ConnectionProgress>` with the
  state machine `idle → configuring → configured`. Counters
  (config / modules / channels / nodes + boolean myInfo / metadata)
  tally inbound packets each `configure()` cycle.
- `configure()` resets to `configuring` with empty counters.
  `onConfigComplete` flips to `configured`.
- `ConnectionProgress` + `ConnectionProgressCounters` exported from the
  package surface.
- 6 new tests in `MeshClient.progress.test.ts`.

sdk-react
- `useConnectionProgress()` hook reads the active client's signal,
  returns `{ phase: "idle" }` when there is no active client so the
  caller can render unconditionally.

apps/web
- `ConnectingOverlay` redesigned as a terminal-style streaming log:
  - macOS-window-style header (red/yellow/green dots) with a live
    `phase` indicator pulse.
  - Monospace event lines with `→` (active) / `✓` (done) / `•` (info)
    glyphs and a relative-seconds timestamp column.
  - Auto-scrolls to the latest entry; blinking caret on the trailing
    active line.
  - Lines derive from `device.connectionPhase` transitions and per-
    counter bumps on `MeshClient.progress`. Resets on each fresh
    connect cycle.
- Mounted at the top of the device tree (outside the device-conditional
  branch) so it shows during a first-time connect from the Connections
  screen as well as reconnects from inside the app.
- i18n strings under `connections.overlay.log.*`.
2026-05-02 08:26:18 -04:00

40 lines
2.5 KiB
TypeScript

export { MeshProvider } from "./src/provider/MeshProvider.tsx";
export type { MeshProviderProps } from "./src/provider/MeshProvider.tsx";
export { MeshContext } from "./src/provider/MeshContext.ts";
export { MeshRegistryProvider } from "./src/provider/MeshRegistryProvider.tsx";
export type { MeshRegistryProviderProps } from "./src/provider/MeshRegistryProvider.tsx";
export { MeshRegistryContext } from "./src/provider/MeshRegistryContext.ts";
export { useClient } from "./src/adapters/useClient.ts";
export { useClientById } from "./src/adapters/useClientById.ts";
export { useActiveClient } from "./src/adapters/useActiveClient.ts";
export { useMeshRegistry, useOptionalMeshRegistry } from "./src/adapters/useMeshRegistry.ts";
export { useSignal } from "./src/adapters/useSignal.ts";
export { useSignalValue } from "./src/adapters/useSignalValue.ts";
export { useMeshDevice } from "./src/hooks/useMeshDevice.ts";
export type { UseMeshDeviceResult } from "./src/hooks/useMeshDevice.ts";
export { useConnection } from "./src/hooks/useConnection.ts";
export type { UseConnectionResult } from "./src/hooks/useConnection.ts";
export { useChat } from "./src/hooks/useChat.ts";
export type { UseChatResult } from "./src/hooks/useChat.ts";
export { useDirectChat } from "./src/hooks/useDirectChat.ts";
export type { UseDirectChatResult } from "./src/hooks/useDirectChat.ts";
export { useDraft } from "./src/hooks/useDraft.ts";
export type { UseDraftResult } from "./src/hooks/useDraft.ts";
export { useHasNodeError, useNodeError, useNodeErrors } from "./src/hooks/useNodeError.ts";
export { useNodes } from "./src/hooks/useNodes.ts";
export { useNode } from "./src/hooks/useNode.ts";
export { useChannels, useChannel } from "./src/hooks/useChannels.ts";
export { useConfig, useIsRegionUnset, useModuleConfig } from "./src/hooks/useConfig.ts";
export { useConfigEditor } from "./src/hooks/useConfigEditor.ts";
export { useConnectionProgress } from "./src/hooks/useConnectionProgress.ts";
export { useTotalUnread, useUnreadByKey, useUnreadCount } from "./src/hooks/useUnread.ts";
export { useTelemetry } from "./src/hooks/useTelemetry.ts";
export type { UseTelemetryResult } from "./src/hooks/useTelemetry.ts";
export { usePosition } from "./src/hooks/usePosition.ts";
export { useTraceroute } from "./src/hooks/useTraceroute.ts";
export { useFileTransfer } from "./src/hooks/useFileTransfer.ts";
export { useFavoriteNode } from "./src/hooks/useFavoriteNode.ts";
export { useIgnoreNode } from "./src/hooks/useIgnoreNode.ts";