@heliguy-xyz/splat-viewer-react-ui 1.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.
- package/README.md +191 -0
- package/dist/components/SplatSceneViewer/SplatSceneViewer.d.ts +25 -0
- package/dist/components/SplatSceneViewer/SplatSceneViewer.d.ts.map +1 -0
- package/dist/components/SplatSceneViewer/index.d.ts +3 -0
- package/dist/components/SplatSceneViewer/index.d.ts.map +1 -0
- package/dist/components/ui/BoxCropModal.d.ts +12 -0
- package/dist/components/ui/BoxCropModal.d.ts.map +1 -0
- package/dist/components/ui/ColorPicker.d.ts +10 -0
- package/dist/components/ui/ColorPicker.d.ts.map +1 -0
- package/dist/components/ui/EmptyState.d.ts +8 -0
- package/dist/components/ui/EmptyState.d.ts.map +1 -0
- package/dist/components/ui/InfoRow.d.ts +8 -0
- package/dist/components/ui/InfoRow.d.ts.map +1 -0
- package/dist/components/ui/InfoSection.d.ts +9 -0
- package/dist/components/ui/InfoSection.d.ts.map +1 -0
- package/dist/components/ui/PropertiesPanel.d.ts +25 -0
- package/dist/components/ui/PropertiesPanel.d.ts.map +1 -0
- package/dist/components/ui/Select.d.ts +13 -0
- package/dist/components/ui/Select.d.ts.map +1 -0
- package/dist/components/ui/SliderControl.d.ts +12 -0
- package/dist/components/ui/SliderControl.d.ts.map +1 -0
- package/dist/components/ui/SphereCropModal.d.ts +10 -0
- package/dist/components/ui/SphereCropModal.d.ts.map +1 -0
- package/dist/components/ui/TabBar.d.ts +15 -0
- package/dist/components/ui/TabBar.d.ts.map +1 -0
- package/dist/components/ui/TimelinePanel.d.ts +12 -0
- package/dist/components/ui/TimelinePanel.d.ts.map +1 -0
- package/dist/components/ui/ToggleControl.d.ts +8 -0
- package/dist/components/ui/ToggleControl.d.ts.map +1 -0
- package/dist/components/ui/TransformControl.d.ts +15 -0
- package/dist/components/ui/TransformControl.d.ts.map +1 -0
- package/dist/components/ui/ViewerToolbar.d.ts +11 -0
- package/dist/components/ui/ViewerToolbar.d.ts.map +1 -0
- package/dist/components/ui/buttons/IconButton.d.ts +12 -0
- package/dist/components/ui/buttons/IconButton.d.ts.map +1 -0
- package/dist/components/ui/buttons/ToggleButtonGroup.d.ts +16 -0
- package/dist/components/ui/buttons/ToggleButtonGroup.d.ts.map +1 -0
- package/dist/components/ui/icons/AirplaneTilt.d.ts +9 -0
- package/dist/components/ui/icons/AirplaneTilt.d.ts.map +1 -0
- package/dist/components/ui/icons/ArrowCounterClockwise.d.ts +9 -0
- package/dist/components/ui/icons/ArrowCounterClockwise.d.ts.map +1 -0
- package/dist/components/ui/icons/ArrowLeft.d.ts +9 -0
- package/dist/components/ui/icons/ArrowLeft.d.ts.map +1 -0
- package/dist/components/ui/icons/ArrowsOut.d.ts +9 -0
- package/dist/components/ui/icons/ArrowsOut.d.ts.map +1 -0
- package/dist/components/ui/icons/ChatCircleText.d.ts +9 -0
- package/dist/components/ui/icons/ChatCircleText.d.ts.map +1 -0
- package/dist/components/ui/icons/Circle.d.ts +9 -0
- package/dist/components/ui/icons/Circle.d.ts.map +1 -0
- package/dist/components/ui/icons/Crop.d.ts +9 -0
- package/dist/components/ui/icons/Crop.d.ts.map +1 -0
- package/dist/components/ui/icons/Cube.d.ts +9 -0
- package/dist/components/ui/icons/Cube.d.ts.map +1 -0
- package/dist/components/ui/icons/DownloadSimple.d.ts +9 -0
- package/dist/components/ui/icons/DownloadSimple.d.ts.map +1 -0
- package/dist/components/ui/icons/Export.d.ts +9 -0
- package/dist/components/ui/icons/Export.d.ts.map +1 -0
- package/dist/components/ui/icons/Eye.d.ts +9 -0
- package/dist/components/ui/icons/Eye.d.ts.map +1 -0
- package/dist/components/ui/icons/EyeClosed.d.ts +9 -0
- package/dist/components/ui/icons/EyeClosed.d.ts.map +1 -0
- package/dist/components/ui/icons/Facebook.d.ts +9 -0
- package/dist/components/ui/icons/Facebook.d.ts.map +1 -0
- package/dist/components/ui/icons/HandPointing.d.ts +9 -0
- package/dist/components/ui/icons/HandPointing.d.ts.map +1 -0
- package/dist/components/ui/icons/Info.d.ts +9 -0
- package/dist/components/ui/icons/Info.d.ts.map +1 -0
- package/dist/components/ui/icons/Instagram.d.ts +9 -0
- package/dist/components/ui/icons/Instagram.d.ts.map +1 -0
- package/dist/components/ui/icons/Linkedin.d.ts +9 -0
- package/dist/components/ui/icons/Linkedin.d.ts.map +1 -0
- package/dist/components/ui/icons/MapPinSimpleArea.d.ts +9 -0
- package/dist/components/ui/icons/MapPinSimpleArea.d.ts.map +1 -0
- package/dist/components/ui/icons/PencilSimple.d.ts +9 -0
- package/dist/components/ui/icons/PencilSimple.d.ts.map +1 -0
- package/dist/components/ui/icons/Ruler.d.ts +9 -0
- package/dist/components/ui/icons/Ruler.d.ts.map +1 -0
- package/dist/components/ui/icons/Scissors.d.ts +9 -0
- package/dist/components/ui/icons/Scissors.d.ts.map +1 -0
- package/dist/components/ui/icons/ShareNetwork.d.ts +9 -0
- package/dist/components/ui/icons/ShareNetwork.d.ts.map +1 -0
- package/dist/components/ui/icons/Trash.d.ts +9 -0
- package/dist/components/ui/icons/Trash.d.ts.map +1 -0
- package/dist/components/ui/icons/Twitter.d.ts +9 -0
- package/dist/components/ui/icons/Twitter.d.ts.map +1 -0
- package/dist/components/ui/icons/VideoCamera.d.ts +9 -0
- package/dist/components/ui/icons/VideoCamera.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +11 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +108 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/scene.d.ts +29 -0
- package/dist/types/scene.d.ts.map +1 -0
- package/package.json +83 -0
package/README.md
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# @heliguy-xyz/splat-viewer-react-ui
|
|
2
|
+
|
|
3
|
+
Full-featured React UI component for the 3D Gaussian Splat viewer with controls, model management, user permissions, and scene configuration.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @heliguy-xyz/splat-viewer-react-ui @heliguy-xyz/splat-viewer react react-dom
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- 🎨 **Full UI Controls** - Complete control panel with camera, scene, and model management
|
|
14
|
+
- 👥 **User Permissions** - Granular control over user capabilities
|
|
15
|
+
- 📦 **Model Management** - Add, remove, transform, and organize multiple models
|
|
16
|
+
- 🎥 **Camera Controls** - Orbit and fly camera modes with intuitive controls
|
|
17
|
+
- ⚙️ **Scene Configuration** - Background, grid, FOV, and rendering settings
|
|
18
|
+
- 🎭 **Theming** - Dark, light, and auto themes
|
|
19
|
+
- 📐 **Flexible Layouts** - Sidebar, bottom panel, floating, or custom layouts
|
|
20
|
+
- 📱 **Responsive** - Works on desktop, tablet, and mobile devices
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import React from 'react';
|
|
26
|
+
import { SplatViewerUI } from '@heliguy-xyz/splat-viewer-react-ui';
|
|
27
|
+
import '@heliguy-xyz/splat-viewer-react-ui/styles.css';
|
|
28
|
+
|
|
29
|
+
function App() {
|
|
30
|
+
const userRights = {
|
|
31
|
+
canAddModels: true,
|
|
32
|
+
canRemoveModels: true,
|
|
33
|
+
canTransform: true,
|
|
34
|
+
canChangeSettings: true,
|
|
35
|
+
canToggleCameraMode: true,
|
|
36
|
+
canEditSceneConfig: true,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<SplatViewerUI
|
|
41
|
+
userRights={userRights}
|
|
42
|
+
initialModels={[
|
|
43
|
+
{
|
|
44
|
+
name: 'My Model',
|
|
45
|
+
url: '/path/to/model.splat',
|
|
46
|
+
},
|
|
47
|
+
]}
|
|
48
|
+
sceneConfig={{
|
|
49
|
+
backgroundColor: '#1a1a1a',
|
|
50
|
+
showGrid: true,
|
|
51
|
+
showStats: true,
|
|
52
|
+
}}
|
|
53
|
+
showControls
|
|
54
|
+
showModelList
|
|
55
|
+
showTransformTools
|
|
56
|
+
layout="sidebar"
|
|
57
|
+
theme="dark"
|
|
58
|
+
onSceneReady={() => console.log('Scene ready!')}
|
|
59
|
+
onModelAdded={(id, info) => console.log('Model added:', id, info)}
|
|
60
|
+
onError={(error) => console.error('Error:', error)}
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Props
|
|
67
|
+
|
|
68
|
+
### `SplatViewerUIProps`
|
|
69
|
+
|
|
70
|
+
| Prop | Type | Default | Description |
|
|
71
|
+
|------|------|---------|-------------|
|
|
72
|
+
| `userRights` | `UserRights` | **required** | User permissions for UI features |
|
|
73
|
+
| `initialModels` | `ModelConfig[]` | `[]` | Models to load on initialization |
|
|
74
|
+
| `sceneConfig` | `SceneConfig` | `{}` | Scene configuration options |
|
|
75
|
+
| `showControls` | `boolean` | `true` | Show control panel |
|
|
76
|
+
| `showModelList` | `boolean` | `true` | Show model list panel |
|
|
77
|
+
| `showTransformTools` | `boolean` | `true` | Show transform tools |
|
|
78
|
+
| `showCameraControls` | `boolean` | `true` | Show camera controls |
|
|
79
|
+
| `showSceneSettings` | `boolean` | `true` | Show scene settings |
|
|
80
|
+
| `layout` | `'sidebar' \| 'bottom-panel' \| 'floating' \| 'custom'` | `'sidebar'` | UI layout mode |
|
|
81
|
+
| `theme` | `'dark' \| 'light' \| 'auto'` | `'dark'` | Color theme |
|
|
82
|
+
| `width` | `string \| number` | `'100%'` | Viewer width |
|
|
83
|
+
| `height` | `string \| number` | `'100%'` | Viewer height |
|
|
84
|
+
|
|
85
|
+
### Callbacks
|
|
86
|
+
|
|
87
|
+
- `onSceneReady()` - Called when the scene is initialized
|
|
88
|
+
- `onModelAdded(modelId, modelInfo)` - Called when a model is added
|
|
89
|
+
- `onModelRemoved(modelId)` - Called when a model is removed
|
|
90
|
+
- `onModelSelected(modelId)` - Called when a model is selected
|
|
91
|
+
- `onError(error)` - Called on errors
|
|
92
|
+
- `onCameraModeChange(mode)` - Called when camera mode changes
|
|
93
|
+
- `onSceneConfigChange(config)` - Called when scene config changes
|
|
94
|
+
|
|
95
|
+
## User Rights
|
|
96
|
+
|
|
97
|
+
Control what users can do with the `userRights` prop:
|
|
98
|
+
|
|
99
|
+
```tsx
|
|
100
|
+
const userRights = {
|
|
101
|
+
canAddModels: true, // Can upload/add new models
|
|
102
|
+
canRemoveModels: true, // Can delete models
|
|
103
|
+
canTransform: true, // Can move/rotate/scale models
|
|
104
|
+
canChangeSettings: true, // Can modify viewer settings
|
|
105
|
+
canToggleCameraMode: true, // Can switch between orbit/fly mode
|
|
106
|
+
canEditSceneConfig: true, // Can change background, grid, etc.
|
|
107
|
+
};
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Layouts
|
|
111
|
+
|
|
112
|
+
### Sidebar Layout
|
|
113
|
+
```tsx
|
|
114
|
+
<SplatViewerUI layout="sidebar" {...props} />
|
|
115
|
+
```
|
|
116
|
+
Controls on the right side with vertical panels.
|
|
117
|
+
|
|
118
|
+
### Bottom Panel Layout
|
|
119
|
+
```tsx
|
|
120
|
+
<SplatViewerUI layout="bottom-panel" {...props} />
|
|
121
|
+
```
|
|
122
|
+
Controls at the bottom with horizontal layout.
|
|
123
|
+
|
|
124
|
+
### Floating Layout
|
|
125
|
+
```tsx
|
|
126
|
+
<SplatViewerUI layout="floating" {...props} />
|
|
127
|
+
```
|
|
128
|
+
Floating panels that can be positioned freely.
|
|
129
|
+
|
|
130
|
+
### Custom Layout
|
|
131
|
+
```tsx
|
|
132
|
+
<SplatViewerUI layout="custom" {...props} />
|
|
133
|
+
```
|
|
134
|
+
Minimal UI - integrate your own custom controls.
|
|
135
|
+
|
|
136
|
+
## Theming
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// Dark theme (default)
|
|
140
|
+
<SplatViewerUI theme="dark" {...props} />
|
|
141
|
+
|
|
142
|
+
// Light theme
|
|
143
|
+
<SplatViewerUI theme="light" {...props} />
|
|
144
|
+
|
|
145
|
+
// Auto (follows system preference)
|
|
146
|
+
<SplatViewerUI theme="auto" {...props} />
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Styling Requirements
|
|
150
|
+
|
|
151
|
+
This package uses **Tailwind CSS** for styling. Your application must have Tailwind CSS configured.
|
|
152
|
+
|
|
153
|
+
Add the package path to your Tailwind content configuration:
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
// tailwind.config.js
|
|
157
|
+
module.exports = {
|
|
158
|
+
content: [
|
|
159
|
+
'./src/**/*.{js,jsx,ts,tsx}',
|
|
160
|
+
'./node_modules/@heliguy-xyz/splat-viewer-react-ui/**/*.{js,jsx,ts,tsx}',
|
|
161
|
+
],
|
|
162
|
+
// ... rest of your config
|
|
163
|
+
};
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Development
|
|
167
|
+
|
|
168
|
+
This package is part of the `@heliguy-xyz/splat-viewer` monorepo.
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# Build
|
|
172
|
+
npm run build
|
|
173
|
+
|
|
174
|
+
# Development
|
|
175
|
+
npm run dev
|
|
176
|
+
|
|
177
|
+
# Lint
|
|
178
|
+
npm run lint
|
|
179
|
+
npm run lint:fix
|
|
180
|
+
|
|
181
|
+
# Type check
|
|
182
|
+
npm run type-check
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## License
|
|
186
|
+
|
|
187
|
+
MIT © Heliguy
|
|
188
|
+
|
|
189
|
+
## Related Packages
|
|
190
|
+
|
|
191
|
+
- [@heliguy-xyz/splat-viewer](https://www.npmjs.com/package/@heliguy-xyz/splat-viewer) - Core web component
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ModelTransform } from '../../types/scene';
|
|
2
|
+
type ModelInfo = any;
|
|
3
|
+
export interface ModelItem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
uploadedAt: string;
|
|
7
|
+
visible: boolean;
|
|
8
|
+
info?: ModelInfo;
|
|
9
|
+
}
|
|
10
|
+
export interface SplatSceneViewerProps {
|
|
11
|
+
viewOnly?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
models?: ModelItem[];
|
|
14
|
+
onReady?: () => void;
|
|
15
|
+
onError?: (error: Error) => void;
|
|
16
|
+
onShareClick?: () => void;
|
|
17
|
+
onModelImportOpen?: () => void;
|
|
18
|
+
onModelSelect?: (modelId: string | null) => void;
|
|
19
|
+
onSceneSettingsChange?: (settings: Record<string, any>) => void;
|
|
20
|
+
onModelTransformChange?: (modelId: string, transform: ModelTransform) => void;
|
|
21
|
+
uploadModel?: (file: File) => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export declare function SplatSceneViewer({ viewOnly, className, models, onReady, onError, onShareClick, onModelImportOpen, onModelSelect, onSceneSettingsChange, onModelTransformChange, uploadModel, }: SplatSceneViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=SplatSceneViewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplatSceneViewer.d.ts","sourceRoot":"","sources":["../../../src/components/SplatSceneViewer/SplatSceneViewer.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,KAAK,SAAS,GAAG,GAAG,CAAA;AAIpB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAGlB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IAGpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAA;IAC/D,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,KAAK,IAAI,CAAA;IAG7E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAgB,EAChB,SAAc,EACd,MAAW,EACX,OAAO,EACP,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,GACZ,EAAE,qBAAqB,2CAixCvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SplatSceneViewer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface BoxCropModalProps {
|
|
2
|
+
onSet: (sizeX: number, sizeY: number, sizeZ: number) => void;
|
|
3
|
+
onAdd: (sizeX: number, sizeY: number, sizeZ: number) => void;
|
|
4
|
+
onRemove: () => void;
|
|
5
|
+
onSizeChange?: (sizeX: number, sizeY: number, sizeZ: number) => void;
|
|
6
|
+
initialSizeX?: number;
|
|
7
|
+
initialSizeY?: number;
|
|
8
|
+
initialSizeZ?: number;
|
|
9
|
+
}
|
|
10
|
+
export default function BoxCropModal({ onSet, onAdd, onRemove, onSizeChange, initialSizeX, initialSizeY, initialSizeZ, }: Readonly<BoxCropModalProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=BoxCropModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxCropModal.d.ts","sourceRoot":"","sources":["../../../src/components/ui/BoxCropModal.tsx"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAgB,EAChB,YAAgB,EAChB,YAAgB,GACjB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,2CAuH7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
interface ColorPickerProps {
|
|
3
|
+
colors: string[];
|
|
4
|
+
selectedColor: string;
|
|
5
|
+
onChange: (color: string) => void;
|
|
6
|
+
getStyle?: (color: string, isSelected: boolean) => CSSProperties;
|
|
7
|
+
}
|
|
8
|
+
export default function ColorPicker({ colors, selectedColor, onChange, getStyle, }: Readonly<ColorPickerProps>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ColorPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ColorPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,aAAa,CAAC;CAClE;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,GACT,EAAE,QAAQ,CAAC,gBAAgB,CAAC,2CAuB5B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
interface EmptyStateProps {
|
|
3
|
+
icon: ReactNode;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export default function EmptyState({ icon, message, }: Readonly<EmptyStateProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/ui/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,eAAe;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,OAAO,GACR,EAAE,QAAQ,CAAC,eAAe,CAAC,2CAS3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface InfoRowProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string | number;
|
|
4
|
+
monospace?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export default function InfoRow({ label, value, monospace, }: Readonly<InfoRowProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=InfoRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoRow.d.ts","sourceRoot":"","sources":["../../../src/components/ui/InfoRow.tsx"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,SAAiB,GAClB,EAAE,QAAQ,CAAC,YAAY,CAAC,2CAexB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
interface InfoSectionProps {
|
|
3
|
+
title: string;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
withSeparator?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export default function InfoSection({ title, children, withSeparator, }: Readonly<InfoSectionProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=InfoSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoSection.d.ts","sourceRoot":"","sources":["../../../src/components/ui/InfoSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,aAAqB,GACtB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,2CAU5B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { TabType } from "./TabBar";
|
|
2
|
+
import type { ModelTransform } from "../../types/scene";
|
|
3
|
+
type ModelMetadata = any;
|
|
4
|
+
interface PropertiesPanelProps {
|
|
5
|
+
selectedModelId: string | null;
|
|
6
|
+
modelStats?: ModelMetadata | null;
|
|
7
|
+
onTabChange?: (tab: TabType) => void;
|
|
8
|
+
defaultTab?: TabType;
|
|
9
|
+
transform?: ModelTransform | null;
|
|
10
|
+
onPositionChange?: (axis: "x" | "y" | "z", value: number) => void;
|
|
11
|
+
onRotationChange?: (axis: "x" | "y" | "z", value: number) => void;
|
|
12
|
+
onScaleChange?: (axis: "x" | "y" | "z", value: number) => void;
|
|
13
|
+
onBackgroundColorChange?: (color: string) => void;
|
|
14
|
+
onFieldOfViewChange?: (value: number) => void;
|
|
15
|
+
onShBandsChange?: (value: number) => void;
|
|
16
|
+
onFlySpeedChange?: (value: number) => void;
|
|
17
|
+
onSkyboxToggle?: (enabled: boolean) => void;
|
|
18
|
+
onGridToggle?: (enabled: boolean) => void;
|
|
19
|
+
onBoundingBoxToggle?: (enabled: boolean) => void;
|
|
20
|
+
activeCropTool?: "box" | "sphere" | null;
|
|
21
|
+
onCropToolChange?: (tool: "box" | "sphere" | null) => void;
|
|
22
|
+
}
|
|
23
|
+
export default function PropertiesPanel({ selectedModelId, modelStats, onTabChange, defaultTab, transform, onPositionChange, onRotationChange, onScaleChange, onBackgroundColorChange, onFieldOfViewChange, onShBandsChange, onFlySpeedChange, onSkyboxToggle, onGridToggle, onBoundingBoxToggle, activeCropTool, onCropToolChange, }: Readonly<PropertiesPanelProps>): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=PropertiesPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertiesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PropertiesPanel.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,KAAK,aAAa,GAAG,GAAG,CAAC;AA2CzB,UAAU,oBAAoB;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5D;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,eAAe,EACf,UAAiB,EACjB,WAAW,EACX,UAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAqB,EACrB,gBAAgB,GACjB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,2CA+YhC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface SelectOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
interface SelectProps {
|
|
6
|
+
options: SelectOption[];
|
|
7
|
+
value: string;
|
|
8
|
+
onChange: (value: string) => void;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
}
|
|
11
|
+
export default function Select({ options, value, onChange, placeholder, }: Readonly<SelectProps>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=Select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Select.tsx"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAW,GACZ,EAAE,QAAQ,CAAC,WAAW,CAAC,2CAuCvB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SliderControlProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value: number;
|
|
4
|
+
min?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
step?: number;
|
|
7
|
+
onChange: (value: number) => void;
|
|
8
|
+
debounceMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export default function SliderControl({ label, value, min, max, step, onChange, debounceMs, }: Readonly<SliderControlProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=SliderControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliderControl.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SliderControl.tsx"],"names":[],"mappings":"AAMA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,EACL,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAQ,EACR,QAAQ,EACR,UAAgB,GACjB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,2CA8D9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface SphereCropModalProps {
|
|
2
|
+
onSet: (radius: number) => void;
|
|
3
|
+
onAdd: (radius: number) => void;
|
|
4
|
+
onRemove: () => void;
|
|
5
|
+
onRadiusChange?: (radius: number) => void;
|
|
6
|
+
initialRadius?: number;
|
|
7
|
+
}
|
|
8
|
+
export default function SphereCropModal({ onSet, onAdd, onRemove, onRadiusChange, initialRadius, }: Readonly<SphereCropModalProps>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=SphereCropModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SphereCropModal.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SphereCropModal.tsx"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC5B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,cAAc,EACd,aAAiB,GAClB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,2CA8FhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type TabType = "info" | "edit" | "scene";
|
|
3
|
+
interface Tab {
|
|
4
|
+
id: TabType;
|
|
5
|
+
label: string;
|
|
6
|
+
icon: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
interface TabBarProps {
|
|
9
|
+
tabs: Tab[];
|
|
10
|
+
activeTab: TabType;
|
|
11
|
+
onTabChange: (tab: TabType) => void;
|
|
12
|
+
}
|
|
13
|
+
export default function TabBar({ tabs, activeTab, onTabChange, }: Readonly<TabBarProps>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=TabBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/TabBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,UAAU,GAAG;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,IAAI,EACJ,SAAS,EACT,WAAW,GACZ,EAAE,QAAQ,CAAC,WAAW,CAAC,2CAmBvB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type ModelInfo = any;
|
|
2
|
+
interface TimelinePanelProps {
|
|
3
|
+
models: ModelInfo[];
|
|
4
|
+
selectedModelId: string | null;
|
|
5
|
+
onSelectModel?: (modelId: string) => void;
|
|
6
|
+
onAddSheet?: () => void;
|
|
7
|
+
onToggleVisibility?: (modelId: string, visible: boolean) => void;
|
|
8
|
+
onRemoveModel?: (modelId: string) => void;
|
|
9
|
+
}
|
|
10
|
+
export default function TimelinePanel({ models, selectedModelId, onSelectModel, onAddSheet, onToggleVisibility, onRemoveModel, }: Readonly<TimelinePanelProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=TimelinePanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelinePanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/TimelinePanel.tsx"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,GAAG,CAAC;AAErB,UAAU,kBAAkB;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,MAAM,EACN,eAAe,EACf,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,EAAE,QAAQ,CAAC,kBAAkB,CAAC,2CA8I9B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface ToggleControlProps {
|
|
2
|
+
label: string;
|
|
3
|
+
checked: boolean;
|
|
4
|
+
onChange: (checked: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
export default function ToggleControl({ label, checked, onChange, }: Readonly<ToggleControlProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ToggleControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleControl.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ToggleControl.tsx"],"names":[],"mappings":"AAAA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,EACL,OAAO,EACP,QAAQ,GACT,EAAE,QAAQ,CAAC,kBAAkB,CAAC,2CAwB9B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
interface TransformValues {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
z: number;
|
|
6
|
+
}
|
|
7
|
+
interface TransformControlProps {
|
|
8
|
+
label: string;
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
values: TransformValues;
|
|
11
|
+
onChange: (values: TransformValues) => void;
|
|
12
|
+
}
|
|
13
|
+
export default function TransformControl({ label, icon, values, onChange, }: Readonly<TransformControlProps>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=TransformControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformControl.d.ts","sourceRoot":"","sources":["../../../src/components/ui/TransformControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,UAAU,eAAe;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAQD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,GACT,EAAE,QAAQ,CAAC,qBAAqB,CAAC,2CA+EjC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface ViewerToolbarProps {
|
|
3
|
+
title: string;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
leftSection?: ReactNode;
|
|
6
|
+
centerSection?: ReactNode;
|
|
7
|
+
rightSection?: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export default function ViewerToolbar({ title, onBack, leftSection, centerSection, rightSection, className, }: Readonly<ViewerToolbarProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=ViewerToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerToolbar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ViewerToolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,YAAY,EACZ,SAAS,GACV,EAAE,QAAQ,CAAC,kBAAkB,CAAC,2CA4D9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
type Size = "sm" | "md" | "lg";
|
|
3
|
+
type Variant = "default" | "ghost";
|
|
4
|
+
export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "className"> {
|
|
5
|
+
icon: ReactNode;
|
|
6
|
+
size?: Size;
|
|
7
|
+
variant?: Variant;
|
|
8
|
+
active?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export default function IconButton({ icon, size, variant, active, disabled, ...props }: Readonly<IconButtonProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=IconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/buttons/IconButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/B,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnC,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAClE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA0BD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,IAAW,EACX,OAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,QAAQ,CAAC,eAAe,CAAC,2CA2B3B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface ToggleButton {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export interface ToggleButtonGroupProps {
|
|
8
|
+
buttons: ToggleButton[];
|
|
9
|
+
value: string;
|
|
10
|
+
onChange: (value: string) => void;
|
|
11
|
+
size?: "sm" | "md";
|
|
12
|
+
iconOnly?: boolean;
|
|
13
|
+
fullWidth?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export default function ToggleButtonGroup({ buttons, value, onChange, size, iconOnly, fullWidth, }: Readonly<ToggleButtonGroupProps>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=ToggleButtonGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/buttons/ToggleButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiBD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAW,EACX,QAAgB,EAChB,SAAiB,GAClB,EAAE,QAAQ,CAAC,sBAAsB,CAAC,2CA6ClC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgAirplaneTilt: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgAirplaneTilt;
|
|
9
|
+
//# sourceMappingURL=AirplaneTilt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AirplaneTilt.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/AirplaneTilt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,eAAe,GAAI,oCAKtB,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgArrowCounterClockwise: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgArrowCounterClockwise;
|
|
9
|
+
//# sourceMappingURL=ArrowCounterClockwise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrowCounterClockwise.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/ArrowCounterClockwise.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,wBAAwB,GAAI,oCAK/B,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgArrowLeft: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgArrowLeft;
|
|
9
|
+
//# sourceMappingURL=ArrowLeft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrowLeft.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/ArrowLeft.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,YAAY,GAAI,oCAKnB,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgArrowsOut: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgArrowsOut;
|
|
9
|
+
//# sourceMappingURL=ArrowsOut.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrowsOut.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/ArrowsOut.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,YAAY,GAAI,oCAKnB,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgChatCircleText: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgChatCircleText;
|
|
9
|
+
//# sourceMappingURL=ChatCircleText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatCircleText.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/ChatCircleText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,iBAAiB,GAAI,oCAKxB,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from "react";
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgCircle: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgCircle;
|
|
9
|
+
//# sourceMappingURL=Circle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,SAAS,GAAI,oCAKhB,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
size?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
titleId?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const SvgCrop: ({ size, title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SvgCrop;
|
|
9
|
+
//# sourceMappingURL=Crop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Crop.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/icons/Crop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,QAAA,MAAM,OAAO,GAAI,oCAKd,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,4CAqBrC,CAAC;AACF,eAAe,OAAO,CAAC"}
|