@tableslayer/ui 0.0.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/LICENSE.md +105 -0
- package/README.md +45 -0
- package/dist/components/Avatar/Avatar.svelte +82 -0
- package/dist/components/Avatar/Avatar.svelte.d.ts +4 -0
- package/dist/components/Avatar/AvatarFileInput.svelte +85 -0
- package/dist/components/Avatar/AvatarFileInput.svelte.d.ts +4 -0
- package/dist/components/Avatar/AvatarPopover.svelte +34 -0
- package/dist/components/Avatar/AvatarPopover.svelte.d.ts +4 -0
- package/dist/components/Avatar/index.d.ts +4 -0
- package/dist/components/Avatar/index.js +4 -0
- package/dist/components/Avatar/types.d.ts +21 -0
- package/dist/components/Avatar/types.js +1 -0
- package/dist/components/BrushSizeSlider/BrushSizeSlider.svelte +174 -0
- package/dist/components/BrushSizeSlider/BrushSizeSlider.svelte.d.ts +11 -0
- package/dist/components/BrushSizeSlider/index.d.ts +1 -0
- package/dist/components/BrushSizeSlider/index.js +1 -0
- package/dist/components/Button/Button.svelte +182 -0
- package/dist/components/Button/Button.svelte.d.ts +26 -0
- package/dist/components/Button/ConfirmActionButton.svelte +98 -0
- package/dist/components/Button/ConfirmActionButton.svelte.d.ts +4 -0
- package/dist/components/Button/IconButton.svelte +121 -0
- package/dist/components/Button/IconButton.svelte.d.ts +4 -0
- package/dist/components/Button/RadioButton.svelte +93 -0
- package/dist/components/Button/RadioButton.svelte.d.ts +15 -0
- package/dist/components/Button/index.d.ts +5 -0
- package/dist/components/Button/index.js +5 -0
- package/dist/components/Button/types.d.ts +55 -0
- package/dist/components/Button/types.js +1 -0
- package/dist/components/CardFan/CardFan.svelte +165 -0
- package/dist/components/CardFan/CardFan.svelte.d.ts +4 -0
- package/dist/components/CardFan/index.d.ts +2 -0
- package/dist/components/CardFan/index.js +2 -0
- package/dist/components/CardFan/types.d.ts +5 -0
- package/dist/components/CardFan/types.js +1 -0
- package/dist/components/CodeBlock/Code.svelte +7 -0
- package/dist/components/CodeBlock/Code.svelte.d.ts +4 -0
- package/dist/components/CodeBlock/CodeBlock.svelte +102 -0
- package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +4 -0
- package/dist/components/CodeBlock/index.d.ts +3 -0
- package/dist/components/CodeBlock/index.js +3 -0
- package/dist/components/CodeBlock/types.d.ts +9 -0
- package/dist/components/CodeBlock/types.js +1 -0
- package/dist/components/ColorMode/ColorMode.svelte +8 -0
- package/dist/components/ColorMode/ColorMode.svelte.d.ts +4 -0
- package/dist/components/ColorMode/index.d.ts +2 -0
- package/dist/components/ColorMode/index.js +1 -0
- package/dist/components/ColorMode/types.d.ts +10 -0
- package/dist/components/ColorMode/types.js +1 -0
- package/dist/components/ColorPicker/ColorPicker.svelte +838 -0
- package/dist/components/ColorPicker/ColorPicker.svelte.d.ts +4 -0
- package/dist/components/ColorPicker/ColorPickerSwatch.svelte +32 -0
- package/dist/components/ColorPicker/ColorPickerSwatch.svelte.d.ts +6 -0
- package/dist/components/ColorPicker/index.d.ts +3 -0
- package/dist/components/ColorPicker/index.js +3 -0
- package/dist/components/ColorPicker/types.d.ts +60 -0
- package/dist/components/ColorPicker/types.js +1 -0
- package/dist/components/ContextMenu/ContextMenu.svelte +86 -0
- package/dist/components/ContextMenu/ContextMenu.svelte.d.ts +4 -0
- package/dist/components/ContextMenu/index.d.ts +2 -0
- package/dist/components/ContextMenu/index.js +2 -0
- package/dist/components/ContextMenu/types.d.ts +13 -0
- package/dist/components/ContextMenu/types.js +1 -0
- package/dist/components/DrawingSliders/DrawingSliders.svelte +379 -0
- package/dist/components/DrawingSliders/DrawingSliders.svelte.d.ts +16 -0
- package/dist/components/DrawingSliders/index.d.ts +1 -0
- package/dist/components/DrawingSliders/index.js +1 -0
- package/dist/components/Editor/Editor.svelte +825 -0
- package/dist/components/Editor/Editor.svelte.d.ts +11 -0
- package/dist/components/Editor/index.d.ts +1 -0
- package/dist/components/Editor/index.js +1 -0
- package/dist/components/FogSliders/FogSliders.svelte +33 -0
- package/dist/components/FogSliders/FogSliders.svelte.d.ts +7 -0
- package/dist/components/FogSliders/index.d.ts +1 -0
- package/dist/components/FogSliders/index.js +1 -0
- package/dist/components/Hr/Hr.svelte +15 -0
- package/dist/components/Hr/Hr.svelte.d.ts +3 -0
- package/dist/components/Hr/index.d.ts +1 -0
- package/dist/components/Hr/index.js +1 -0
- package/dist/components/Icon/Icon.svelte +6 -0
- package/dist/components/Icon/Icon.svelte.d.ts +4 -0
- package/dist/components/Icon/index.d.ts +2 -0
- package/dist/components/Icon/index.js +1 -0
- package/dist/components/Icon/types.d.ts +18 -0
- package/dist/components/Icon/types.js +1 -0
- package/dist/components/Input/DualInputSlider.svelte +126 -0
- package/dist/components/Input/DualInputSlider.svelte.d.ts +4 -0
- package/dist/components/Input/FileInput.svelte +176 -0
- package/dist/components/Input/FileInput.svelte.d.ts +21 -0
- package/dist/components/Input/FormControl.svelte +150 -0
- package/dist/components/Input/FormControl.svelte.d.ts +41 -0
- package/dist/components/Input/FormError.svelte +37 -0
- package/dist/components/Input/FormError.svelte.d.ts +13 -0
- package/dist/components/Input/Input.svelte +56 -0
- package/dist/components/Input/Input.svelte.d.ts +4 -0
- package/dist/components/Input/InputCheckbox.svelte +99 -0
- package/dist/components/Input/InputCheckbox.svelte.d.ts +4 -0
- package/dist/components/Input/InputSlider.svelte +86 -0
- package/dist/components/Input/InputSlider.svelte.d.ts +4 -0
- package/dist/components/Input/Label.svelte +19 -0
- package/dist/components/Input/Label.svelte.d.ts +4 -0
- package/dist/components/Input/index.d.ts +9 -0
- package/dist/components/Input/index.js +9 -0
- package/dist/components/Input/types.d.ts +33 -0
- package/dist/components/Input/types.js +1 -0
- package/dist/components/Link/Link.svelte +41 -0
- package/dist/components/Link/Link.svelte.d.ts +4 -0
- package/dist/components/Link/LinkBox.svelte +20 -0
- package/dist/components/Link/LinkBox.svelte.d.ts +4 -0
- package/dist/components/Link/LinkOverlay.svelte +23 -0
- package/dist/components/Link/LinkOverlay.svelte.d.ts +4 -0
- package/dist/components/Link/index.d.ts +4 -0
- package/dist/components/Link/index.js +4 -0
- package/dist/components/Link/types.d.ts +15 -0
- package/dist/components/Link/types.js +1 -0
- package/dist/components/Loading/Loader.svelte +60 -0
- package/dist/components/Loading/Loader.svelte.d.ts +3 -0
- package/dist/components/Loading/Skeleton.svelte +9 -0
- package/dist/components/Loading/Skeleton.svelte.d.ts +26 -0
- package/dist/components/Loading/index.d.ts +2 -0
- package/dist/components/Loading/index.js +2 -0
- package/dist/components/Logo/Logo.svelte +16 -0
- package/dist/components/Logo/Logo.svelte.d.ts +7 -0
- package/dist/components/Logo/index.d.ts +1 -0
- package/dist/components/Logo/index.js +1 -0
- package/dist/components/MarkerTooltip/MarkerTooltip.svelte +435 -0
- package/dist/components/MarkerTooltip/MarkerTooltip.svelte.d.ts +35 -0
- package/dist/components/MarkerTooltip/index.d.ts +1 -0
- package/dist/components/MarkerTooltip/index.js +1 -0
- package/dist/components/Menu/SelectorMenu.svelte +280 -0
- package/dist/components/Menu/SelectorMenu.svelte.d.ts +4 -0
- package/dist/components/Menu/index.d.ts +2 -0
- package/dist/components/Menu/index.js +2 -0
- package/dist/components/Menu/types.d.ts +20 -0
- package/dist/components/Menu/types.js +1 -0
- package/dist/components/MyCounterButton.svelte +11 -0
- package/dist/components/MyCounterButton.svelte.d.ts +3 -0
- package/dist/components/Panel/index.d.ts +2 -0
- package/dist/components/Panel/index.js +2 -0
- package/dist/components/Panel/panel.svelte +18 -0
- package/dist/components/Panel/panel.svelte.d.ts +4 -0
- package/dist/components/Panel/types.d.ts +7 -0
- package/dist/components/Panel/types.js +1 -0
- package/dist/components/PersistButton/PersistButton.svelte +100 -0
- package/dist/components/PersistButton/PersistButton.svelte.d.ts +12 -0
- package/dist/components/PersistButton/index.d.ts +1 -0
- package/dist/components/PersistButton/index.js +1 -0
- package/dist/components/Popover/Popover.svelte +81 -0
- package/dist/components/Popover/Popover.svelte.d.ts +6 -0
- package/dist/components/Popover/index.d.ts +2 -0
- package/dist/components/Popover/index.js +2 -0
- package/dist/components/Popover/types.d.ts +17 -0
- package/dist/components/Popover/types.js +1 -0
- package/dist/components/PropsTable/PropsTable.svelte +107 -0
- package/dist/components/PropsTable/PropsTable.svelte.d.ts +26 -0
- package/dist/components/RadialMenu/EffectPreview.svelte +36 -0
- package/dist/components/RadialMenu/EffectPreview.svelte.d.ts +9 -0
- package/dist/components/RadialMenu/EffectPreviewScene.svelte +194 -0
- package/dist/components/RadialMenu/EffectPreviewScene.svelte.d.ts +8 -0
- package/dist/components/RadialMenu/RadialMenu.svelte +503 -0
- package/dist/components/RadialMenu/RadialMenu.svelte.d.ts +4 -0
- package/dist/components/RadialMenu/RadialMenuItem.svelte +176 -0
- package/dist/components/RadialMenu/RadialMenuItem.svelte.d.ts +11 -0
- package/dist/components/RadialMenu/index.d.ts +2 -0
- package/dist/components/RadialMenu/index.js +2 -0
- package/dist/components/RadialMenu/types.d.ts +35 -0
- package/dist/components/RadialMenu/types.js +1 -0
- package/dist/components/Select/Select.svelte +342 -0
- package/dist/components/Select/Select.svelte.d.ts +4 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/index.js +2 -0
- package/dist/components/Select/types.d.ts +24 -0
- package/dist/components/Select/types.js +1 -0
- package/dist/components/Spacer/Spacer.svelte +14 -0
- package/dist/components/Spacer/Spacer.svelte.d.ts +4 -0
- package/dist/components/Spacer/index.d.ts +2 -0
- package/dist/components/Spacer/index.js +2 -0
- package/dist/components/Spacer/types.d.ts +4 -0
- package/dist/components/Spacer/types.js +1 -0
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte +445 -0
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte.d.ts +19 -0
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte +167 -0
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte.d.ts +20 -0
- package/dist/components/Stage/components/AnnotationLayer/types.d.ts +121 -0
- package/dist/components/Stage/components/AnnotationLayer/types.js +71 -0
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte +148 -0
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte.d.ts +7 -0
- package/dist/components/Stage/components/CursorLayer/cursor.svg +26 -0
- package/dist/components/Stage/components/CursorLayer/index.d.ts +2 -0
- package/dist/components/Stage/components/CursorLayer/index.js +1 -0
- package/dist/components/Stage/components/CursorLayer/types.d.ts +28 -0
- package/dist/components/Stage/components/CursorLayer/types.js +1 -0
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte +364 -0
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte.d.ts +24 -0
- package/dist/components/Stage/components/DrawingLayer/types.d.ts +56 -0
- package/dist/components/Stage/components/DrawingLayer/types.js +23 -0
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte +72 -0
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte.d.ts +11 -0
- package/dist/components/Stage/components/EdgeOverlayLayer/types.d.ts +29 -0
- package/dist/components/Stage/components/EdgeOverlayLayer/types.js +1 -0
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte +75 -0
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte.d.ts +11 -0
- package/dist/components/Stage/components/FogLayer/types.d.ts +42 -0
- package/dist/components/Stage/components/FogLayer/types.js +1 -0
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte +249 -0
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte.d.ts +19 -0
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte +200 -0
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte.d.ts +18 -0
- package/dist/components/Stage/components/FogOfWarLayer/types.d.ts +143 -0
- package/dist/components/Stage/components/FogOfWarLayer/types.js +1 -0
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte +20 -0
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte.d.ts +12 -0
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte +69 -0
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte.d.ts +10 -0
- package/dist/components/Stage/components/GridLayer/types.d.ts +65 -0
- package/dist/components/Stage/components/GridLayer/types.js +10 -0
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte +300 -0
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte.d.ts +20 -0
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte +196 -0
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte.d.ts +24 -0
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.d.ts +93 -0
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.js +229 -0
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.d.ts +51 -0
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.js +1 -0
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.d.ts +49 -0
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.js +87 -0
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.d.ts +52 -0
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.js +141 -0
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.d.ts +21 -0
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.js +44 -0
- package/dist/components/Stage/components/MapLayer/dataSources/index.d.ts +15 -0
- package/dist/components/Stage/components/MapLayer/dataSources/index.js +14 -0
- package/dist/components/Stage/components/MapLayer/types.d.ts +54 -0
- package/dist/components/Stage/components/MapLayer/types.js +9 -0
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte +398 -0
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte.d.ts +24 -0
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte +262 -0
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte.d.ts +27 -0
- package/dist/components/Stage/components/MarkerLayer/types.d.ts +109 -0
- package/dist/components/Stage/components/MarkerLayer/types.js +21 -0
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte +364 -0
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte.d.ts +49 -0
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte +473 -0
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte.d.ts +24 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.d.ts +150 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.js +274 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.d.ts +10 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.js +58 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.d.ts +9 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.js +66 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.d.ts +10 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.js +103 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.d.ts +9 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.js +75 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.d.ts +9 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.js +73 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.d.ts +2 -0
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.js +7 -0
- package/dist/components/Stage/components/MeasurementLayer/types.d.ts +76 -0
- package/dist/components/Stage/components/MeasurementLayer/types.js +9 -0
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.d.ts +83 -0
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.js +267 -0
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.d.ts +74 -0
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.js +130 -0
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte +220 -0
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte.d.ts +9 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/ash.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/leaves.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/rain.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/snow.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/rng.d.ts +7 -0
- package/dist/components/Stage/components/ParticleSystem/rng.js +20 -0
- package/dist/components/Stage/components/ParticleSystem/types.d.ts +88 -0
- package/dist/components/Stage/components/ParticleSystem/types.js +37 -0
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte +144 -0
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte.d.ts +19 -0
- package/dist/components/Stage/components/PerformanceDebugger/index.d.ts +1 -0
- package/dist/components/Stage/components/PerformanceDebugger/index.js +1 -0
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte +208 -0
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte.d.ts +7 -0
- package/dist/components/Stage/components/PerformanceOverlay/index.d.ts +1 -0
- package/dist/components/Stage/components/PerformanceOverlay/index.js +1 -0
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte +201 -0
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte.d.ts +17 -0
- package/dist/components/Stage/components/Scene/Scene.svelte +651 -0
- package/dist/components/Stage/components/Scene/Scene.svelte.d.ts +88 -0
- package/dist/components/Stage/components/Scene/luts.d.ts +7 -0
- package/dist/components/Stage/components/Scene/luts.js +33 -0
- package/dist/components/Stage/components/Scene/types.d.ts +207 -0
- package/dist/components/Stage/components/Scene/types.js +35 -0
- package/dist/components/Stage/components/Stage/Stage.svelte +332 -0
- package/dist/components/Stage/components/Stage/Stage.svelte.d.ts +86 -0
- package/dist/components/Stage/components/Stage/types.d.ts +163 -0
- package/dist/components/Stage/components/Stage/types.js +5 -0
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte +135 -0
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte.d.ts +13 -0
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.d.ts +3 -0
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.js +69 -0
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.d.ts +3 -0
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.js +68 -0
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.d.ts +3 -0
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.js +67 -0
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.d.ts +3 -0
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.js +68 -0
- package/dist/components/Stage/components/WeatherLayer/presets/index.d.ts +5 -0
- package/dist/components/Stage/components/WeatherLayer/presets/index.js +5 -0
- package/dist/components/Stage/components/WeatherLayer/types.d.ts +31 -0
- package/dist/components/Stage/components/WeatherLayer/types.js +9 -0
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.d.ts +7 -0
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.js +23 -0
- package/dist/components/Stage/helpers/debugState.svelte.d.ts +10 -0
- package/dist/components/Stage/helpers/debugState.svelte.js +13 -0
- package/dist/components/Stage/helpers/grid.d.ts +72 -0
- package/dist/components/Stage/helpers/grid.js +444 -0
- package/dist/components/Stage/helpers/lazyBrush.d.ts +63 -0
- package/dist/components/Stage/helpers/lazyBrush.js +137 -0
- package/dist/components/Stage/helpers/performanceMetrics.svelte.d.ts +62 -0
- package/dist/components/Stage/helpers/performanceMetrics.svelte.js +165 -0
- package/dist/components/Stage/helpers/utils.d.ts +3 -0
- package/dist/components/Stage/helpers/utils.js +18 -0
- package/dist/components/Stage/index.d.ts +21 -0
- package/dist/components/Stage/index.js +21 -0
- package/dist/components/Stage/shaders/AnnotationEffects.frag +1070 -0
- package/dist/components/Stage/shaders/Annotations.frag +29 -0
- package/dist/components/Stage/shaders/Drawing.frag +83 -0
- package/dist/components/Stage/shaders/Drawing.vert +5 -0
- package/dist/components/Stage/shaders/Fog.frag +147 -0
- package/dist/components/Stage/shaders/FractalNoise.frag +96 -0
- package/dist/components/Stage/shaders/GridShader.frag +174 -0
- package/dist/components/Stage/shaders/Overlay.frag +23 -0
- package/dist/components/Stage/shaders/Overlay.vert +0 -0
- package/dist/components/Stage/shaders/Particles.frag +27 -0
- package/dist/components/Stage/shaders/Particles.vert +51 -0
- package/dist/components/Stage/shaders/ToolOutline.frag +59 -0
- package/dist/components/Stage/shaders/default.vert +8 -0
- package/dist/components/Stage/types.d.ts +4 -0
- package/dist/components/Stage/types.js +1 -0
- package/dist/components/Table/Table.svelte +16 -0
- package/dist/components/Table/Table.svelte.d.ts +4 -0
- package/dist/components/Table/Td.svelte +17 -0
- package/dist/components/Table/Td.svelte.d.ts +4 -0
- package/dist/components/Table/Th.svelte +18 -0
- package/dist/components/Table/Th.svelte.d.ts +4 -0
- package/dist/components/Table/index.d.ts +4 -0
- package/dist/components/Table/index.js +4 -0
- package/dist/components/Table/types.d.ts +11 -0
- package/dist/components/Table/types.js +1 -0
- package/dist/components/Text/Text.svelte +23 -0
- package/dist/components/Text/Text.svelte.d.ts +4 -0
- package/dist/components/Text/index.d.ts +2 -0
- package/dist/components/Text/index.js +2 -0
- package/dist/components/Text/types.d.ts +11 -0
- package/dist/components/Text/types.js +1 -0
- package/dist/components/Title/Title.svelte +54 -0
- package/dist/components/Title/Title.svelte.d.ts +4 -0
- package/dist/components/Title/index.d.ts +2 -0
- package/dist/components/Title/index.js +2 -0
- package/dist/components/Title/types.d.ts +8 -0
- package/dist/components/Title/types.js +1 -0
- package/dist/components/Toast/Toast.svelte +155 -0
- package/dist/components/Toast/Toast.svelte.d.ts +5 -0
- package/dist/components/Toast/index.d.ts +3 -0
- package/dist/components/Toast/index.js +5 -0
- package/dist/components/Toast/toastCookie.d.ts +7 -0
- package/dist/components/Toast/toastCookie.js +17 -0
- package/dist/components/Toast/types.d.ts +6 -0
- package/dist/components/Toast/types.js +1 -0
- package/dist/components/ToolTip/ToolTip.svelte +70 -0
- package/dist/components/ToolTip/ToolTip.svelte.d.ts +4 -0
- package/dist/components/ToolTip/index.d.ts +2 -0
- package/dist/components/ToolTip/index.js +2 -0
- package/dist/components/ToolTip/types.d.ts +14 -0
- package/dist/components/ToolTip/types.js +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.js +32 -0
- package/dist/components/types.d.ts +0 -0
- package/dist/components/types.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/styles/globals.css +108 -0
- package/dist/styles/normalize.css +9 -0
- package/dist/styles/reset.css +133 -0
- package/dist/styles/utilities.css +179 -0
- package/dist/styles/vars.css +1103 -0
- package/dist/types/awareness.d.ts +16 -0
- package/dist/types/awareness.js +1 -0
- package/dist/utils/rle.d.ts +41 -0
- package/dist/utils/rle.js +201 -0
- package/package.json +110 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { type StageProps } from '../Stage/types';
|
|
3
|
+
import type { CursorData } from '../CursorLayer/types';
|
|
4
|
+
interface Props {
|
|
5
|
+
props: StageProps;
|
|
6
|
+
cursors?: CursorData[];
|
|
7
|
+
trackLocalCursor?: boolean;
|
|
8
|
+
receivedMeasurement?: {
|
|
9
|
+
startPoint: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
endPoint: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
type: number;
|
|
18
|
+
beamWidth?: number;
|
|
19
|
+
coneAngle?: number;
|
|
20
|
+
color?: string;
|
|
21
|
+
thickness?: number;
|
|
22
|
+
outlineColor?: string;
|
|
23
|
+
outlineThickness?: number;
|
|
24
|
+
opacity?: number;
|
|
25
|
+
markerSize?: number;
|
|
26
|
+
autoHideDelay?: number;
|
|
27
|
+
fadeoutTime?: number;
|
|
28
|
+
showDistance?: boolean;
|
|
29
|
+
snapToGrid?: boolean;
|
|
30
|
+
enableDMG252?: boolean;
|
|
31
|
+
} | null;
|
|
32
|
+
}
|
|
33
|
+
declare const Scene: import("svelte").Component<Props, {
|
|
34
|
+
fill: () => void;
|
|
35
|
+
fit: () => void;
|
|
36
|
+
generateThumbnail: (quality?: number) => Promise<Blob>;
|
|
37
|
+
annotations: {
|
|
38
|
+
clear: (layerId: string) => void;
|
|
39
|
+
toRLE: () => Promise<Uint8Array<ArrayBufferLike>>;
|
|
40
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
41
|
+
loadMask: (layerId: string, rleData: Uint8Array) => Promise<void>;
|
|
42
|
+
isDrawing: () => boolean;
|
|
43
|
+
};
|
|
44
|
+
map: {
|
|
45
|
+
fill: () => void;
|
|
46
|
+
fit: () => void;
|
|
47
|
+
getSize: () => {
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
} | null;
|
|
51
|
+
};
|
|
52
|
+
fogOfWar: {
|
|
53
|
+
clear: () => void;
|
|
54
|
+
reset: () => void;
|
|
55
|
+
toPng: () => Promise<Blob>;
|
|
56
|
+
toRLE: () => Promise<Uint8Array<ArrayBufferLike>>;
|
|
57
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
58
|
+
isDrawing: () => boolean;
|
|
59
|
+
};
|
|
60
|
+
markers: {
|
|
61
|
+
readonly isHoveringMarker: boolean;
|
|
62
|
+
readonly isDraggingMarker: boolean;
|
|
63
|
+
readonly hoveredMarker: import("../MarkerLayer/types").Marker | null;
|
|
64
|
+
readonly selectedMarker: import("../MarkerLayer/types").Marker | null;
|
|
65
|
+
maintainHover: (maintain: boolean) => void;
|
|
66
|
+
onSceneChange: () => void;
|
|
67
|
+
};
|
|
68
|
+
measurement: {
|
|
69
|
+
getCurrentMeasurement: () => {
|
|
70
|
+
startPoint: THREE.Vector2 | null;
|
|
71
|
+
endPoint: THREE.Vector2 | null;
|
|
72
|
+
type: number;
|
|
73
|
+
} | null;
|
|
74
|
+
isDrawing: () => boolean;
|
|
75
|
+
};
|
|
76
|
+
getMarkerSizeInScreenSpace: (markerSize?: number) => number;
|
|
77
|
+
getMarkerScreenPosition: (marker: {
|
|
78
|
+
position?: {
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
};
|
|
82
|
+
}) => {
|
|
83
|
+
x: number;
|
|
84
|
+
y: number;
|
|
85
|
+
} | null;
|
|
86
|
+
}, "">;
|
|
87
|
+
type Scene = ReturnType<typeof Scene>;
|
|
88
|
+
export default Scene;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { LookupTexture } from 'postprocessing';
|
|
11
|
+
import * as THREE from 'three';
|
|
12
|
+
import { LUTCubeLoader } from 'three/examples/jsm/loaders/LUTCubeLoader';
|
|
13
|
+
const loadingManager = new THREE.LoadingManager();
|
|
14
|
+
const lutLoader = new LUTCubeLoader(loadingManager);
|
|
15
|
+
/**
|
|
16
|
+
* Gets a LUT
|
|
17
|
+
* @param url The URL of the LUT to get
|
|
18
|
+
* @returns A promise that resolves to the LookupTexture
|
|
19
|
+
*/
|
|
20
|
+
export const getLUT = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
if (!url)
|
|
22
|
+
return null;
|
|
23
|
+
const result = yield lutLoader.loadAsync(url);
|
|
24
|
+
try {
|
|
25
|
+
const lookupTexture = LookupTexture.from(result.texture3D);
|
|
26
|
+
lookupTexture.colorSpace = THREE.LinearSRGBColorSpace;
|
|
27
|
+
return lookupTexture;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error(error);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import type { ToneMappingMode } from 'postprocessing';
|
|
2
|
+
export declare enum SceneLoadingState {
|
|
3
|
+
LoadingMap = 1,
|
|
4
|
+
Resizing = 2,
|
|
5
|
+
Rendering = 3,
|
|
6
|
+
Initialized = 4
|
|
7
|
+
}
|
|
8
|
+
export declare enum SceneRotation {
|
|
9
|
+
Deg0 = 0,
|
|
10
|
+
Deg90 = 90,
|
|
11
|
+
Deg180 = 180,
|
|
12
|
+
Deg270 = 270
|
|
13
|
+
}
|
|
14
|
+
export declare enum SceneLayer {
|
|
15
|
+
Main = 0,
|
|
16
|
+
Overlay = 1,
|
|
17
|
+
Input = 2
|
|
18
|
+
}
|
|
19
|
+
export declare enum SceneLayerOrder {
|
|
20
|
+
Background = 0,
|
|
21
|
+
Map = 10,
|
|
22
|
+
Fog = 20,
|
|
23
|
+
Weather = 30,
|
|
24
|
+
EffectAnnotation = 35,// Effect annotations render under fog of war
|
|
25
|
+
Marker = 37,// Markers render above effect annotations but below fog of war
|
|
26
|
+
FogOfWar = 40,
|
|
27
|
+
Grid = 50,
|
|
28
|
+
EdgeOverlay = 70,
|
|
29
|
+
Annotation = 80,// Color annotations render over fog of war
|
|
30
|
+
Measurement = 90,
|
|
31
|
+
Cursor = 100
|
|
32
|
+
}
|
|
33
|
+
export interface SceneLayerProps {
|
|
34
|
+
/**
|
|
35
|
+
* Whether the scene layer should auto fit
|
|
36
|
+
*/
|
|
37
|
+
autoFit: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The position of the scene layer within the canvas
|
|
40
|
+
*/
|
|
41
|
+
offset: {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The rotation of the scene layer in degrees
|
|
47
|
+
*/
|
|
48
|
+
rotation: SceneRotation;
|
|
49
|
+
/**
|
|
50
|
+
* The scale of the scene layer
|
|
51
|
+
*/
|
|
52
|
+
zoom: number;
|
|
53
|
+
}
|
|
54
|
+
import type { Marker } from '../MarkerLayer/types';
|
|
55
|
+
export interface SceneExports {
|
|
56
|
+
fill: () => void;
|
|
57
|
+
fit: () => void;
|
|
58
|
+
generateThumbnail: () => Promise<Blob>;
|
|
59
|
+
getMarkerScreenPosition: (marker: Marker) => {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
} | null;
|
|
63
|
+
annotations: {
|
|
64
|
+
clear: (layerId: string) => void;
|
|
65
|
+
toRLE: () => Promise<Uint8Array>;
|
|
66
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
67
|
+
loadMask: (layerId: string, rleData: Uint8Array) => Promise<void>;
|
|
68
|
+
isDrawing: () => boolean;
|
|
69
|
+
};
|
|
70
|
+
fogOfWar: {
|
|
71
|
+
clear: () => void;
|
|
72
|
+
reset: () => void;
|
|
73
|
+
toPng: () => Promise<Blob>;
|
|
74
|
+
toRLE: () => Promise<Uint8Array>;
|
|
75
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
76
|
+
isDrawing: () => boolean;
|
|
77
|
+
};
|
|
78
|
+
map: {
|
|
79
|
+
fit: () => void;
|
|
80
|
+
fill: () => void;
|
|
81
|
+
getSize: () => {
|
|
82
|
+
width: number;
|
|
83
|
+
height: number;
|
|
84
|
+
} | null;
|
|
85
|
+
};
|
|
86
|
+
markers: {
|
|
87
|
+
isHoveringMarker: boolean;
|
|
88
|
+
isDraggingMarker: boolean;
|
|
89
|
+
hoveredMarker: Marker | null;
|
|
90
|
+
selectedMarker: Marker | null;
|
|
91
|
+
maintainHover: (maintain: boolean) => void;
|
|
92
|
+
onSceneChange: () => void;
|
|
93
|
+
};
|
|
94
|
+
getMarkerSizeInScreenSpace: (markerSize: number) => number;
|
|
95
|
+
measurement: {
|
|
96
|
+
getCurrentMeasurement: () => {
|
|
97
|
+
startPoint: {
|
|
98
|
+
x: number;
|
|
99
|
+
y: number;
|
|
100
|
+
} | null;
|
|
101
|
+
endPoint: {
|
|
102
|
+
x: number;
|
|
103
|
+
y: number;
|
|
104
|
+
} | null;
|
|
105
|
+
type: number;
|
|
106
|
+
} | null;
|
|
107
|
+
isDrawing: () => boolean;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Properties for post-processing effects
|
|
112
|
+
*/
|
|
113
|
+
export interface PostProcessingProps {
|
|
114
|
+
/**
|
|
115
|
+
* Whether post-processing is enabled
|
|
116
|
+
*/
|
|
117
|
+
enabled: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Bloom effect properties
|
|
120
|
+
*/
|
|
121
|
+
bloom: {
|
|
122
|
+
/**
|
|
123
|
+
* Whether the bloom effect is enabled
|
|
124
|
+
*/
|
|
125
|
+
enabled: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Overall intensity of the bloom effect (0-1)
|
|
128
|
+
*/
|
|
129
|
+
intensity: number;
|
|
130
|
+
/**
|
|
131
|
+
* Luminance threshold for what pixels will bloom (0-1)
|
|
132
|
+
*/
|
|
133
|
+
threshold: number;
|
|
134
|
+
/**
|
|
135
|
+
* How smoothly the bloom transitions at the threshold (0-1)
|
|
136
|
+
*/
|
|
137
|
+
smoothing: number;
|
|
138
|
+
/**
|
|
139
|
+
* Radius of the bloom effect
|
|
140
|
+
*/
|
|
141
|
+
radius: number;
|
|
142
|
+
/**
|
|
143
|
+
* Levels of the bloom effect
|
|
144
|
+
*/
|
|
145
|
+
levels: number;
|
|
146
|
+
/**
|
|
147
|
+
* Whether to apply mipmap blur
|
|
148
|
+
*/
|
|
149
|
+
mipmapBlur: boolean;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Chromatic aberration effect properties
|
|
153
|
+
*/
|
|
154
|
+
chromaticAberration: {
|
|
155
|
+
/**
|
|
156
|
+
* Whether the chromatic aberration effect is enabled
|
|
157
|
+
*/
|
|
158
|
+
enabled: boolean;
|
|
159
|
+
/**
|
|
160
|
+
* The offset of the chromatic aberration effect
|
|
161
|
+
*/
|
|
162
|
+
offset: number;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* LUT effect properties
|
|
166
|
+
*/
|
|
167
|
+
lut: {
|
|
168
|
+
/**
|
|
169
|
+
* Whether the LUT3D effect is enabled
|
|
170
|
+
*/
|
|
171
|
+
enabled: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* The URL of the LUT to use
|
|
174
|
+
*/
|
|
175
|
+
url: string | null;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Tone mapping effect properties
|
|
179
|
+
*/
|
|
180
|
+
toneMapping: {
|
|
181
|
+
/**
|
|
182
|
+
* Whether the tone mapping effect is enabled
|
|
183
|
+
*/
|
|
184
|
+
enabled: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* The mode of the tone mapping effect
|
|
187
|
+
*/
|
|
188
|
+
mode: ToneMappingMode;
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Vignette effect properties
|
|
192
|
+
*/
|
|
193
|
+
vignette: {
|
|
194
|
+
/**
|
|
195
|
+
* Whether the vignette effect is enabled
|
|
196
|
+
*/
|
|
197
|
+
enabled: boolean;
|
|
198
|
+
/**
|
|
199
|
+
* How far from the center the vignette starts (0-1)
|
|
200
|
+
*/
|
|
201
|
+
offset: number;
|
|
202
|
+
/**
|
|
203
|
+
* How dark the vignette effect is (0-1)
|
|
204
|
+
*/
|
|
205
|
+
darkness: number;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export var SceneLoadingState;
|
|
2
|
+
(function (SceneLoadingState) {
|
|
3
|
+
SceneLoadingState[SceneLoadingState["LoadingMap"] = 1] = "LoadingMap";
|
|
4
|
+
SceneLoadingState[SceneLoadingState["Resizing"] = 2] = "Resizing";
|
|
5
|
+
SceneLoadingState[SceneLoadingState["Rendering"] = 3] = "Rendering";
|
|
6
|
+
SceneLoadingState[SceneLoadingState["Initialized"] = 4] = "Initialized";
|
|
7
|
+
})(SceneLoadingState || (SceneLoadingState = {}));
|
|
8
|
+
export var SceneRotation;
|
|
9
|
+
(function (SceneRotation) {
|
|
10
|
+
SceneRotation[SceneRotation["Deg0"] = 0] = "Deg0";
|
|
11
|
+
SceneRotation[SceneRotation["Deg90"] = 90] = "Deg90";
|
|
12
|
+
SceneRotation[SceneRotation["Deg180"] = 180] = "Deg180";
|
|
13
|
+
SceneRotation[SceneRotation["Deg270"] = 270] = "Deg270";
|
|
14
|
+
})(SceneRotation || (SceneRotation = {}));
|
|
15
|
+
export var SceneLayer;
|
|
16
|
+
(function (SceneLayer) {
|
|
17
|
+
SceneLayer[SceneLayer["Main"] = 0] = "Main";
|
|
18
|
+
SceneLayer[SceneLayer["Overlay"] = 1] = "Overlay";
|
|
19
|
+
SceneLayer[SceneLayer["Input"] = 2] = "Input";
|
|
20
|
+
})(SceneLayer || (SceneLayer = {}));
|
|
21
|
+
export var SceneLayerOrder;
|
|
22
|
+
(function (SceneLayerOrder) {
|
|
23
|
+
SceneLayerOrder[SceneLayerOrder["Background"] = 0] = "Background";
|
|
24
|
+
SceneLayerOrder[SceneLayerOrder["Map"] = 10] = "Map";
|
|
25
|
+
SceneLayerOrder[SceneLayerOrder["Fog"] = 20] = "Fog";
|
|
26
|
+
SceneLayerOrder[SceneLayerOrder["Weather"] = 30] = "Weather";
|
|
27
|
+
SceneLayerOrder[SceneLayerOrder["EffectAnnotation"] = 35] = "EffectAnnotation";
|
|
28
|
+
SceneLayerOrder[SceneLayerOrder["Marker"] = 37] = "Marker";
|
|
29
|
+
SceneLayerOrder[SceneLayerOrder["FogOfWar"] = 40] = "FogOfWar";
|
|
30
|
+
SceneLayerOrder[SceneLayerOrder["Grid"] = 50] = "Grid";
|
|
31
|
+
SceneLayerOrder[SceneLayerOrder["EdgeOverlay"] = 70] = "EdgeOverlay";
|
|
32
|
+
SceneLayerOrder[SceneLayerOrder["Annotation"] = 80] = "Annotation";
|
|
33
|
+
SceneLayerOrder[SceneLayerOrder["Measurement"] = 90] = "Measurement";
|
|
34
|
+
SceneLayerOrder[SceneLayerOrder["Cursor"] = 100] = "Cursor";
|
|
35
|
+
})(SceneLayerOrder || (SceneLayerOrder = {}));
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Canvas, T } from '@threlte/core';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import type { Callbacks, StageProps } from './types';
|
|
5
|
+
import Scene from '../Scene/Scene.svelte';
|
|
6
|
+
import { type SceneExports, SceneLayerOrder } from '../Scene/types';
|
|
7
|
+
import { setContext } from 'svelte';
|
|
8
|
+
import { PerfMonitor } from '@threlte/extras';
|
|
9
|
+
import { MarkerTooltip } from '../../../MarkerTooltip';
|
|
10
|
+
|
|
11
|
+
import type { CursorData } from './types';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Creates a custom WebGL renderer with high-performance settings.
|
|
15
|
+
* This fixes Chrome/Mac performance issues by:
|
|
16
|
+
* - Requesting high-performance GPU mode (critical for macOS)
|
|
17
|
+
* - Disabling unnecessary features like stencil buffer
|
|
18
|
+
*/
|
|
19
|
+
const createRenderer = (canvas: HTMLCanvasElement) => {
|
|
20
|
+
return new THREE.WebGLRenderer({
|
|
21
|
+
canvas,
|
|
22
|
+
powerPreference: 'high-performance',
|
|
23
|
+
antialias: true,
|
|
24
|
+
alpha: false,
|
|
25
|
+
stencil: false,
|
|
26
|
+
depth: true
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
interface Props {
|
|
31
|
+
props: StageProps;
|
|
32
|
+
callbacks: Callbacks;
|
|
33
|
+
receivedMeasurement?: {
|
|
34
|
+
startPoint: { x: number; y: number };
|
|
35
|
+
endPoint: { x: number; y: number };
|
|
36
|
+
type: number;
|
|
37
|
+
beamWidth?: number;
|
|
38
|
+
coneAngle?: number;
|
|
39
|
+
// Visual properties
|
|
40
|
+
color?: string;
|
|
41
|
+
thickness?: number;
|
|
42
|
+
outlineColor?: string;
|
|
43
|
+
outlineThickness?: number;
|
|
44
|
+
opacity?: number;
|
|
45
|
+
markerSize?: number;
|
|
46
|
+
// Timing properties
|
|
47
|
+
autoHideDelay?: number;
|
|
48
|
+
fadeoutTime?: number;
|
|
49
|
+
// Distance properties
|
|
50
|
+
showDistance?: boolean;
|
|
51
|
+
snapToGrid?: boolean;
|
|
52
|
+
enableDMG252?: boolean;
|
|
53
|
+
} | null;
|
|
54
|
+
cursors?: CursorData[];
|
|
55
|
+
trackLocalCursor?: boolean;
|
|
56
|
+
hoveredMarkerId?: string | null;
|
|
57
|
+
pinnedMarkerIds?: string[];
|
|
58
|
+
onPinToggle?: (markerId: string, pinned: boolean) => void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let {
|
|
62
|
+
props,
|
|
63
|
+
callbacks,
|
|
64
|
+
receivedMeasurement = null,
|
|
65
|
+
cursors = [],
|
|
66
|
+
trackLocalCursor = false,
|
|
67
|
+
hoveredMarkerId = null,
|
|
68
|
+
pinnedMarkerIds = [],
|
|
69
|
+
onPinToggle
|
|
70
|
+
}: Props = $props();
|
|
71
|
+
|
|
72
|
+
let sceneRef = $state<SceneExports>();
|
|
73
|
+
let containerElement = $state<HTMLDivElement>();
|
|
74
|
+
let tooltipPosition = $state<{ x: number; y: number } | null>(null);
|
|
75
|
+
interface MarkerData {
|
|
76
|
+
id: string;
|
|
77
|
+
title?: string;
|
|
78
|
+
note?: unknown;
|
|
79
|
+
visibility?: number;
|
|
80
|
+
size?: number;
|
|
81
|
+
tooltip?: {
|
|
82
|
+
title?: string;
|
|
83
|
+
content?: unknown;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let hoveredMarkerData = $state<MarkerData | null>(null);
|
|
88
|
+
let markerSizeInPixels = $state<number>(40);
|
|
89
|
+
|
|
90
|
+
let pinnedTooltips = $state<
|
|
91
|
+
Array<{
|
|
92
|
+
marker: MarkerData;
|
|
93
|
+
position: { x: number; y: number };
|
|
94
|
+
preferredPlacement: 'top' | 'bottom' | 'left' | 'right';
|
|
95
|
+
}>
|
|
96
|
+
>([]);
|
|
97
|
+
|
|
98
|
+
const renderedTooltips = new Map<string, { element: HTMLElement; bounds: DOMRect }>();
|
|
99
|
+
|
|
100
|
+
let stageContext = $state({ mode: props.mode, hoveredMarkerId, pinnedMarkerIds });
|
|
101
|
+
setContext('stage', stageContext);
|
|
102
|
+
|
|
103
|
+
$effect(() => {
|
|
104
|
+
stageContext.mode = props.mode;
|
|
105
|
+
stageContext.hoveredMarkerId = hoveredMarkerId;
|
|
106
|
+
stageContext.pinnedMarkerIds = pinnedMarkerIds;
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
setContext('callbacks', callbacks);
|
|
110
|
+
|
|
111
|
+
export const annotations = {
|
|
112
|
+
clear: (layerId: string) => sceneRef?.annotations.clear(layerId),
|
|
113
|
+
toRLE: () => sceneRef?.annotations?.toRLE() ?? Promise.resolve(new Uint8Array()),
|
|
114
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) =>
|
|
115
|
+
sceneRef?.annotations?.fromRLE(rleData, width, height) ?? Promise.resolve(),
|
|
116
|
+
loadMask: (layerId: string, rleData: Uint8Array) =>
|
|
117
|
+
sceneRef?.annotations?.loadMask(layerId, rleData) ?? Promise.resolve(),
|
|
118
|
+
isDrawing: () => sceneRef?.annotations?.isDrawing() ?? false
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const map = {
|
|
122
|
+
fill: () => sceneRef?.map.fill(),
|
|
123
|
+
fit: () => sceneRef?.map.fit(),
|
|
124
|
+
getSize: () => sceneRef?.map?.getSize?.() ?? null
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export const fogOfWar = {
|
|
128
|
+
clear: () => sceneRef?.fogOfWar.clear(),
|
|
129
|
+
reset: () => sceneRef?.fogOfWar.reset(),
|
|
130
|
+
toPng: () => sceneRef?.fogOfWar.toPng() ?? Promise.resolve(new Blob()),
|
|
131
|
+
toRLE: () => sceneRef?.fogOfWar.toRLE() ?? Promise.resolve(new Uint8Array()),
|
|
132
|
+
fromRLE: (rleData: Uint8Array, width: number, height: number) =>
|
|
133
|
+
sceneRef?.fogOfWar.fromRLE(rleData, width, height) ?? Promise.resolve(),
|
|
134
|
+
isDrawing: () => sceneRef?.fogOfWar?.isDrawing() ?? false
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const scene = {
|
|
138
|
+
fill: () => sceneRef?.fill(),
|
|
139
|
+
fit: () => sceneRef?.fit(),
|
|
140
|
+
generateThumbnail: () => sceneRef?.generateThumbnail() ?? Promise.resolve(new Blob())
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export const markers = {
|
|
144
|
+
get isHoveringMarker() {
|
|
145
|
+
return sceneRef?.markers?.isHoveringMarker ?? false;
|
|
146
|
+
},
|
|
147
|
+
get isDraggingMarker() {
|
|
148
|
+
return sceneRef?.markers?.isDraggingMarker ?? false;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export const measurement = {
|
|
153
|
+
getCurrentMeasurement: () => sceneRef?.measurement?.getCurrentMeasurement() ?? null,
|
|
154
|
+
isDrawing: () => sceneRef?.measurement?.isDrawing() ?? false
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Called when the scene changes to clear all transient state.
|
|
159
|
+
* Clears tooltips, marker hover/selection, and other scene-specific state.
|
|
160
|
+
*/
|
|
161
|
+
export function onSceneChange() {
|
|
162
|
+
// Clear tooltip state
|
|
163
|
+
hoveredMarkerData = null;
|
|
164
|
+
tooltipPosition = null;
|
|
165
|
+
|
|
166
|
+
// Clear marker interaction state
|
|
167
|
+
sceneRef?.markers?.onSceneChange?.();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
$effect(() => {
|
|
171
|
+
// Update marker size when zoom changes or marker data changes
|
|
172
|
+
const zoom = props.scene.zoom;
|
|
173
|
+
if (sceneRef?.getMarkerSizeInScreenSpace) {
|
|
174
|
+
const markerSize = hoveredMarkerData?.size || 1;
|
|
175
|
+
markerSizeInPixels = sceneRef.getMarkerSizeInScreenSpace(markerSize);
|
|
176
|
+
}
|
|
177
|
+
// Use zoom to avoid unused variable warning
|
|
178
|
+
void zoom;
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
$effect(() => {
|
|
182
|
+
// Only show pinned tooltips in DM mode when activeLayer is None (0) or Marker (2)
|
|
183
|
+
// In player mode, always show pinned tooltips
|
|
184
|
+
const shouldShowPinnedTooltips = props.mode === 1 || props.activeLayer === 0 || props.activeLayer === 2;
|
|
185
|
+
|
|
186
|
+
if (
|
|
187
|
+
pinnedMarkerIds &&
|
|
188
|
+
pinnedMarkerIds.length > 0 &&
|
|
189
|
+
containerElement &&
|
|
190
|
+
sceneRef?.getMarkerScreenPosition &&
|
|
191
|
+
shouldShowPinnedTooltips
|
|
192
|
+
) {
|
|
193
|
+
const newPinnedTooltips = [];
|
|
194
|
+
|
|
195
|
+
const placementPatterns = [
|
|
196
|
+
['top', 'bottom', 'left', 'right'],
|
|
197
|
+
['bottom', 'top', 'right', 'left'],
|
|
198
|
+
['left', 'right', 'top', 'bottom'],
|
|
199
|
+
['right', 'left', 'bottom', 'top']
|
|
200
|
+
];
|
|
201
|
+
|
|
202
|
+
for (let i = 0; i < pinnedMarkerIds.length; i++) {
|
|
203
|
+
const markerId = pinnedMarkerIds[i];
|
|
204
|
+
const marker = props.marker.markers.find((m) => m.id === markerId);
|
|
205
|
+
if (marker) {
|
|
206
|
+
const screenPos = sceneRef.getMarkerScreenPosition(marker);
|
|
207
|
+
if (screenPos) {
|
|
208
|
+
const pattern = placementPatterns[i % placementPatterns.length];
|
|
209
|
+
const preferredPlacement = pattern[0] as 'top' | 'bottom' | 'left' | 'right';
|
|
210
|
+
|
|
211
|
+
newPinnedTooltips.push({ marker, position: screenPos, preferredPlacement });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
pinnedTooltips = newPinnedTooltips;
|
|
216
|
+
} else {
|
|
217
|
+
pinnedTooltips = [];
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
$effect(() => {
|
|
222
|
+
let markerForTooltip = null;
|
|
223
|
+
|
|
224
|
+
if (props.mode === 0) {
|
|
225
|
+
const hoveredMarker = sceneRef?.markers?.hoveredMarker;
|
|
226
|
+
const isDragging = sceneRef?.markers?.isDraggingMarker;
|
|
227
|
+
// Only show tooltips when activeLayer is None (0) or Marker (2)
|
|
228
|
+
// MapLayerType: None = 0, FogOfWar = 1, Marker = 2, Annotation = 3, Measurement = 4
|
|
229
|
+
const isMarkerOrNoneLayer = props.activeLayer === 0 || props.activeLayer === 2;
|
|
230
|
+
if (hoveredMarker && !pinnedMarkerIds.includes(hoveredMarker.id) && !isDragging && isMarkerOrNoneLayer) {
|
|
231
|
+
// Look up the current marker from the markers array by ID to handle Y.js updates
|
|
232
|
+
// This prevents stale marker references from breaking tooltips after sync
|
|
233
|
+
const currentMarker = props.marker.markers.find((m) => m.id === hoveredMarker.id);
|
|
234
|
+
markerForTooltip = currentMarker || hoveredMarker;
|
|
235
|
+
}
|
|
236
|
+
} else if (props.mode === 1) {
|
|
237
|
+
// Player mode - only show tooltips for markers where:
|
|
238
|
+
// 1. The marker is pinned (handled separately in pinnedTooltips)
|
|
239
|
+
// 2. The marker visibility is "On hover" (MarkerVisibility.Hover = 3) AND DM is hovering
|
|
240
|
+
// 3. The marker visibility is "Everyone" (MarkerVisibility.Always = 0) AND DM is hovering
|
|
241
|
+
let dmBroadcastMarker = null;
|
|
242
|
+
if (hoveredMarkerId) {
|
|
243
|
+
if (!pinnedMarkerIds.includes(hoveredMarkerId)) {
|
|
244
|
+
const marker = props.marker.markers.find((m) => m.id === hoveredMarkerId);
|
|
245
|
+
// Only show if marker visibility is "On hover" or "Everyone"
|
|
246
|
+
// MarkerVisibility: Always = 0, DM = 1, Player = 2, Hover = 3
|
|
247
|
+
if (marker && (marker.visibility === 0 || marker.visibility === 3)) {
|
|
248
|
+
dmBroadcastMarker = marker;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// In player mode, also check if player has selected a marker
|
|
254
|
+
// But only show tooltip if it has appropriate visibility (not DM-only)
|
|
255
|
+
const selectedByPlayer = sceneRef?.markers?.selectedMarker;
|
|
256
|
+
const isDragging = sceneRef?.markers?.isDraggingMarker;
|
|
257
|
+
let selectedNotPinned = null;
|
|
258
|
+
if (selectedByPlayer && !pinnedMarkerIds.includes(selectedByPlayer.id) && !isDragging) {
|
|
259
|
+
// Only show if marker visibility is not DM-only (i.e., not visibility = 1)
|
|
260
|
+
// MarkerVisibility: Always = 0, DM = 1, Player = 2, Hover = 3
|
|
261
|
+
if (selectedByPlayer.visibility !== 1) {
|
|
262
|
+
selectedNotPinned = selectedByPlayer;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
markerForTooltip = dmBroadcastMarker || selectedNotPinned;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (markerForTooltip && containerElement) {
|
|
270
|
+
hoveredMarkerData = markerForTooltip;
|
|
271
|
+
const screenPos = sceneRef?.getMarkerScreenPosition?.(markerForTooltip);
|
|
272
|
+
if (screenPos) {
|
|
273
|
+
tooltipPosition = screenPos;
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
hoveredMarkerData = null;
|
|
277
|
+
tooltipPosition = null;
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
</script>
|
|
281
|
+
|
|
282
|
+
<div bind:this={containerElement} style="height: 100%; width: 100%; position: relative;">
|
|
283
|
+
<Canvas {createRenderer} renderMode="always">
|
|
284
|
+
<T.Mesh scale={[100000, 100000, 1]} layers={[SceneLayerOrder.Background]}>
|
|
285
|
+
<T.PlaneGeometry />
|
|
286
|
+
<T.MeshBasicMaterial color={props.backgroundColor} />
|
|
287
|
+
</T.Mesh>
|
|
288
|
+
|
|
289
|
+
<Scene bind:this={sceneRef} {props} {receivedMeasurement} {cursors} {trackLocalCursor} />
|
|
290
|
+
{#if props.debug.enableStats}
|
|
291
|
+
<PerfMonitor logsPerSecond={props.debug.loggingRate} anchorX={'right'} anchorY={'bottom'} />
|
|
292
|
+
{/if}
|
|
293
|
+
</Canvas>
|
|
294
|
+
|
|
295
|
+
{#each pinnedTooltips as { marker, position, preferredPlacement }, index}
|
|
296
|
+
<MarkerTooltip
|
|
297
|
+
{marker}
|
|
298
|
+
{position}
|
|
299
|
+
{containerElement}
|
|
300
|
+
markerDiameter={sceneRef?.getMarkerSizeInScreenSpace ? sceneRef.getMarkerSizeInScreenSpace(marker.size || 1) : 40}
|
|
301
|
+
isDM={props.mode === 0}
|
|
302
|
+
isPinned={true}
|
|
303
|
+
{onPinToggle}
|
|
304
|
+
{preferredPlacement}
|
|
305
|
+
existingTooltips={Array.from(renderedTooltips.values()).filter((t, i) => i < index)}
|
|
306
|
+
onTooltipMount={(element, bounds) => {
|
|
307
|
+
renderedTooltips.set(marker.id, { element, bounds });
|
|
308
|
+
}}
|
|
309
|
+
onTooltipUnmount={() => {
|
|
310
|
+
renderedTooltips.delete(marker.id);
|
|
311
|
+
}}
|
|
312
|
+
/>
|
|
313
|
+
{/each}
|
|
314
|
+
|
|
315
|
+
{#if hoveredMarkerData}
|
|
316
|
+
<MarkerTooltip
|
|
317
|
+
marker={hoveredMarkerData}
|
|
318
|
+
position={tooltipPosition}
|
|
319
|
+
{containerElement}
|
|
320
|
+
markerDiameter={markerSizeInPixels}
|
|
321
|
+
isDM={props.mode === 0}
|
|
322
|
+
isPinned={false}
|
|
323
|
+
{onPinToggle}
|
|
324
|
+
existingTooltips={Array.from(renderedTooltips.values())}
|
|
325
|
+
onTooltipHover={(isHovering) => {
|
|
326
|
+
if (props.mode === 0 && sceneRef?.markers?.maintainHover) {
|
|
327
|
+
sceneRef.markers.maintainHover(isHovering);
|
|
328
|
+
}
|
|
329
|
+
}}
|
|
330
|
+
/>
|
|
331
|
+
{/if}
|
|
332
|
+
</div>
|