@pretty-chitty/core 1.1.2 → 1.2.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 (351) hide show
  1. package/dist/components/BottomBarButton.d.ts +2 -1
  2. package/dist/components/BottomBarButton.d.ts.map +1 -1
  3. package/dist/components/BottomBarButton.js +2 -1
  4. package/dist/components/BottomBarButton.js.map +1 -1
  5. package/dist/components/ClientTrustMatchViewer.d.ts +4 -1
  6. package/dist/components/ClientTrustMatchViewer.d.ts.map +1 -1
  7. package/dist/components/ClientTrustMatchViewer.js +11 -4
  8. package/dist/components/ClientTrustMatchViewer.js.map +1 -1
  9. package/dist/components/ContextGalleryDisplay.js +1 -1
  10. package/dist/components/ContextGalleryDisplay.js.map +1 -1
  11. package/dist/components/DemoWrapper.d.ts +9 -0
  12. package/dist/components/DemoWrapper.d.ts.map +1 -0
  13. package/dist/components/DemoWrapper.js +76 -0
  14. package/dist/components/DemoWrapper.js.map +1 -0
  15. package/dist/components/FullScreenGalleryDisplay.d.ts +2 -0
  16. package/dist/components/FullScreenGalleryDisplay.d.ts.map +1 -0
  17. package/dist/components/FullScreenGalleryDisplay.js +56 -0
  18. package/dist/components/FullScreenGalleryDisplay.js.map +1 -0
  19. package/dist/components/Gallery/AnimationController.d.ts +19 -0
  20. package/dist/components/Gallery/AnimationController.d.ts.map +1 -0
  21. package/dist/components/Gallery/AnimationController.js +82 -0
  22. package/dist/components/Gallery/AnimationController.js.map +1 -0
  23. package/dist/components/Gallery/BuiltItem.d.ts +58 -0
  24. package/dist/components/Gallery/BuiltItem.d.ts.map +1 -0
  25. package/dist/components/Gallery/BuiltItem.js +313 -0
  26. package/dist/components/Gallery/BuiltItem.js.map +1 -0
  27. package/dist/components/Gallery/CameraManager.d.ts +14 -0
  28. package/dist/components/Gallery/CameraManager.d.ts.map +1 -0
  29. package/dist/components/Gallery/CameraManager.js +43 -0
  30. package/dist/components/Gallery/CameraManager.js.map +1 -0
  31. package/dist/components/Gallery/GalleryController.d.ts +30 -0
  32. package/dist/components/Gallery/GalleryController.d.ts.map +1 -0
  33. package/dist/components/Gallery/GalleryController.js +137 -0
  34. package/dist/components/Gallery/GalleryController.js.map +1 -0
  35. package/dist/components/Gallery/GalleryViewer.d.ts +18 -0
  36. package/dist/components/Gallery/GalleryViewer.d.ts.map +1 -0
  37. package/dist/components/Gallery/GalleryViewer.js +141 -0
  38. package/dist/components/Gallery/GalleryViewer.js.map +1 -0
  39. package/dist/components/Gallery/LayoutManager.d.ts +49 -0
  40. package/dist/components/Gallery/LayoutManager.d.ts.map +1 -0
  41. package/dist/components/Gallery/LayoutManager.js +132 -0
  42. package/dist/components/Gallery/LayoutManager.js.map +1 -0
  43. package/dist/components/Gallery/constants.d.ts +13 -0
  44. package/dist/components/Gallery/constants.d.ts.map +1 -0
  45. package/dist/components/Gallery/constants.js +13 -0
  46. package/dist/components/Gallery/constants.js.map +1 -0
  47. package/dist/components/Gallery/index.d.ts +3 -0
  48. package/dist/components/Gallery/index.d.ts.map +1 -0
  49. package/dist/components/Gallery/index.js +2 -0
  50. package/dist/components/Gallery/index.js.map +1 -0
  51. package/dist/components/Gallery/types.d.ts +45 -0
  52. package/dist/components/Gallery/types.d.ts.map +1 -0
  53. package/dist/components/Gallery/types.js +2 -0
  54. package/dist/components/Gallery/types.js.map +1 -0
  55. package/dist/components/GalleryPlayground.js +1 -1
  56. package/dist/components/GalleryPlayground.js.map +1 -1
  57. package/dist/components/GalleryViewer.d.ts +2 -47
  58. package/dist/components/GalleryViewer.d.ts.map +1 -1
  59. package/dist/components/GalleryViewer.js +3 -569
  60. package/dist/components/GalleryViewer.js.map +1 -1
  61. package/dist/components/GameDesigner.d.ts.map +1 -1
  62. package/dist/components/GameDesigner.js +13 -2
  63. package/dist/components/GameDesigner.js.map +1 -1
  64. package/dist/components/InlineGalleryDisplay.d.ts +2 -0
  65. package/dist/components/InlineGalleryDisplay.d.ts.map +1 -0
  66. package/dist/components/InlineGalleryDisplay.js +69 -0
  67. package/dist/components/InlineGalleryDisplay.js.map +1 -0
  68. package/dist/components/LiveButton.d.ts.map +1 -1
  69. package/dist/components/LiveButton.js +1 -1
  70. package/dist/components/LiveButton.js.map +1 -1
  71. package/dist/components/MatchViewer.d.ts +0 -1
  72. package/dist/components/MatchViewer.d.ts.map +1 -1
  73. package/dist/components/MatchViewer.js +20 -10
  74. package/dist/components/MatchViewer.js.map +1 -1
  75. package/dist/components/Panel/MultiPanel.d.ts.map +1 -1
  76. package/dist/components/Panel/MultiPanel.js +14 -7
  77. package/dist/components/Panel/MultiPanel.js.map +1 -1
  78. package/dist/components/Panel/PanelContents.d.ts +2 -1
  79. package/dist/components/Panel/PanelContents.d.ts.map +1 -1
  80. package/dist/components/Panel/PanelContents.js +16 -11
  81. package/dist/components/Panel/PanelContents.js.map +1 -1
  82. package/dist/components/Panel/SinglePanel.d.ts.map +1 -1
  83. package/dist/components/Panel/SinglePanel.js +4 -3
  84. package/dist/components/Panel/SinglePanel.js.map +1 -1
  85. package/dist/components/Panel/ViewerWrapper.d.ts +1 -3
  86. package/dist/components/Panel/ViewerWrapper.d.ts.map +1 -1
  87. package/dist/components/Panel/ViewerWrapper.js +2 -3
  88. package/dist/components/Panel/ViewerWrapper.js.map +1 -1
  89. package/dist/components/Playground.d.ts.map +1 -1
  90. package/dist/components/Playground.js +353 -50
  91. package/dist/components/Playground.js.map +1 -1
  92. package/dist/components/PromptControls.d.ts.map +1 -1
  93. package/dist/components/PromptControls.js +39 -6
  94. package/dist/components/PromptControls.js.map +1 -1
  95. package/dist/components/ServerTrustMatchViewer.d.ts +11 -0
  96. package/dist/components/ServerTrustMatchViewer.d.ts.map +1 -0
  97. package/dist/components/ServerTrustMatchViewer.js +26 -0
  98. package/dist/components/ServerTrustMatchViewer.js.map +1 -0
  99. package/dist/components/Viewer.d.ts.map +1 -1
  100. package/dist/components/Viewer.js +54 -14
  101. package/dist/components/Viewer.js.map +1 -1
  102. package/dist/game/Chit.d.ts +6 -2
  103. package/dist/game/Chit.d.ts.map +1 -1
  104. package/dist/game/Chit.js +50 -6
  105. package/dist/game/Chit.js.map +1 -1
  106. package/dist/game/ClientTimeState.d.ts +1 -0
  107. package/dist/game/ClientTimeState.d.ts.map +1 -1
  108. package/dist/game/ClientTimeState.js +4 -1
  109. package/dist/game/ClientTimeState.js.map +1 -1
  110. package/dist/game/GalleryItemChitChildrenSource.d.ts +1 -0
  111. package/dist/game/GalleryItemChitChildrenSource.d.ts.map +1 -1
  112. package/dist/game/GalleryItemChitChildrenSource.js +1 -0
  113. package/dist/game/GalleryItemChitChildrenSource.js.map +1 -1
  114. package/dist/game/GalleryItemRawSource.d.ts +1 -0
  115. package/dist/game/GalleryItemRawSource.d.ts.map +1 -1
  116. package/dist/game/GalleryItemRawSource.js +1 -0
  117. package/dist/game/GalleryItemRawSource.js.map +1 -1
  118. package/dist/game/Game.d.ts +2 -1
  119. package/dist/game/Game.d.ts.map +1 -1
  120. package/dist/game/GameButton.d.ts +1 -0
  121. package/dist/game/GameButton.d.ts.map +1 -1
  122. package/dist/game/GameButton.js +2 -0
  123. package/dist/game/GameButton.js.map +1 -1
  124. package/dist/game/GameDeckChit.d.ts +6 -0
  125. package/dist/game/GameDeckChit.d.ts.map +1 -1
  126. package/dist/game/GameDeckChit.js +32 -5
  127. package/dist/game/GameDeckChit.js.map +1 -1
  128. package/dist/game/GameMetaData.d.ts +18 -0
  129. package/dist/game/GameMetaData.d.ts.map +1 -0
  130. package/dist/game/GameMetaData.js +2 -0
  131. package/dist/game/GameMetaData.js.map +1 -0
  132. package/dist/game/GameTheme.d.ts +11 -0
  133. package/dist/game/GameTheme.d.ts.map +1 -1
  134. package/dist/game/GameTheme.js +19 -4
  135. package/dist/game/GameTheme.js.map +1 -1
  136. package/dist/game/Match.d.ts +2 -1
  137. package/dist/game/Match.d.ts.map +1 -1
  138. package/dist/game/Match.js +4 -3
  139. package/dist/game/Match.js.map +1 -1
  140. package/dist/game/MatchStorage.d.ts +10 -0
  141. package/dist/game/MatchStorage.d.ts.map +1 -1
  142. package/dist/game/MatchStorage.js +29 -0
  143. package/dist/game/MatchStorage.js.map +1 -1
  144. package/dist/game/ModalState.d.ts +1 -0
  145. package/dist/game/ModalState.d.ts.map +1 -1
  146. package/dist/game/ModalState.js +1 -0
  147. package/dist/game/ModalState.js.map +1 -1
  148. package/dist/game/OrderedOutlet.d.ts.map +1 -1
  149. package/dist/game/OrderedOutlet.js +6 -6
  150. package/dist/game/OrderedOutlet.js.map +1 -1
  151. package/dist/game/Pick.d.ts +11 -1
  152. package/dist/game/Pick.d.ts.map +1 -1
  153. package/dist/game/Pick.js +83 -1
  154. package/dist/game/Pick.js.map +1 -1
  155. package/dist/game/PlayerChit.d.ts +2 -1
  156. package/dist/game/PlayerChit.d.ts.map +1 -1
  157. package/dist/game/PlayerChit.js +13 -1
  158. package/dist/game/PlayerChit.js.map +1 -1
  159. package/dist/game/PlayerInfo.d.ts +2 -1
  160. package/dist/game/PlayerInfo.d.ts.map +1 -1
  161. package/dist/game/PlayerInfo.js +20 -3
  162. package/dist/game/PlayerInfo.js.map +1 -1
  163. package/dist/game/Prompt.d.ts +1 -11
  164. package/dist/game/Prompt.d.ts.map +1 -1
  165. package/dist/game/Prompt.js +0 -32
  166. package/dist/game/Prompt.js.map +1 -1
  167. package/dist/game/RootChit.d.ts +4 -0
  168. package/dist/game/RootChit.d.ts.map +1 -1
  169. package/dist/game/RootChit.js +36 -1
  170. package/dist/game/RootChit.js.map +1 -1
  171. package/dist/game/Turn.d.ts +9 -8
  172. package/dist/game/Turn.d.ts.map +1 -1
  173. package/dist/game/Turn.js +34 -34
  174. package/dist/game/Turn.js.map +1 -1
  175. package/dist/game/TurnState.d.ts +3 -2
  176. package/dist/game/TurnState.d.ts.map +1 -1
  177. package/dist/game/TurnState.js +22 -2
  178. package/dist/game/TurnState.js.map +1 -1
  179. package/dist/game/badAiTransport/BadAIClientPrompts.d.ts +14 -0
  180. package/dist/game/badAiTransport/BadAIClientPrompts.d.ts.map +1 -0
  181. package/dist/game/badAiTransport/BadAIClientPrompts.js +50 -0
  182. package/dist/game/badAiTransport/BadAIClientPrompts.js.map +1 -0
  183. package/dist/game/clientTransport/ClientTime.js +1 -1
  184. package/dist/game/clientTransport/ClientTime.js.map +1 -1
  185. package/dist/game/serverTransport/ServerTime.d.ts.map +1 -1
  186. package/dist/game/serverTransport/ServerTime.js +1 -1
  187. package/dist/game/serverTransport/ServerTime.js.map +1 -1
  188. package/dist/hooks/useButtonGalleriesOptions.d.ts +4 -0
  189. package/dist/hooks/useButtonGalleriesOptions.d.ts.map +1 -0
  190. package/dist/hooks/useButtonGalleriesOptions.js +7 -0
  191. package/dist/hooks/useButtonGalleriesOptions.js.map +1 -0
  192. package/dist/hooks/useEventChannelState.js +1 -1
  193. package/dist/hooks/useEventChannelState.js.map +1 -1
  194. package/dist/hooks/useLoadingStates.d.ts +17 -0
  195. package/dist/hooks/useLoadingStates.d.ts.map +1 -0
  196. package/dist/hooks/useLoadingStates.js +44 -0
  197. package/dist/hooks/useLoadingStates.js.map +1 -0
  198. package/dist/hooks/useModalState.d.ts +2 -1
  199. package/dist/hooks/useModalState.d.ts.map +1 -1
  200. package/dist/hooks/useModalState.js +2 -2
  201. package/dist/hooks/useModalState.js.map +1 -1
  202. package/dist/hooks/usePanelPositioning.d.ts +0 -1
  203. package/dist/hooks/usePanelPositioning.d.ts.map +1 -1
  204. package/dist/hooks/usePanelPositioning.js.map +1 -1
  205. package/dist/index.d.ts +7 -5
  206. package/dist/index.d.ts.map +1 -1
  207. package/dist/index.js +17 -1
  208. package/dist/index.js.map +1 -1
  209. package/dist/rendering/CameraWrapperPerspective.d.ts.map +1 -1
  210. package/dist/rendering/CameraWrapperPerspective.js +1 -1
  211. package/dist/rendering/CameraWrapperPerspective.js.map +1 -1
  212. package/dist/rendering/ChitGalleryItemInstance.d.ts +2 -0
  213. package/dist/rendering/ChitGalleryItemInstance.d.ts.map +1 -1
  214. package/dist/rendering/ChitGalleryItemInstance.js +2 -0
  215. package/dist/rendering/ChitGalleryItemInstance.js.map +1 -1
  216. package/dist/rendering/ChitRenderInstance.d.ts +13 -2
  217. package/dist/rendering/ChitRenderInstance.d.ts.map +1 -1
  218. package/dist/rendering/ChitRenderInstance.js +95 -47
  219. package/dist/rendering/ChitRenderInstance.js.map +1 -1
  220. package/dist/rendering/ChitRenderSpec.d.ts +3 -0
  221. package/dist/rendering/ChitRenderSpec.d.ts.map +1 -1
  222. package/dist/rendering/ChitRenderSpec.js +3 -0
  223. package/dist/rendering/ChitRenderSpec.js.map +1 -1
  224. package/dist/rendering/RootChitRenderInstance.d.ts +5 -2
  225. package/dist/rendering/RootChitRenderInstance.d.ts.map +1 -1
  226. package/dist/rendering/RootChitRenderInstance.js +76 -13
  227. package/dist/rendering/RootChitRenderInstance.js.map +1 -1
  228. package/dist/rendering/SplayCounter.d.ts.map +1 -1
  229. package/dist/rendering/SplayCounter.js +1 -1
  230. package/dist/rendering/SplayCounter.js.map +1 -1
  231. package/dist/rendering/TextureReferenceCounter.d.ts +1 -1
  232. package/dist/rendering/TextureReferenceCounter.d.ts.map +1 -1
  233. package/dist/rendering/TextureReferenceCounter.js +10 -10
  234. package/dist/rendering/TextureReferenceCounter.js.map +1 -1
  235. package/dist/rendering/outline/passes/DepthOcclusionPass.js +1 -1
  236. package/dist/rendering/outline/passes/DepthOcclusionPass.js.map +1 -1
  237. package/dist/utilities/Annotations.d.ts +59 -0
  238. package/dist/utilities/Annotations.d.ts.map +1 -1
  239. package/dist/utilities/Annotations.js +63 -0
  240. package/dist/utilities/Annotations.js.map +1 -1
  241. package/dist/utilities/CanvasStack/CanvasOperations.d.ts +10 -1
  242. package/dist/utilities/CanvasStack/CanvasOperations.d.ts.map +1 -1
  243. package/dist/utilities/CanvasStack/CanvasOperations.js +8 -0
  244. package/dist/utilities/CanvasStack/CanvasOperations.js.map +1 -1
  245. package/dist/utilities/CanvasStack/ReactCanvas.d.ts +4 -2
  246. package/dist/utilities/CanvasStack/ReactCanvas.d.ts.map +1 -1
  247. package/dist/utilities/CanvasStack/ReactCanvas.js +5 -2
  248. package/dist/utilities/CanvasStack/ReactCanvas.js.map +1 -1
  249. package/dist/utilities/CanvasStack/RichTextRenderer.d.ts.map +1 -1
  250. package/dist/utilities/CanvasStack/RichTextRenderer.js +12 -4
  251. package/dist/utilities/CanvasStack/RichTextRenderer.js.map +1 -1
  252. package/dist/utilities/EventChannel.d.ts.map +1 -1
  253. package/dist/utilities/EventChannel.js +2 -3
  254. package/dist/utilities/EventChannel.js.map +1 -1
  255. package/dist/utilities/GlbLoader.d.ts +15 -0
  256. package/dist/utilities/GlbLoader.d.ts.map +1 -0
  257. package/dist/utilities/GlbLoader.js +212 -0
  258. package/dist/utilities/GlbLoader.js.map +1 -0
  259. package/dist/utilities/LayoutHelper.js +23 -2
  260. package/dist/utilities/LayoutHelper.js.map +1 -1
  261. package/dist/utilities/ObjectWithProps.d.ts.map +1 -1
  262. package/dist/utilities/ObjectWithProps.js +32 -3
  263. package/dist/utilities/ObjectWithProps.js.map +1 -1
  264. package/package.json +6 -5
  265. package/src/library/components/BottomBarButton.tsx +3 -0
  266. package/src/library/components/ClientTrustMatchViewer.tsx +23 -8
  267. package/src/library/components/ContextGalleryDisplay.tsx +2 -2
  268. package/src/library/components/DemoWrapper.tsx +113 -0
  269. package/src/library/components/{GalleryDisplay.tsx → FullScreenGalleryDisplay.tsx} +28 -2
  270. package/src/library/components/Gallery/AnimationController.ts +110 -0
  271. package/src/library/components/Gallery/BuiltItem.ts +385 -0
  272. package/src/library/components/Gallery/CameraManager.ts +54 -0
  273. package/src/library/components/Gallery/GalleryController.ts +193 -0
  274. package/src/library/components/Gallery/GalleryViewer.tsx +211 -0
  275. package/src/library/components/Gallery/LayoutManager.ts +166 -0
  276. package/src/library/components/Gallery/constants.ts +12 -0
  277. package/src/library/components/Gallery/index.ts +2 -0
  278. package/src/library/components/Gallery/types.ts +55 -0
  279. package/src/library/components/GalleryPlayground.tsx +1 -1
  280. package/src/library/components/GalleryViewer.tsx +4 -773
  281. package/src/library/components/GameDesigner.tsx +21 -4
  282. package/src/library/components/InlineGalleryDisplay.tsx +101 -0
  283. package/src/library/components/LiveButton.tsx +2 -1
  284. package/src/library/components/MatchViewer.tsx +32 -14
  285. package/src/library/components/Panel/MultiPanel.tsx +20 -8
  286. package/src/library/components/Panel/PanelContents.tsx +17 -12
  287. package/src/library/components/Panel/SinglePanel.tsx +5 -4
  288. package/src/library/components/Panel/ViewerWrapper.tsx +0 -5
  289. package/src/library/components/Playground.tsx +692 -119
  290. package/src/library/components/PromptControls.tsx +61 -8
  291. package/src/library/components/ServerTrustMatchViewer.tsx +53 -0
  292. package/src/library/components/Viewer.tsx +60 -20
  293. package/src/library/game/Chit.ts +53 -6
  294. package/src/library/game/ClientTimeState.ts +5 -1
  295. package/src/library/game/GalleryItemChitChildrenSource.ts +2 -0
  296. package/src/library/game/GalleryItemRawSource.ts +2 -0
  297. package/src/library/game/Game.ts +3 -1
  298. package/src/library/game/GameButton.ts +3 -0
  299. package/src/library/game/GameDeckChit.ts +36 -5
  300. package/src/library/game/GameMetaData.ts +19 -0
  301. package/src/library/game/GameTheme.ts +23 -5
  302. package/src/library/game/Match.ts +4 -3
  303. package/src/library/game/MatchStorage.ts +37 -0
  304. package/src/library/game/ModalState.ts +1 -0
  305. package/src/library/game/OrderedOutlet.ts +6 -6
  306. package/src/library/game/Pick.ts +98 -2
  307. package/src/library/game/PlayerChit.ts +13 -1
  308. package/src/library/game/PlayerInfo.ts +22 -3
  309. package/src/library/game/Prompt.ts +1 -36
  310. package/src/library/game/RootChit.ts +41 -1
  311. package/src/library/game/Turn.ts +37 -40
  312. package/src/library/game/TurnState.ts +22 -3
  313. package/src/library/game/badAiTransport/BadAIClientPrompts.ts +60 -0
  314. package/src/library/game/clientTransport/ClientTime.ts +1 -1
  315. package/src/library/game/serverTransport/ServerTime.ts +2 -2
  316. package/src/library/hooks/useButtonGalleriesOptions.tsx +9 -0
  317. package/src/library/hooks/useEventChannelState.ts +1 -1
  318. package/src/library/hooks/useLoadingStates.tsx +55 -0
  319. package/src/library/hooks/useModalState.tsx +2 -2
  320. package/src/library/hooks/usePanelPositioning.tsx +0 -1
  321. package/src/library/index.ts +21 -1
  322. package/src/library/rendering/CameraWrapperPerspective.ts +10 -12
  323. package/src/library/rendering/ChitGalleryItemInstance.ts +2 -0
  324. package/src/library/rendering/ChitRenderInstance.ts +119 -61
  325. package/src/library/rendering/ChitRenderSpec.ts +4 -0
  326. package/src/library/rendering/RootChitRenderInstance.ts +87 -13
  327. package/src/library/rendering/SplayCounter.tsx +2 -1
  328. package/src/library/rendering/TextureReferenceCounter.ts +9 -9
  329. package/src/library/rendering/outline/passes/DepthOcclusionPass.ts +1 -1
  330. package/src/library/utilities/Annotations.ts +99 -0
  331. package/src/library/utilities/CanvasStack/CanvasOperations.tsx +19 -1
  332. package/src/library/utilities/CanvasStack/ReactCanvas.tsx +10 -3
  333. package/src/library/utilities/CanvasStack/RichTextRenderer.ts +14 -4
  334. package/src/library/utilities/EventChannel.ts +2 -4
  335. package/src/library/utilities/GlbLoader.ts +292 -0
  336. package/src/library/utilities/LayoutHelper.ts +28 -2
  337. package/src/library/utilities/ObjectWithProps.ts +27 -3
  338. package/dist/components/GalleryDisplay.d.ts +0 -2
  339. package/dist/components/GalleryDisplay.d.ts.map +0 -1
  340. package/dist/components/GalleryDisplay.js +0 -42
  341. package/dist/components/GalleryDisplay.js.map +0 -1
  342. package/dist/utilities/OutlineCanvas.d.ts +0 -12
  343. package/dist/utilities/OutlineCanvas.d.ts.map +0 -1
  344. package/dist/utilities/OutlineCanvas.js +0 -31
  345. package/dist/utilities/OutlineCanvas.js.map +0 -1
  346. package/dist/utilities/OutlineGeometry.d.ts +0 -3
  347. package/dist/utilities/OutlineGeometry.d.ts.map +0 -1
  348. package/dist/utilities/OutlineGeometry.js +0 -57
  349. package/dist/utilities/OutlineGeometry.js.map +0 -1
  350. package/src/library/utilities/OutlineCanvas.tsx +0 -45
  351. package/src/library/utilities/OutlineGeometry.ts +0 -69
@@ -0,0 +1,292 @@
1
+ import {
2
+ BufferGeometry,
3
+ BufferAttribute,
4
+ Group,
5
+ Mesh,
6
+ MeshStandardMaterial,
7
+ Matrix4,
8
+ Color,
9
+ } from "three";
10
+ import QuickLRU from "quick-lru";
11
+
12
+ // ── glTF JSON types (subset we care about) ──────────────────────────────
13
+
14
+ interface GltfJson {
15
+ scene?: number;
16
+ scenes?: Array<{ nodes?: number[] }>;
17
+ nodes?: Array<{
18
+ mesh?: number;
19
+ children?: number[];
20
+ name?: string;
21
+ translation?: [number, number, number];
22
+ rotation?: [number, number, number, number];
23
+ scale?: [number, number, number];
24
+ matrix?: number[];
25
+ }>;
26
+ meshes?: Array<{
27
+ name?: string;
28
+ primitives: Array<{
29
+ attributes: Record<string, number>;
30
+ indices?: number;
31
+ material?: number;
32
+ }>;
33
+ }>;
34
+ accessors?: Array<{
35
+ bufferView?: number;
36
+ byteOffset?: number;
37
+ componentType: number;
38
+ count: number;
39
+ type: string;
40
+ }>;
41
+ bufferViews?: Array<{
42
+ buffer: number;
43
+ byteOffset?: number;
44
+ byteLength: number;
45
+ byteStride?: number;
46
+ }>;
47
+ materials?: Array<{
48
+ name?: string;
49
+ doubleSided?: boolean;
50
+ pbrMetallicRoughness?: {
51
+ baseColorFactor?: [number, number, number, number];
52
+ metallicFactor?: number;
53
+ roughnessFactor?: number;
54
+ };
55
+ }>;
56
+ }
57
+
58
+ // ── Constants ───────────────────────────────────────────────────────────
59
+
60
+ const COMPONENT_TYPES: Record<number, { ctor: new (buffer: ArrayBuffer, byteOffset: number, length: number) => ArrayLike<number>; bytes: number }> = {
61
+ 5120: { ctor: Int8Array, bytes: 1 },
62
+ 5121: { ctor: Uint8Array, bytes: 1 },
63
+ 5122: { ctor: Int16Array, bytes: 2 },
64
+ 5123: { ctor: Uint16Array, bytes: 2 },
65
+ 5125: { ctor: Uint32Array, bytes: 4 },
66
+ 5126: { ctor: Float32Array, bytes: 4 },
67
+ };
68
+
69
+ const TYPE_SIZES: Record<string, number> = {
70
+ SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16,
71
+ };
72
+
73
+ // ── Module-level caches ─────────────────────────────────────────────────
74
+
75
+ const groupCache = new QuickLRU<string, Group>({ maxSize: 50 });
76
+
77
+ // ── Helpers ─────────────────────────────────────────────────────────────
78
+
79
+ function hashString(s: string): string {
80
+ let h = 5381;
81
+ for (let i = 0; i < s.length; i++) h = ((h << 5) + h) ^ s.charCodeAt(i);
82
+ return (h >>> 0).toString(36);
83
+ }
84
+
85
+ function decodeToArrayBuffer(dataUrl: string): ArrayBuffer {
86
+ const commaIndex = dataUrl.indexOf(",");
87
+ const base64 = commaIndex !== -1 ? dataUrl.slice(commaIndex + 1) : dataUrl;
88
+ const binary = atob(base64);
89
+ const bytes = new Uint8Array(binary.length);
90
+ for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
91
+ return bytes.buffer;
92
+ }
93
+
94
+ // ── GLB container parser ────────────────────────────────────────────────
95
+
96
+ function parseGLBContainer(buffer: ArrayBuffer): { json: GltfJson; bin: ArrayBuffer } {
97
+ const view = new DataView(buffer);
98
+ const magic = view.getUint32(0, true);
99
+ if (magic !== 0x46546C67) throw new Error("Not a valid GLB file");
100
+ const version = view.getUint32(4, true);
101
+ if (version !== 2) throw new Error(`Unsupported glTF version: ${version}`);
102
+
103
+ let offset = 12;
104
+ let json: GltfJson | undefined;
105
+ let bin: ArrayBuffer | undefined;
106
+
107
+ while (offset < buffer.byteLength) {
108
+ const chunkLength = view.getUint32(offset, true);
109
+ const chunkType = view.getUint32(offset + 4, true);
110
+ const chunkData = buffer.slice(offset + 8, offset + 8 + chunkLength);
111
+ if (chunkType === 0x4E4F534A) {
112
+ json = JSON.parse(new TextDecoder().decode(chunkData));
113
+ } else if (chunkType === 0x004E4942) {
114
+ bin = chunkData;
115
+ }
116
+ offset += 8 + chunkLength;
117
+ }
118
+
119
+ if (!json) throw new Error("GLB missing JSON chunk");
120
+ return { json, bin: bin ?? new ArrayBuffer(0) };
121
+ }
122
+
123
+ // ── Accessor → TypedArray ───────────────────────────────────────────────
124
+
125
+ function readAccessor(json: GltfJson, bin: ArrayBuffer, idx: number): { array: ArrayLike<number>; itemSize: number } {
126
+ const acc = json.accessors![idx];
127
+ const bv = json.bufferViews![acc.bufferView ?? 0];
128
+ const info = COMPONENT_TYPES[acc.componentType];
129
+ if (!info) throw new Error(`Unsupported accessor componentType ${acc.componentType}`);
130
+
131
+ const itemSize = TYPE_SIZES[acc.type];
132
+ const byteOffset = (bv.byteOffset ?? 0) + (acc.byteOffset ?? 0);
133
+ const totalElements = acc.count * itemSize;
134
+
135
+ // Non-interleaved (or tightly packed): direct view
136
+ if (!bv.byteStride || bv.byteStride === itemSize * info.bytes) {
137
+ return { array: new info.ctor(bin, byteOffset, totalElements), itemSize };
138
+ }
139
+
140
+ // Interleaved: de-stride into a contiguous array
141
+ const out = new Float32Array(totalElements);
142
+ const stride = bv.byteStride;
143
+ const srcView = new DataView(bin);
144
+ for (let i = 0; i < acc.count; i++) {
145
+ const base = byteOffset + i * stride;
146
+ for (let c = 0; c < itemSize; c++) {
147
+ out[i * itemSize + c] = srcView.getFloat32(base + c * info.bytes, true);
148
+ }
149
+ }
150
+ return { array: out, itemSize };
151
+ }
152
+
153
+ // ── Build Three.js objects ──────────────────────────────────────────────
154
+
155
+ type GltfPrimitive = NonNullable<GltfJson["meshes"]>[0]["primitives"][0];
156
+
157
+ function buildGeometry(json: GltfJson, bin: ArrayBuffer, prim: GltfPrimitive): BufferGeometry {
158
+ const geom = new BufferGeometry();
159
+
160
+ const ATTR_MAP: Record<string, string> = {
161
+ POSITION: "position",
162
+ NORMAL: "normal",
163
+ TEXCOORD_0: "uv",
164
+ TEXCOORD_1: "uv2",
165
+ COLOR_0: "color",
166
+ TANGENT: "tangent",
167
+ };
168
+
169
+ for (const [gltfName, accIdx] of Object.entries(prim.attributes)) {
170
+ const threeAttr = ATTR_MAP[gltfName];
171
+ if (!threeAttr) continue;
172
+ const { array, itemSize } = readAccessor(json, bin, accIdx as number);
173
+ geom.setAttribute(threeAttr, new BufferAttribute(new Float32Array(array as ArrayLike<number>), itemSize));
174
+ }
175
+
176
+ if (prim.indices !== undefined) {
177
+ const { array } = readAccessor(json, bin, prim.indices);
178
+ geom.setIndex(new BufferAttribute(
179
+ array instanceof Uint32Array ? array : new Uint32Array(array as ArrayLike<number>),
180
+ 1,
181
+ ));
182
+ }
183
+
184
+ if (!geom.getAttribute("normal")) {
185
+ geom.computeVertexNormals();
186
+ }
187
+
188
+ return geom;
189
+ }
190
+
191
+ function buildMaterial(json: GltfJson, matIdx: number | undefined): MeshStandardMaterial {
192
+ const mat = new MeshStandardMaterial();
193
+ if (matIdx === undefined || !json.materials?.[matIdx]) return mat;
194
+
195
+ const def = json.materials[matIdx];
196
+ const pbr = def.pbrMetallicRoughness;
197
+ if (pbr) {
198
+ if (pbr.baseColorFactor) {
199
+ mat.color = new Color(pbr.baseColorFactor[0], pbr.baseColorFactor[1], pbr.baseColorFactor[2]);
200
+ mat.opacity = pbr.baseColorFactor[3];
201
+ if (mat.opacity < 1) mat.transparent = true;
202
+ }
203
+ if (pbr.metallicFactor !== undefined) mat.metalness = pbr.metallicFactor;
204
+ if (pbr.roughnessFactor !== undefined) mat.roughness = pbr.roughnessFactor;
205
+ }
206
+ if (def.doubleSided) mat.side = 2; // DoubleSide
207
+
208
+ return mat;
209
+ }
210
+
211
+ function buildNode(json: GltfJson, bin: ArrayBuffer, nodeIdx: number): Group | Mesh {
212
+ const nodeDef = json.nodes![nodeIdx];
213
+ const group = new Group();
214
+ if (nodeDef.name) group.name = nodeDef.name;
215
+
216
+ // Apply transform
217
+ if (nodeDef.matrix) {
218
+ const m = new Matrix4();
219
+ m.fromArray(nodeDef.matrix);
220
+ m.decompose(group.position, group.quaternion, group.scale);
221
+ } else {
222
+ if (nodeDef.translation) group.position.fromArray(nodeDef.translation);
223
+ if (nodeDef.rotation) group.quaternion.set(nodeDef.rotation[0], nodeDef.rotation[1], nodeDef.rotation[2], nodeDef.rotation[3]);
224
+ if (nodeDef.scale) group.scale.fromArray(nodeDef.scale);
225
+ }
226
+
227
+ // Attach mesh primitives
228
+ if (nodeDef.mesh !== undefined && json.meshes) {
229
+ const meshDef = json.meshes[nodeDef.mesh];
230
+ for (const prim of meshDef.primitives) {
231
+ const geom = buildGeometry(json, bin, prim);
232
+ const mat = buildMaterial(json, prim.material);
233
+ const mesh = new Mesh(geom, mat);
234
+ if (meshDef.name) mesh.name = meshDef.name;
235
+ group.add(mesh);
236
+ }
237
+ }
238
+
239
+ // Recurse children
240
+ if (nodeDef.children) {
241
+ for (const childIdx of nodeDef.children) {
242
+ group.add(buildNode(json, bin, childIdx));
243
+ }
244
+ }
245
+
246
+ return group;
247
+ }
248
+
249
+ function buildScene(json: GltfJson, bin: ArrayBuffer): Group {
250
+ const root = new Group();
251
+ const sceneDef = json.scenes?.[json.scene ?? 0];
252
+ if (sceneDef?.nodes) {
253
+ for (const nodeIdx of sceneDef.nodes) {
254
+ root.add(buildNode(json, bin, nodeIdx));
255
+ }
256
+ }
257
+ return root;
258
+ }
259
+
260
+ // ── Public API ──────────────────────────────────────────────────────────
261
+
262
+ /**
263
+ * Synchronously load a GLB file (provided as a base64 data-URL from webpack
264
+ * asset/inline) and return a cloned scene Group.
265
+ *
266
+ * Parses the GLB binary directly (no async GLTFLoader). The parsed scene is
267
+ * memoized — subsequent calls return `.clone()`, giving each caller an
268
+ * independent object hierarchy while sharing BufferGeometry and Material data.
269
+ */
270
+ export function loadGLB(
271
+ glbData: string,
272
+ { scale = 1, castShadow = false, receiveShadow = false }: { scale?: number; castShadow?: boolean; receiveShadow?: boolean } = {},
273
+ ): Group {
274
+ const key = `${hashString(glbData)}|s:${scale}|cs:${castShadow ? 1 : 0}|rs:${receiveShadow ? 1 : 0}`;
275
+
276
+ let cached = groupCache.get(key);
277
+ if (!cached) {
278
+ const buffer = decodeToArrayBuffer(glbData);
279
+ const { json, bin } = parseGLBContainer(buffer);
280
+ cached = buildScene(json, bin);
281
+ cached.traverse((obj) => {
282
+ if ((obj as Mesh).isMesh) {
283
+ if (scale !== 1) (obj as Mesh).geometry.scale(scale, scale, scale);
284
+ obj.castShadow = castShadow;
285
+ obj.receiveShadow = receiveShadow;
286
+ }
287
+ });
288
+ groupCache.set(key, cached);
289
+ }
290
+
291
+ return cached.clone();
292
+ }
@@ -161,7 +161,10 @@ function buildValidTree(tree: LayoutNode, width: number, height: number): Concre
161
161
  }
162
162
 
163
163
  // Step 3: Scan ENTIRE tree for the container with smallest collapseOrder
164
- const toCollapse = findSmallestCollapseOrder(concreteTree);
164
+ let toCollapse = findSmallestCollapseOrder(concreteTree);
165
+ if (!toCollapse) {
166
+ toCollapse = findSmallestCollapseOrderIgnoringConstraints(concreteTree);
167
+ }
165
168
 
166
169
  if (!toCollapse) {
167
170
  return concreteTree;
@@ -345,7 +348,7 @@ function findSmallestCollapseOrder(node: ConcreteLayoutNode): ContainerNode | nu
345
348
  }
346
349
 
347
350
  const container = node as ConcreteContainerNode;
348
- let smallest: ContainerNode | null = container.collapseOrder !== undefined ? container : null;
351
+ let smallest: ContainerNode | null = null;
349
352
 
350
353
  for (const split of container.splits) {
351
354
  const childSmallest = findSmallestCollapseOrder(split);
@@ -362,6 +365,29 @@ function findSmallestCollapseOrder(node: ConcreteLayoutNode): ContainerNode | nu
362
365
  return smallest;
363
366
  }
364
367
 
368
+ function findSmallestCollapseOrderIgnoringConstraints(node: ConcreteLayoutNode): ContainerNode | null {
369
+ if (isPanelNode(node) || isCollapsedNode(node)) {
370
+ return null;
371
+ }
372
+
373
+ const container = node as ConcreteContainerNode;
374
+ let smallest: ContainerNode | null = node.collapseOrder !== undefined ? container : null;
375
+
376
+ for (const split of container.splits) {
377
+ const childSmallest = findSmallestCollapseOrderIgnoringConstraints(split);
378
+ if (childSmallest) {
379
+ const childOrder = childSmallest.collapseOrder ?? Number.MAX_SAFE_INTEGER;
380
+ const currentOrder = smallest?.collapseOrder ?? Number.MAX_SAFE_INTEGER;
381
+
382
+ if (childOrder < currentOrder) {
383
+ smallest = childSmallest;
384
+ }
385
+ }
386
+ }
387
+
388
+ return smallest;
389
+ }
390
+
365
391
  /**
366
392
  * Flattens a valid ConcreteLayoutNode tree into PanelLayoutResult[]
367
393
  */
@@ -1,13 +1,37 @@
1
1
  import "reflect-metadata";
2
- import nextTick from "next-tick";
3
2
  import { checkAnnotation, NonEditable } from "./Annotations";
4
3
 
5
4
  const CATCH_ALL = "[[null]]";
6
5
  export class ObjectWithProps {
6
+ /** @internal */
7
+ @NonEditable private _propsArray: string[] = [];
8
+ /** @internal */
9
+ @NonEditable private _propsSet = new Set<string>();
10
+
7
11
  /** @internal */
8
12
  public get props(): string[] {
9
- return Object.keys(this).filter((key) => !checkAnnotation(this, key, NonEditable));
13
+ const props = Object.keys(this).filter((key) => !checkAnnotation(this, key, NonEditable));
14
+ props.forEach((key) => {
15
+ if (!this._propsSet.has(key)) {
16
+ this._propsSet.add(key);
17
+ this._propsArray.push(key);
18
+ }
19
+ });
20
+ return this._propsArray;
10
21
  }
22
+
23
+ /** @internal */
24
+ public expandedPropsFromJson(json: { [key: string]: unknown }): string[] {
25
+ this.props; // make sure this runs.
26
+ for (const key of Object.keys(json)) {
27
+ if (!this._propsSet!.has(key) && !checkAnnotation(this, key, NonEditable)) {
28
+ this._propsSet!.add(key);
29
+ this._propsArray!.push(key);
30
+ }
31
+ }
32
+ return this._propsArray;
33
+ }
34
+
11
35
  /** @internal */
12
36
  @NonEditable private _cbs: { [key: string]: Array<() => void> } = {};
13
37
 
@@ -22,7 +46,7 @@ export class ObjectWithProps {
22
46
  /** @internal */
23
47
  public notifyChange(key: string): void {
24
48
  if (this._keysThatChanged.size === 0) {
25
- nextTick(() => {
49
+ queueMicrotask(() => {
26
50
  this._keysThatChanged.forEach((key) => this._cbs[key]?.forEach((cb) => cb()));
27
51
  this._cbs[CATCH_ALL]?.forEach((cb) => cb());
28
52
  this._keysThatChanged.clear();
@@ -1,2 +0,0 @@
1
- export declare function GalleryDisplay(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=GalleryDisplay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GalleryDisplay.d.ts","sourceRoot":"","sources":["../../src/library/components/GalleryDisplay.tsx"],"names":[],"mappings":"AAYA,wBAAgB,cAAc,4CA4C7B"}
@@ -1,42 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useState, useRef } from "react";
3
- import { Box } from "@mui/material";
4
- import { useEventChannelState } from "../hooks/useEventChannelState";
5
- import { useModalState } from "../hooks/useModalState";
6
- import { GalleryViewer } from "./GalleryViewer";
7
- import useSize from "@react-hook/size";
8
- import { useAnimationSpeedMultiplier } from "../hooks/useTimeController";
9
- import { useGameTheme } from "../hooks/useGameTheme";
10
- import { GameModalBackdrop } from "./GameModalBackdrop";
11
- const DELAY = 300;
12
- export function GalleryDisplay() {
13
- const theme = useGameTheme();
14
- const animationSpeedMultiplier = useAnimationSpeedMultiplier();
15
- const ref = useRef(null);
16
- const [width, height] = useSize(ref);
17
- const modalState = useModalState();
18
- const [items, setItems] = useState(undefined);
19
- const [source, setSource] = useEventChannelState(modalState.gallerySource);
20
- const hasItems = items && items?.length > 0;
21
- useEffect(() => {
22
- if (source) {
23
- setItems(source.items);
24
- const unSub = source.registerUpdateHandler(() => {
25
- setItems(source.items);
26
- });
27
- return () => {
28
- source.close();
29
- unSub();
30
- };
31
- }
32
- else {
33
- setItems(undefined);
34
- }
35
- }, [source, setItems]);
36
- return (
37
- // This has to be outside of the modal backdrop so we can get the size correctly
38
- _jsx(Box, { ref: ref, sx: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 }, children: _jsx(GameModalBackdrop, { visible: !!hasItems, children: _jsx(GalleryViewer, { onClose: () => {
39
- setSource(undefined);
40
- }, items: items ?? [], tweenDuration: DELAY * animationSpeedMultiplier * 0.8, galleryItemWidth: theme.galleryItemWidth, galleryItemHeight: theme.galleryItemHeight, itemSpacing: theme.galleryItemSpacing, w: width, h: height }) }) }));
41
- }
42
- //# sourceMappingURL=GalleryDisplay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GalleryDisplay.js","sourceRoot":"","sources":["../../src/library/components/GalleryDisplay.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,KAAK,GAAG,GAAG,CAAC;AAElB,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,wBAAwB,GAAG,2BAA2B,EAAE,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA4B,SAAS,CAAC,CAAC;IACzE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;gBAC9C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,KAAK,EAAE,CAAC;YACV,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,OAAO;IACL,gFAAgF;IAChF,KAAC,GAAG,IAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAC/E,KAAC,iBAAiB,IAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,YACpC,KAAC,aAAa,IACZ,OAAO,EAAE,GAAG,EAAE;oBACZ,SAAS,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC,EACD,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,aAAa,EAAE,KAAK,GAAG,wBAAwB,GAAG,GAAG,EACrD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,WAAW,EAAE,KAAK,CAAC,kBAAkB,EACrC,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,MAAM,GACT,GACgB,GAChB,CACP,CAAC;AACJ,CAAC"}
@@ -1,12 +0,0 @@
1
- import { ParameterizedCanvas } from "./ParameterizedCanvas";
2
- export declare class OutlineCanvas extends ParameterizedCanvas {
3
- radius: number;
4
- lineWidth: number;
5
- innerLineWidth: number;
6
- outerColor: string;
7
- innerColor: string;
8
- width: number;
9
- height: number;
10
- render(): import("react/jsx-runtime").JSX.Element;
11
- }
12
- //# sourceMappingURL=OutlineCanvas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutlineCanvas.d.ts","sourceRoot":"","sources":["../../src/library/utilities/OutlineCanvas.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,aAAc,SAAQ,mBAAmB;IACpD,MAAM,SAAK;IACX,SAAS,SAAK;IACd,cAAc,SAAK;IACnB,UAAU,SAAU;IACpB,UAAU,SAAU;IACpB,KAAK,SAAO;IACZ,MAAM,SAAO;IACb,MAAM;CAgCP"}
@@ -1,31 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Raw } from "./CanvasStack/ReactCanvas";
3
- import { ParameterizedCanvas } from "./ParameterizedCanvas";
4
- export class OutlineCanvas extends ParameterizedCanvas {
5
- constructor() {
6
- super(...arguments);
7
- this.radius = 6;
8
- this.lineWidth = 6;
9
- this.innerLineWidth = 2;
10
- this.outerColor = "#f00";
11
- this.innerColor = "#ff0";
12
- this.width = 100;
13
- this.height = 100;
14
- }
15
- render() {
16
- return (_jsx(Raw, { cb: (ctx, x, y, w, h) => {
17
- ctx.imageSmoothingEnabled = false;
18
- ctx.strokeStyle = this.outerColor;
19
- ctx.lineWidth = this.lineWidth;
20
- ctx.beginPath();
21
- ctx.roundRect(x + this.lineWidth / 2, y + this.lineWidth / 2, w - this.lineWidth, h - this.lineWidth, this.radius);
22
- ctx.stroke();
23
- ctx.strokeStyle = this.innerColor;
24
- ctx.lineWidth = this.innerLineWidth;
25
- ctx.beginPath();
26
- ctx.roundRect(x + this.lineWidth / 2, y + this.lineWidth / 2, w - this.lineWidth, h - this.lineWidth, this.radius);
27
- ctx.stroke();
28
- } }));
29
- }
30
- }
31
- //# sourceMappingURL=OutlineCanvas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutlineCanvas.js","sourceRoot":"","sources":["../../src/library/utilities/OutlineCanvas.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,OAAO,aAAc,SAAQ,mBAAmB;IAAtD;;QACE,WAAM,GAAG,CAAC,CAAC;QACX,cAAS,GAAG,CAAC,CAAC;QACd,mBAAc,GAAG,CAAC,CAAC;QACnB,eAAU,GAAG,MAAM,CAAC;QACpB,eAAU,GAAG,MAAM,CAAC;QACpB,UAAK,GAAG,GAAG,CAAC;QACZ,WAAM,GAAG,GAAG,CAAC;KAiCd;IAhCC,MAAM;QACJ,OAAO,CACL,KAAC,GAAG,IACF,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBAClC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBAClC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC/B,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,CACX,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB,CAAC,GAAG,IAAI,CAAC,SAAS,EAClB,CAAC,GAAG,IAAI,CAAC,SAAS,EAClB,IAAI,CAAC,MAAM,CACZ,CAAC;gBACF,GAAG,CAAC,MAAM,EAAE,CAAC;gBAEb,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBAClC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;gBACpC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,CACX,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB,CAAC,GAAG,IAAI,CAAC,SAAS,EAClB,CAAC,GAAG,IAAI,CAAC,SAAS,EAClB,IAAI,CAAC,MAAM,CACZ,CAAC;gBACF,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,CAAC,GACD,CACH,CAAC;IACJ,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- import { BufferGeometry, ExtrudeGeometry, Shape } from "three";
2
- export declare function outlineGeometry(shape: Shape, height: number): BufferGeometry | ExtrudeGeometry;
3
- //# sourceMappingURL=OutlineGeometry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutlineGeometry.d.ts","sourceRoot":"","sources":["../../src/library/utilities/OutlineGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAQ,KAAK,EAAE,MAAM,OAAO,CAAC;AAGrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,eAAe,CAiE9F"}
@@ -1,57 +0,0 @@
1
- import { ExtrudeGeometry, Mesh } from "three";
2
- import { CSG } from "three-csg-ts";
3
- export function outlineGeometry(shape, height) {
4
- // const extrudeSettings = {
5
- // depth: height, // Extrude by 2 units
6
- // bevelEnabled: false, // Disable bevel for simplicity
7
- // };
8
- const g = new ExtrudeGeometry(shape, { depth: height * 20, bevelEnabled: false });
9
- g.scale(0.95, 0.95, 0.95);
10
- const g2 = new ExtrudeGeometry(shape, { depth: height, bevelEnabled: false });
11
- g2.scale(1.05, 1.05, 1.45);
12
- const original = new Mesh(g);
13
- const scaled = new Mesh(g2);
14
- original.updateMatrix();
15
- scaled.updateMatrix();
16
- // scaled.scale(1.05, 1.05, 1.05);
17
- const subRes = CSG.subtract(scaled, original);
18
- subRes.geometry.translate(0, 0, -(subRes.geometry.boundingBox?.max.z ?? 0) / 2);
19
- // return scaled.geometry;
20
- return subRes.geometry;
21
- // const stroke = extrude({ thickness: 0.05, cap: "square", join: "none", miterLimit: 10 });
22
- // const m = stroke.build(vectors.map((v) => [v.x, v.y]));
23
- // const vertexCount = m.positions.length;
24
- // const topVertices = m.positions.map((p) => [p[0], p[1], height / 2]).flat();
25
- // const bottomVertices = m.positions.map((p) => [p[0], p[1], -height / 2]).flat();
26
- // const vertices = new Float32Array(topVertices.concat(bottomVertices));
27
- // const top: number[][] = [];
28
- // const bottom: number[][] = [];
29
- // const sides: number[][] = [];
30
- // const hasAddedTriangles = new Set<string>();
31
- // const addSide = (a: number, b: number) => {
32
- // const key = `${a}_${b}`;
33
- // if (!hasAddedTriangles.has(key)) {
34
- // hasAddedTriangles.add(key);
35
- // sides.push([a + vertexCount, b, a]);
36
- // sides.push([a + vertexCount, b + vertexCount, b]);
37
- // }
38
- // };
39
- // m.cells.forEach((triangle) => {
40
- // const [a, b, c] = triangle;
41
- // top.push([c, b, a]);
42
- // bottom.push([a + vertexCount, b + vertexCount, c + vertexCount]); // add bottom triangle
43
- // addSide(a, b);
44
- // addSide(c, a);
45
- // addSide(c, b);
46
- // });
47
- // // const cells = new Uint16Array(triangles.flat());
48
- // const geometry = new BufferGeometry();
49
- // geometry.setAttribute("position", new BufferAttribute(vertices, 3));
50
- // geometry.setIndex(new BufferAttribute(new Uint16Array([...top.flat(), ...bottom.flat(), ...sides.flat()]), 1));
51
- // geometry.addGroup(0, top.length * 3, 0);
52
- // geometry.addGroup(top.length * 3, bottom.length * 3, 1);
53
- // geometry.addGroup(top.length * 6, 3 * sides.length, 2);
54
- // geometry.computeVertexNormals();
55
- // // geometry.computeTangents();
56
- }
57
- //# sourceMappingURL=OutlineGeometry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutlineGeometry.js","sourceRoot":"","sources":["../../src/library/utilities/OutlineGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,eAAe,EAAE,IAAI,EAAS,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,MAAc;IAC1D,4BAA4B;IAC5B,yCAAyC;IACzC,yDAAyD;IACzD,KAAK;IAEL,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAE5B,QAAQ,CAAC,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,YAAY,EAAE,CAAC;IACtB,kCAAkC;IAElC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE9C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,0BAA0B;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC;IAEvB,4FAA4F;IAE5F,0DAA0D;IAE1D,0CAA0C;IAC1C,+EAA+E;IAC/E,mFAAmF;IAEnF,yEAAyE;IACzE,8BAA8B;IAC9B,iCAAiC;IACjC,gCAAgC;IAChC,+CAA+C;IAE/C,8CAA8C;IAC9C,6BAA6B;IAC7B,uCAAuC;IACvC,kCAAkC;IAClC,2CAA2C;IAC3C,yDAAyD;IACzD,MAAM;IACN,KAAK;IAEL,kCAAkC;IAClC,gCAAgC;IAChC,yBAAyB;IACzB,6FAA6F;IAC7F,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,MAAM;IAEN,sDAAsD;IACtD,yCAAyC;IACzC,uEAAuE;IACvE,kHAAkH;IAElH,2CAA2C;IAC3C,2DAA2D;IAC3D,0DAA0D;IAC1D,mCAAmC;IACnC,iCAAiC;AACnC,CAAC"}
@@ -1,45 +0,0 @@
1
- import React from "react";
2
- import { Raw } from "./CanvasStack/ReactCanvas";
3
- import { ParameterizedCanvas } from "./ParameterizedCanvas";
4
-
5
- export class OutlineCanvas extends ParameterizedCanvas {
6
- radius = 6;
7
- lineWidth = 6;
8
- innerLineWidth = 2;
9
- outerColor = "#f00";
10
- innerColor = "#ff0";
11
- width = 100;
12
- height = 100;
13
- render() {
14
- return (
15
- <Raw
16
- cb={(ctx, x, y, w, h) => {
17
- ctx.imageSmoothingEnabled = false;
18
- ctx.strokeStyle = this.outerColor;
19
- ctx.lineWidth = this.lineWidth;
20
- ctx.beginPath();
21
- ctx.roundRect(
22
- x + this.lineWidth / 2,
23
- y + this.lineWidth / 2,
24
- w - this.lineWidth,
25
- h - this.lineWidth,
26
- this.radius,
27
- );
28
- ctx.stroke();
29
-
30
- ctx.strokeStyle = this.innerColor;
31
- ctx.lineWidth = this.innerLineWidth;
32
- ctx.beginPath();
33
- ctx.roundRect(
34
- x + this.lineWidth / 2,
35
- y + this.lineWidth / 2,
36
- w - this.lineWidth,
37
- h - this.lineWidth,
38
- this.radius,
39
- );
40
- ctx.stroke();
41
- }}
42
- />
43
- );
44
- }
45
- }