cs-label-tool 2.0.0-alpha.1

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.
Files changed (74) hide show
  1. package/README.md +824 -0
  2. package/dist/components/annotator-element.d.ts +14 -0
  3. package/dist/components/annotator-element.d.ts.map +1 -0
  4. package/dist/components/define.d.ts +6 -0
  5. package/dist/components/define.d.ts.map +1 -0
  6. package/dist/components/styles.d.ts +2 -0
  7. package/dist/components/styles.d.ts.map +1 -0
  8. package/dist/core/annotator.d.ts +8 -0
  9. package/dist/core/annotator.d.ts.map +1 -0
  10. package/dist/core/commands.d.ts +34 -0
  11. package/dist/core/commands.d.ts.map +1 -0
  12. package/dist/core/events.d.ts +25 -0
  13. package/dist/core/events.d.ts.map +1 -0
  14. package/dist/core/immutability.d.ts +4 -0
  15. package/dist/core/immutability.d.ts.map +1 -0
  16. package/dist/core/state.d.ts +42 -0
  17. package/dist/core/state.d.ts.map +1 -0
  18. package/dist/core/types.d.ts +64 -0
  19. package/dist/core/types.d.ts.map +1 -0
  20. package/dist/cs-label-tool.d.ts +247 -0
  21. package/dist/cs-label-tool.d.ts.map +1 -0
  22. package/dist/geometry/matrix.d.ts +5 -0
  23. package/dist/geometry/matrix.d.ts.map +1 -0
  24. package/dist/geometry/polygon.d.ts +10 -0
  25. package/dist/geometry/polygon.d.ts.map +1 -0
  26. package/dist/geometry/rect.d.ts +4 -0
  27. package/dist/geometry/rect.d.ts.map +1 -0
  28. package/dist/geometry/types.d.ts +19 -0
  29. package/dist/geometry/types.d.ts.map +1 -0
  30. package/dist/image/image-commands.d.ts +14 -0
  31. package/dist/image/image-commands.d.ts.map +1 -0
  32. package/dist/image/standard-source.d.ts +3 -0
  33. package/dist/image/standard-source.d.ts.map +1 -0
  34. package/dist/image/types.d.ts +12 -0
  35. package/dist/image/types.d.ts.map +1 -0
  36. package/dist/index.d.ts +25 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +2299 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/labels/labels.d.ts +6 -0
  41. package/dist/labels/labels.d.ts.map +1 -0
  42. package/dist/mask/rle.d.ts +13 -0
  43. package/dist/mask/rle.d.ts.map +1 -0
  44. package/dist/render/canvas-layers.d.ts +14 -0
  45. package/dist/render/canvas-layers.d.ts.map +1 -0
  46. package/dist/render/canvas-renderer.d.ts +10 -0
  47. package/dist/render/canvas-renderer.d.ts.map +1 -0
  48. package/dist/render/scheduler.d.ts +12 -0
  49. package/dist/render/scheduler.d.ts.map +1 -0
  50. package/dist/spatial/grid-index.d.ts +15 -0
  51. package/dist/spatial/grid-index.d.ts.map +1 -0
  52. package/dist/tools/api.d.ts +32 -0
  53. package/dist/tools/api.d.ts.map +1 -0
  54. package/dist/tools/brush-tool.d.ts +23 -0
  55. package/dist/tools/brush-tool.d.ts.map +1 -0
  56. package/dist/tools/controller.d.ts +9 -0
  57. package/dist/tools/controller.d.ts.map +1 -0
  58. package/dist/tools/eraser-tool.d.ts +8 -0
  59. package/dist/tools/eraser-tool.d.ts.map +1 -0
  60. package/dist/tools/index.d.ts +11 -0
  61. package/dist/tools/index.d.ts.map +1 -0
  62. package/dist/tools/polygon-tool.d.ts +33 -0
  63. package/dist/tools/polygon-tool.d.ts.map +1 -0
  64. package/dist/tools/rect-tool.d.ts +32 -0
  65. package/dist/tools/rect-tool.d.ts.map +1 -0
  66. package/dist/tools/registry.d.ts +4 -0
  67. package/dist/tools/registry.d.ts.map +1 -0
  68. package/dist/tools/select-tool.d.ts +15 -0
  69. package/dist/tools/select-tool.d.ts.map +1 -0
  70. package/dist/tools/types.d.ts +80 -0
  71. package/dist/tools/types.d.ts.map +1 -0
  72. package/dist/viewport/viewport.d.ts +20 -0
  73. package/dist/viewport/viewport.d.ts.map +1 -0
  74. package/package.json +38 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-layers.d.ts","sourceRoot":"","sources":["../../src/render/canvas-layers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,CAAA;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAA;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAUD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,CAgDzE"}
@@ -0,0 +1,10 @@
1
+ import type { Annotator } from '../core/types.js';
2
+ import { type RenderLayer } from './scheduler.js';
3
+ export interface CanvasRenderer {
4
+ readonly eventCanvas: HTMLCanvasElement;
5
+ readonly invalidate: (layer: RenderLayer) => void;
6
+ readonly resize: () => void;
7
+ readonly destroy: () => void;
8
+ }
9
+ export declare function createCanvasRenderer(annotator: Annotator): CanvasRenderer;
10
+ //# sourceMappingURL=canvas-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-renderer.d.ts","sourceRoot":"","sources":["../../src/render/canvas-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAIV,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B;AAuED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAmXzE"}
@@ -0,0 +1,12 @@
1
+ export type RenderLayer = 'annotations' | 'image' | 'interaction';
2
+ export interface RenderSchedulerOptions {
3
+ readonly requestFrame: (callback: FrameRequestCallback) => number;
4
+ readonly cancelFrame: (handle: number) => void;
5
+ readonly render: (layers: ReadonlySet<RenderLayer>) => void;
6
+ }
7
+ export interface RenderScheduler {
8
+ readonly invalidate: (layer: RenderLayer) => void;
9
+ readonly destroy: () => void;
10
+ }
11
+ export declare function createRenderScheduler(options: RenderSchedulerOptions): RenderScheduler;
12
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/render/scheduler.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,OAAO,GACP,aAAa,CAAA;AAEjB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,MAAM,CAAA;IACjE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CAC5D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAuCjB"}
@@ -0,0 +1,15 @@
1
+ import type { Bounds } from '../geometry/types.js';
2
+ export interface GridIndex {
3
+ readonly cellSize: number;
4
+ readonly cells: Map<string, Set<string>>;
5
+ readonly items: Map<string, Bounds>;
6
+ readonly order: Map<string, number>;
7
+ nextOrder: number;
8
+ }
9
+ export declare function createGridIndex(cellSize: number): GridIndex;
10
+ export declare function insertSpatialItem(index: GridIndex, id: string, bounds: Bounds): GridIndex;
11
+ export declare function updateSpatialItem(index: GridIndex, id: string, bounds: Bounds): GridIndex;
12
+ export declare function removeSpatialItem(index: GridIndex, id: string): GridIndex;
13
+ export declare function restoreSpatialItem(index: GridIndex, id: string, bounds: Bounds, order: number): GridIndex;
14
+ export declare function querySpatialBounds(index: GridIndex, bounds: Bounds): string[];
15
+ //# sourceMappingURL=grid-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-index.d.ts","sourceRoot":"","sources":["../../src/spatial/grid-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACxC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB;AAwED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAW3D;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,SAAS,CAYX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,SAAS,CAUX;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAQzE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,SAAS,CAIX;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAkBV"}
@@ -0,0 +1,32 @@
1
+ import type { Annotator } from '../core/types.js';
2
+ import { type BrushToolOptions } from './brush-tool.js';
3
+ import { type EraserToolOptions } from './eraser-tool.js';
4
+ import { type PolygonToolOptions } from './polygon-tool.js';
5
+ import { type RectToolOptions } from './rect-tool.js';
6
+ import type { Tool, ToolCategory } from './types.js';
7
+ export interface AnnotationToolApi {
8
+ readonly select: () => void;
9
+ readonly rect: (options?: Partial<RectToolOptions>) => void;
10
+ readonly polygon: (options?: Partial<PolygonToolOptions>) => void;
11
+ readonly brush: (options?: Partial<BrushToolOptions>) => void;
12
+ readonly eraser: (options?: Partial<EraserToolOptions>) => void;
13
+ readonly activate: (tool: Tool) => void;
14
+ readonly activateById: (toolId: string) => void;
15
+ readonly activeId: () => string | null;
16
+ readonly cancel: () => void;
17
+ readonly get: (toolId: string) => Tool | undefined;
18
+ readonly list: () => readonly Tool[];
19
+ readonly listByCategory: (category: ToolCategory) => readonly Tool[];
20
+ readonly register: (tool: Tool) => void;
21
+ readonly unregister: (toolId: string) => void;
22
+ readonly selectAnnotation: (annotationId: string) => void;
23
+ readonly clearSelection: () => void;
24
+ readonly selection: () => readonly string[];
25
+ readonly deleteSelection: () => number;
26
+ readonly setSelectionLabel: (labelId: string) => number;
27
+ }
28
+ export declare function getActiveToolId(annotator: Annotator): string | null;
29
+ export declare function deleteSelectedAnnotations(annotator: Annotator): number;
30
+ export declare function updateSelectedAnnotationsLabel(annotator: Annotator, labelId: string): number;
31
+ export declare function createToolApi(annotator: Annotator): AnnotationToolApi;
32
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/tools/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAMjE,OAAO,EAAa,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAO9D,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAA;IACjE,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IAC7D,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IAC/D,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,IAAI,EAAE,CAAA;IACpC,QAAQ,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,IAAI,EAAE,CAAA;IACpE,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAA;IACtC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CACxD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAWtE;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,CA6DrE"}
@@ -0,0 +1,23 @@
1
+ import type { Point } from '../geometry/types.js';
2
+ import type { Annotator } from '../core/types.js';
3
+ import { type MaskGeometry } from '../core/types.js';
4
+ import type { Tool } from './types.js';
5
+ export interface BrushToolOptions {
6
+ readonly labelId?: string;
7
+ readonly size?: number;
8
+ readonly color?: string;
9
+ }
10
+ export interface BrushToolState {
11
+ readonly pointerId: number | null;
12
+ readonly points: readonly Point[];
13
+ }
14
+ export interface BrushMaskInput {
15
+ readonly imageWidth: number;
16
+ readonly imageHeight: number;
17
+ readonly brushSize: number;
18
+ readonly points: readonly Point[];
19
+ }
20
+ export declare function createBrushMaskGeometry(input: BrushMaskInput): MaskGeometry;
21
+ export declare function createBrushTool(options?: BrushToolOptions): Tool;
22
+ export declare function useBrush(annotator: Annotator, options?: Partial<BrushToolOptions>): void;
23
+ //# sourceMappingURL=brush-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brush-tool.d.ts","sourceRoot":"","sources":["../../src/tools/brush-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAepE,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CAClC;AAmED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAe3E;AAuED,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAoFpE;AAED,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,IAAI,CAON"}
@@ -0,0 +1,9 @@
1
+ import type { Annotator } from '../core/types.js';
2
+ import type { Tool, ToolCategory, ToolController, ToolRegistry } from './types.js';
3
+ export declare function createToolController(annotator: Annotator, canvas: HTMLCanvasElement, registry: ToolRegistry): ToolController;
4
+ export declare function activateTool(annotator: Annotator, tool: Tool): void;
5
+ export declare function activateToolById(annotator: Annotator, toolId: string): void;
6
+ export declare function cancelActiveGesture(annotator: Annotator): void;
7
+ export declare function getRegisteredTools(annotator: Annotator): readonly Tool[];
8
+ export declare function getRegisteredToolsByCategory(annotator: Annotator, category: ToolCategory): readonly Tool[];
9
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/tools/controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMjD,OAAO,KAAK,EAGV,IAAI,EACJ,YAAY,EAEZ,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAA;AAsDnB,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,YAAY,GACrB,cAAc,CAqKhB;AAgBD,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAEnE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAExE;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,YAAY,GACrB,SAAS,IAAI,EAAE,CAEjB"}
@@ -0,0 +1,8 @@
1
+ import type { Annotator } from '../core/types.js';
2
+ import type { Tool } from './types.js';
3
+ export interface EraserToolOptions {
4
+ readonly size?: number;
5
+ }
6
+ export declare function createEraserTool(options?: EraserToolOptions): Tool;
7
+ export declare function useEraser(annotator: Annotator, options?: Partial<EraserToolOptions>): void;
8
+ //# sourceMappingURL=eraser-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eraser-tool.d.ts","sourceRoot":"","sources":["../../src/tools/eraser-tool.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAa7D,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAuGD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAoEtE;AAED,wBAAgB,SAAS,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,IAAI,CAEN"}
@@ -0,0 +1,11 @@
1
+ import type { Annotator } from '../core/types.js';
2
+ import type { Tool, ToolCategory } from './types.js';
3
+ export { createDefaultToolRegistry, createToolRegistry } from './registry.js';
4
+ export { createToolApi, deleteSelectedAnnotations, getActiveToolId, updateSelectedAnnotationsLabel, type AnnotationToolApi, } from './api.js';
5
+ export { activateTool, activateToolById, cancelActiveGesture, getRegisteredTools, getRegisteredToolsByCategory, } from './controller.js';
6
+ export declare function registerTool(annotator: Annotator, tool: Tool): void;
7
+ export declare function unregisterTool(annotator: Annotator, toolId: string): void;
8
+ export declare function getTool(annotator: Annotator, toolId: string): Tool | undefined;
9
+ export declare function listTools(annotator: Annotator): readonly Tool[];
10
+ export declare function listToolsByCategory(annotator: Annotator, category: ToolCategory): readonly Tool[];
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEpD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE7E,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,8BAA8B,EAC9B,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAA;AAExB,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAEnE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAE9E;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAE/D;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,YAAY,GACrB,SAAS,IAAI,EAAE,CAEjB"}
@@ -0,0 +1,33 @@
1
+ import type { Point } from '../geometry/types.js';
2
+ import { type Annotator } from '../core/types.js';
3
+ import type { Tool } from './types.js';
4
+ export interface PolygonToolState {
5
+ readonly points: readonly Point[];
6
+ readonly preview: Point | null;
7
+ }
8
+ export type PolygonToolInput = {
9
+ readonly type: 'cancel';
10
+ } | {
11
+ readonly type: 'commit';
12
+ } | {
13
+ readonly type: 'remove-last';
14
+ } | {
15
+ readonly type: 'move';
16
+ readonly imagePoint: Point;
17
+ } | {
18
+ readonly type: 'point';
19
+ readonly imagePoint: Point;
20
+ };
21
+ export interface PolygonToolResult {
22
+ readonly state: PolygonToolState;
23
+ readonly draft?: readonly Point[];
24
+ readonly commit?: readonly Point[];
25
+ }
26
+ export declare function createPolygonToolState(): PolygonToolState;
27
+ export declare function reducePolygonTool(state: PolygonToolState, input: PolygonToolInput): PolygonToolResult;
28
+ export interface PolygonToolOptions {
29
+ readonly labelId?: string;
30
+ }
31
+ export declare function createPolygonTool(options: PolygonToolOptions): Tool;
32
+ export declare function usePolygon(annotator: Annotator, options?: Partial<PolygonToolOptions>): void;
33
+ //# sourceMappingURL=polygon-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-tool.d.ts","sourceRoot":"","sources":["../../src/tools/polygon-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAGjE,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAA;CAAE,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;CACnC;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,gBAAgB,GACtB,iBAAiB,CAwCnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA+EnE;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACxC,IAAI,CAGN"}
@@ -0,0 +1,32 @@
1
+ import type { Bounds, Point } from '../geometry/types.js';
2
+ import type { Annotator } from '../core/types.js';
3
+ import type { Tool } from './types.js';
4
+ export type RectToolState = {
5
+ readonly phase: 'idle';
6
+ } | {
7
+ readonly phase: 'drawing';
8
+ readonly pointerId: number;
9
+ readonly start: Point;
10
+ readonly current: Point;
11
+ };
12
+ export type RectToolInput = {
13
+ readonly type: 'cancel';
14
+ } | {
15
+ readonly type: 'down' | 'move' | 'up';
16
+ readonly pointerId: number;
17
+ readonly imagePoint: Point;
18
+ };
19
+ export interface RectToolResult {
20
+ readonly state: RectToolState;
21
+ readonly draft?: Bounds;
22
+ readonly commit?: Bounds;
23
+ }
24
+ export declare function createRectToolState(): RectToolState;
25
+ export declare function reduceRectTool(state: RectToolState, input: RectToolInput, minimumSize?: number): RectToolResult;
26
+ export interface RectToolOptions {
27
+ readonly labelId?: string;
28
+ readonly minimumSize?: number;
29
+ }
30
+ export declare function createRectTool(options: RectToolOptions): Tool;
31
+ export declare function useRect(annotator: Annotator, options?: Partial<RectToolOptions>): void;
32
+ //# sourceMappingURL=rect-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rect-tool.d.ts","sourceRoot":"","sources":["../../src/tools/rect-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAIzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CACxB,CAAA;AAEL,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAA;CAC3B,CAAA;AAEL,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,WAAW,SAAI,GACd,cAAc,CAsChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAgBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA+C7D;AAED,wBAAgB,OAAO,CACrB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GACrC,IAAI,CAQN"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRegistry } from './types.js';
2
+ export declare function createToolRegistry(): ToolRegistry;
3
+ export declare function createDefaultToolRegistry(): ToolRegistry;
4
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,YAAY,CAAA;AAOlE,wBAAgB,kBAAkB,IAAI,YAAY,CAwBjD;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAQxD"}
@@ -0,0 +1,15 @@
1
+ import type { Point } from '../geometry/types.js';
2
+ import { type Annotator, type PolygonGeometry, type RectGeometry } from '../core/types.js';
3
+ import type { Tool } from './types.js';
4
+ export type RectHandle = 'east' | 'north' | 'north-east' | 'north-west' | 'south' | 'south-east' | 'south-west' | 'west';
5
+ export declare function moveRect(geometry: RectGeometry, delta: Point): RectGeometry;
6
+ export declare function movePolygonVertex(geometry: PolygonGeometry, index: number, point: Point): PolygonGeometry;
7
+ export declare function removePolygonVertex(geometry: PolygonGeometry, index: number): PolygonGeometry | null;
8
+ export declare function resizeRect(geometry: RectGeometry, handle: RectHandle, point: Point): RectGeometry;
9
+ export declare function getRectResizeHandleAtPoint(geometry: RectGeometry, point: Point, tolerance: number): RectHandle | null;
10
+ export declare function selectAnnotation(annotator: Annotator, id: string): void;
11
+ export declare function clearSelection(annotator: Annotator): void;
12
+ export declare function getSelection(annotator: Annotator): readonly string[];
13
+ export declare function createSelectTool(): Tool;
14
+ export declare function useSelect(annotator: Annotator): void;
15
+ //# sourceMappingURL=select-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-tool.d.ts","sourceRoot":"","sources":["../../src/tools/select-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAA;AAgBzB,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,MAAM,CAAA;AAEV,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,GACX,YAAY,CAMd;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GACX,eAAe,CAOjB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,GACZ,eAAe,GAAG,IAAI,CASxB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,GACX,YAAY,CAkBd;AA2BD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAqCnB;AA6ND,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAWvE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAQzD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAEpE;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CA2LvC;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAEpD"}
@@ -0,0 +1,80 @@
1
+ import type { Annotator, MaskGeometry, PolygonGeometry, RectGeometry } from '../core/types.js';
2
+ import type { Bounds, Point } from '../geometry/types.js';
3
+ export type NormalizedPointerInput = {
4
+ readonly type: 'cancel';
5
+ } | {
6
+ readonly type: 'down' | 'move' | 'up';
7
+ readonly pointerId: number;
8
+ readonly imagePoint: Point;
9
+ readonly buttons: number;
10
+ readonly pressure: number;
11
+ readonly detail: number;
12
+ };
13
+ export interface RectInteractionDraft {
14
+ readonly type: 'rect';
15
+ readonly geometry: Bounds;
16
+ readonly labelId: string;
17
+ }
18
+ export interface PolygonInteractionDraft {
19
+ readonly type: 'polygon';
20
+ readonly points: readonly Point[];
21
+ readonly labelId: string;
22
+ }
23
+ export interface BrushInteractionDraft {
24
+ readonly type: 'brush';
25
+ readonly points: readonly Point[];
26
+ readonly size: number;
27
+ readonly color: string;
28
+ readonly labelId: string;
29
+ }
30
+ export interface EraserInteractionDraft {
31
+ readonly type: 'eraser';
32
+ readonly points: readonly Point[];
33
+ readonly size: number;
34
+ }
35
+ export interface VectorInteractionDraft {
36
+ readonly type: 'vector';
37
+ readonly annotationId: string;
38
+ readonly geometry: RectGeometry | PolygonGeometry | MaskGeometry;
39
+ readonly labelId: string;
40
+ }
41
+ export type InteractionDraft = BrushInteractionDraft | EraserInteractionDraft | PolygonInteractionDraft | RectInteractionDraft | VectorInteractionDraft;
42
+ export interface ToolContext {
43
+ readonly annotator: Annotator;
44
+ readonly setDraft: (draft: InteractionDraft) => void;
45
+ readonly clearDraft: () => void;
46
+ }
47
+ export interface KeyboardShortcut {
48
+ readonly key: string;
49
+ readonly ctrl?: boolean;
50
+ readonly shift?: boolean;
51
+ readonly meta?: boolean;
52
+ readonly alt?: boolean;
53
+ }
54
+ export type ToolCategory = 'selection' | 'drawing' | 'navigation' | 'utility';
55
+ export interface Tool {
56
+ readonly id: string;
57
+ readonly name: string;
58
+ readonly description?: string;
59
+ readonly icon?: string;
60
+ readonly cursor: string;
61
+ readonly category: ToolCategory;
62
+ readonly shortcuts?: readonly KeyboardShortcut[];
63
+ readonly handle: (input: NormalizedPointerInput, context: ToolContext) => void;
64
+ readonly cancel: (context: ToolContext) => void;
65
+ readonly handleKey?: (event: KeyboardEvent, context: ToolContext) => void;
66
+ }
67
+ export interface ToolController {
68
+ readonly activate: (tool: Tool) => void;
69
+ readonly activateById: (toolId: string) => void;
70
+ readonly cancel: () => void;
71
+ readonly destroy: () => void;
72
+ }
73
+ export interface ToolRegistry {
74
+ readonly register: (tool: Tool) => void;
75
+ readonly unregister: (toolId: string) => void;
76
+ readonly get: (toolId: string) => Tool | undefined;
77
+ readonly list: () => readonly Tool[];
78
+ readonly listByCategory: (category: ToolCategory) => readonly Tool[];
79
+ }
80
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Point, Size } from '../geometry/types.js';
2
+ export interface ViewportOptions extends Size {
3
+ readonly minScale?: number;
4
+ readonly maxScale?: number;
5
+ }
6
+ export interface ViewportState extends Size {
7
+ readonly scale: number;
8
+ readonly offsetX: number;
9
+ readonly offsetY: number;
10
+ readonly minScale: number;
11
+ readonly maxScale: number;
12
+ }
13
+ export declare function createViewport(options: ViewportOptions): ViewportState;
14
+ export declare function imageToScreen(viewport: ViewportState, point: Point): Point;
15
+ /** screenToImage 与 imageToScreen 使用同一矩阵的逆变换,避免两套公式产生误差。 */
16
+ export declare function screenToImage(viewport: ViewportState, point: Point): Point;
17
+ export declare function zoomAt(viewport: ViewportState, screenAnchor: Point, requestedScale: number): ViewportState;
18
+ export declare function panViewport(viewport: ViewportState, delta: Point): ViewportState;
19
+ export declare function fitViewport(viewport: ViewportState, imageSize: Size): ViewportState;
20
+ //# sourceMappingURL=viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/viewport/viewport.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,WAAW,eAAgB,SAAQ,IAAI;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AA0BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAmBtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAS1E;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAW1E;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,KAAK,EACnB,cAAc,EAAE,MAAM,GACrB,aAAa,CAUf;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,GACX,aAAa,CAMf;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,IAAI,GACd,aAAa,CAgBf"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "cs-label-tool",
3
+ "version": "2.0.0-alpha.1",
4
+ "description": "Framework-free TypeScript library for AI-assisted image annotation.",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "build": "vite build && tsc -p tsconfig.build.json",
18
+ "typecheck": "tsc -p tsconfig.json --noEmit",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "test:e2e": "playwright test",
22
+ "check": "npm run typecheck && npm test && npm run build"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://gitee.com/qinshige/cs-label-tool.git"
27
+ },
28
+ "license": "ISC",
29
+ "devDependencies": {
30
+ "@playwright/test": "1.61.1",
31
+ "typescript": "7.0.2",
32
+ "vite": "8.1.4",
33
+ "vitest": "4.1.10"
34
+ },
35
+ "engines": {
36
+ "node": ">=22.12.0"
37
+ }
38
+ }