js-cloudimage-hotspot 1.0.0

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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +294 -0
  3. package/dist/a11y/aria.d.ts +7 -0
  4. package/dist/a11y/aria.d.ts.map +1 -0
  5. package/dist/a11y/focus.d.ts +9 -0
  6. package/dist/a11y/focus.d.ts.map +1 -0
  7. package/dist/a11y/keyboard.d.ts +14 -0
  8. package/dist/a11y/keyboard.d.ts.map +1 -0
  9. package/dist/core/CIHotspot.d.ts +48 -0
  10. package/dist/core/CIHotspot.d.ts.map +1 -0
  11. package/dist/core/ci-hotspot.d.ts +95 -0
  12. package/dist/core/ci-hotspot.d.ts.map +1 -0
  13. package/dist/core/config.d.ts +15 -0
  14. package/dist/core/config.d.ts.map +1 -0
  15. package/dist/core/types.d.ts +227 -0
  16. package/dist/core/types.d.ts.map +1 -0
  17. package/dist/editor/ci-hotspot-editor.d.ts +58 -0
  18. package/dist/editor/ci-hotspot-editor.d.ts.map +1 -0
  19. package/dist/editor/drag-manager.d.ts +18 -0
  20. package/dist/editor/drag-manager.d.ts.map +1 -0
  21. package/dist/editor/editor-toolbar.d.ts +26 -0
  22. package/dist/editor/editor-toolbar.d.ts.map +1 -0
  23. package/dist/editor/index.d.ts +3 -0
  24. package/dist/editor/index.d.ts.map +1 -0
  25. package/dist/editor/js-cloudimage-hotspot-editor.cjs.js +4 -0
  26. package/dist/editor/js-cloudimage-hotspot-editor.cjs.js.map +1 -0
  27. package/dist/editor/js-cloudimage-hotspot-editor.esm.js +1981 -0
  28. package/dist/editor/js-cloudimage-hotspot-editor.esm.js.map +1 -0
  29. package/dist/editor/js-cloudimage-hotspot-editor.min.js +4 -0
  30. package/dist/editor/js-cloudimage-hotspot-editor.min.js.map +1 -0
  31. package/dist/editor/property-panel.d.ts +17 -0
  32. package/dist/editor/property-panel.d.ts.map +1 -0
  33. package/dist/editor/selection-manager.d.ts +15 -0
  34. package/dist/editor/selection-manager.d.ts.map +1 -0
  35. package/dist/editor/types.d.ts +32 -0
  36. package/dist/editor/types.d.ts.map +1 -0
  37. package/dist/editor/undo-manager.d.ts +16 -0
  38. package/dist/editor/undo-manager.d.ts.map +1 -0
  39. package/dist/fullscreen/fullscreen.d.ts +14 -0
  40. package/dist/fullscreen/fullscreen.d.ts.map +1 -0
  41. package/dist/index.d.ts +6 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/js-cloudimage-hotspot.cjs.js +2 -0
  44. package/dist/js-cloudimage-hotspot.cjs.js.map +1 -0
  45. package/dist/js-cloudimage-hotspot.esm.js +1408 -0
  46. package/dist/js-cloudimage-hotspot.esm.js.map +1 -0
  47. package/dist/js-cloudimage-hotspot.min.js +2 -0
  48. package/dist/js-cloudimage-hotspot.min.js.map +1 -0
  49. package/dist/markers/Marker.d.ts +10 -0
  50. package/dist/markers/Marker.d.ts.map +1 -0
  51. package/dist/markers/pulse.d.ts +9 -0
  52. package/dist/markers/pulse.d.ts.map +1 -0
  53. package/dist/popover/Popover.d.ts +41 -0
  54. package/dist/popover/Popover.d.ts.map +1 -0
  55. package/dist/popover/position.d.ts +6 -0
  56. package/dist/popover/position.d.ts.map +1 -0
  57. package/dist/popover/sanitize.d.ts +6 -0
  58. package/dist/popover/sanitize.d.ts.map +1 -0
  59. package/dist/popover/template.d.ts +9 -0
  60. package/dist/popover/template.d.ts.map +1 -0
  61. package/dist/react/index.cjs +2 -0
  62. package/dist/react/index.cjs.map +1 -0
  63. package/dist/react/index.js +1617 -0
  64. package/dist/react/index.js.map +1 -0
  65. package/dist/utils/cloudimage.d.ts +16 -0
  66. package/dist/utils/cloudimage.d.ts.map +1 -0
  67. package/dist/utils/coordinates.d.ts +17 -0
  68. package/dist/utils/coordinates.d.ts.map +1 -0
  69. package/dist/utils/dom.d.ts +13 -0
  70. package/dist/utils/dom.d.ts.map +1 -0
  71. package/dist/utils/events.d.ts +15 -0
  72. package/dist/utils/events.d.ts.map +1 -0
  73. package/dist/zoom/ScrollHint.d.ts +8 -0
  74. package/dist/zoom/ScrollHint.d.ts.map +1 -0
  75. package/dist/zoom/ZoomPan.d.ts +51 -0
  76. package/dist/zoom/ZoomPan.d.ts.map +1 -0
  77. package/dist/zoom/controls.d.ts +14 -0
  78. package/dist/zoom/controls.d.ts.map +1 -0
  79. package/dist/zoom/gestures.d.ts +28 -0
  80. package/dist/zoom/gestures.d.ts.map +1 -0
  81. package/dist/zoom/scroll-hint.d.ts +8 -0
  82. package/dist/zoom/scroll-hint.d.ts.map +1 -0
  83. package/dist/zoom/zoom-pan.d.ts +53 -0
  84. package/dist/zoom/zoom-pan.d.ts.map +1 -0
  85. package/package.json +97 -0
@@ -0,0 +1,28 @@
1
+ export interface GestureCallbacks {
2
+ onPinch?: (scale: number, centerX: number, centerY: number) => void;
3
+ onPanStart?: () => void;
4
+ onPan?: (totalDx: number, totalDy: number) => void;
5
+ onPanEnd?: () => void;
6
+ onDoubleTap?: (x: number, y: number) => void;
7
+ }
8
+ /** Recognizes touch gestures: pinch, pan, double-tap */
9
+ export declare class GestureRecognizer {
10
+ private el;
11
+ private callbacks;
12
+ private lastTouchEnd;
13
+ private initialPinchDistance;
14
+ private initialPinchScale;
15
+ private panStartX;
16
+ private panStartY;
17
+ private isPinching;
18
+ private isPanning;
19
+ private wasPinching;
20
+ private cleanups;
21
+ constructor(el: HTMLElement, callbacks: GestureCallbacks, getZoom: () => number);
22
+ private handleTouchStart;
23
+ private handleTouchMove;
24
+ private handleTouchEnd;
25
+ private getTouchDistance;
26
+ destroy(): void;
27
+ }
28
+ //# sourceMappingURL=gestures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gestures.d.ts","sourceRoot":"","sources":["../../src/zoom/gestures.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wDAAwD;AACxD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,MAAM;IAoB/E,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,8 @@
1
+ export declare class ScrollHint {
2
+ private el;
3
+ private hideTimer;
4
+ constructor(parent: HTMLElement);
5
+ show(): void;
6
+ destroy(): void;
7
+ }
8
+ //# sourceMappingURL=scroll-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-hint.d.ts","sourceRoot":"","sources":["../../src/zoom/scroll-hint.ts"],"names":[],"mappings":"AASA,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,SAAS,CAA8C;gBAEnD,MAAM,EAAE,WAAW;IAQ/B,IAAI,IAAI,IAAI;IAcZ,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,53 @@
1
+ /** Safari's proprietary GestureEvent (not in standard TypeScript lib) */
2
+ interface SafariGestureEvent extends UIEvent {
3
+ readonly scale: number;
4
+ readonly rotation: number;
5
+ }
6
+ declare global {
7
+ interface WindowEventMap {
8
+ gesturestart: SafariGestureEvent;
9
+ gesturechange: SafariGestureEvent;
10
+ gestureend: SafariGestureEvent;
11
+ }
12
+ }
13
+ export interface ZoomPanOptions {
14
+ zoomMin: number;
15
+ zoomMax: number;
16
+ onZoom?: (level: number) => void;
17
+ onScrollWithoutZoom?: () => void;
18
+ }
19
+ export declare class ZoomPan {
20
+ private viewport;
21
+ private container;
22
+ private options;
23
+ private zoom;
24
+ private panX;
25
+ private panY;
26
+ private enabled;
27
+ private isDragging;
28
+ private dragStartX;
29
+ private dragStartY;
30
+ private lastPanX;
31
+ private lastPanY;
32
+ private gestures;
33
+ private isGesturing;
34
+ private gestureStartZoom;
35
+ private touchStartPanX;
36
+ private touchStartPanY;
37
+ private cleanups;
38
+ constructor(viewport: HTMLElement, container: HTMLElement, options: ZoomPanOptions);
39
+ private bindEvents;
40
+ private bindSafariGestures;
41
+ setZoom(level: number, originX?: number, originY?: number): void;
42
+ getZoom(): number;
43
+ resetZoom(): void;
44
+ pan(dx: number, dy: number): void;
45
+ enable(): void;
46
+ disable(): void;
47
+ private clampPan;
48
+ private applyTransform;
49
+ private updateCursor;
50
+ destroy(): void;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=zoom-pan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom-pan.d.ts","sourceRoot":"","sources":["../../src/zoom/zoom-pan.ts"],"names":[],"mappings":"AAGA,yEAAyE;AACzE,UAAU,kBAAmB,SAAQ,OAAO;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc;QACtB,YAAY,EAAE,kBAAkB,CAAC;QACjC,aAAa,EAAE,kBAAkB,CAAC;QAClC,UAAU,EAAE,kBAAkB,CAAC;KAChC;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;IAQlF,OAAO,CAAC,UAAU;IA4HlB,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBhE,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;IASjB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQjC,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAMpB,OAAO,IAAI,IAAI;CAShB"}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "js-cloudimage-hotspot",
3
+ "version": "1.0.0",
4
+ "description": "Interactive image hotspots with zoom, popovers, and accessibility",
5
+ "license": "MIT",
6
+ "author": "Scaleflex",
7
+ "homepage": "https://github.com/scaleflex/js-cloudimage-hotspot#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/scaleflex/js-cloudimage-hotspot.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/scaleflex/js-cloudimage-hotspot/issues"
14
+ },
15
+ "main": "dist/js-cloudimage-hotspot.cjs.js",
16
+ "module": "dist/js-cloudimage-hotspot.esm.js",
17
+ "unpkg": "dist/js-cloudimage-hotspot.min.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/js-cloudimage-hotspot.esm.js",
23
+ "require": "./dist/js-cloudimage-hotspot.cjs.js"
24
+ },
25
+ "./react": {
26
+ "types": "./dist/react/index.d.ts",
27
+ "import": "./dist/react/index.js",
28
+ "require": "./dist/react/index.cjs"
29
+ },
30
+ "./editor": {
31
+ "types": "./dist/editor/index.d.ts",
32
+ "import": "./dist/editor/js-cloudimage-hotspot-editor.esm.js",
33
+ "require": "./dist/editor/js-cloudimage-hotspot-editor.cjs.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist"
38
+ ],
39
+ "sideEffects": false,
40
+ "scripts": {
41
+ "dev": "vite --config config/vite.demo.config.ts",
42
+ "dev:react": "vite --config config/vite.demo.config.ts demo/react-demo",
43
+ "build": "npm run build:bundle && npm run build:react && npm run build:editor && npm run typecheck:emit",
44
+ "build:bundle": "vite build --config config/vite.config.ts",
45
+ "build:react": "vite build --config config/vite.react.config.ts",
46
+ "build:editor": "vite build --config config/vite.editor.config.ts",
47
+ "build:demo": "vite build --config config/vite.demo.config.ts",
48
+ "typecheck": "tsc --noEmit",
49
+ "typecheck:emit": "tsc --project tsconfig.build.json --emitDeclarationOnly --declaration --outDir dist",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "test:coverage": "vitest run --coverage",
53
+ "lint": "eslint src/ tests/ --ext .ts,.tsx"
54
+ },
55
+ "devDependencies": {
56
+ "@testing-library/dom": "^10.4.1",
57
+ "@testing-library/jest-dom": "^6.6.3",
58
+ "@testing-library/react": "^16.1.0",
59
+ "@types/node": "^25.2.3",
60
+ "@types/react": "^18.3.12",
61
+ "@types/react-dom": "^18.3.1",
62
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
63
+ "@typescript-eslint/parser": "^7.18.0",
64
+ "eslint": "^8.57.1",
65
+ "jsdom": "^25.0.1",
66
+ "react": "^18.3.1",
67
+ "react-dom": "^18.3.1",
68
+ "typescript": "^5.5.3",
69
+ "vite": "^5.4.11",
70
+ "vitest": "^2.1.8"
71
+ },
72
+ "peerDependencies": {
73
+ "react": ">=17.0.0",
74
+ "react-dom": ">=17.0.0"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "react": {
78
+ "optional": true
79
+ },
80
+ "react-dom": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "keywords": [
85
+ "hotspot",
86
+ "image",
87
+ "zoom",
88
+ "pan",
89
+ "popover",
90
+ "interactive",
91
+ "accessibility",
92
+ "wcag",
93
+ "typescript",
94
+ "cloudimage",
95
+ "react"
96
+ ]
97
+ }