Skip to content

Commit bfdeeef

Browse files
committed
refactor(checks): on-demand log fetch with React Query and CL-scoped state
Fetch logs only for the selected build (SSE while building), replace manual batch fetch with React Query caching, cap CachedLogPanel mounts with LRU, and split index.tsx into useBuildSelection/useLogCache hooks. Scope buildId and logs to CL via atomFamily, sync ?tab=check&build= URL, remember last build per task, and add retry on log fetch errors.
1 parent 7fdfd73 commit bfdeeef

27 files changed

Lines changed: 1122 additions & 629 deletions

.github/workflows/web-deploy.yml

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,10 @@ jobs:
6161
with:
6262
registry-type: public
6363

64-
- name: Configure AWS Credentials (ECR Private, ap-southeast-2)
65-
uses: aws-actions/configure-aws-credentials@v4
66-
with:
67-
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
68-
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
69-
aws-region: ap-southeast-2
70-
71-
- name: Login to Amazon ECR Private
72-
id: login-ecr-private
73-
uses: aws-actions/amazon-ecr-login@v2
74-
with:
75-
registry-type: private
76-
7764
- name: Build & push unified image
7865
working-directory: moon
7966
env:
8067
ECR_PUBLIC_REGISTRY: ${{ steps.login-ecr-public.outputs.registry }}
81-
ECR_PRIVATE_REGISTRY: ${{ steps.login-ecr-private.outputs.registry }}
8268
PLATFORM: linux/amd64
8369
run: |
8470
set -euo pipefail
@@ -88,9 +74,7 @@ jobs:
8874
SHA_TAG="${SHORT_SHA}-${ARCH_SUFFIX}"
8975
9076
PUBLIC_IMAGE="$ECR_PUBLIC_REGISTRY/${{ env.REGISTRY_ALIAS }}/${{ env.REPOSITORY }}:$IMAGE_TAG"
91-
PRIVATE_IMAGE="$ECR_PRIVATE_REGISTRY/${{ env.REPOSITORY }}:$IMAGE_TAG"
9277
PUBLIC_IMAGE_SHA="$ECR_PUBLIC_REGISTRY/${{ env.REGISTRY_ALIAS }}/${{ env.REPOSITORY }}:$SHA_TAG"
93-
PRIVATE_IMAGE_SHA="$ECR_PRIVATE_REGISTRY/${{ env.REPOSITORY }}:$SHA_TAG"
9478
9579
docker buildx build \
9680
--platform "$PLATFORM" \
@@ -100,9 +84,7 @@ jobs:
10084
--sbom=false \
10185
-f apps/web/Dockerfile \
10286
-t "$PUBLIC_IMAGE" \
103-
-t "$PRIVATE_IMAGE" \
104-
-t "$PUBLIC_IMAGE_SHA" \
105-
-t "$PRIVATE_IMAGE_SHA" . \
87+
-t "$PUBLIC_IMAGE_SHA" . \
10688
--push
10789
10890
manifest:

docker/README.md

Lines changed: 66 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
- [Demo Walk-Through](#demo-walk-through)
88
- [Service Endpoints](#service-endpoints)
99
- [FAQ](#faq)
10-
- [Stopping & Cleanup](#stopping--cleanup)
11-
- [Log Streaming](#log-streaming)
10+
- [Stopping and Cleanup](#stopping-and-cleanup)
11+
- [View logs](#view-logs)
1212
- [Architecture Overview](#architecture-overview)
1313

1414
---
@@ -90,10 +90,23 @@ The main configurable environment variables include:
9090

9191
- **Service Images**:
9292
- `MEGA_ENGINE_IMAGE`: Mega backend image (default: `public.ecr.aws/m8q5m4u3/mega/mono-engine:latest`)
93-
- `MEGA_UI_IMAGE`: Mega UI image (default: `public.ecr.aws/m8q5m4u3/mega/mega-ui:demo-latest`)
93+
- `MEGA_UI_IMAGE`: Mega UI unified image (default: `public.ecr.aws/m8q5m4u3/mega/mega-ui:latest`)
9494
- `CAMPSITE_API_IMAGE`: Campsite API image (default: `public.ecr.aws/m8q5m4u3/mega/campsite-api:latest`)
95+
- `CAMPSITE_HOST_PORT`: Host port for Campsite API (default: `18080`, maps to container port `8080`; avoids conflict with local tools such as Cursor on `8080`)
9596
- `CAMPSITE_RUN_MIGRATIONS`: Whether to run database migrations when the container starts; `1` (default) to run, can be changed to `0` after the first successful migration to skip and speed up subsequent starts.
9697

98+
- **Mega UI Runtime URLs** (injected at container start; must be browser-reachable):
99+
- `NEXT_PUBLIC_API_URL`: Campsite API for the **browser** (default: `http://api.gitmono.local:18080`)
100+
- `NEXT_PUBLIC_INTERNAL_API_URL`: Campsite API for **Next.js SSR inside the mega_ui container** (default: `http://api.gitmono.local:8080` — Docker network alias + container port `8080`, not host port `18080`)
101+
- `NEXT_PUBLIC_MONO_API_URL`: Mega / mono API (default: `http://git.gitmono.local:8000`)
102+
- `NEXT_PUBLIC_ORION_API_URL`: Orion Server API (default: `http://orion.gitmono.local:8004`)
103+
- `NEXT_PUBLIC_AUTH_URL`: OAuth / auth endpoint (default: `http://auth.gitmono.local:18080`)
104+
- `NEXT_PUBLIC_WEB_URL`: Web UI origin (default: `http://app.gitmono.local`)
105+
- `NEXT_PUBLIC_SYNC_URL`: Real-time sync WebSocket URL (optional; leave empty if not used)
106+
- `NEXT_PUBLIC_CRATES_PRO_URL`: Crates Pro API URL (optional; leave empty if not used)
107+
108+
The UI image is **environment-agnostic**: it is built once with placeholder URLs and `docker-entrypoint.sh` rewrites them from the variables above when `mega_ui` starts. You no longer need per-environment image tags such as `demo-latest`.
109+
97110
- **RustFS Configuration**:
98111
- `RUSTFS_ACCESS_KEY`: RustFS access key (default: `rustfsadmin`)
99112
- `RUSTFS_SECRET_KEY`: RustFS secret key (default: `rustfsadmin`)
@@ -111,14 +124,23 @@ Execute in the project root directory:
111124
docker compose -f docker/demo/docker-compose.demo.yml up -d
112125
```
113126

127+
Or, if you maintain a local `.env` under `docker/demo/`:
128+
129+
```bash
130+
cd docker/demo
131+
docker compose -f docker-compose.demo.yml up -d
132+
```
133+
114134
This command will:
115135

116136
1. Pull the required Docker images (may take a long time for the first run)
117137
2. Create Docker networks and volumes
118138
3. Start all services in dependency order:
119139
- First, start infrastructure services (PostgreSQL, MySQL, Redis, RustFS)
120140
- Then, start application services (Mega, Orion Server, Campsite API)
121-
- Finally, start client services (Mega UI, Orion Build Client)
141+
- Finally, start `mega_ui`, which injects `NEXT_PUBLIC_*` URLs at container start and serves the web UI on port 80
142+
143+
On first `mega_ui` start you should see log lines such as `[entrypoint] injecting runtime environment` followed by `NEXT_PUBLIC_* applied` — that confirms the unified image picked up your demo URLs.
122144

123145
### 4. Check service status
124146

@@ -224,7 +246,7 @@ Log in with the following credentials:
224246
| **Mega UI** | <http://app.gitmono.local> | Web Frontend UI |
225247
| **Mega API** | <http://api.gitmono.local:8000> | Mega backend API |
226248
| **Orion Server** | <http://orion.gitmono.local:8004> | Orion build server API |
227-
| **Campsite API** | <http://api.gitmono.local:8080> | Campsite OAuth/SSO API |
249+
| **Campsite API** | <http://api.gitmono.local:18080> | Campsite OAuth/SSO API |
228250
| **PostgreSQL** | localhost:5432 | Database (used by Mega & Orion, mapped to host port 5432 in demo) |
229251
| **MySQL** | localhost:3306 | Database (used by Campsite API, mapped to host port 3306 in demo) |
230252
| **Redis** | localhost:6379 | Cache service (mapped to host port 6379 in demo) |
@@ -233,14 +255,32 @@ Log in with the following credentials:
233255

234256
### API Health Check Endpoints
235257

236-
- **Mega API**: `GET http://api.gitmono.lcoal:8000/api/v1/status`
258+
- **Mega API**: `GET http://api.gitmono.local:8000/api/v1/status`
237259
- **Orion Server**: `GET http://orion.gitmono.local:8004/v2/health`
238-
- **Campsite API**: `GET http://api.gitmono.local:8080/health`
260+
- **Campsite API**: `GET http://api.gitmono.local:18080/health`
239261

240262
---
241263

242264
## FAQ
243265

266+
### Mega UI points at wrong API URLs
267+
268+
**Problem**: After opening <http://app.gitmono.local>, API calls fail or target placeholder hostnames such as `rt-api.placeholder.local`.
269+
270+
**Cause**: The unified UI image did not receive `NEXT_PUBLIC_*` values at container start (older image without `docker-entrypoint.sh`, or missing environment block).
271+
272+
**Solution**:
273+
274+
1. Ensure `mega_ui` uses `public.ecr.aws/m8q5m4u3/mega/mega-ui:latest` (or a locally built unified image).
275+
2. Confirm `docker/demo/.env` includes the `NEXT_PUBLIC_*` block from `.env.example`, or rely on the defaults in `docker-compose.demo.yml`.
276+
3. Restart the UI container and check logs:
277+
278+
```bash
279+
docker compose -f docker/demo/docker-compose.demo.yml logs mega_ui | grep entrypoint
280+
```
281+
282+
You should see `NEXT_PUBLIC_* applied` for each configured variable.
283+
244284
### Port Conflict
245285

246286
**Issue**: Docker reports the port is already allocated
@@ -526,11 +566,28 @@ The demo environment includes the following services:
526566

527567
- **Application services**:
528568
- `mega`: Mega backend (Rust)
529-
- `mega_ui`: Mega Web UI (Next.js)
569+
- `mega_ui`: Mega Web UI (Next.js, unified image with runtime `NEXT_PUBLIC_*` injection)
530570
- `orion_server`: Orion build server (Rust)
531-
- `orion_build_client`: Orion build client (based on the orion-client image)
532571
- `campsite_api`: Campsite API (Ruby/Rails, built locally by default; if you have the encrypted development credentials configured you can pull the pre-built image directly via `CAMPSITE_API_IMAGE=public.ecr.aws/m8q5m4u3/mega/campsite-api:latest`)
533572

573+
### Mega UI: unified image + runtime configuration
574+
575+
Previously each environment shipped its own UI image tag (`demo-latest`, `gitmono-latest`, etc.) with URLs baked in at build time. The current flow uses **one** `mega-ui:latest` image for every environment:
576+
577+
1. **Build** (`moon/apps/web/Dockerfile`): compile with placeholder URLs from `moon/apps/web/.env.runtime`.
578+
2. **Start** (`moon/apps/web/docker-entrypoint.sh`): replace placeholders in the compiled assets with `NEXT_PUBLIC_*` values from the container environment, then run `node server.js`.
579+
3. **Configure locally**: set the `NEXT_PUBLIC_*` block in `docker/demo/.env` (see `.env.example`). Defaults in `docker-compose.demo.yml` already target the `gitmono.local` demo hostnames.
580+
581+
To build the UI image locally instead of pulling from ECR:
582+
583+
```bash
584+
./scripts/demo/build-demo-images-local.sh mega-ui
585+
# then in docker/demo/.env:
586+
# MEGA_UI_IMAGE=public.ecr.aws/m8q5m4u3/mega/mega-ui:latest-<arch>
587+
```
588+
589+
Replace `<arch>` with `arm64` or `amd64` to match your machine.
590+
534591
For a detailed architecture diagram and dependency list, see the [Mega / Orion Demo architecture design document](./mega-orion-demo-compose-arch.md).
535592

536593
---

docker/demo/.env.example

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,32 @@ S3_SECRET_ACCESS_KEY=rustfsadmin
5151
# You can override these to use local images or different tags
5252

5353
MEGA_ENGINE_IMAGE=public.ecr.aws/m8q5m4u3/mega/mono-engine:latest
54-
MEGA_UI_IMAGE=public.ecr.aws/m8q5m4u3/mega/mega-ui:demo-latest
54+
# Unified web image (same tag for all environments; URLs injected at container start).
55+
# Remote default: mega-ui:latest
56+
# Local build (build-demo-images-local.sh): mega-ui:latest-<arch> e.g. latest-arm64
57+
MEGA_UI_IMAGE=public.ecr.aws/m8q5m4u3/mega/mega-ui:latest
5558
ORION_SERVER_IMAGE=public.ecr.aws/m8q5m4u3/mega/orion-server:latest
5659
CAMPSITE_API_IMAGE=public.ecr.aws/m8q5m4u3/mega/campsite-api:latest
5760

61+
# ----------------------------------------------------------------------------
62+
# Mega UI Runtime Configuration (unified image)
63+
# ----------------------------------------------------------------------------
64+
# The web image is built once with placeholder URLs. docker-entrypoint.sh
65+
# rewrites them with these values when the container starts. URLs must be
66+
# reachable from the browser (use gitmono.local hostnames, not in-container
67+
# service names).
68+
69+
NEXT_PUBLIC_API_URL=http://api.gitmono.local:18080
70+
# Server-side (SSR) from mega_ui container — container network port, not host port
71+
NEXT_PUBLIC_INTERNAL_API_URL=http://api.gitmono.local:8080
72+
NEXT_PUBLIC_MONO_API_URL=http://git.gitmono.local:8000
73+
NEXT_PUBLIC_ORION_API_URL=http://orion.gitmono.local:8004
74+
NEXT_PUBLIC_AUTH_URL=http://auth.gitmono.local:18080
75+
NEXT_PUBLIC_WEB_URL=http://app.gitmono.local
76+
# Optional — leave empty when sync / crates-pro are not part of the demo stack
77+
NEXT_PUBLIC_SYNC_URL=
78+
NEXT_PUBLIC_CRATES_PRO_URL=
79+
5880
# ----------------------------------------------------------------------------
5981
# Mega Backend Service Configuration
6082
# ----------------------------------------------------------------------------
@@ -76,7 +98,7 @@ MEGA_LOG__PRINT_STD=true
7698
MEGA_BUILD__ENABLE_BUILD=true
7799
MEGA_BUILD__ORION_SERVER=http://orion_server:8004
78100

79-
MEGA_OAUTH__CAMPSITE_API_DOMAIN=http://api.gitmono.local:8080
101+
MEGA_OAUTH__CAMPSITE_API_DOMAIN=http://api.gitmono.local:18080
80102
MEGA_OAUTH__UI_DOMAIN=http://app.gitmono.local
81103
MEGA_OAUTH__COOKIE_DOMAIN=gitmono.local
82104
MEGA_OAUTH__ALLOWED_CORS_ORIGINS="http://app.gitmono.local"
@@ -100,6 +122,9 @@ ORION_MONOBASE_URL=http://mega:8000
100122
# Campsite API Configuration
101123
# ----------------------------------------------------------------------------
102124

125+
# Host port mapped to campsite_api container port 8080 (default 18080 to avoid local 8080 conflicts)
126+
CAMPSITE_HOST_PORT=18080
127+
103128
CAMPSITE_REDIS_URL=redis://redis:6379
104129
CAMPSITE_RAILS_ENV=demo
105130
CAMPSITE_SERVER_COMMAND=bundle exec puma

docker/demo/docker-compose.demo.yml

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,20 +201,33 @@ services:
201201
restart: "no"
202202

203203
# ---------------------------------------------------------------------------
204-
# Mega UI (Next.js)
204+
# Mega UI (Next.js, unified image)
205205
# ---------------------------------------------------------------------------
206-
# Use pre-built image from ECR Public: public.ecr.aws/m8q5m4u3/mega/mega-ui:{env}-latest
207-
# Available environments: staging, openatom, gitmono
208-
# Set MEGA_UI_IMAGE environment variable to use ECR image, or tag the ECR image as mega:mono-ui-latest-release
209-
# Default uses local tag (mega:mono-ui-latest-release) if ECR image is tagged locally
206+
# Single environment-agnostic image: built with placeholder URLs (.env.runtime)
207+
# and configured at container start by docker-entrypoint.sh using the
208+
# NEXT_PUBLIC_* variables below. Override MEGA_UI_IMAGE to pin a tag or use
209+
# a locally built image (see scripts/demo/build-demo-images-local.sh).
210210
mega_ui:
211-
image: ${MEGA_UI_IMAGE:-public.ecr.aws/m8q5m4u3/mega/mega-ui:demo-latest}
211+
image: ${MEGA_UI_IMAGE:-public.ecr.aws/m8q5m4u3/mega/mega-ui:latest}
212212
container_name: mega-demo-ui
213213
depends_on:
214214
mega:
215215
condition: service_healthy
216216
orion_server:
217217
condition: service_healthy
218+
environment:
219+
# Runtime injection for the unified web image (browser-facing URLs).
220+
# Browser-facing Campsite URL (host port 18080).
221+
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://api.gitmono.local:18080}
222+
# SSR / server-side calls from mega_ui run inside Docker; use container port 8080.
223+
NEXT_PUBLIC_INTERNAL_API_URL: ${NEXT_PUBLIC_INTERNAL_API_URL:-http://api.gitmono.local:8080}
224+
NEXT_PUBLIC_MONO_API_URL: ${NEXT_PUBLIC_MONO_API_URL:-http://git.gitmono.local:8000}
225+
NEXT_PUBLIC_ORION_API_URL: ${NEXT_PUBLIC_ORION_API_URL:-http://orion.gitmono.local:8004}
226+
NEXT_PUBLIC_AUTH_URL: ${NEXT_PUBLIC_AUTH_URL:-http://auth.gitmono.local:18080}
227+
NEXT_PUBLIC_WEB_URL: ${NEXT_PUBLIC_WEB_URL:-http://app.gitmono.local}
228+
# Optional: leave unset when the demo stack has no sync / crates-pro service.
229+
NEXT_PUBLIC_SYNC_URL: ${NEXT_PUBLIC_SYNC_URL:-}
230+
NEXT_PUBLIC_CRATES_PRO_URL: ${NEXT_PUBLIC_CRATES_PRO_URL:-}
218231
ports:
219232
# Container listens on 3000, host port is 80
220233
- "80:3000"
@@ -321,8 +334,8 @@ services:
321334
322335
exec ${CAMPSITE_SERVER_COMMAND:-bundle exec puma}
323336
ports:
324-
# Container listens on 8080, host port is 8080
325-
- "8080:8080"
337+
# Container listens on 8080; host port 18080 avoids conflict with Cursor / other local services on 8080
338+
- "${CAMPSITE_HOST_PORT:-18080}:8080"
326339
healthcheck:
327340
# Campsite API health check
328341
# NOTE: avoid curl dependency; use bash built-in /dev/tcp

docker/deployment/.env.example

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,25 @@ S3_SECRET_ACCESS_KEY=rustfsadmin
5151
# You can override these to use local images or different tags
5252

5353
MEGA_ENGINE_IMAGE=ghcr.io/web3infra-foundation/mono-engine:latest
54-
# waiting for next release for demo image
55-
MEGA_UI_IMAGE=public.ecr.aws/m8q5m4u3/mega/mega-ui:demo-latest
54+
# Unified web image (same tag for all environments; URLs injected at container start)
55+
MEGA_UI_IMAGE=public.ecr.aws/m8q5m4u3/mega/mega-ui:latest
5656
ORION_SERVER_IMAGE=ghcr.io/web3infra-foundation/orion-server:latest
5757
CAMPSITE_API_IMAGE=ghcr.io/web3infra-foundation/campsite-api:latest
5858

59+
# ----------------------------------------------------------------------------
60+
# Mega UI Runtime Configuration (unified image)
61+
# ----------------------------------------------------------------------------
62+
63+
NEXT_PUBLIC_API_URL=http://api.gitmono.local:18080
64+
# Server-side (SSR) from mega_ui container — container network port, not host port
65+
NEXT_PUBLIC_INTERNAL_API_URL=http://api.gitmono.local:8080
66+
NEXT_PUBLIC_MONO_API_URL=http://git.gitmono.local:8000
67+
NEXT_PUBLIC_ORION_API_URL=http://orion.gitmono.local:8004
68+
NEXT_PUBLIC_AUTH_URL=http://auth.gitmono.local:18080
69+
NEXT_PUBLIC_WEB_URL=http://app.gitmono.local
70+
NEXT_PUBLIC_SYNC_URL=
71+
NEXT_PUBLIC_CRATES_PRO_URL=
72+
5973
# ----------------------------------------------------------------------------
6074
# Mega Backend Service Configuration
6175
# ----------------------------------------------------------------------------
@@ -77,7 +91,7 @@ MEGA_LOG__PRINT_STD=true
7791
MEGA_BUILD__ENABLE_BUILD=true
7892
MEGA_BUILD__ORION_SERVER=http://orion_server:8004
7993

80-
MEGA_OAUTH__CAMPSITE_API_DOMAIN=http://api.gitmono.local:8080
94+
MEGA_OAUTH__CAMPSITE_API_DOMAIN=http://api.gitmono.local:18080
8195
MEGA_OAUTH__UI_DOMAIN=http://app.gitmono.local
8296
MEGA_OAUTH__COOKIE_DOMAIN=gitmono.local
8397
MEGA_OAUTH__ALLOWED_CORS_ORIGINS="http://app.gitmono.local"

moon/Caddyfile

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,30 @@
1+
# Local HTTPS reverse proxy for Next.js dev.
2+
#
3+
# Browser → Caddy (:443, HTTPS) → Next.js dev (127.0.0.1:80)
4+
#
5+
# Prerequisites:
6+
# 1. Add to /etc/hosts:
7+
# 127.0.0.1 local.xuanwu.openatom.cn
8+
# 2. TLS certs in this directory (moon/):
9+
# ./local.xuanwu.openatom.cn.pem
10+
# ./local.xuanwu.openatom.cn-key.pem
11+
# 3. Start Next.js dev on port 80 before Caddy.
12+
#
13+
# Usage (run from moon/):
14+
# sudo caddy run --config Caddyfile # foreground
15+
# sudo caddy start --config Caddyfile # background
16+
# sudo caddy stop
17+
# caddy validate --config Caddyfile
18+
# caddy fmt --overwrite Caddyfile
19+
#
20+
# Open: https://local.xuanwu.openatom.cn
121
{
2-
# Next.js dev already owns port 80, so don't let Caddy bind it for
3-
# the HTTP->HTTPS redirect vhost.
4-
auto_https disable_redirects
22+
# Next.js dev already owns port 80, so don't let Caddy bind it for
23+
# the HTTP->HTTPS redirect vhost.
24+
auto_https disable_redirects
525
}
626

727
https://local.xuanwu.openatom.cn {
8-
tls ./local.xuanwu.openatom.cn.pem ./local.xuanwu.openatom.cn-key.pem
9-
reverse_proxy 127.0.0.1:80
10-
}
28+
tls ./local.xuanwu.openatom.cn.pem ./local.xuanwu.openatom.cn-key.pem
29+
reverse_proxy 127.0.0.1:80
30+
}

moon/apps/web/components/ClView/components/Checks/LogViewer.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,24 @@ export function LogViewer({ text, height }: LogViewerProps) {
321321
</div>
322322
)
323323
}
324+
325+
/** Keep LogViewer mounted but visually hidden so Virtuoso retains scroll position. */
326+
export const CachedLogPanel = memo(function CachedLogPanel({
327+
text,
328+
height,
329+
visible
330+
}: LogViewerProps & { visible: boolean }) {
331+
return (
332+
<div
333+
className='absolute inset-0'
334+
style={{
335+
visibility: visible ? 'visible' : 'hidden',
336+
zIndex: visible ? 1 : 0,
337+
pointerEvents: visible ? 'auto' : 'none'
338+
}}
339+
aria-hidden={!visible}
340+
>
341+
<LogViewer text={text} height={height} />
342+
</div>
343+
)
344+
})

0 commit comments

Comments
 (0)