mirror of
https://github.com/meshtastic/web.git
synced 2026-07-31 06:56:28 -04:00
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.*`.
40 lines
2.5 KiB
TypeScript
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";
|