open-plant 1.4.5 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +36 -2
- package/dist/index.cjs +66 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3908 -3205
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/react/draw-layer-label.d.ts +1 -1
- package/dist/types/react/draw-layer-label.d.ts.map +1 -1
- package/dist/types/react/draw-layer-types.d.ts +1 -0
- package/dist/types/react/draw-layer-types.d.ts.map +1 -1
- package/dist/types/react/draw-layer.d.ts.map +1 -1
- package/dist/types/react/heatmap-layer.d.ts +93 -0
- package/dist/types/react/heatmap-layer.d.ts.map +1 -0
- package/dist/types/react/heatmap-webgl.d.ts +48 -0
- package/dist/types/react/heatmap-webgl.d.ts.map +1 -0
- package/dist/types/react/region-layer.d.ts.map +1 -1
- package/dist/types/react/viewer-context.d.ts +2 -1
- package/dist/types/react/viewer-context.d.ts.map +1 -1
- package/dist/types/react/wsi-viewer.d.ts.map +1 -1
- package/dist/types/wsi/wsi-tile-renderer.d.ts +1 -0
- package/dist/types/wsi/wsi-tile-renderer.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,17 @@ and this project follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
- `HeatmapLayer`: hotspot/density overlay for `WsiViewer` composition API.
|
|
12
|
+
- `HeatmapPointData` typed input (`count`, `positions`, optional `weights`).
|
|
13
|
+
- `scaleMode: "screen" | "fixed-zoom"` with optional `fixedZoom`.
|
|
14
|
+
- ROI clip support via `clipToRegions`.
|
|
15
|
+
- Visibility, opacity, gradient, blur/radius, z-index, render stats callback, and `maxRenderedPoints` CPU draw cap.
|
|
16
|
+
|
|
17
|
+
### Docs
|
|
18
|
+
- Updated README and EN/KO API/architecture docs for `HeatmapLayer`.
|
|
19
|
+
- Example app now demonstrates hotspot toggle + fixed-zoom lock behavior.
|
|
20
|
+
|
|
10
21
|
## [1.4.0] - 2026-03-16
|
|
11
22
|
|
|
12
23
|
### Added
|
package/README.md
CHANGED
|
@@ -153,6 +153,7 @@ draw mode에 진입하면 `setPointerCapture`로 입력을 독점해 팬(드래
|
|
|
153
153
|
| **포인트 크기 커스터마이즈** | `pointSizeByZoom` 객체로 zoom별 셀(px) 크기 지정 + 내부 선형 보간 |
|
|
154
154
|
| **포인트 내부 채움 제어** | `pointInnerFillOpacity`로 ring 내부 채움 강도 제어 |
|
|
155
155
|
| **포인트 렌더 모드 제어** | `pointData.fillModes`로 ring/solid 렌더링 제어 |
|
|
156
|
+
| **Heatmap overlay** | `HeatmapLayer`로 hotspot density overlay 렌더링. `screen` / `fixed-zoom` 커널 모드, ROI clip, visibility toggle, typed point+weight 입력 |
|
|
156
157
|
| **모바일 타겟 성능** | iPhone 15급 환경에서 수백만 cell 워크로드를 전제로 pan/zoom 응답성을 유지하도록 설계 |
|
|
157
158
|
| **드로잉 / ROI 도구** | Freehand · Rectangle · Circular · Brush + Stamp(사각형/원, mm² 지정) |
|
|
158
159
|
| **고정 픽셀 스탬프** | `stamp-rectangle-4096px` + `stampOptions.rectanglePixelSize` |
|
|
@@ -224,6 +225,8 @@ src/
|
|
|
224
225
|
└── react/
|
|
225
226
|
├── wsi-viewer.tsx # WsiTileRenderer + ViewerContext (권장 엔트리)
|
|
226
227
|
├── viewer-context.ts # rendererRef, worldToScreen, 오버레이 등록
|
|
228
|
+
├── heatmap-layer.tsx # hotspot / density heatmap layer orchestration
|
|
229
|
+
├── heatmap-webgl.ts # offscreen WebGL2 accumulation + colorize pass
|
|
227
230
|
├── point-layer.tsx # 포인트 데이터·클리핑·히트 테스트
|
|
228
231
|
├── region-layer.tsx # ROI Canvas2D
|
|
229
232
|
├── drawing-layer.tsx # 드로잉 툴 진입 시 오버레이
|
|
@@ -269,6 +272,7 @@ src/
|
|
|
269
272
|
```tsx
|
|
270
273
|
import {
|
|
271
274
|
DrawingLayer,
|
|
275
|
+
HeatmapLayer,
|
|
272
276
|
OverviewMap,
|
|
273
277
|
OverlayLayer,
|
|
274
278
|
PatchLayer,
|
|
@@ -280,6 +284,16 @@ import {
|
|
|
280
284
|
|
|
281
285
|
<WsiViewer source={source} viewState={vs} onViewStateChange={setVs} authToken={token} zoomSnaps={[...]} zoomSnapFitAsMin>
|
|
282
286
|
<PointLayer data={pointData} palette={palette} sizeByZoom={sizes} clipEnabled clipToRegions={rois} clipMode="worker" />
|
|
287
|
+
<HeatmapLayer
|
|
288
|
+
data={heatmapData}
|
|
289
|
+
visible
|
|
290
|
+
opacity={0.82}
|
|
291
|
+
radius={4}
|
|
292
|
+
blur={2}
|
|
293
|
+
scaleMode="fixed-zoom"
|
|
294
|
+
fixedZoom={source.maxTierZoom + Math.log2(Math.max(1e-6, vs.zoom))}
|
|
295
|
+
clipToRegions={rois}
|
|
296
|
+
/>
|
|
283
297
|
<RegionLayer regions={rois} ... />
|
|
284
298
|
<DrawingLayer tool={drawTool} ... />
|
|
285
299
|
<PatchLayer regions={patches} ... />
|
|
@@ -294,6 +308,7 @@ import {
|
|
|
294
308
|
| 컴포넌트 | 역할 |
|
|
295
309
|
|---|---|
|
|
296
310
|
| **PointLayer** | `WsiPointData` + 팔레트, zoom별 크기, ROI 클리핑(`clipMode`: `sync` / `worker` / `hybrid-webgpu`). `ref` → `queryAt(coord)` imperative hit |
|
|
311
|
+
| **HeatmapLayer** | `HeatmapPointData` 기반 hotspot/density 오버레이. `screen` / `fixed-zoom` 커널, optional `weights`, ROI clip, `onStats` |
|
|
297
312
|
| **RegionLayer** | ROI contour/라벨 Canvas2D, hover/active, hit-test |
|
|
298
313
|
| **DrawingLayer** | 드로잉 모드 진입·휠 줌 전달 등; 내부에서 **DrawLayer** 사용 |
|
|
299
314
|
| **DrawLayer** | 실제 freehand/rect/circle/brush/stamp 구현 |
|
|
@@ -302,7 +317,26 @@ import {
|
|
|
302
317
|
|
|
303
318
|
### `useViewerContext()`
|
|
304
319
|
|
|
305
|
-
`rendererRef`, `rendererSerial`, `source`, `worldToScreen`, `
|
|
320
|
+
`rendererRef`, `rendererSerial`, `source`, `worldToScreen`, `registerDrawCallback`, `overviewInvalidateRef`, interaction lock 등 — 커스텀 오버레이·미니맵에서 사용합니다.
|
|
321
|
+
|
|
322
|
+
### `<HeatmapLayer>`
|
|
323
|
+
|
|
324
|
+
현재 구현은 offscreen WebGL2 누적/컬러라이즈 후 공유 오버레이 캔버스에 합성하는 레이어입니다. `screen` 모드는 현재 화면 기준으로 level/정규화/커널을 선택하고, `fixed-zoom` 모드는 **continuous zoom** 기준(`source.maxTierZoom + log2(viewState.zoom)`)으로 잠근 시점의 heatmap state를 유지합니다. WebGL2 초기화에 실패하면 레이어는 warning을 남기고 렌더를 건너뜁니다.
|
|
325
|
+
|
|
326
|
+
| Prop | Type | Notes |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| `data` | `HeatmapPointData \| null` | `count`, `positions`, optional `weights` |
|
|
329
|
+
| `visible` | `boolean` | 독립 토글 |
|
|
330
|
+
| `opacity` | `number` | `0..1` |
|
|
331
|
+
| `radius` / `blur` | `number` | 커널 크기 (CSS px) |
|
|
332
|
+
| `gradient` | `readonly string[]` | 색상 stop 배열 |
|
|
333
|
+
| `backgroundColor` | `string \| null` | 기본 `null` |
|
|
334
|
+
| `scaleMode` | `"screen" \| "fixed-zoom"` | 최소 지원 모드 |
|
|
335
|
+
| `fixedZoom` | `number` | `scaleMode="fixed-zoom"`일 때의 continuous zoom 기준값 |
|
|
336
|
+
| `clipToRegions` | `WsiRegion[]` | ROI 내부로 mask + point filter |
|
|
337
|
+
| `maxRenderedPoints` | `number` | visible bin budget. 기본 `24000` |
|
|
338
|
+
| `zIndex` | `number` | 오버레이 draw priority |
|
|
339
|
+
| `onStats` | `(stats) => void` | point count / render time 등 |
|
|
306
340
|
|
|
307
341
|
### `<DrawLayer>` (단독 사용)
|
|
308
342
|
|
|
@@ -343,7 +377,7 @@ import {
|
|
|
343
377
|
|
|
344
378
|
| Export | 설명 |
|
|
345
379
|
|---|---|
|
|
346
|
-
| `WsiViewer`, `PointLayer`, `RegionLayer`, `DrawingLayer`, `DrawLayer`, `PatchLayer`, `OverlayLayer`, `OverviewMap`, `TileViewerCanvas` | React |
|
|
380
|
+
| `WsiViewer`, `PointLayer`, `HeatmapLayer`, `RegionLayer`, `DrawingLayer`, `DrawLayer`, `PatchLayer`, `OverlayLayer`, `OverviewMap`, `TileViewerCanvas` | React |
|
|
347
381
|
| `useViewerContext` | 컨텍스트 (`rendererRef`, `worldToScreen`, …) |
|
|
348
382
|
| `WsiTileRenderer`, `M1TileRenderer`, `TileScheduler` | 코어 렌더러·타일 큐 |
|
|
349
383
|
| `normalizeImageInfo`, `toTileUrl`, `toRoiGeometry`, `parseWkt` | 이미지/ROI/WKT |
|