bdsa-react-components 0.1.21 → 0.1.25
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 +31 -0
- package/CURSOR_INTEGRATION.md +25 -3
- package/INTEGRATION.md +0 -0
- package/README.md +0 -0
- package/dist/auth/DsaAuthProvider.d.ts +92 -0
- package/dist/auth/DsaAuthProvider.d.ts.map +1 -0
- package/dist/auth/DsaAuthStore.d.ts +5 -0
- package/dist/auth/DsaAuthStore.d.ts.map +1 -1
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/types.d.ts +43 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/bdsa-schema.json +896 -0
- package/dist/components/DsaAuthManager/DsaAuthManager.d.ts +49 -4
- package/dist/components/DsaAuthManager/DsaAuthManager.d.ts.map +1 -1
- package/dist/components/DsaErrorBoundary/DsaErrorBoundary.d.ts +73 -0
- package/dist/components/DsaErrorBoundary/DsaErrorBoundary.d.ts.map +1 -0
- package/dist/components/DsaErrorBoundary/index.d.ts +3 -0
- package/dist/components/DsaErrorBoundary/index.d.ts.map +1 -0
- package/dist/components/FolderBrowser/FolderBrowser.d.ts.map +1 -1
- package/dist/components/FolderBrowser/FolderBrowser.types.d.ts +139 -2
- package/dist/components/FolderBrowser/FolderBrowser.types.d.ts.map +1 -1
- package/dist/components/FolderBrowser/useFolderBrowserDataFetching.d.ts +2 -0
- package/dist/components/FolderBrowser/useFolderBrowserDataFetching.d.ts.map +1 -1
- package/dist/components/FolderThumbnailBrowser/FolderThumbnailBrowser.d.ts +30 -0
- package/dist/components/FolderThumbnailBrowser/FolderThumbnailBrowser.d.ts.map +1 -1
- package/dist/components/ProtocolManager/ProtocolCard.d.ts +8 -0
- package/dist/components/ProtocolManager/ProtocolCard.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolContext.d.ts +46 -0
- package/dist/components/ProtocolManager/ProtocolContext.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolList.d.ts +8 -0
- package/dist/components/ProtocolManager/ProtocolList.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolManager.d.ts +38 -0
- package/dist/components/ProtocolManager/ProtocolManager.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolManager.types.d.ts +139 -0
- package/dist/components/ProtocolManager/ProtocolManager.types.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolModal.d.ts +10 -0
- package/dist/components/ProtocolManager/ProtocolModal.d.ts.map +1 -0
- package/dist/components/ProtocolManager/ProtocolsTab.d.ts +10 -0
- package/dist/components/ProtocolManager/ProtocolsTab.d.ts.map +1 -0
- package/dist/components/ProtocolManager/adapters/DsaSyncAdapter.d.ts +76 -0
- package/dist/components/ProtocolManager/adapters/DsaSyncAdapter.d.ts.map +1 -0
- package/dist/components/ProtocolManager/storage/protocolStorage.d.ts +39 -0
- package/dist/components/ProtocolManager/storage/protocolStorage.d.ts.map +1 -0
- package/dist/components/ProtocolManager/testData.d.ts +23 -0
- package/dist/components/ProtocolManager/testData.d.ts.map +1 -0
- package/dist/components/ProtocolManager/utils/schemaValidator.d.ts +99 -0
- package/dist/components/ProtocolManager/utils/schemaValidator.d.ts.map +1 -0
- package/dist/components/SlideViewer/SlideViewer.d.ts +1 -1
- package/dist/components/SlideViewer/SlideViewer.d.ts.map +1 -1
- package/dist/components/SlideViewer/SlideViewer.types.d.ts +254 -21
- package/dist/components/SlideViewer/SlideViewer.types.d.ts.map +1 -1
- package/dist/components/SlideViewer/hooks/index.d.ts +2 -0
- package/dist/components/SlideViewer/hooks/index.d.ts.map +1 -1
- package/dist/components/SlideViewer/hooks/useAnnotationFetching.d.ts +2 -1
- package/dist/components/SlideViewer/hooks/useAnnotationFetching.d.ts.map +1 -1
- package/dist/components/SlideViewer/hooks/useOverlayTileSources.d.ts +9 -0
- package/dist/components/SlideViewer/hooks/useOverlayTileSources.d.ts.map +1 -0
- package/dist/components/SlideViewer/hooks/useViewportChange.d.ts +14 -0
- package/dist/components/SlideViewer/hooks/useViewportChange.d.ts.map +1 -0
- package/dist/components/ThumbnailGrid/ThumbnailGrid.d.ts +30 -0
- package/dist/components/ThumbnailGrid/ThumbnailGrid.d.ts.map +1 -1
- package/dist/index.cjs +55 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19916 -17906
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/utils/apiErrorHandling.d.ts +44 -0
- package/dist/utils/apiErrorHandling.d.ts.map +1 -0
- package/dist/utils/patchOsdPaperjs.d.ts.map +1 -1
- package/package.json +3 -3
- package/patches/osd-paperjs-annotation+0.4.14.patch +0 -0
|
@@ -2,19 +2,64 @@ import { default as React } from 'react';
|
|
|
2
2
|
|
|
3
3
|
export interface DsaAuthManagerProps {
|
|
4
4
|
/**
|
|
5
|
-
* Callback
|
|
5
|
+
* Callback function that fires whenever the authentication status changes.
|
|
6
|
+
*
|
|
7
|
+
* @param isAuthenticated - `true` if user is logged in, `false` otherwise
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <DsaAuthManager
|
|
12
|
+
* onAuthChange={(isAuthenticated) => {
|
|
13
|
+
* console.log('Auth status:', isAuthenticated)
|
|
14
|
+
* // Update your app state, redirect, etc.
|
|
15
|
+
* }}
|
|
16
|
+
* />
|
|
17
|
+
* ```
|
|
6
18
|
*/
|
|
7
19
|
onAuthChange?: (isAuthenticated: boolean) => void;
|
|
8
20
|
/**
|
|
9
|
-
*
|
|
21
|
+
* Whether to show server URL configuration in the login modal.
|
|
22
|
+
*
|
|
23
|
+
* - `true` (default): Users can enter/change the DSA server URL
|
|
24
|
+
* - `false`: Server URL is locked (must be configured programmatically via `dsaAuthStore`)
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* // Allow users to configure server
|
|
31
|
+
* <DsaAuthManager allowServerConfig={true} />
|
|
32
|
+
*
|
|
33
|
+
* // Lock server URL (pre-configured)
|
|
34
|
+
* <DsaAuthManager allowServerConfig={false} />
|
|
35
|
+
* ```
|
|
10
36
|
*/
|
|
11
37
|
allowServerConfig?: boolean;
|
|
12
38
|
/**
|
|
13
|
-
* Custom class name
|
|
39
|
+
* Custom CSS class name to apply to the component container.
|
|
40
|
+
* Useful for styling integration with your application.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <DsaAuthManager className="my-custom-auth-manager" />
|
|
45
|
+
* ```
|
|
14
46
|
*/
|
|
15
47
|
className?: string;
|
|
16
48
|
/**
|
|
17
|
-
* Show compact version (minimal UI)
|
|
49
|
+
* Show compact version of the component (minimal UI).
|
|
50
|
+
* Ideal for toolbars, headers, or space-constrained layouts.
|
|
51
|
+
*
|
|
52
|
+
* Compact mode shows:
|
|
53
|
+
* - Status indicator icon
|
|
54
|
+
* - User name (if authenticated)
|
|
55
|
+
* - Login/Logout button
|
|
56
|
+
*
|
|
57
|
+
* @default false
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* <DsaAuthManager compact={true} />
|
|
62
|
+
* ```
|
|
18
63
|
*/
|
|
19
64
|
compact?: boolean;
|
|
20
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DsaAuthManager.d.ts","sourceRoot":"","sources":["../../../src/components/DsaAuthManager/DsaAuthManager.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"DsaAuthManager.d.ts","sourceRoot":"","sources":["../../../src/components/DsaAuthManager/DsaAuthManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,sBAAsB,CAAA;AAE7B,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmJxD,CAAA;AAwGD,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { default as React, Component, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface DsaErrorBoundaryProps {
|
|
4
|
+
/** Child components to wrap */
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
/** Custom fallback UI component. Receives error and reset function. */
|
|
7
|
+
fallback?: (error: Error, reset: () => void) => ReactNode;
|
|
8
|
+
/** Callback when an error is caught */
|
|
9
|
+
onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
|
|
10
|
+
/** Whether to show a "Retry" button (default: true) */
|
|
11
|
+
showRetry?: boolean;
|
|
12
|
+
/** Custom error message title */
|
|
13
|
+
errorTitle?: string;
|
|
14
|
+
/** Custom error message description */
|
|
15
|
+
errorDescription?: string;
|
|
16
|
+
/** Custom CSS class */
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
interface DsaErrorBoundaryState {
|
|
20
|
+
hasError: boolean;
|
|
21
|
+
error: Error | null;
|
|
22
|
+
errorInfo: React.ErrorInfo | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error Boundary component for catching and displaying React errors gracefully.
|
|
26
|
+
*
|
|
27
|
+
* This component catches JavaScript errors anywhere in the child component tree,
|
|
28
|
+
* logs those errors, and displays a fallback UI instead of crashing the entire app.
|
|
29
|
+
*
|
|
30
|
+
* @example Basic usage
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <DsaErrorBoundary>
|
|
33
|
+
* <FolderBrowser apiBaseUrl={apiBaseUrl} />
|
|
34
|
+
* </DsaErrorBoundary>
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example With custom fallback
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <DsaErrorBoundary
|
|
40
|
+
* fallback={(error, reset) => (
|
|
41
|
+
* <div>
|
|
42
|
+
* <h2>Something went wrong</h2>
|
|
43
|
+
* <p>{error.message}</p>
|
|
44
|
+
* <button onClick={reset}>Try Again</button>
|
|
45
|
+
* </div>
|
|
46
|
+
* )}
|
|
47
|
+
* >
|
|
48
|
+
* <SlideViewer imageInfo={imageInfo} />
|
|
49
|
+
* </DsaErrorBoundary>
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example With error callback
|
|
53
|
+
* ```tsx
|
|
54
|
+
* <DsaErrorBoundary
|
|
55
|
+
* onError={(error, errorInfo) => {
|
|
56
|
+
* // Log to error reporting service
|
|
57
|
+
* logErrorToService(error, errorInfo)
|
|
58
|
+
* }}
|
|
59
|
+
* >
|
|
60
|
+
* <ThumbnailGrid apiBaseUrl={apiBaseUrl} />
|
|
61
|
+
* </DsaErrorBoundary>
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare class DsaErrorBoundary extends Component<DsaErrorBoundaryProps, DsaErrorBoundaryState> {
|
|
65
|
+
constructor(props: DsaErrorBoundaryProps);
|
|
66
|
+
static getDerivedStateFromError(error: Error): Partial<DsaErrorBoundaryState>;
|
|
67
|
+
componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
|
|
68
|
+
handleReset: () => void;
|
|
69
|
+
render(): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
70
|
+
private isApiError;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=DsaErrorBoundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DsaErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/DsaErrorBoundary/DsaErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,wBAAwB,CAAA;AAE/B,MAAM,WAAW,qBAAqB;IAClC,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAA;IACnB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAA;IACzD,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;IAC5D,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,qBAAqB;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;gBAC7E,KAAK,EAAE,qBAAqB;IASxC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQ7E,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;IAe1D,WAAW,aAMV;IAED,MAAM;IA2EN,OAAO,CAAC,UAAU;CAGrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DsaErrorBoundary/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderBrowser.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/FolderBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAKnG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"FolderBrowser.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/FolderBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAKnG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,2FAuvBzB,CAAA"}
|
|
@@ -1,35 +1,94 @@
|
|
|
1
|
+
import { ApiErrorHandler } from '../../utils/apiErrorHandling';
|
|
1
2
|
import { default as React } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Represents a DSA Collection - a top-level container for organizing folders and items.
|
|
6
|
+
* Collections are the root organizational unit in the DSA hierarchy.
|
|
7
|
+
*/
|
|
2
8
|
export interface Collection {
|
|
9
|
+
/** Unique identifier for the collection */
|
|
3
10
|
_id: string;
|
|
11
|
+
/** Display name of the collection */
|
|
4
12
|
name: string;
|
|
13
|
+
/** Optional description of the collection */
|
|
5
14
|
description?: string;
|
|
15
|
+
/** Whether the collection is publicly accessible */
|
|
6
16
|
public?: boolean;
|
|
17
|
+
/** ISO timestamp when the collection was created */
|
|
7
18
|
created?: string;
|
|
19
|
+
/** ISO timestamp when the collection was last updated */
|
|
8
20
|
updated?: string;
|
|
21
|
+
/** Additional properties that may be present on the collection */
|
|
9
22
|
[key: string]: unknown;
|
|
10
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Represents a DSA Folder - a container within a collection or another folder.
|
|
26
|
+
* Folders can contain subfolders and items, creating a hierarchical structure.
|
|
27
|
+
*/
|
|
11
28
|
export interface Folder {
|
|
29
|
+
/** Unique identifier for the folder */
|
|
12
30
|
_id: string;
|
|
31
|
+
/** Display name of the folder */
|
|
13
32
|
name: string;
|
|
33
|
+
/** Optional description of the folder */
|
|
14
34
|
description?: string;
|
|
35
|
+
/** Whether the folder is publicly accessible */
|
|
15
36
|
public?: boolean;
|
|
37
|
+
/** ISO timestamp when the folder was created */
|
|
16
38
|
created?: string;
|
|
39
|
+
/** ISO timestamp when the folder was last updated */
|
|
17
40
|
updated?: string;
|
|
41
|
+
/** ID of the parent resource (collection or folder) */
|
|
18
42
|
parentId?: string;
|
|
43
|
+
/** Type of the parent resource */
|
|
19
44
|
parentType?: 'collection' | 'folder';
|
|
45
|
+
/** Additional properties that may be present on the folder */
|
|
20
46
|
[key: string]: unknown;
|
|
21
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Represents a DSA Item - a file or document stored in the DSA.
|
|
50
|
+
* Items are the leaf nodes in the DSA hierarchy and cannot contain other resources.
|
|
51
|
+
*/
|
|
22
52
|
export interface Item {
|
|
53
|
+
/** Unique identifier for the item */
|
|
23
54
|
_id: string;
|
|
55
|
+
/** Display name of the item */
|
|
24
56
|
name: string;
|
|
57
|
+
/** Optional description of the item */
|
|
25
58
|
description?: string;
|
|
59
|
+
/** ID of the folder containing this item */
|
|
26
60
|
folderId?: string;
|
|
61
|
+
/** ID of the collection containing this item (if directly in a collection) */
|
|
27
62
|
collectionId?: string;
|
|
63
|
+
/** Whether the item is publicly accessible */
|
|
28
64
|
public?: boolean;
|
|
65
|
+
/** ISO timestamp when the item was created */
|
|
29
66
|
created?: string;
|
|
67
|
+
/** ISO timestamp when the item was last updated */
|
|
30
68
|
updated?: string;
|
|
69
|
+
/** Additional properties that may be present on the item */
|
|
31
70
|
[key: string]: unknown;
|
|
32
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* A discriminated union type representing any DSA resource (collection, folder, or item).
|
|
74
|
+
* The `type` field allows TypeScript to narrow the type correctly.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```tsx
|
|
78
|
+
* function handleResource(resource: Resource) {
|
|
79
|
+
* if (resource.type === 'collection') {
|
|
80
|
+
* // TypeScript knows resource is a Collection here
|
|
81
|
+
* console.log('Collection:', resource.name)
|
|
82
|
+
* } else if (resource.type === 'folder') {
|
|
83
|
+
* // TypeScript knows resource is a Folder here
|
|
84
|
+
* console.log('Folder:', resource.name)
|
|
85
|
+
* } else {
|
|
86
|
+
* // TypeScript knows resource is an Item here
|
|
87
|
+
* console.log('Item:', resource.name)
|
|
88
|
+
* }
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
33
92
|
export type Resource = (Collection | Folder | Item) & {
|
|
34
93
|
type: 'collection' | 'folder' | 'item';
|
|
35
94
|
};
|
|
@@ -48,9 +107,40 @@ export interface FolderBrowserProps {
|
|
|
48
107
|
onSelectionChange?: (resource: Resource) => void;
|
|
49
108
|
/** Whether to show collections (default: true) */
|
|
50
109
|
showCollections?: boolean;
|
|
51
|
-
/**
|
|
110
|
+
/**
|
|
111
|
+
* Root collection or folder ID to start from.
|
|
112
|
+
* When provided, the component will navigate directly to and display only this resource and its children.
|
|
113
|
+
* This is useful for:
|
|
114
|
+
* - Deep linking to a specific folder/collection
|
|
115
|
+
* - Starting at a default or "home" folder
|
|
116
|
+
* - Restricting the view to a specific subtree
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```tsx
|
|
120
|
+
* <FolderBrowser
|
|
121
|
+
* apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
122
|
+
* rootId="695d6a148c871f3a02969b00"
|
|
123
|
+
* rootType="collection"
|
|
124
|
+
* />
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
52
127
|
rootId?: string;
|
|
53
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* Type of root resource. Required if `rootId` is provided.
|
|
130
|
+
*
|
|
131
|
+
* - `'collection'`: Start at a specific collection
|
|
132
|
+
* - `'folder'`: Start at a specific folder
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```tsx
|
|
136
|
+
* <FolderBrowser
|
|
137
|
+
* apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
138
|
+
* rootId="695d6a148c871f3a02969b00"
|
|
139
|
+
* rootType="folder"
|
|
140
|
+
* onResourceSelect={(resource) => console.log('Selected:', resource)}
|
|
141
|
+
* />
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
54
144
|
rootType?: 'collection' | 'folder';
|
|
55
145
|
/** Collection ID to auto-expand on load */
|
|
56
146
|
startCollectionId?: string;
|
|
@@ -82,12 +172,59 @@ export interface FolderBrowserProps {
|
|
|
82
172
|
showItems?: boolean;
|
|
83
173
|
/** Whether to fetch items (for counting) even if not displaying them (default: false) */
|
|
84
174
|
fetchItems?: boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Controls how item pagination works when there are more items than `itemsPerPage`.
|
|
177
|
+
*
|
|
178
|
+
* - `'manual'` (default): Show `+N` indicator (e.g., `+25` for 25 more items).
|
|
179
|
+
* Single click loads next page, double click loads all remaining items.
|
|
180
|
+
* - `'auto'`: Auto-load all items when folder expands (no manual pagination needed).
|
|
181
|
+
* - `'button'`: Show explicit "Load More Items" button instead of `+N` indicator.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```tsx
|
|
185
|
+
* <FolderBrowser
|
|
186
|
+
* apiBaseUrl={apiBaseUrl}
|
|
187
|
+
* showItems={true}
|
|
188
|
+
* itemsPerPage={50}
|
|
189
|
+
* itemPaginationMode="auto" // Auto-load all items
|
|
190
|
+
* />
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
itemPaginationMode?: 'manual' | 'auto' | 'button';
|
|
85
194
|
/** Filter function for items (applied after fetching) */
|
|
86
195
|
itemFilter?: (item: Item) => boolean;
|
|
87
196
|
/** Callback when items are fetched for a folder */
|
|
88
197
|
onItemsFetched?: (folderId: string, items: Item[]) => void;
|
|
89
198
|
/** Whether to show item count next to folder names (default: false) */
|
|
90
199
|
showItemCount?: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Callback when an API error occurs.
|
|
202
|
+
* Provides error details and a retry function for transient failures.
|
|
203
|
+
*
|
|
204
|
+
* @param error - The error that occurred
|
|
205
|
+
* @param retry - Function to retry the failed operation
|
|
206
|
+
* @param context - Additional context about the error (endpoint, operation type, etc.)
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```tsx
|
|
210
|
+
* <FolderBrowser
|
|
211
|
+
* apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
212
|
+
* onApiError={(error, retry, context) => {
|
|
213
|
+
* if (error.status === 401) {
|
|
214
|
+
* // Token expired, refresh and retry
|
|
215
|
+
* refreshToken().then(() => retry())
|
|
216
|
+
* } else if (error.status === 503) {
|
|
217
|
+
* // Server temporarily unavailable, retry after delay
|
|
218
|
+
* setTimeout(() => retry(), 2000)
|
|
219
|
+
* } else {
|
|
220
|
+
* // Show error to user
|
|
221
|
+
* showErrorNotification(error.message)
|
|
222
|
+
* }
|
|
223
|
+
* }}
|
|
224
|
+
* />
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
onApiError?: ApiErrorHandler;
|
|
91
228
|
/** If true, enables debug logging to console. Default: false */
|
|
92
229
|
debug?: boolean;
|
|
93
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderBrowser.types.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/FolderBrowser.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,MAAM;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG;IAAE,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,CAAA;AAEhG,MAAM,WAAW,kBAAkB;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,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,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACnC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAChD,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB
|
|
1
|
+
{"version":3,"file":"FolderBrowser.types.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/FolderBrowser.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Collection, Folder, Item } from './FolderBrowser.types';
|
|
2
|
+
import { ApiErrorHandler } from '../../utils/apiErrorHandling';
|
|
2
3
|
import { DebugLogger } from '../../utils/debugLog';
|
|
3
4
|
|
|
4
5
|
export interface UseFolderBrowserDataFetchingParams {
|
|
@@ -10,6 +11,7 @@ export interface UseFolderBrowserDataFetchingParams {
|
|
|
10
11
|
shouldFetchItems: boolean;
|
|
11
12
|
itemFilter?: (item: Item) => boolean;
|
|
12
13
|
onItemsFetched?: (folderId: string, items: Item[]) => void;
|
|
14
|
+
onApiError?: ApiErrorHandler;
|
|
13
15
|
startCollectionId?: string;
|
|
14
16
|
startFolderId?: string;
|
|
15
17
|
rootId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFolderBrowserDataFetching.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/useFolderBrowserDataFetching.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useFolderBrowserDataFetching.d.ts","sourceRoot":"","sources":["../../../src/components/FolderBrowser/useFolderBrowserDataFetching.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { Item } from '../../utils/itemUtils';
|
|
3
|
+
import { ApiErrorHandler } from '../../utils/apiErrorHandling';
|
|
3
4
|
|
|
4
5
|
export interface FolderThumbnailBrowserProps {
|
|
5
6
|
/** DSA folder ID to fetch items from */
|
|
@@ -42,6 +43,35 @@ export interface FolderThumbnailBrowserProps {
|
|
|
42
43
|
getDatasetType?: (itemId: string) => 'train' | 'val' | 'test' | null;
|
|
43
44
|
/** Show OpenSeadragon navigation controls (zoom, home, fullscreen) on thumbnails (default: false) */
|
|
44
45
|
showViewerControls?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Callback when an API error occurs.
|
|
48
|
+
* Provides error details and a retry function for transient failures.
|
|
49
|
+
*
|
|
50
|
+
* @param error - The error that occurred
|
|
51
|
+
* @param retry - Function to retry the failed operation
|
|
52
|
+
* @param context - Additional context about the error (endpoint, operation type, etc.)
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* <FolderThumbnailBrowser
|
|
57
|
+
* apiBaseUrl="http://bdsa.pathology.emory.edu:8080/api/v1"
|
|
58
|
+
* folderId="folder-123"
|
|
59
|
+
* onApiError={(error, retry, context) => {
|
|
60
|
+
* if (error.status === 401) {
|
|
61
|
+
* // Token expired, refresh and retry
|
|
62
|
+
* refreshToken().then(() => retry())
|
|
63
|
+
* } else if (error.isRetryable) {
|
|
64
|
+
* // Retry with delay
|
|
65
|
+
* setTimeout(() => retry(), 2000)
|
|
66
|
+
* } else {
|
|
67
|
+
* // Show error to user
|
|
68
|
+
* showErrorNotification(error.message)
|
|
69
|
+
* }
|
|
70
|
+
* }}
|
|
71
|
+
* />
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
onApiError?: ApiErrorHandler;
|
|
45
75
|
/** Debug mode for logging */
|
|
46
76
|
debug?: boolean;
|
|
47
77
|
/** Custom CSS class */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderThumbnailBrowser.d.ts","sourceRoot":"","sources":["../../../src/components/FolderThumbnailBrowser/FolderThumbnailBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,EAAgC,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,8BAA8B,CAAA;AAErC,MAAM,WAAW,2BAA2B;IAExC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAGd,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB,uGAAuG;IACvG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAGnE,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAA;IAGnC,uDAAuD;IACvD,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClE,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oCAAoC;IACpC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAGrD,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,EAAE,MAAM,EAAE,CAAA;QACb,IAAI,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IAGD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC3C,yCAAyC;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IAGpE,qGAAqG;IACrG,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAYD;;GAEG;AACH,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"FolderThumbnailBrowser.d.ts","sourceRoot":"","sources":["../../../src/components/FolderThumbnailBrowser/FolderThumbnailBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,EAAgC,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAkB,KAAK,eAAe,EAAiB,MAAM,8BAA8B,CAAA;AAClG,OAAO,8BAA8B,CAAA;AAErC,MAAM,WAAW,2BAA2B;IAExC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAGd,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB,uGAAuG;IACvG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAGnE,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAA;IAGnC,uDAAuD;IACvD,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClE,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oCAAoC;IACpC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAGrD,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,EAAE,MAAM,EAAE,CAAA;QACb,IAAI,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IAGD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC3C,yCAAyC;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IAGpE,qGAAqG;IACrG,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAYD;;GAEG;AACH,eAAO,MAAM,sBAAsB,oGAohBlC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProtocolCardProps } from './ProtocolManager.types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ProtocolCard - Displays a single protocol in a card format
|
|
5
|
+
*/
|
|
6
|
+
export declare function ProtocolCard({ protocol, onEdit, onDelete, readOnly, showSync, }: ProtocolCardProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default ProtocolCard;
|
|
8
|
+
//# sourceMappingURL=ProtocolCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolCard.d.ts","sourceRoot":"","sources":["../../../src/components/ProtocolManager/ProtocolCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,oBAAoB,CAAC;AAE5B;;GAEG;AACH,wBAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAgB,EAChB,QAAe,GAClB,EAAE,iBAAiB,2CA+InB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ProtocolContextValue, ProtocolProviderProps } from './ProtocolManager.types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Protocol Context - Single source of truth for all protocols
|
|
5
|
+
*
|
|
6
|
+
* State Shape:
|
|
7
|
+
* {
|
|
8
|
+
* protocols: [
|
|
9
|
+
* { id, type: 'stain'|'region', name, ...otherFields },
|
|
10
|
+
* ...
|
|
11
|
+
* ],
|
|
12
|
+
* loading: boolean,
|
|
13
|
+
* error: string|null
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
declare const ProtocolContext: import('react').Context<ProtocolContextValue | null>;
|
|
17
|
+
/**
|
|
18
|
+
* ProtocolProvider - Wrap your app with this to provide protocol state
|
|
19
|
+
*
|
|
20
|
+
* @param {ProtocolProviderProps} props
|
|
21
|
+
*/
|
|
22
|
+
export declare function ProtocolProvider({ children, storage }: ProtocolProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* useProtocols - The ONE hook you need for protocol management!
|
|
25
|
+
*
|
|
26
|
+
* @returns {ProtocolContextValue} Protocol state and actions
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* function MyComponent() {
|
|
30
|
+
* const { protocols, stainProtocols, addProtocol, loading } = useProtocols();
|
|
31
|
+
*
|
|
32
|
+
* if (loading) return <div>Loading...</div>;
|
|
33
|
+
*
|
|
34
|
+
* return (
|
|
35
|
+
* <div>
|
|
36
|
+
* {stainProtocols.map(p => <div key={p.id}>{p.name}</div>)}
|
|
37
|
+
* <button onClick={() => addProtocol({ type: 'stain', name: 'H&E', id: '...' })}>
|
|
38
|
+
* Add Protocol
|
|
39
|
+
* </button>
|
|
40
|
+
* </div>
|
|
41
|
+
* );
|
|
42
|
+
* }
|
|
43
|
+
*/
|
|
44
|
+
export declare function useProtocols(): ProtocolContextValue;
|
|
45
|
+
export default ProtocolContext;
|
|
46
|
+
//# sourceMappingURL=ProtocolContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolContext.d.ts","sourceRoot":"","sources":["../../../src/components/ProtocolManager/ProtocolContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGR,oBAAoB,EACpB,qBAAqB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;GAYG;AAEH,QAAA,MAAM,eAAe,sDAAmD,CAAC;AAuIzE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAwB,EAAE,EAAE,qBAAqB,2CAwF7F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,IAAI,oBAAoB,CAMnD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProtocolListProps } from './ProtocolManager.types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ProtocolList - Displays a grid of protocol cards
|
|
5
|
+
*/
|
|
6
|
+
export declare function ProtocolList({ protocols, type, onAdd, onEdit, onDelete, readOnly, showSync, title, description, }: ProtocolListProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default ProtocolList;
|
|
8
|
+
//# sourceMappingURL=ProtocolList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolList.d.ts","sourceRoot":"","sources":["../../../src/components/ProtocolManager/ProtocolList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,oBAAoB,CAAC;AAE5B;;GAEG;AACH,wBAAgB,YAAY,CAAC,EACzB,SAAc,EACd,IAAI,EACJ,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAgB,EAChB,QAAe,EACf,KAAK,EACL,WAAW,GACd,EAAE,iBAAiB,2CAsCnB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProtocolManager - Main component for managing stain and region protocols
|
|
3
|
+
*
|
|
4
|
+
* This is the primary entry point for protocol management functionality.
|
|
5
|
+
* It provides a complete interface for viewing, creating, editing, and managing
|
|
6
|
+
* protocols used in BDSA schema compliance.
|
|
7
|
+
*
|
|
8
|
+
* The component includes:
|
|
9
|
+
* - ProtocolProvider: Context provider for protocol state management
|
|
10
|
+
* - ProtocolsTab: Main UI component for protocol management
|
|
11
|
+
* - ProtocolCard: Individual protocol display
|
|
12
|
+
* - ProtocolList: Grid view of protocols
|
|
13
|
+
* - ProtocolModal: Create/edit modal for protocols
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { ProtocolProvider, ProtocolsTab } from 'bdsa-react-components';
|
|
18
|
+
*
|
|
19
|
+
* function App() {
|
|
20
|
+
* return (
|
|
21
|
+
* <ProtocolProvider>
|
|
22
|
+
* <ProtocolsTab />
|
|
23
|
+
* </ProtocolProvider>
|
|
24
|
+
* );
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export { ProtocolsTab as ProtocolManager } from './ProtocolsTab';
|
|
29
|
+
export { default } from './ProtocolsTab';
|
|
30
|
+
export { ProtocolProvider, useProtocols } from './ProtocolContext';
|
|
31
|
+
export { ProtocolCard } from './ProtocolCard';
|
|
32
|
+
export { ProtocolList } from './ProtocolList';
|
|
33
|
+
export { ProtocolModal } from './ProtocolModal';
|
|
34
|
+
export { ProtocolsTab } from './ProtocolsTab';
|
|
35
|
+
export { LocalStorageProtocolStorage, InMemoryProtocolStorage, defaultStorage, generateProtocolId, } from './storage/protocolStorage';
|
|
36
|
+
export { DsaSyncAdapter, NoOpDsaSyncAdapter } from './adapters/DsaSyncAdapter';
|
|
37
|
+
export type { Protocol, ProtocolType, ProtocolStorage, DsaSyncAdapter as DsaSyncAdapterType, SchemaValidator, ProtocolContextValue, ProtocolProviderProps, ProtocolCardProps, ProtocolListProps, ProtocolModalProps, ProtocolsTabProps, } from './ProtocolManager.types';
|
|
38
|
+
//# sourceMappingURL=ProtocolManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolManager.d.ts","sourceRoot":"","sources":["../../../src/components/ProtocolManager/ProtocolManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,cAAc,EACd,kBAAkB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/E,YAAY,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,cAAc,IAAI,kBAAkB,EACpC,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,yBAAyB,CAAC"}
|