@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.
Files changed (388) hide show
  1. package/LICENSE.md +105 -0
  2. package/README.md +45 -0
  3. package/dist/components/Avatar/Avatar.svelte +82 -0
  4. package/dist/components/Avatar/Avatar.svelte.d.ts +4 -0
  5. package/dist/components/Avatar/AvatarFileInput.svelte +85 -0
  6. package/dist/components/Avatar/AvatarFileInput.svelte.d.ts +4 -0
  7. package/dist/components/Avatar/AvatarPopover.svelte +34 -0
  8. package/dist/components/Avatar/AvatarPopover.svelte.d.ts +4 -0
  9. package/dist/components/Avatar/index.d.ts +4 -0
  10. package/dist/components/Avatar/index.js +4 -0
  11. package/dist/components/Avatar/types.d.ts +21 -0
  12. package/dist/components/Avatar/types.js +1 -0
  13. package/dist/components/BrushSizeSlider/BrushSizeSlider.svelte +174 -0
  14. package/dist/components/BrushSizeSlider/BrushSizeSlider.svelte.d.ts +11 -0
  15. package/dist/components/BrushSizeSlider/index.d.ts +1 -0
  16. package/dist/components/BrushSizeSlider/index.js +1 -0
  17. package/dist/components/Button/Button.svelte +182 -0
  18. package/dist/components/Button/Button.svelte.d.ts +26 -0
  19. package/dist/components/Button/ConfirmActionButton.svelte +98 -0
  20. package/dist/components/Button/ConfirmActionButton.svelte.d.ts +4 -0
  21. package/dist/components/Button/IconButton.svelte +121 -0
  22. package/dist/components/Button/IconButton.svelte.d.ts +4 -0
  23. package/dist/components/Button/RadioButton.svelte +93 -0
  24. package/dist/components/Button/RadioButton.svelte.d.ts +15 -0
  25. package/dist/components/Button/index.d.ts +5 -0
  26. package/dist/components/Button/index.js +5 -0
  27. package/dist/components/Button/types.d.ts +55 -0
  28. package/dist/components/Button/types.js +1 -0
  29. package/dist/components/CardFan/CardFan.svelte +165 -0
  30. package/dist/components/CardFan/CardFan.svelte.d.ts +4 -0
  31. package/dist/components/CardFan/index.d.ts +2 -0
  32. package/dist/components/CardFan/index.js +2 -0
  33. package/dist/components/CardFan/types.d.ts +5 -0
  34. package/dist/components/CardFan/types.js +1 -0
  35. package/dist/components/CodeBlock/Code.svelte +7 -0
  36. package/dist/components/CodeBlock/Code.svelte.d.ts +4 -0
  37. package/dist/components/CodeBlock/CodeBlock.svelte +102 -0
  38. package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +4 -0
  39. package/dist/components/CodeBlock/index.d.ts +3 -0
  40. package/dist/components/CodeBlock/index.js +3 -0
  41. package/dist/components/CodeBlock/types.d.ts +9 -0
  42. package/dist/components/CodeBlock/types.js +1 -0
  43. package/dist/components/ColorMode/ColorMode.svelte +8 -0
  44. package/dist/components/ColorMode/ColorMode.svelte.d.ts +4 -0
  45. package/dist/components/ColorMode/index.d.ts +2 -0
  46. package/dist/components/ColorMode/index.js +1 -0
  47. package/dist/components/ColorMode/types.d.ts +10 -0
  48. package/dist/components/ColorMode/types.js +1 -0
  49. package/dist/components/ColorPicker/ColorPicker.svelte +838 -0
  50. package/dist/components/ColorPicker/ColorPicker.svelte.d.ts +4 -0
  51. package/dist/components/ColorPicker/ColorPickerSwatch.svelte +32 -0
  52. package/dist/components/ColorPicker/ColorPickerSwatch.svelte.d.ts +6 -0
  53. package/dist/components/ColorPicker/index.d.ts +3 -0
  54. package/dist/components/ColorPicker/index.js +3 -0
  55. package/dist/components/ColorPicker/types.d.ts +60 -0
  56. package/dist/components/ColorPicker/types.js +1 -0
  57. package/dist/components/ContextMenu/ContextMenu.svelte +86 -0
  58. package/dist/components/ContextMenu/ContextMenu.svelte.d.ts +4 -0
  59. package/dist/components/ContextMenu/index.d.ts +2 -0
  60. package/dist/components/ContextMenu/index.js +2 -0
  61. package/dist/components/ContextMenu/types.d.ts +13 -0
  62. package/dist/components/ContextMenu/types.js +1 -0
  63. package/dist/components/DrawingSliders/DrawingSliders.svelte +379 -0
  64. package/dist/components/DrawingSliders/DrawingSliders.svelte.d.ts +16 -0
  65. package/dist/components/DrawingSliders/index.d.ts +1 -0
  66. package/dist/components/DrawingSliders/index.js +1 -0
  67. package/dist/components/Editor/Editor.svelte +825 -0
  68. package/dist/components/Editor/Editor.svelte.d.ts +11 -0
  69. package/dist/components/Editor/index.d.ts +1 -0
  70. package/dist/components/Editor/index.js +1 -0
  71. package/dist/components/FogSliders/FogSliders.svelte +33 -0
  72. package/dist/components/FogSliders/FogSliders.svelte.d.ts +7 -0
  73. package/dist/components/FogSliders/index.d.ts +1 -0
  74. package/dist/components/FogSliders/index.js +1 -0
  75. package/dist/components/Hr/Hr.svelte +15 -0
  76. package/dist/components/Hr/Hr.svelte.d.ts +3 -0
  77. package/dist/components/Hr/index.d.ts +1 -0
  78. package/dist/components/Hr/index.js +1 -0
  79. package/dist/components/Icon/Icon.svelte +6 -0
  80. package/dist/components/Icon/Icon.svelte.d.ts +4 -0
  81. package/dist/components/Icon/index.d.ts +2 -0
  82. package/dist/components/Icon/index.js +1 -0
  83. package/dist/components/Icon/types.d.ts +18 -0
  84. package/dist/components/Icon/types.js +1 -0
  85. package/dist/components/Input/DualInputSlider.svelte +126 -0
  86. package/dist/components/Input/DualInputSlider.svelte.d.ts +4 -0
  87. package/dist/components/Input/FileInput.svelte +176 -0
  88. package/dist/components/Input/FileInput.svelte.d.ts +21 -0
  89. package/dist/components/Input/FormControl.svelte +150 -0
  90. package/dist/components/Input/FormControl.svelte.d.ts +41 -0
  91. package/dist/components/Input/FormError.svelte +37 -0
  92. package/dist/components/Input/FormError.svelte.d.ts +13 -0
  93. package/dist/components/Input/Input.svelte +56 -0
  94. package/dist/components/Input/Input.svelte.d.ts +4 -0
  95. package/dist/components/Input/InputCheckbox.svelte +99 -0
  96. package/dist/components/Input/InputCheckbox.svelte.d.ts +4 -0
  97. package/dist/components/Input/InputSlider.svelte +86 -0
  98. package/dist/components/Input/InputSlider.svelte.d.ts +4 -0
  99. package/dist/components/Input/Label.svelte +19 -0
  100. package/dist/components/Input/Label.svelte.d.ts +4 -0
  101. package/dist/components/Input/index.d.ts +9 -0
  102. package/dist/components/Input/index.js +9 -0
  103. package/dist/components/Input/types.d.ts +33 -0
  104. package/dist/components/Input/types.js +1 -0
  105. package/dist/components/Link/Link.svelte +41 -0
  106. package/dist/components/Link/Link.svelte.d.ts +4 -0
  107. package/dist/components/Link/LinkBox.svelte +20 -0
  108. package/dist/components/Link/LinkBox.svelte.d.ts +4 -0
  109. package/dist/components/Link/LinkOverlay.svelte +23 -0
  110. package/dist/components/Link/LinkOverlay.svelte.d.ts +4 -0
  111. package/dist/components/Link/index.d.ts +4 -0
  112. package/dist/components/Link/index.js +4 -0
  113. package/dist/components/Link/types.d.ts +15 -0
  114. package/dist/components/Link/types.js +1 -0
  115. package/dist/components/Loading/Loader.svelte +60 -0
  116. package/dist/components/Loading/Loader.svelte.d.ts +3 -0
  117. package/dist/components/Loading/Skeleton.svelte +9 -0
  118. package/dist/components/Loading/Skeleton.svelte.d.ts +26 -0
  119. package/dist/components/Loading/index.d.ts +2 -0
  120. package/dist/components/Loading/index.js +2 -0
  121. package/dist/components/Logo/Logo.svelte +16 -0
  122. package/dist/components/Logo/Logo.svelte.d.ts +7 -0
  123. package/dist/components/Logo/index.d.ts +1 -0
  124. package/dist/components/Logo/index.js +1 -0
  125. package/dist/components/MarkerTooltip/MarkerTooltip.svelte +435 -0
  126. package/dist/components/MarkerTooltip/MarkerTooltip.svelte.d.ts +35 -0
  127. package/dist/components/MarkerTooltip/index.d.ts +1 -0
  128. package/dist/components/MarkerTooltip/index.js +1 -0
  129. package/dist/components/Menu/SelectorMenu.svelte +280 -0
  130. package/dist/components/Menu/SelectorMenu.svelte.d.ts +4 -0
  131. package/dist/components/Menu/index.d.ts +2 -0
  132. package/dist/components/Menu/index.js +2 -0
  133. package/dist/components/Menu/types.d.ts +20 -0
  134. package/dist/components/Menu/types.js +1 -0
  135. package/dist/components/MyCounterButton.svelte +11 -0
  136. package/dist/components/MyCounterButton.svelte.d.ts +3 -0
  137. package/dist/components/Panel/index.d.ts +2 -0
  138. package/dist/components/Panel/index.js +2 -0
  139. package/dist/components/Panel/panel.svelte +18 -0
  140. package/dist/components/Panel/panel.svelte.d.ts +4 -0
  141. package/dist/components/Panel/types.d.ts +7 -0
  142. package/dist/components/Panel/types.js +1 -0
  143. package/dist/components/PersistButton/PersistButton.svelte +100 -0
  144. package/dist/components/PersistButton/PersistButton.svelte.d.ts +12 -0
  145. package/dist/components/PersistButton/index.d.ts +1 -0
  146. package/dist/components/PersistButton/index.js +1 -0
  147. package/dist/components/Popover/Popover.svelte +81 -0
  148. package/dist/components/Popover/Popover.svelte.d.ts +6 -0
  149. package/dist/components/Popover/index.d.ts +2 -0
  150. package/dist/components/Popover/index.js +2 -0
  151. package/dist/components/Popover/types.d.ts +17 -0
  152. package/dist/components/Popover/types.js +1 -0
  153. package/dist/components/PropsTable/PropsTable.svelte +107 -0
  154. package/dist/components/PropsTable/PropsTable.svelte.d.ts +26 -0
  155. package/dist/components/RadialMenu/EffectPreview.svelte +36 -0
  156. package/dist/components/RadialMenu/EffectPreview.svelte.d.ts +9 -0
  157. package/dist/components/RadialMenu/EffectPreviewScene.svelte +194 -0
  158. package/dist/components/RadialMenu/EffectPreviewScene.svelte.d.ts +8 -0
  159. package/dist/components/RadialMenu/RadialMenu.svelte +503 -0
  160. package/dist/components/RadialMenu/RadialMenu.svelte.d.ts +4 -0
  161. package/dist/components/RadialMenu/RadialMenuItem.svelte +176 -0
  162. package/dist/components/RadialMenu/RadialMenuItem.svelte.d.ts +11 -0
  163. package/dist/components/RadialMenu/index.d.ts +2 -0
  164. package/dist/components/RadialMenu/index.js +2 -0
  165. package/dist/components/RadialMenu/types.d.ts +35 -0
  166. package/dist/components/RadialMenu/types.js +1 -0
  167. package/dist/components/Select/Select.svelte +342 -0
  168. package/dist/components/Select/Select.svelte.d.ts +4 -0
  169. package/dist/components/Select/index.d.ts +2 -0
  170. package/dist/components/Select/index.js +2 -0
  171. package/dist/components/Select/types.d.ts +24 -0
  172. package/dist/components/Select/types.js +1 -0
  173. package/dist/components/Spacer/Spacer.svelte +14 -0
  174. package/dist/components/Spacer/Spacer.svelte.d.ts +4 -0
  175. package/dist/components/Spacer/index.d.ts +2 -0
  176. package/dist/components/Spacer/index.js +2 -0
  177. package/dist/components/Spacer/types.d.ts +4 -0
  178. package/dist/components/Spacer/types.js +1 -0
  179. package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte +445 -0
  180. package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte.d.ts +19 -0
  181. package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte +167 -0
  182. package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte.d.ts +20 -0
  183. package/dist/components/Stage/components/AnnotationLayer/types.d.ts +121 -0
  184. package/dist/components/Stage/components/AnnotationLayer/types.js +71 -0
  185. package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte +148 -0
  186. package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte.d.ts +7 -0
  187. package/dist/components/Stage/components/CursorLayer/cursor.svg +26 -0
  188. package/dist/components/Stage/components/CursorLayer/index.d.ts +2 -0
  189. package/dist/components/Stage/components/CursorLayer/index.js +1 -0
  190. package/dist/components/Stage/components/CursorLayer/types.d.ts +28 -0
  191. package/dist/components/Stage/components/CursorLayer/types.js +1 -0
  192. package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte +364 -0
  193. package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte.d.ts +24 -0
  194. package/dist/components/Stage/components/DrawingLayer/types.d.ts +56 -0
  195. package/dist/components/Stage/components/DrawingLayer/types.js +23 -0
  196. package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte +72 -0
  197. package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte.d.ts +11 -0
  198. package/dist/components/Stage/components/EdgeOverlayLayer/types.d.ts +29 -0
  199. package/dist/components/Stage/components/EdgeOverlayLayer/types.js +1 -0
  200. package/dist/components/Stage/components/FogLayer/FogLayer.svelte +75 -0
  201. package/dist/components/Stage/components/FogLayer/FogLayer.svelte.d.ts +11 -0
  202. package/dist/components/Stage/components/FogLayer/types.d.ts +42 -0
  203. package/dist/components/Stage/components/FogLayer/types.js +1 -0
  204. package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte +249 -0
  205. package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte.d.ts +19 -0
  206. package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte +200 -0
  207. package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte.d.ts +18 -0
  208. package/dist/components/Stage/components/FogOfWarLayer/types.d.ts +143 -0
  209. package/dist/components/Stage/components/FogOfWarLayer/types.js +1 -0
  210. package/dist/components/Stage/components/GridLayer/GridLayer.svelte +20 -0
  211. package/dist/components/Stage/components/GridLayer/GridLayer.svelte.d.ts +12 -0
  212. package/dist/components/Stage/components/GridLayer/GridMaterial.svelte +69 -0
  213. package/dist/components/Stage/components/GridLayer/GridMaterial.svelte.d.ts +10 -0
  214. package/dist/components/Stage/components/GridLayer/types.d.ts +65 -0
  215. package/dist/components/Stage/components/GridLayer/types.js +10 -0
  216. package/dist/components/Stage/components/LayerInput/LayerInput.svelte +300 -0
  217. package/dist/components/Stage/components/LayerInput/LayerInput.svelte.d.ts +20 -0
  218. package/dist/components/Stage/components/MapLayer/MapLayer.svelte +196 -0
  219. package/dist/components/Stage/components/MapLayer/MapLayer.svelte.d.ts +24 -0
  220. package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.d.ts +93 -0
  221. package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.js +229 -0
  222. package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.d.ts +51 -0
  223. package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.js +1 -0
  224. package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.d.ts +49 -0
  225. package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.js +87 -0
  226. package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.d.ts +52 -0
  227. package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.js +141 -0
  228. package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.d.ts +21 -0
  229. package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.js +44 -0
  230. package/dist/components/Stage/components/MapLayer/dataSources/index.d.ts +15 -0
  231. package/dist/components/Stage/components/MapLayer/dataSources/index.js +14 -0
  232. package/dist/components/Stage/components/MapLayer/types.d.ts +54 -0
  233. package/dist/components/Stage/components/MapLayer/types.js +9 -0
  234. package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte +398 -0
  235. package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte.d.ts +24 -0
  236. package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte +262 -0
  237. package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte.d.ts +27 -0
  238. package/dist/components/Stage/components/MarkerLayer/types.d.ts +109 -0
  239. package/dist/components/Stage/components/MarkerLayer/types.js +21 -0
  240. package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte +364 -0
  241. package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte.d.ts +49 -0
  242. package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte +473 -0
  243. package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte.d.ts +24 -0
  244. package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.d.ts +150 -0
  245. package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.js +274 -0
  246. package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.d.ts +10 -0
  247. package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.js +58 -0
  248. package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.d.ts +9 -0
  249. package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.js +66 -0
  250. package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.d.ts +10 -0
  251. package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.js +103 -0
  252. package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.d.ts +9 -0
  253. package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.js +75 -0
  254. package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.d.ts +9 -0
  255. package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.js +73 -0
  256. package/dist/components/Stage/components/MeasurementLayer/measurements/index.d.ts +2 -0
  257. package/dist/components/Stage/components/MeasurementLayer/measurements/index.js +7 -0
  258. package/dist/components/Stage/components/MeasurementLayer/types.d.ts +76 -0
  259. package/dist/components/Stage/components/MeasurementLayer/types.js +9 -0
  260. package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.d.ts +83 -0
  261. package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.js +267 -0
  262. package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.d.ts +74 -0
  263. package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.js +130 -0
  264. package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte +220 -0
  265. package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte.d.ts +9 -0
  266. package/dist/components/Stage/components/ParticleSystem/particles/atlases/ash.png +0 -0
  267. package/dist/components/Stage/components/ParticleSystem/particles/atlases/leaves.png +0 -0
  268. package/dist/components/Stage/components/ParticleSystem/particles/atlases/rain.png +0 -0
  269. package/dist/components/Stage/components/ParticleSystem/particles/atlases/snow.png +0 -0
  270. package/dist/components/Stage/components/ParticleSystem/rng.d.ts +7 -0
  271. package/dist/components/Stage/components/ParticleSystem/rng.js +20 -0
  272. package/dist/components/Stage/components/ParticleSystem/types.d.ts +88 -0
  273. package/dist/components/Stage/components/ParticleSystem/types.js +37 -0
  274. package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte +144 -0
  275. package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte.d.ts +19 -0
  276. package/dist/components/Stage/components/PerformanceDebugger/index.d.ts +1 -0
  277. package/dist/components/Stage/components/PerformanceDebugger/index.js +1 -0
  278. package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte +208 -0
  279. package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte.d.ts +7 -0
  280. package/dist/components/Stage/components/PerformanceOverlay/index.d.ts +1 -0
  281. package/dist/components/Stage/components/PerformanceOverlay/index.js +1 -0
  282. package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte +201 -0
  283. package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte.d.ts +17 -0
  284. package/dist/components/Stage/components/Scene/Scene.svelte +651 -0
  285. package/dist/components/Stage/components/Scene/Scene.svelte.d.ts +88 -0
  286. package/dist/components/Stage/components/Scene/luts.d.ts +7 -0
  287. package/dist/components/Stage/components/Scene/luts.js +33 -0
  288. package/dist/components/Stage/components/Scene/types.d.ts +207 -0
  289. package/dist/components/Stage/components/Scene/types.js +35 -0
  290. package/dist/components/Stage/components/Stage/Stage.svelte +332 -0
  291. package/dist/components/Stage/components/Stage/Stage.svelte.d.ts +86 -0
  292. package/dist/components/Stage/components/Stage/types.d.ts +163 -0
  293. package/dist/components/Stage/components/Stage/types.js +5 -0
  294. package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte +135 -0
  295. package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte.d.ts +13 -0
  296. package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.d.ts +3 -0
  297. package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.js +69 -0
  298. package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.d.ts +3 -0
  299. package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.js +68 -0
  300. package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.d.ts +3 -0
  301. package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.js +67 -0
  302. package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.d.ts +3 -0
  303. package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.js +68 -0
  304. package/dist/components/Stage/components/WeatherLayer/presets/index.d.ts +5 -0
  305. package/dist/components/Stage/components/WeatherLayer/presets/index.js +5 -0
  306. package/dist/components/Stage/components/WeatherLayer/types.d.ts +31 -0
  307. package/dist/components/Stage/components/WeatherLayer/types.js +9 -0
  308. package/dist/components/Stage/helpers/clippingPlaneStore.svelte.d.ts +7 -0
  309. package/dist/components/Stage/helpers/clippingPlaneStore.svelte.js +23 -0
  310. package/dist/components/Stage/helpers/debugState.svelte.d.ts +10 -0
  311. package/dist/components/Stage/helpers/debugState.svelte.js +13 -0
  312. package/dist/components/Stage/helpers/grid.d.ts +72 -0
  313. package/dist/components/Stage/helpers/grid.js +444 -0
  314. package/dist/components/Stage/helpers/lazyBrush.d.ts +63 -0
  315. package/dist/components/Stage/helpers/lazyBrush.js +137 -0
  316. package/dist/components/Stage/helpers/performanceMetrics.svelte.d.ts +62 -0
  317. package/dist/components/Stage/helpers/performanceMetrics.svelte.js +165 -0
  318. package/dist/components/Stage/helpers/utils.d.ts +3 -0
  319. package/dist/components/Stage/helpers/utils.js +18 -0
  320. package/dist/components/Stage/index.d.ts +21 -0
  321. package/dist/components/Stage/index.js +21 -0
  322. package/dist/components/Stage/shaders/AnnotationEffects.frag +1070 -0
  323. package/dist/components/Stage/shaders/Annotations.frag +29 -0
  324. package/dist/components/Stage/shaders/Drawing.frag +83 -0
  325. package/dist/components/Stage/shaders/Drawing.vert +5 -0
  326. package/dist/components/Stage/shaders/Fog.frag +147 -0
  327. package/dist/components/Stage/shaders/FractalNoise.frag +96 -0
  328. package/dist/components/Stage/shaders/GridShader.frag +174 -0
  329. package/dist/components/Stage/shaders/Overlay.frag +23 -0
  330. package/dist/components/Stage/shaders/Overlay.vert +0 -0
  331. package/dist/components/Stage/shaders/Particles.frag +27 -0
  332. package/dist/components/Stage/shaders/Particles.vert +51 -0
  333. package/dist/components/Stage/shaders/ToolOutline.frag +59 -0
  334. package/dist/components/Stage/shaders/default.vert +8 -0
  335. package/dist/components/Stage/types.d.ts +4 -0
  336. package/dist/components/Stage/types.js +1 -0
  337. package/dist/components/Table/Table.svelte +16 -0
  338. package/dist/components/Table/Table.svelte.d.ts +4 -0
  339. package/dist/components/Table/Td.svelte +17 -0
  340. package/dist/components/Table/Td.svelte.d.ts +4 -0
  341. package/dist/components/Table/Th.svelte +18 -0
  342. package/dist/components/Table/Th.svelte.d.ts +4 -0
  343. package/dist/components/Table/index.d.ts +4 -0
  344. package/dist/components/Table/index.js +4 -0
  345. package/dist/components/Table/types.d.ts +11 -0
  346. package/dist/components/Table/types.js +1 -0
  347. package/dist/components/Text/Text.svelte +23 -0
  348. package/dist/components/Text/Text.svelte.d.ts +4 -0
  349. package/dist/components/Text/index.d.ts +2 -0
  350. package/dist/components/Text/index.js +2 -0
  351. package/dist/components/Text/types.d.ts +11 -0
  352. package/dist/components/Text/types.js +1 -0
  353. package/dist/components/Title/Title.svelte +54 -0
  354. package/dist/components/Title/Title.svelte.d.ts +4 -0
  355. package/dist/components/Title/index.d.ts +2 -0
  356. package/dist/components/Title/index.js +2 -0
  357. package/dist/components/Title/types.d.ts +8 -0
  358. package/dist/components/Title/types.js +1 -0
  359. package/dist/components/Toast/Toast.svelte +155 -0
  360. package/dist/components/Toast/Toast.svelte.d.ts +5 -0
  361. package/dist/components/Toast/index.d.ts +3 -0
  362. package/dist/components/Toast/index.js +5 -0
  363. package/dist/components/Toast/toastCookie.d.ts +7 -0
  364. package/dist/components/Toast/toastCookie.js +17 -0
  365. package/dist/components/Toast/types.d.ts +6 -0
  366. package/dist/components/Toast/types.js +1 -0
  367. package/dist/components/ToolTip/ToolTip.svelte +70 -0
  368. package/dist/components/ToolTip/ToolTip.svelte.d.ts +4 -0
  369. package/dist/components/ToolTip/index.d.ts +2 -0
  370. package/dist/components/ToolTip/index.js +2 -0
  371. package/dist/components/ToolTip/types.d.ts +14 -0
  372. package/dist/components/ToolTip/types.js +1 -0
  373. package/dist/components/index.d.ts +32 -0
  374. package/dist/components/index.js +32 -0
  375. package/dist/components/types.d.ts +0 -0
  376. package/dist/components/types.js +1 -0
  377. package/dist/index.d.ts +2 -0
  378. package/dist/index.js +2 -0
  379. package/dist/styles/globals.css +108 -0
  380. package/dist/styles/normalize.css +9 -0
  381. package/dist/styles/reset.css +133 -0
  382. package/dist/styles/utilities.css +179 -0
  383. package/dist/styles/vars.css +1103 -0
  384. package/dist/types/awareness.d.ts +16 -0
  385. package/dist/types/awareness.js +1 -0
  386. package/dist/utils/rle.d.ts +41 -0
  387. package/dist/utils/rle.js +201 -0
  388. package/package.json +110 -0
@@ -0,0 +1,130 @@
1
+ import * as THREE from 'three';
2
+ import { hexDistance, pixelToHex } from '../../../helpers/grid';
3
+ import { GridType } from '../../GridLayer/types';
4
+ /**
5
+ * Calculate hex grid distance between two points
6
+ * @param startPoint Start point in pixel coordinates
7
+ * @param endPoint End point in pixel coordinates
8
+ * @param gridSpacing Grid spacing in inches
9
+ * @param displaySize Display size in inches
10
+ * @param displayResolution Display resolution in pixels
11
+ * @param worldGridSize The real-world size of one hex
12
+ * @param returnHexCount If true, returns hex count instead of world units
13
+ * @returns Distance in world grid units or hex count
14
+ */
15
+ export function calculateHexGridDistance(startPoint, endPoint, gridSpacing, displaySize, displayResolution, worldGridSize = 5, returnHexCount = false) {
16
+ // Convert pixel coordinates to world coordinates (inches)
17
+ const pixelsPerInchX = displayResolution.x / displaySize.x;
18
+ // Calculate hex size in pixels
19
+ // The grid spacing represents the distance between hex centers
20
+ // For pointy-top hexagons, this is the width of the hex
21
+ const hexSizePixels = gridSpacing * pixelsPerInchX;
22
+ // Convert points to hex coordinates
23
+ const startHex = pixelToHex(startPoint, hexSizePixels);
24
+ const endHex = pixelToHex(endPoint, hexSizePixels);
25
+ // Calculate distance in hex units
26
+ const hexes = hexDistance(startHex, endHex);
27
+ // Return either hex count or world units
28
+ return returnHexCount ? hexes : hexes * worldGridSize;
29
+ }
30
+ /**
31
+ * Calculate grid-based distance between two points
32
+ * @param startPoint Start point in pixel coordinates
33
+ * @param endPoint End point in pixel coordinates
34
+ * @param gridSpacing Grid spacing in inches
35
+ * @param displaySize Display size in inches
36
+ * @param displayResolution Display resolution in pixels
37
+ * @param gridType Type of grid (square or hex)
38
+ * @param snapToGrid Whether snapping is enabled
39
+ * @param enableDMG252 Whether to use DMG 252 diagonal rules
40
+ * @param worldGridSize The real-world size of one grid square
41
+ * @param worldGridUnits The units for the world grid size
42
+ * @returns Distance in world grid units
43
+ */
44
+ export function calculateLineDistance(startPoint, endPoint, gridSpacing, displaySize, displayResolution, gridType = GridType.Square, snapToGrid = false, enableDMG252 = false, worldGridSize = 5,
45
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
+ _worldGridUnits = 'FT') {
47
+ // For hex grids with snapping enabled, use hex pathfinding
48
+ if (gridType === GridType.Hex && snapToGrid) {
49
+ return calculateHexGridDistance(startPoint, endPoint, gridSpacing, displaySize, displayResolution, worldGridSize);
50
+ }
51
+ // Convert pixel coordinates to world coordinates (inches)
52
+ const pixelsPerInchX = displayResolution.x / displaySize.x;
53
+ const pixelsPerInchY = displayResolution.y / displaySize.y;
54
+ // Convert to inches
55
+ const startInches = new THREE.Vector2(startPoint.x / pixelsPerInchX, startPoint.y / pixelsPerInchY);
56
+ const endInches = new THREE.Vector2(endPoint.x / pixelsPerInchX, endPoint.y / pixelsPerInchY);
57
+ // If DMG 252 rules are enabled and we're snapping to a square grid
58
+ if (enableDMG252 && snapToGrid && gridType === GridType.Square) {
59
+ // Convert to grid coordinates (number of grid squares)
60
+ const startGrid = new THREE.Vector2(startInches.x / gridSpacing, startInches.y / gridSpacing);
61
+ const endGrid = new THREE.Vector2(endInches.x / gridSpacing, endInches.y / gridSpacing);
62
+ // Calculate grid distance using DMG 252 rules, then convert to world units
63
+ const gridDistance = calculateDMG252Distance(startGrid, endGrid);
64
+ return gridDistance * worldGridSize;
65
+ }
66
+ // Standard distance calculation - convert to world grid units
67
+ const distanceInches = startInches.distanceTo(endInches);
68
+ const gridDistance = distanceInches / gridSpacing;
69
+ return gridDistance * worldGridSize;
70
+ }
71
+ /**
72
+ * Calculate D&D diagonal movement distance
73
+ * In D&D, diagonal movement costs 1.5 times normal movement
74
+ * This is implemented as: max(dx, dy) + min(dx, dy) * 0.5
75
+ */
76
+ export function calculateDnDDiagonalDistance(startPoint, endPoint) {
77
+ const dx = Math.abs(endPoint.x - startPoint.x);
78
+ const dy = Math.abs(endPoint.y - startPoint.y);
79
+ return Math.max(dx, dy) + Math.min(dx, dy) * 0.5;
80
+ }
81
+ /**
82
+ * Calculate distance using DMG 252 diagonal movement rules
83
+ * First diagonal = 1 grid unit, second = 2 grid units, alternating
84
+ * Only applies when snapping to square grid
85
+ */
86
+ export function calculateDMG252Distance(startPoint, endPoint) {
87
+ const dx = Math.abs(endPoint.x - startPoint.x);
88
+ const dy = Math.abs(endPoint.y - startPoint.y);
89
+ // Get the number of diagonal and straight moves
90
+ const diagonalMoves = Math.min(dx, dy);
91
+ const straightMoves = Math.max(dx, dy) - diagonalMoves;
92
+ // Calculate diagonal cost using DMG 252 rules
93
+ // Every other diagonal costs 2 units instead of 1
94
+ const fullDiagonalPairs = Math.floor(diagonalMoves / 2);
95
+ const remainingDiagonals = diagonalMoves % 2;
96
+ const diagonalCost = fullDiagonalPairs * 3 + remainingDiagonals * 1; // 3 = 1 + 2 for each pair
97
+ const straightCost = straightMoves;
98
+ return diagonalCost + straightCost;
99
+ }
100
+ /**
101
+ * Calculate radius from center point to edge point
102
+ */
103
+ export function calculateRadius(centerPoint, edgePoint) {
104
+ return centerPoint.distanceTo(edgePoint);
105
+ }
106
+ /**
107
+ * Calculate area of a circle
108
+ */
109
+ export function calculateCircleArea(radius) {
110
+ return Math.PI * radius * radius;
111
+ }
112
+ /**
113
+ * Calculate area of a square
114
+ */
115
+ export function calculateSquareArea(sideLength) {
116
+ return sideLength * sideLength;
117
+ }
118
+ /**
119
+ * Convert pixels to game units (assuming 1 inch = 1 unit)
120
+ * This is a placeholder - actual conversion depends on grid scale
121
+ */
122
+ export function pixelsToUnits(pixels, pixelsPerUnit = 1) {
123
+ return pixels / pixelsPerUnit;
124
+ }
125
+ /**
126
+ * Convert game units to pixels
127
+ */
128
+ export function unitsToPixels(units, pixelsPerUnit = 1) {
129
+ return units * pixelsPerUnit;
130
+ }
@@ -0,0 +1,220 @@
1
+ <script lang="ts">
2
+ import * as THREE from 'three';
3
+ import { T, useTask, useLoader } from '@threlte/core';
4
+ import { ParticleData } from './types';
5
+ import type { ParticleSystemProps } from './types';
6
+ import { RNG } from './rng';
7
+
8
+ import fragmentShader from '../../shaders/Particles.frag?raw';
9
+ import vertexShader from '../../shaders/Particles.vert?raw';
10
+ import { DEG2RAD } from 'three/src/math/MathUtils';
11
+ import { onDestroy, untrack } from 'svelte';
12
+
13
+ interface Props {
14
+ props: ParticleSystemProps;
15
+ opacity?: number;
16
+ intensity?: number;
17
+ }
18
+
19
+ const { props, opacity, intensity }: Props = $props();
20
+
21
+ let mesh: THREE.Mesh | undefined = $state(undefined);
22
+ let geometry: THREE.BufferGeometry | undefined = $state(undefined);
23
+
24
+ $effect.pre(() => {
25
+ const rng = new RNG(0);
26
+ const count = Math.round(props.maxParticleCount * (intensity ?? 1));
27
+
28
+ // Initialize particle attributes - 4 vertices per quad
29
+ const positions = new Float32Array(count * 12); // 4 vertices * 3 coords
30
+ const centers = new Float32Array(count * 8); // 1 center * 2 coords
31
+ const uvs = new Float32Array(count * 8); // 4 vertices * 2 coords
32
+ const indices = new Uint32Array(count * 6); // 2 triangles * 3 vertices
33
+ const ageOffsets = new Float32Array(count * 4); // 4 vertices
34
+
35
+ const particle = ParticleData[props.type];
36
+
37
+ // Initialize particles
38
+ for (let i = 0; i < count; i++) {
39
+ const radius = rng.random() * (props.spawnArea.maxRadius - props.spawnArea.minRadius) + props.spawnArea.minRadius;
40
+ const angle = rng.random() * 2 * Math.PI;
41
+ const x = radius * Math.cos(angle);
42
+ const y = radius * Math.sin(angle);
43
+ const z = -1.001;
44
+
45
+ // Quad vertex positions (same for all 4 corners initially)
46
+ const baseIdx = i * 12;
47
+
48
+ // Generate random size for this particle
49
+ let size = rng.random() * (props.size.max - props.size.min) + props.size.min;
50
+ let width = size * props.scale.x;
51
+ let height = size * props.scale.y;
52
+
53
+ const rotation = new THREE.Euler(0, 0, props.rotation.offset * DEG2RAD);
54
+ rotation.z += props.rotation.alignRadially ? angle : 0;
55
+ rotation.z += props.rotation.randomize ? rng.random() * 360 : 0;
56
+
57
+ const v1 = new THREE.Vector3(-width / 2, -height / 2, 0);
58
+ const v2 = new THREE.Vector3(width / 2, -height / 2, 0);
59
+ const v3 = new THREE.Vector3(-width / 2, height / 2, 0);
60
+ const v4 = new THREE.Vector3(width / 2, height / 2, 0);
61
+
62
+ v1.applyEuler(rotation);
63
+ v2.applyEuler(rotation);
64
+ v3.applyEuler(rotation);
65
+ v4.applyEuler(rotation);
66
+
67
+ v1.add(new THREE.Vector3(x, y, z));
68
+ v2.add(new THREE.Vector3(x, y, z));
69
+ v3.add(new THREE.Vector3(x, y, z));
70
+ v4.add(new THREE.Vector3(x, y, z));
71
+
72
+ // Set quad corners with size offset
73
+ positions[baseIdx] = v1.x; // Bottom left x
74
+ positions[baseIdx + 1] = v1.y; // Bottom left y
75
+ positions[baseIdx + 2] = v1.z; // Bottom left z
76
+
77
+ positions[baseIdx + 3] = v2.x; // Bottom right x
78
+ positions[baseIdx + 4] = v2.y; // Bottom right y
79
+ positions[baseIdx + 5] = v2.z; // Bottom right z
80
+
81
+ positions[baseIdx + 6] = v3.x; // Top left x
82
+ positions[baseIdx + 7] = v3.y; // Top left y
83
+ positions[baseIdx + 8] = v3.z; // Top left z
84
+
85
+ positions[baseIdx + 9] = v4.x; // Top right x
86
+ positions[baseIdx + 10] = v4.y; // Top right y
87
+ positions[baseIdx + 11] = v4.z; // Top right z
88
+
89
+ // Set center position
90
+ const centerIdx = i * 8;
91
+ centers[centerIdx] = x;
92
+ centers[centerIdx + 1] = y;
93
+ centers[centerIdx + 2] = x;
94
+ centers[centerIdx + 3] = y;
95
+ centers[centerIdx + 4] = x;
96
+ centers[centerIdx + 5] = y;
97
+ centers[centerIdx + 6] = x;
98
+ centers[centerIdx + 7] = y;
99
+
100
+ // Calculate random frame from texture atlas
101
+ const frame = Math.floor(rng.random() * (particle.columns * particle.rows));
102
+ const col = frame % particle.columns;
103
+ const row = Math.floor(frame / particle.columns);
104
+
105
+ // Calculate UV coordinates for this frame
106
+ const uv0 = new THREE.Vector2(col / particle.columns, row / particle.rows);
107
+ const uv1 = new THREE.Vector2((col + 1) / particle.columns, (row + 1) / particle.rows);
108
+
109
+ // UV coordinates for quad
110
+ const uvBaseIdx = i * 8;
111
+ uvs[uvBaseIdx] = uv0.x; // bottom left
112
+ uvs[uvBaseIdx + 1] = uv0.y;
113
+ uvs[uvBaseIdx + 2] = uv1.x; // bottom right
114
+ uvs[uvBaseIdx + 3] = uv0.y;
115
+ uvs[uvBaseIdx + 4] = uv0.x; // top left
116
+ uvs[uvBaseIdx + 5] = uv1.y;
117
+ uvs[uvBaseIdx + 6] = uv1.x; // top right
118
+ uvs[uvBaseIdx + 7] = uv1.y;
119
+
120
+ // Indices for two triangles
121
+ const indexBaseIdx = i * 6;
122
+ const vertexBaseIdx = i * 4;
123
+ indices[indexBaseIdx] = vertexBaseIdx;
124
+ indices[indexBaseIdx + 1] = vertexBaseIdx + 1;
125
+ indices[indexBaseIdx + 2] = vertexBaseIdx + 2;
126
+ indices[indexBaseIdx + 3] = vertexBaseIdx + 1;
127
+ indices[indexBaseIdx + 4] = vertexBaseIdx + 3;
128
+ indices[indexBaseIdx + 5] = vertexBaseIdx + 2;
129
+
130
+ // Random attributes (same for all vertices of quad)
131
+ const ageOffset = rng.random() * props.lifetime;
132
+
133
+ for (let v = 0; v < 4; v++) {
134
+ ageOffsets[i * 4 + v] = ageOffset;
135
+ }
136
+ }
137
+
138
+ untrack(() => {
139
+ geometry = new THREE.BufferGeometry();
140
+ geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
141
+ geometry.setAttribute('center', new THREE.BufferAttribute(centers, 2));
142
+ geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2));
143
+ geometry.setAttribute('ageOffset', new THREE.BufferAttribute(ageOffsets, 1));
144
+ geometry.setIndex(new THREE.BufferAttribute(indices, 1));
145
+ });
146
+
147
+ return () => {
148
+ geometry?.dispose();
149
+ };
150
+ });
151
+
152
+ const material = new THREE.ShaderMaterial();
153
+ const loader = useLoader(THREE.TextureLoader);
154
+
155
+ // Track current texture for disposal
156
+ let currentTexture: THREE.Texture | null = $state(null);
157
+
158
+ // Add cleanup on component destruction
159
+ onDestroy(() => {
160
+ geometry?.dispose();
161
+ if (currentTexture) {
162
+ currentTexture.dispose();
163
+ currentTexture = null;
164
+ }
165
+ });
166
+
167
+ // Create a derived value for uniforms that updates when props change
168
+ const uniforms = $derived({
169
+ uTime: { value: 0 },
170
+ uTexture: { value: currentTexture },
171
+ uOpacity: { value: opacity },
172
+ uColor: { value: new THREE.Color(props.color) },
173
+
174
+ uLifetime: { value: props.lifetime },
175
+ uAngularVelocity: { value: props.rotation.velocity },
176
+ uInitialVelocity: { value: props.initialVelocity },
177
+ uLinearForceAmplitude: { value: props.force.linear },
178
+ uExponentialForceAmplitude: { value: props.force.exponential },
179
+ uSinusoidalForceAmplitude: { value: props.force.sinusoidal.amplitude },
180
+ uSinusoidalForceFrequency: { value: props.force.sinusoidal.frequency },
181
+ uFadeInTime: { value: props.fadeInTime },
182
+ uFadeOutTime: { value: props.fadeOutTime },
183
+ uScale: { value: props.scale }
184
+ });
185
+
186
+ $effect(() => {
187
+ loader.load(ParticleData[props.type].url).then((newTexture) => {
188
+ untrack(() => {
189
+ currentTexture?.dispose();
190
+ currentTexture = newTexture;
191
+
192
+ if (material.uniforms.uTexture) {
193
+ material.uniforms.uTexture.value = newTexture;
194
+ }
195
+ });
196
+ });
197
+ });
198
+
199
+ // Update material uniforms whenever they change
200
+ $effect(() => {
201
+ Object.assign(material.uniforms, uniforms);
202
+ });
203
+
204
+ useTask((dt) => {
205
+ material.uniforms.uTime.value += dt;
206
+ });
207
+ </script>
208
+
209
+ <T.Mesh bind:ref={mesh} {geometry}>
210
+ <T.ShaderMaterial
211
+ is={material}
212
+ {vertexShader}
213
+ {fragmentShader}
214
+ transparent={true}
215
+ depthWrite={false}
216
+ depthTest={false}
217
+ blending={THREE.NormalBlending}
218
+ side={THREE.DoubleSide}
219
+ />
220
+ </T.Mesh>
@@ -0,0 +1,9 @@
1
+ import type { ParticleSystemProps } from './types';
2
+ interface Props {
3
+ props: ParticleSystemProps;
4
+ opacity?: number;
5
+ intensity?: number;
6
+ }
7
+ declare const ParticleSystem: import("svelte").Component<Props, {}, "">;
8
+ type ParticleSystem = ReturnType<typeof ParticleSystem>;
9
+ export default ParticleSystem;
@@ -0,0 +1,7 @@
1
+ export class RNG {
2
+ constructor(seed: any);
3
+ m_w: number;
4
+ m_z: number;
5
+ mask: number;
6
+ random(): number;
7
+ }
@@ -0,0 +1,20 @@
1
+ export class RNG {
2
+ m_w = 123456789;
3
+ m_z = 987654321;
4
+ mask = 0xffffffff;
5
+
6
+ constructor(seed) {
7
+ this.m_w = (123456789 + seed) & this.mask;
8
+ this.m_z = (987654321 - seed) & this.mask;
9
+ }
10
+
11
+ // Returns number between 0 (inclusive) and 1.0 (exclusive),
12
+ // just like Math.random().
13
+ random() {
14
+ this.m_z = (36969 * (this.m_z & 65535) + (this.m_z >> 16)) & this.mask;
15
+ this.m_w = (18000 * (this.m_w & 65535) + (this.m_w >> 16)) & this.mask;
16
+ let result = ((this.m_z << 16) + (this.m_w & 65535)) >>> 0;
17
+ result /= 4294967296;
18
+ return result;
19
+ }
20
+ }
@@ -0,0 +1,88 @@
1
+ export declare enum ParticleType {
2
+ Snow = 1,
3
+ Rain = 2,
4
+ Leaves = 3,
5
+ Ash = 4
6
+ }
7
+ export declare const ParticleData: {
8
+ readonly 1: {
9
+ readonly url: string;
10
+ readonly size: 768;
11
+ readonly columns: 3;
12
+ readonly rows: 3;
13
+ };
14
+ readonly 2: {
15
+ readonly url: string;
16
+ readonly size: 768;
17
+ readonly columns: 3;
18
+ readonly rows: 3;
19
+ };
20
+ readonly 3: {
21
+ readonly url: string;
22
+ readonly size: 768;
23
+ readonly columns: 3;
24
+ readonly rows: 3;
25
+ };
26
+ readonly 4: {
27
+ readonly url: string;
28
+ readonly size: 768;
29
+ readonly columns: 3;
30
+ readonly rows: 3;
31
+ };
32
+ };
33
+ export interface ParticleSystemProps {
34
+ maxParticleCount: number;
35
+ type: ParticleType;
36
+ lifetime: number;
37
+ color: string;
38
+ opacity: number;
39
+ fadeInTime: number;
40
+ fadeOutTime: number;
41
+ initialVelocity: {
42
+ x: number;
43
+ y: number;
44
+ z: number;
45
+ };
46
+ force: {
47
+ linear: {
48
+ x: number;
49
+ y: number;
50
+ z: number;
51
+ };
52
+ exponential: {
53
+ x: number;
54
+ y: number;
55
+ z: number;
56
+ };
57
+ sinusoidal: {
58
+ amplitude: {
59
+ x: number;
60
+ y: number;
61
+ z: number;
62
+ };
63
+ frequency: {
64
+ x: number;
65
+ y: number;
66
+ z: number;
67
+ };
68
+ };
69
+ };
70
+ rotation: {
71
+ alignRadially: boolean;
72
+ offset: number;
73
+ velocity: number;
74
+ randomize: boolean;
75
+ };
76
+ scale: {
77
+ x: number;
78
+ y: number;
79
+ };
80
+ size: {
81
+ min: number;
82
+ max: number;
83
+ };
84
+ spawnArea: {
85
+ minRadius: number;
86
+ maxRadius: number;
87
+ };
88
+ }
@@ -0,0 +1,37 @@
1
+ import ash from './particles/atlases/ash.png';
2
+ import leaves from './particles/atlases/leaves.png';
3
+ import rain from './particles/atlases/rain.png';
4
+ import snow from './particles/atlases/snow.png';
5
+ export var ParticleType;
6
+ (function (ParticleType) {
7
+ ParticleType[ParticleType["Snow"] = 1] = "Snow";
8
+ ParticleType[ParticleType["Rain"] = 2] = "Rain";
9
+ ParticleType[ParticleType["Leaves"] = 3] = "Leaves";
10
+ ParticleType[ParticleType["Ash"] = 4] = "Ash";
11
+ })(ParticleType || (ParticleType = {}));
12
+ export const ParticleData = {
13
+ [ParticleType.Snow]: {
14
+ url: snow,
15
+ size: 768,
16
+ columns: 3,
17
+ rows: 3
18
+ },
19
+ [ParticleType.Rain]: {
20
+ url: rain,
21
+ size: 768,
22
+ columns: 3,
23
+ rows: 3
24
+ },
25
+ [ParticleType.Leaves]: {
26
+ url: leaves,
27
+ size: 768,
28
+ columns: 3,
29
+ rows: 3
30
+ },
31
+ [ParticleType.Ash]: {
32
+ url: ash,
33
+ size: 768,
34
+ columns: 3,
35
+ rows: 3
36
+ }
37
+ };
@@ -0,0 +1,144 @@
1
+ <script lang="ts">
2
+ import { onMount } from 'svelte';
3
+ import PerformanceOverlay from '../PerformanceOverlay/PerformanceOverlay.svelte';
4
+ import { resetMetrics } from '../../helpers/performanceMetrics.svelte';
5
+ import { debugState, setDebugEnabled } from '../../helpers/debugState.svelte';
6
+
7
+ interface Props {
8
+ /** Key combination to toggle (default: F9) */
9
+ shortcut?: string;
10
+ /** Callback when debug state changes (optional, for external notification) */
11
+ onToggle?: (enabled: boolean) => void;
12
+ /** Disabled layers for A/B testing */
13
+ disabledLayers?: string[];
14
+ }
15
+
16
+ const { shortcut = 'F9', onToggle, disabledLayers = [] }: Props = $props();
17
+
18
+ let showHelp = $state(false);
19
+
20
+ // Use the global debug state
21
+ const enabled = $derived(debugState.enableMetrics);
22
+
23
+ const parseShortcut = (shortcut: string) => {
24
+ const parts = shortcut.split('+').map((p) => p.trim());
25
+ const modifiers = ['shift', 'ctrl', 'control', 'alt', 'meta', 'cmd'];
26
+ const keyPart = parts.find((p) => !modifiers.includes(p.toLowerCase())) || '';
27
+
28
+ return {
29
+ shift: parts.some((p) => p.toLowerCase() === 'shift'),
30
+ ctrl: parts.some((p) => p.toLowerCase() === 'ctrl' || p.toLowerCase() === 'control'),
31
+ alt: parts.some((p) => p.toLowerCase() === 'alt'),
32
+ meta: parts.some((p) => p.toLowerCase() === 'meta' || p.toLowerCase() === 'cmd'),
33
+ // Preserve case for function keys (F9, F10, etc.)
34
+ key: keyPart.match(/^[fF]\d+$/) ? keyPart.toUpperCase() : keyPart.toLowerCase()
35
+ };
36
+ };
37
+
38
+ const shortcutConfig = parseShortcut(shortcut);
39
+
40
+ const formatShortcut = () => {
41
+ const parts = [];
42
+ if (shortcutConfig.shift) parts.push('Shift');
43
+ if (shortcutConfig.ctrl) parts.push('Ctrl');
44
+ if (shortcutConfig.alt) parts.push('Alt');
45
+ if (shortcutConfig.meta) parts.push('Cmd');
46
+ // Function keys display as-is (F9), others uppercase
47
+ parts.push(shortcutConfig.key.match(/^F\d+$/) ? shortcutConfig.key : shortcutConfig.key.toUpperCase());
48
+ return parts.join(' + ');
49
+ };
50
+
51
+ const isFormElement = (element: Element | null): boolean => {
52
+ if (!element) return false;
53
+ const tagName = element.tagName;
54
+ return (
55
+ tagName === 'INPUT' ||
56
+ tagName === 'TEXTAREA' ||
57
+ tagName === 'SELECT' ||
58
+ (element as HTMLElement).isContentEditable
59
+ );
60
+ };
61
+
62
+ const handleKeyDown = (e: KeyboardEvent) => {
63
+ // Don't trigger while typing in form elements
64
+ if (isFormElement(document.activeElement)) return;
65
+
66
+ // Function keys (F1-F12) are case-sensitive in e.key, others we compare lowercase
67
+ const isFunctionKey = shortcutConfig.key.match(/^F\d+$/);
68
+ const keyMatches = isFunctionKey ? e.key === shortcutConfig.key : e.key.toLowerCase() === shortcutConfig.key;
69
+
70
+ const matchesShortcut =
71
+ e.shiftKey === shortcutConfig.shift &&
72
+ e.ctrlKey === shortcutConfig.ctrl &&
73
+ e.altKey === shortcutConfig.alt &&
74
+ e.metaKey === shortcutConfig.meta &&
75
+ keyMatches;
76
+
77
+ if (matchesShortcut) {
78
+ e.preventDefault();
79
+ const newEnabled = !debugState.enableMetrics;
80
+ setDebugEnabled(newEnabled);
81
+ onToggle?.(newEnabled);
82
+
83
+ if (newEnabled) {
84
+ resetMetrics();
85
+ showHelp = true;
86
+ setTimeout(() => (showHelp = false), 2000);
87
+ }
88
+ }
89
+ };
90
+
91
+ onMount(() => {
92
+ window.addEventListener('keydown', handleKeyDown);
93
+ return () => window.removeEventListener('keydown', handleKeyDown);
94
+ });
95
+
96
+ /** Get debug props to spread into Stage props */
97
+ export const getDebugProps = () => ({
98
+ enableStats: debugState.enableMetrics,
99
+ loggingRate: 1000,
100
+ enableMetrics: debugState.enableMetrics,
101
+ logMetricsToConsole: debugState.logMetricsToConsole,
102
+ disabledLayers
103
+ });
104
+ </script>
105
+
106
+ {#if enabled}
107
+ <PerformanceOverlay visible={true} {disabledLayers} />
108
+ {/if}
109
+
110
+ {#if showHelp}
111
+ <div class="performanceDebugger__help">
112
+ Performance metrics enabled. Press {formatShortcut()} to disable.
113
+ </div>
114
+ {/if}
115
+
116
+ <style>
117
+ .performanceDebugger__help {
118
+ position: absolute;
119
+ bottom: 1rem;
120
+ left: 50%;
121
+ transform: translateX(-50%);
122
+ background: var(--fg);
123
+ color: var(--bg);
124
+ font-family: var(--font-sans);
125
+ font-size: 0.75rem;
126
+ padding: 0.5rem 1rem;
127
+ border-radius: var(--radius-2);
128
+ box-shadow: var(--shadow-2);
129
+ z-index: 1000;
130
+ pointer-events: none;
131
+ animation: performanceDebuggerFadeIn 0.2s var(--ease-out-3);
132
+ }
133
+
134
+ @keyframes performanceDebuggerFadeIn {
135
+ from {
136
+ opacity: 0;
137
+ transform: translateX(-50%) translateY(0.5rem);
138
+ }
139
+ to {
140
+ opacity: 1;
141
+ transform: translateX(-50%) translateY(0);
142
+ }
143
+ }
144
+ </style>
@@ -0,0 +1,19 @@
1
+ interface Props {
2
+ /** Key combination to toggle (default: F9) */
3
+ shortcut?: string;
4
+ /** Callback when debug state changes (optional, for external notification) */
5
+ onToggle?: (enabled: boolean) => void;
6
+ /** Disabled layers for A/B testing */
7
+ disabledLayers?: string[];
8
+ }
9
+ declare const PerformanceDebugger: import("svelte").Component<Props, {
10
+ /** Get debug props to spread into Stage props */ getDebugProps: () => {
11
+ enableStats: boolean;
12
+ loggingRate: number;
13
+ enableMetrics: boolean;
14
+ logMetricsToConsole: boolean;
15
+ disabledLayers: string[];
16
+ };
17
+ }, "">;
18
+ type PerformanceDebugger = ReturnType<typeof PerformanceDebugger>;
19
+ export default PerformanceDebugger;