bdsa-react-components 0.1.2 → 0.1.4
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/CURSOR_INTEGRATION.md +139 -2
- package/dist/components/AnnotationManager/AnnotationManager.d.ts +54 -0
- package/dist/components/AnnotationManager/AnnotationManager.d.ts.map +1 -1
- package/dist/index.cjs +16 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5282 -5263
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CURSOR_INTEGRATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# bdsa-react-components - CURSOR Integration Guide
|
|
2
2
|
|
|
3
|
-
**Version:** 0.1.
|
|
3
|
+
**Version:** 0.1.4 | **Generated:** 2025-11-02T18:53:09.742Z
|
|
4
4
|
|
|
5
5
|
> This document provides everything Cursor needs to integrate and use the bdsa-react-components library.
|
|
6
6
|
> Copy this entire document into your project's .cursorrules or docs folder.
|
|
@@ -217,7 +217,77 @@ const fetchWithAuth = async (url: string, options?: RequestInit) => {
|
|
|
217
217
|
/>
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
-
### 2. SlideViewer with API-Fetched Annotations
|
|
220
|
+
### 2. SlideViewer with API-Fetched Annotations (RECOMMENDED)
|
|
221
|
+
|
|
222
|
+
**⭐ RECOMMENDED APPROACH:** Use `onAnnotationStateChange` - unified callback with complete state sync:
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
// Unified state - single state object for all annotation state
|
|
226
|
+
const [annotationState, setAnnotationState] = useState({
|
|
227
|
+
loadedIds: [] as string[],
|
|
228
|
+
opacities: new Map<string, number>(),
|
|
229
|
+
visibility: new Map<string, boolean>(),
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
const imageId = '6903df8dd26a6d93de19a9b2'
|
|
233
|
+
|
|
234
|
+
<>
|
|
235
|
+
<AnnotationManager
|
|
236
|
+
imageId={imageId}
|
|
237
|
+
apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
238
|
+
onAnnotationStateChange={(state) => {
|
|
239
|
+
// Single callback fires for all state changes (load, opacity, visibility)
|
|
240
|
+
// 70% less boilerplate than individual callbacks!
|
|
241
|
+
setAnnotationState({
|
|
242
|
+
loadedIds: state.loadedAnnotationIds,
|
|
243
|
+
opacities: state.opacities,
|
|
244
|
+
visibility: state.visibility,
|
|
245
|
+
})
|
|
246
|
+
}}
|
|
247
|
+
onAnnotationReady={(id) => {
|
|
248
|
+
// Shared handler - both components can use this
|
|
249
|
+
console.log('Annotation ready:', id)
|
|
250
|
+
}}
|
|
251
|
+
/>
|
|
252
|
+
<SlideViewer
|
|
253
|
+
imageInfo={{ dziUrl: `.../item/${imageId}/tiles/dzi.dzi` }}
|
|
254
|
+
annotationIds={annotationState.loadedIds}
|
|
255
|
+
annotationOpacities={annotationState.opacities}
|
|
256
|
+
visibleAnnotations={annotationState.visibility}
|
|
257
|
+
apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
258
|
+
onAnnotationReady={(id) => console.log('Annotation ready:', id)}
|
|
259
|
+
height="800px"
|
|
260
|
+
/>
|
|
261
|
+
</>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Alternative approach:** Using individual callbacks - more verbose but still supported:
|
|
265
|
+
|
|
266
|
+
```tsx
|
|
267
|
+
const [annotationIds, setAnnotationIds] = useState<string[]>([])
|
|
268
|
+
const [opacities, setOpacities] = useState(new Map<string, number>())
|
|
269
|
+
const imageId = '6903df8dd26a6d93de19a9b2'
|
|
270
|
+
|
|
271
|
+
<>
|
|
272
|
+
<AnnotationManager
|
|
273
|
+
imageId={imageId}
|
|
274
|
+
apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
275
|
+
onLoadedAnnotationIdsChange={(ids) => setAnnotationIds(ids)}
|
|
276
|
+
onAnnotationOpacityChange={(id, opacity) => {
|
|
277
|
+
setOpacities(prev => new Map(prev).set(id, opacity))
|
|
278
|
+
}}
|
|
279
|
+
/>
|
|
280
|
+
<SlideViewer
|
|
281
|
+
imageInfo={{ dziUrl: `.../item/${imageId}/tiles/dzi.dzi` }}
|
|
282
|
+
annotationIds={annotationIds}
|
|
283
|
+
annotationOpacities={opacities}
|
|
284
|
+
apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
285
|
+
height="800px"
|
|
286
|
+
/>
|
|
287
|
+
</>
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Legacy approach:** Using `onAnnotationsLoaded` - requires manual ID extraction:
|
|
221
291
|
|
|
222
292
|
```tsx
|
|
223
293
|
const [annotationIds, setAnnotationIds] = useState<string[]>([])
|
|
@@ -238,6 +308,12 @@ const imageId = '6903df8dd26a6d93de19a9b2'
|
|
|
238
308
|
</>
|
|
239
309
|
```
|
|
240
310
|
|
|
311
|
+
**Additional callbacks available (legacy - prefer `onAnnotationStateChange` for new code):**
|
|
312
|
+
|
|
313
|
+
- `onAnnotationLoad(id, data?)` - Fires when an annotation is loaded
|
|
314
|
+
- `onAnnotationHide(id)` - Fires when an annotation is hidden/unloaded
|
|
315
|
+
- `onAnnotationOpacityChange(id, opacity)` - Fires when opacity changes
|
|
316
|
+
|
|
241
317
|
### 3. FolderBrowser
|
|
242
318
|
|
|
243
319
|
```tsx
|
|
@@ -279,6 +355,67 @@ const imageId = '6903df8dd26a6d93de19a9b2'
|
|
|
279
355
|
- Ensure `dist/index.d.ts` exists in the library
|
|
280
356
|
- Restart TypeScript server in your editor (VS Code: Cmd+Shift+P → "TypeScript: Restart TS Server")
|
|
281
357
|
|
|
358
|
+
## Annotation Caching
|
|
359
|
+
|
|
360
|
+
The library includes automatic IndexedDB-based caching for annotation documents to speed up loading and reduce server requests.
|
|
361
|
+
|
|
362
|
+
### Auto-Enabled Caching
|
|
363
|
+
|
|
364
|
+
Both `AnnotationManager` and `SlideViewer` automatically create and use an `IndexedDBAnnotationCache` instance by default. This provides:
|
|
365
|
+
|
|
366
|
+
- **Persistent caching** across page refreshes (uses IndexedDB, 50MB+ capacity)
|
|
367
|
+
- **Automatic cache validation** using version hashes from annotation headers
|
|
368
|
+
- **Per-annotation cache indicators** (database icon) when cached
|
|
369
|
+
- **Per-annotation cache bypass** (refresh icon) to clear and reload specific annotations
|
|
370
|
+
|
|
371
|
+
### Disabling Cache
|
|
372
|
+
|
|
373
|
+
To disable caching globally for debugging:
|
|
374
|
+
|
|
375
|
+
```tsx
|
|
376
|
+
<AnnotationManager
|
|
377
|
+
imageId="..."
|
|
378
|
+
apiBaseUrl="..."
|
|
379
|
+
disableCache={true} // Disables all caching
|
|
380
|
+
/>
|
|
381
|
+
<SlideViewer
|
|
382
|
+
annotationIds={[...]}
|
|
383
|
+
disableCache={true} // Disables all caching
|
|
384
|
+
/>
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Cache Implementation
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
import { IndexedDBAnnotationCache, MemoryAnnotationCache } from 'bdsa-react-components'
|
|
391
|
+
|
|
392
|
+
// Use a specific cache implementation (optional)
|
|
393
|
+
const cache = new IndexedDBAnnotationCache()
|
|
394
|
+
<AnnotationManager annotationCache={cache} ... />
|
|
395
|
+
<SlideViewer annotationCache={cache} ... />
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Cache Utilities
|
|
399
|
+
|
|
400
|
+
```tsx
|
|
401
|
+
import { checkIndexedDBQuota, requestPersistentStorage, logQuotaInfo } from 'bdsa-react-components'
|
|
402
|
+
|
|
403
|
+
// Check cache quota and usage
|
|
404
|
+
const quotaInfo = await checkIndexedDBQuota()
|
|
405
|
+
if (quotaInfo) {
|
|
406
|
+
console.log(`Usage: ${quotaInfo.usagePercent.toFixed(1)}%`)
|
|
407
|
+
console.log(`Available: ${quotaInfo.available} bytes`)
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Request persistent storage (prevents browser cleanup)
|
|
411
|
+
await requestPersistentStorage()
|
|
412
|
+
|
|
413
|
+
// Log quota info in readable format
|
|
414
|
+
await logQuotaInfo()
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
**Note:** IndexedDB storage limits are automatically managed by the browser. When quota is exceeded, the browser will prompt the user for permission to expand storage.
|
|
418
|
+
|
|
282
419
|
## Dependencies
|
|
283
420
|
|
|
284
421
|
**Peer:** react ^18.0.0, react-dom ^18.0.0
|
|
@@ -47,6 +47,60 @@ export interface AnnotationManagerProps {
|
|
|
47
47
|
onAnnotationOpacityChange?: (annotationId: string, opacity: number) => void;
|
|
48
48
|
/** Callback when annotation has finished loading and is ready (called by SlideViewer after rendering) */
|
|
49
49
|
onAnnotationReady?: (annotationId: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Callback fired whenever the list of loaded annotation IDs changes.
|
|
52
|
+
* This is called when:
|
|
53
|
+
* - User clicks "Load" on an annotation
|
|
54
|
+
* - User clicks "Hide" on an annotation
|
|
55
|
+
* - Annotations are unloaded
|
|
56
|
+
*
|
|
57
|
+
* @param annotationIds - Array of currently loaded annotation IDs
|
|
58
|
+
*/
|
|
59
|
+
onLoadedAnnotationIdsChange?: (annotationIds: string[]) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Callback fired when an individual annotation is loaded.
|
|
62
|
+
* Useful for tracking which specific annotation was just loaded.
|
|
63
|
+
*
|
|
64
|
+
* @param annotationId - The ID of the annotation that was loaded
|
|
65
|
+
* @param annotationData - The full annotation document (optional, for performance)
|
|
66
|
+
*/
|
|
67
|
+
onAnnotationLoad?: (annotationId: string, annotationData?: unknown) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Callback fired when an individual annotation is hidden/unloaded.
|
|
70
|
+
*
|
|
71
|
+
* @param annotationId - The ID of the annotation that was hidden
|
|
72
|
+
*/
|
|
73
|
+
onAnnotationHide?: (annotationId: string) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Callback fired whenever annotation state changes.
|
|
76
|
+
* Provides complete state snapshot - annotation IDs, opacities, visibility, etc.
|
|
77
|
+
* This is the primary way to sync with SlideViewer and eliminates the need for
|
|
78
|
+
* multiple individual callbacks.
|
|
79
|
+
*
|
|
80
|
+
* This callback fires whenever:
|
|
81
|
+
* - An annotation is loaded/unloaded
|
|
82
|
+
* - Annotation opacity changes
|
|
83
|
+
* - Annotation visibility changes
|
|
84
|
+
*
|
|
85
|
+
* @param state - Complete annotation state snapshot
|
|
86
|
+
*/
|
|
87
|
+
onAnnotationStateChange?: (state: {
|
|
88
|
+
/** Array of currently loaded annotation IDs */
|
|
89
|
+
loadedAnnotationIds: string[];
|
|
90
|
+
/** Map of annotation ID -> opacity (0.0 to 1.0) */
|
|
91
|
+
opacities: Map<string, number>;
|
|
92
|
+
/** Map of annotation ID -> visibility (true = visible, false = hidden) */
|
|
93
|
+
visibility: Map<string, boolean>;
|
|
94
|
+
}) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Callback fired whenever any annotation opacity changes.
|
|
97
|
+
* Provides complete map of all opacities - convenience alternative to individual callbacks.
|
|
98
|
+
*
|
|
99
|
+
* This is a convenience callback. For complete state sync, use `onAnnotationStateChange` instead.
|
|
100
|
+
*
|
|
101
|
+
* @param opacities - Map of all annotation ID -> opacity values
|
|
102
|
+
*/
|
|
103
|
+
onAnnotationOpacitiesChange?: (opacities: Map<string, number>) => void;
|
|
50
104
|
/** Map of annotation IDs to their loaded state */
|
|
51
105
|
loadedAnnotations?: Set<string>;
|
|
52
106
|
/** Map of annotation IDs to their visibility state */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationManager.d.ts","sourceRoot":"","sources":["../../../src/components/AnnotationManager/AnnotationManager.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AnnotationManager.d.ts","sourceRoot":"","sources":["../../../src/components/AnnotationManager/AnnotationManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,yBAAyB,CAAA;AAEhC,MAAM,WAAW,sBAAsB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IAC1B,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wFAAwF;IACxF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnE,mGAAmG;IACnG,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,IAAI,CAAA;IACrE,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,kDAAkD;IAClD,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACxE,qDAAqD;IACrD,4BAA4B,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/E,+CAA+C;IAC/C,yBAAyB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3E,yGAAyG;IACzG,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD;;;;;;;;OAQG;IACH,2BAA2B,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC/D;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3E;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD;;;;;;;;;;;;OAYG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,+CAA+C;QAC/C,mBAAmB,EAAE,MAAM,EAAE,CAAA;QAC7B,mDAAmD;QACnD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,0EAA0E;QAC1E,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACnC,KAAK,IAAI,CAAA;IACV;;;;;;;OAOG;IACH,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IACtE,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC;sHACkH;IAClH,eAAe,CAAC,EAAE;QACd,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC1E,MAAM,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACxD,GAAG,IAAI,CAAA;IACR,gIAAgI;IAChI,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE;QACpC,WAAW,EAAE,sBAAsB,EAAE,CAAA;QACrC,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;QACnB,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC9B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACxC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACxC,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;QAC1C,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;QAChD,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QAC3D,iBAAiB,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;KAC7D,KAAK,KAAK,CAAC,SAAS,CAAC,CAAA;CACzB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,+FAgoB7B,CAAA"}
|