

### `formatETA` [#formateta]

Formats time remaining in seconds to a human-readable string with hours, minutes, and seconds.

```tsx
import { formatETA } from "@tilt-legal/cubitt-components/utilities/formatters";

formatETA(30); // "30s"
formatETA(90); // "1m 30s"
formatETA(330); // "5m 30s"
formatETA(3660); // "1h 1m"
formatETA(7200); // "2h"
```

| Parameter | Type     | Description               |
| --------- | -------- | ------------------------- |
| `seconds` | `number` | Time remaining in seconds |

***

### `formatSpeed` [#formatspeed]

Formats upload/download speed in bytes per second to a human-readable string with appropriate unit.

```tsx
import { formatSpeed } from "@tilt-legal/cubitt-components/utilities/formatters";

formatSpeed(1024); // "1 KB/s"
formatSpeed(1572864); // "1.50 MB/s"
formatSpeed(10485760); // "10 MB/s"
formatSpeed(0); // "0 B/s"
```

| Parameter        | Type     | Description                  |
| ---------------- | -------- | ---------------------------- |
| `bytesPerSecond` | `number` | Upload/download speed in B/s |

***

### `formatUploadProgress` [#formatuploadprogress]

Calculates and formats upload progress as both a percentage and a descriptive text string.

```tsx
import { formatUploadProgress } from "@tilt-legal/cubitt-components/utilities/formatters";

formatUploadProgress(512000, 1024000);
// { percentage: 50, text: "50% (500 KB / 1 MB)" }

formatUploadProgress(1024000, 1024000);
// { percentage: 100, text: "100% (1 MB / 1 MB)" }

formatUploadProgress(0, 5242880);
// { percentage: 0, text: "0% (0 B / 5 MB)" }
```

| Parameter | Type     | Description           |
| --------- | -------- | --------------------- |
| `loaded`  | `number` | Bytes uploaded so far |
| `total`   | `number` | Total bytes to upload |
