@mmmmzxe/react-360-viewer 0.1.13 → 0.1.14

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +3 -3
  3. package/src/components/ui/Badge/index.tsx +0 -45
  4. package/src/components/ui/Button/index.tsx +0 -67
  5. package/src/components/ui/Card/index.tsx +0 -74
  6. package/src/components/ui/Item/index.tsx +0 -136
  7. package/src/components/ui/Label/index.tsx +0 -20
  8. package/src/components/ui/Popover/index.tsx +0 -56
  9. package/src/components/ui/Separator/index.tsx +0 -30
  10. package/src/components/ui/Spinner/index.tsx +0 -11
  11. package/src/components/utils/index.ts +0 -6
  12. package/src/constants/viewer360ClassNames.ts +0 -42
  13. package/src/constants/viewer360Config.ts +0 -11
  14. package/src/constants/viewer360Labels.ts +0 -14
  15. package/src/constants/viewer360MarkerLabels.ts +0 -3
  16. package/src/feature/Viewer360.test.tsx +0 -47
  17. package/src/feature/Viewer360.tsx +0 -223
  18. package/src/feature/Viewer360AddModeBanner.tsx +0 -20
  19. package/src/feature/Viewer360FrameIndicator.tsx +0 -20
  20. package/src/feature/Viewer360HotspotOverlay.tsx +0 -57
  21. package/src/feature/Viewer360LoadingOverlay.tsx +0 -28
  22. package/src/feature/Viewer360MarkerPin.tsx +0 -105
  23. package/src/feature/Viewer360Toolbar.tsx +0 -75
  24. package/src/helpers/adjustViewerZoom.test.ts +0 -29
  25. package/src/helpers/adjustViewerZoom.ts +0 -64
  26. package/src/helpers/computeDragFrameIndex.test.ts +0 -20
  27. package/src/helpers/computeDragFrameIndex.ts +0 -23
  28. package/src/helpers/computeViewerImageLayout.test.ts +0 -48
  29. package/src/helpers/computeViewerImageLayout.ts +0 -114
  30. package/src/helpers/computeViewerPanOffset.ts +0 -18
  31. package/src/helpers/markerHelpers.test.ts +0 -38
  32. package/src/helpers/markerHelpers.ts +0 -33
  33. package/src/helpers/viewer360PropsHelpers.ts +0 -46
  34. package/src/helpers/viewerHelpers.ts +0 -74
  35. package/src/hooks/useViewer360.ts +0 -306
  36. package/src/index.ts +0 -68
  37. package/src/styles.css +0 -80
  38. package/src/types/Viewer360Hotspot.ts +0 -67
  39. package/src/types/Viewer360Marker.ts +0 -52
  40. package/src/types/Viewer360Props.ts +0 -108
  41. package/src/types/index.ts +0 -30
  42. package/src/utils/index.ts +0 -6
package/src/index.ts DELETED
@@ -1,68 +0,0 @@
1
- export { Viewer360 } from './feature/Viewer360';
2
- export { Viewer360AddModeBanner } from './feature/Viewer360AddModeBanner';
3
- export { Viewer360FrameIndicator } from './feature/Viewer360FrameIndicator';
4
- export { Viewer360LoadingOverlay } from './feature/Viewer360LoadingOverlay';
5
- export { Viewer360MarkerPin } from './feature/Viewer360MarkerPin';
6
- export { Viewer360Toolbar } from './feature/Viewer360Toolbar';
7
- export { useViewer360 } from './hooks/useViewer360';
8
-
9
- export { defaultViewer360Config } from './constants/viewer360Config';
10
- export { defaultViewer360Labels } from './constants/viewer360Labels';
11
- export { defaultViewer360MarkerPinLabels } from './constants/viewer360MarkerLabels';
12
- export {
13
- defaultViewer360ClassNames,
14
- defaultViewer360MarkerPinClassNames,
15
- viewer360ClassNames,
16
- viewer360MarkerPinClassNames,
17
- } from './constants/viewer360ClassNames';
18
-
19
- export {
20
- applyWheelZoom,
21
- clampZoom,
22
- getViewerCursorClass,
23
- isResetDisabled,
24
- resolveViewer360Config,
25
- stepZoomIn,
26
- stepZoomOut,
27
- } from './helpers/adjustViewerZoom';
28
- export { clampFrameIndex, computeDragFrameIndex } from './helpers/computeDragFrameIndex';
29
- export {
30
- computeHotspotPositionFromClick,
31
- computeHotspotScreenPosition,
32
- computeViewerImageLayout,
33
- type ViewerImageLayout,
34
- } from './helpers/computeViewerImageLayout';
35
- export { computeViewerPanOffset } from './helpers/computeViewerPanOffset';
36
- export { hotspotToViewer360Marker, toViewer360Hotspots } from './helpers/markerHelpers';
37
- export {
38
- drawFrameOnCanvas,
39
- filterHotspotsByFrame,
40
- getFramesSignature,
41
- hasLoadedViewerFrame,
42
- preloadFrameImage,
43
- preloadViewerFrames,
44
- } from './helpers/viewerHelpers';
45
-
46
- export type {
47
- Viewer360ClassNames,
48
- Viewer360Config,
49
- Viewer360Frame,
50
- Viewer360Hotspot,
51
- Viewer360HotspotPinOptions,
52
- Viewer360HotspotPosition,
53
- Viewer360HotspotRenderProps,
54
- Viewer360Labels,
55
- Viewer360Marker,
56
- Viewer360MarkerPinClassNames,
57
- Viewer360MarkerPinLabels,
58
- Viewer360MarkerPinProps,
59
- Viewer360MarkerPinRenderProps,
60
- Viewer360OverlayRenderProps,
61
- Viewer360PanOffset,
62
- Viewer360Props,
63
- Viewer360Theme,
64
- Viewer360ToolbarRenderProps,
65
- } from './types';
66
-
67
- export { cn } from './components/utils';
68
- export { Button, buttonVariants } from './components/ui/Button';
package/src/styles.css DELETED
@@ -1,80 +0,0 @@
1
- @import 'tailwindcss/theme' layer(theme);
2
- @import 'tailwindcss/utilities' layer(utilities);
3
-
4
- @source './**/*.{ts,tsx}';
5
-
6
- @custom-variant dark (&:is(.dark *));
7
-
8
- @theme inline {
9
- --color-background: var(--background);
10
- --color-foreground: var(--foreground);
11
- --color-card: var(--card);
12
- --color-card-foreground: var(--card-foreground);
13
- --color-popover: var(--popover);
14
- --color-popover-foreground: var(--popover-foreground);
15
- --color-primary: var(--primary);
16
- --color-primary-foreground: var(--primary-foreground);
17
- --color-secondary: var(--secondary);
18
- --color-secondary-foreground: var(--secondary-foreground);
19
- --color-muted: var(--muted);
20
- --color-muted-foreground: var(--muted-foreground);
21
- --color-accent: var(--accent);
22
- --color-accent-foreground: var(--accent-foreground);
23
- --color-destructive: var(--destructive);
24
- --color-border: var(--border);
25
- --color-input: var(--input);
26
- --color-ring: var(--ring);
27
- --radius-sm: calc(var(--radius) - 4px);
28
- --radius-md: calc(var(--radius) - 2px);
29
- --radius-lg: var(--radius);
30
- --radius-xl: calc(var(--radius) + 4px);
31
- --radius-4xl: 2rem;
32
- }
33
-
34
- /*
35
- * Scoped to the viewer only — never set :root (that would override the host app's entire theme).
36
- * Host app shadcn variables inherit into the viewer. Fallbacks apply only inside [data-viewer-360].
37
- */
38
- [data-viewer-360] {
39
- --radius: 0.625rem;
40
- --radius-4xl: 2rem;
41
- --background: oklch(1 0 0);
42
- --foreground: oklch(0.145 0 0);
43
- --card: oklch(1 0 0);
44
- --card-foreground: oklch(0.145 0 0);
45
- --popover: oklch(1 0 0);
46
- --popover-foreground: oklch(0.145 0 0);
47
- --primary: oklch(0.205 0 0);
48
- --primary-foreground: oklch(0.985 0 0);
49
- --secondary: oklch(0.97 0 0);
50
- --secondary-foreground: oklch(0.205 0 0);
51
- --muted: oklch(0.97 0 0);
52
- --muted-foreground: oklch(0.556 0 0);
53
- --accent: oklch(0.97 0 0);
54
- --accent-foreground: oklch(0.205 0 0);
55
- --destructive: oklch(0.577 0.245 27.325);
56
- --border: oklch(0.922 0 0);
57
- --input: oklch(0.922 0 0);
58
- --ring: oklch(0.708 0 0);
59
- }
60
-
61
- .dark [data-viewer-360] {
62
- --background: oklch(0.145 0 0);
63
- --foreground: oklch(0.985 0 0);
64
- --card: oklch(0.205 0 0);
65
- --card-foreground: oklch(0.985 0 0);
66
- --popover: oklch(0.205 0 0);
67
- --popover-foreground: oklch(0.985 0 0);
68
- --primary: oklch(0.922 0 0);
69
- --primary-foreground: oklch(0.205 0 0);
70
- --secondary: oklch(0.269 0 0);
71
- --secondary-foreground: oklch(0.985 0 0);
72
- --muted: oklch(0.269 0 0);
73
- --muted-foreground: oklch(0.708 0 0);
74
- --accent: oklch(0.269 0 0);
75
- --accent-foreground: oklch(0.985 0 0);
76
- --destructive: oklch(0.704 0.191 22.216);
77
- --border: oklch(1 0 0 / 10%);
78
- --input: oklch(1 0 0 / 15%);
79
- --ring: oklch(0.556 0 0);
80
- }
@@ -1,67 +0,0 @@
1
- export type Viewer360Frame = {
2
- id: string;
3
- src: string;
4
- label?: string;
5
- };
6
-
7
- export type Viewer360PanOffset = {
8
- panX: number;
9
- panY: number;
10
- };
11
-
12
- export type Viewer360Config = {
13
- minZoom?: number;
14
- maxZoom?: number;
15
- zoomStep?: number;
16
- dragSensitivity?: number;
17
- autoRotate?: boolean;
18
- autoRotateIntervalMs?: number;
19
- autoRotateDirection?: 'forward' | 'backward';
20
- };
21
-
22
- export type Viewer360Hotspot<TData = unknown> = {
23
- id: string;
24
- frameIndex: number;
25
- positionX: number;
26
- positionY: number;
27
- data?: TData;
28
- };
29
-
30
- export type Viewer360HotspotPosition = {
31
- frameIndex: number;
32
- frameId: string;
33
- positionX: number;
34
- positionY: number;
35
- };
36
-
37
- export type Viewer360HotspotRenderProps<TData = unknown> = {
38
- hotspot: Viewer360Hotspot<TData>;
39
- leftPercent: number;
40
- topPercent: number;
41
- };
42
-
43
- export type Viewer360OverlayRenderProps = {
44
- currentFrameIndex: number;
45
- frameCount: number;
46
- frameLabel?: string;
47
- isHotspotMode: boolean;
48
- labels: Required<import('./Viewer360Props').Viewer360Labels>;
49
- frameIndicatorClassName: string;
50
- };
51
-
52
- export type Viewer360ToolbarRenderProps = {
53
- zoom: number;
54
- minZoom: number;
55
- maxZoom: number;
56
- isResetDisabled: boolean;
57
- isHotspotMode: boolean;
58
- showHotspotModeControl: boolean;
59
- showZoomControls: boolean;
60
- showResetControl: boolean;
61
- showDragHint: boolean;
62
- labels: Required<import('./Viewer360Props').Viewer360Labels>;
63
- onZoomIn: () => void;
64
- onZoomOut: () => void;
65
- onResetView: () => void;
66
- onHotspotModeChange: (active: boolean) => void;
67
- };
@@ -1,52 +0,0 @@
1
- import type { MouseEvent, ReactNode } from 'react';
2
-
3
- import type { Viewer360Hotspot } from './Viewer360Hotspot';
4
-
5
- export type Viewer360Marker = {
6
- id: string;
7
- title: string;
8
- description?: string;
9
- };
10
-
11
- export type Viewer360MarkerPinClassNames = {
12
- root?: string;
13
- ping?: string;
14
- dot?: string;
15
- tooltip?: string;
16
- tooltipHeader?: string;
17
- tooltipBody?: string;
18
- tooltipTitle?: string;
19
- tooltipDescription?: string;
20
- deleteButton?: string;
21
- };
22
-
23
- export type Viewer360MarkerPinLabels = {
24
- delete?: string;
25
- };
26
-
27
- export type Viewer360MarkerPinRenderProps<TData = unknown> = {
28
- marker: Viewer360Marker;
29
- hotspot?: Viewer360Hotspot<TData>;
30
- };
31
-
32
- export type Viewer360MarkerPinProps<TData = unknown> = {
33
- marker: Viewer360Marker;
34
- hotspot?: Viewer360Hotspot<TData>;
35
- leftPercent: number;
36
- topPercent: number;
37
- onDelete?: (id: string) => void;
38
- isDeletePending?: boolean;
39
- onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
40
- renderTag?: (props: Viewer360MarkerPinRenderProps<TData>) => ReactNode;
41
- classNames?: Viewer360MarkerPinClassNames;
42
- labels?: Viewer360MarkerPinLabels;
43
- };
44
-
45
- export type Viewer360HotspotPinOptions<TData = unknown> = {
46
- onDelete?: (id: string) => void;
47
- deletingMarkerId?: string | null;
48
- getMarker?: (hotspot: Viewer360Hotspot<TData>) => Viewer360Marker;
49
- renderTag?: (props: Viewer360MarkerPinRenderProps<TData>) => ReactNode;
50
- classNames?: Viewer360MarkerPinClassNames;
51
- labels?: Viewer360MarkerPinLabels;
52
- };
@@ -1,108 +0,0 @@
1
- import type { CSSProperties, MouseEvent, ReactNode } from 'react';
2
-
3
- import type {
4
- Viewer360Hotspot,
5
- Viewer360HotspotPosition,
6
- Viewer360HotspotRenderProps,
7
- Viewer360OverlayRenderProps,
8
- Viewer360ToolbarRenderProps,
9
- } from './Viewer360Hotspot';
10
- import type { Viewer360HotspotPinOptions } from './Viewer360Marker';
11
-
12
- export type Viewer360ClassNames = {
13
- root?: string;
14
- viewport?: string;
15
- canvas?: string;
16
- overlay?: string;
17
- loading?: string;
18
- loadingText?: string;
19
- frameIndicator?: string;
20
- hotspotModeBanner?: string;
21
- toolbar?: string;
22
- dragHint?: string;
23
- controls?: string;
24
- controlButton?: string;
25
- controlButtonActive?: string;
26
- controlButtonDisabled?: string;
27
- zoomDisplay?: string;
28
- divider?: string;
29
- };
30
-
31
- export type Viewer360Labels = {
32
- loading?: string;
33
- dragHint?: string;
34
- frameIndicator?: (params: { current: number; total: number; label?: string }) => string;
35
- zoom?: (percent: number) => string;
36
- hotspotModeActive?: string;
37
- addHotspot?: string;
38
- zoomIn?: string;
39
- zoomOut?: string;
40
- resetView?: string;
41
- deleteMarker?: string;
42
- };
43
-
44
- export type Viewer360Theme = {
45
- '--viewer-bg'?: string;
46
- '--viewer-border'?: string;
47
- '--viewer-text'?: string;
48
- '--viewer-muted'?: string;
49
- '--viewer-accent'?: string;
50
- '--viewer-accent-foreground'?: string;
51
- '--viewer-control-bg'?: string;
52
- '--viewer-control-border'?: string;
53
- '--viewer-hotspot-banner-bg'?: string;
54
- '--viewer-hotspot-banner-border'?: string;
55
- '--viewer-hotspot-banner-text'?: string;
56
- };
57
-
58
- export type Viewer360Props<TData = unknown> = {
59
- frames: import('./Viewer360Hotspot').Viewer360Frame[];
60
- currentFrameIndex?: number;
61
- defaultFrameIndex?: number;
62
- onFrameChange?: (index: number) => void;
63
- config?: import('./Viewer360Hotspot').Viewer360Config;
64
- className?: string;
65
- classNames?: Viewer360ClassNames;
66
- style?: CSSProperties;
67
- theme?: Viewer360Theme;
68
- labels?: Viewer360Labels;
69
- aspectRatio?: string;
70
- showZoomControls?: boolean;
71
- showResetControl?: boolean;
72
- showFrameIndicator?: boolean;
73
- showDragHint?: boolean;
74
- showHotspotModeControl?: boolean;
75
- hotspotPin?: Viewer360HotspotPinOptions<TData>;
76
- hotspots?: Viewer360Hotspot<TData>[];
77
- renderHotspot?: (props: Viewer360HotspotRenderProps<TData>) => ReactNode;
78
- renderLoading?: () => ReactNode;
79
- renderFrameIndicator?: (props: Viewer360OverlayRenderProps) => ReactNode;
80
- renderHotspotModeBanner?: (props: Pick<Viewer360OverlayRenderProps, 'labels'>) => ReactNode;
81
- renderToolbar?: (props: Viewer360ToolbarRenderProps) => ReactNode;
82
- onHotspotClick?: (hotspot: Viewer360Hotspot<TData>, event: MouseEvent<HTMLDivElement>) => void;
83
- hotspotMode?: boolean;
84
- defaultHotspotMode?: boolean;
85
- onHotspotModeChange?: (active: boolean) => void;
86
- onHotspotAdd?: (position: Viewer360HotspotPosition) => void;
87
- children?: ReactNode;
88
- };
89
-
90
- export type {
91
- Viewer360Hotspot,
92
- Viewer360HotspotPosition,
93
- Viewer360HotspotRenderProps,
94
- Viewer360OverlayRenderProps,
95
- Viewer360ToolbarRenderProps,
96
- Viewer360Config,
97
- Viewer360Frame,
98
- Viewer360PanOffset,
99
- } from './Viewer360Hotspot';
100
-
101
- export type {
102
- Viewer360HotspotPinOptions,
103
- Viewer360Marker,
104
- Viewer360MarkerPinClassNames,
105
- Viewer360MarkerPinLabels,
106
- Viewer360MarkerPinProps,
107
- Viewer360MarkerPinRenderProps,
108
- } from './Viewer360Marker';
@@ -1,30 +0,0 @@
1
- export { defaultViewer360Config } from '../constants/viewer360Config';
2
- export { defaultViewer360Labels } from '../constants/viewer360Labels';
3
- export { defaultViewer360MarkerPinLabels } from '../constants/viewer360MarkerLabels';
4
- export {
5
- defaultViewer360ClassNames,
6
- defaultViewer360MarkerPinClassNames,
7
- viewer360ClassNames,
8
- viewer360MarkerPinClassNames,
9
- } from '../constants/viewer360ClassNames';
10
-
11
- export type {
12
- Viewer360ClassNames,
13
- Viewer360Config,
14
- Viewer360Frame,
15
- Viewer360Hotspot,
16
- Viewer360HotspotPinOptions,
17
- Viewer360HotspotPosition,
18
- Viewer360HotspotRenderProps,
19
- Viewer360Labels,
20
- Viewer360Marker,
21
- Viewer360MarkerPinClassNames,
22
- Viewer360MarkerPinLabels,
23
- Viewer360MarkerPinProps,
24
- Viewer360MarkerPinRenderProps,
25
- Viewer360OverlayRenderProps,
26
- Viewer360PanOffset,
27
- Viewer360Props,
28
- Viewer360Theme,
29
- Viewer360ToolbarRenderProps,
30
- } from './Viewer360Props';
@@ -1,6 +0,0 @@
1
- import clsx, { type ClassValue } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- export function cn(...inputs: ClassValue[]): string {
5
- return twMerge(clsx(inputs));
6
- }