cluaupp 0.1.0

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 (760) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +119 -0
  4. package/bin/cluau.js +4 -0
  5. package/bin/cluaupp.js +4 -0
  6. package/docs/README.md +20 -0
  7. package/docs/architecture.md +110 -0
  8. package/docs/cli.md +69 -0
  9. package/docs/comparison.md +37 -0
  10. package/docs/config.md +31 -0
  11. package/docs/cpp-advanced.md +71 -0
  12. package/docs/cpp-const.md +52 -0
  13. package/docs/cpp-organization.md +61 -0
  14. package/docs/cpp-safety.md +58 -0
  15. package/docs/cpp-types.md +66 -0
  16. package/docs/getting-started.md +169 -0
  17. package/docs/intro.md +37 -0
  18. package/docs/libraries.md +77 -0
  19. package/docs/roblox-api.md +81 -0
  20. package/docs/syntax.md +131 -0
  21. package/include/cluaupp/datatypes.hpp +581 -0
  22. package/include/cluaupp/generated/enums.hpp +4920 -0
  23. package/include/cluaupp/generated/instances.hpp +12489 -0
  24. package/include/cluaupp/libs/chrono.hpp +26 -0
  25. package/include/cluaupp/libs/cmdr.hpp +16 -0
  26. package/include/cluaupp/libs/dataservice.hpp +141 -0
  27. package/include/cluaupp/libs/display.hpp +13 -0
  28. package/include/cluaupp/libs/ezvisual.hpp +18 -0
  29. package/include/cluaupp/libs/formatnumber.hpp +15 -0
  30. package/include/cluaupp/libs/fusion.hpp +41 -0
  31. package/include/cluaupp/libs/iris.hpp +40 -0
  32. package/include/cluaupp/libs/janitor.hpp +35 -0
  33. package/include/cluaupp/libs/math.hpp +14 -0
  34. package/include/cluaupp/libs/module3d.hpp +25 -0
  35. package/include/cluaupp/libs/net.hpp +42 -0
  36. package/include/cluaupp/libs/promise.hpp +30 -0
  37. package/include/cluaupp/libs/spring.hpp +18 -0
  38. package/include/cluaupp/libs/statemachine.hpp +19 -0
  39. package/include/cluaupp/libs/stickybillboard.hpp +14 -0
  40. package/include/cluaupp/libs/topbarplus.hpp +29 -0
  41. package/include/cluaupp/libs/twinkle.hpp +15 -0
  42. package/include/cluaupp/libs/vfx.hpp +13 -0
  43. package/include/cluaupp/libs.hpp +25 -0
  44. package/include/cluaupp/roblox.hpp +28 -0
  45. package/package.json +65 -0
  46. package/runtime/ArrayIndexer/init.luau +144 -0
  47. package/runtime/Chrono/Client/ClientClock.luau +202 -0
  48. package/runtime/Chrono/Client/InterpolationBuffer.luau +74 -0
  49. package/runtime/Chrono/Client/ModelResolver.luau +53 -0
  50. package/runtime/Chrono/Client/Player.luau +113 -0
  51. package/runtime/Chrono/Client/Receiver.luau +395 -0
  52. package/runtime/Chrono/Client/Replicate.luau +333 -0
  53. package/runtime/Chrono/Client/Sender.luau +205 -0
  54. package/runtime/Chrono/LICENSE +21 -0
  55. package/runtime/Chrono/Server/EntityGrid.luau +299 -0
  56. package/runtime/Chrono/Server/Player.luau +141 -0
  57. package/runtime/Chrono/Server/Receiver.luau +287 -0
  58. package/runtime/Chrono/Server/Replicate.luau +415 -0
  59. package/runtime/Chrono/Server/Sender.luau +306 -0
  60. package/runtime/Chrono/Server/ServerClock.luau +50 -0
  61. package/runtime/Chrono/Shared/ApplyMounts.luau +137 -0
  62. package/runtime/Chrono/Shared/Bin.luau +31 -0
  63. package/runtime/Chrono/Shared/ClockUnwrap.luau +70 -0
  64. package/runtime/Chrono/Shared/Config.luau +264 -0
  65. package/runtime/Chrono/Shared/Entity.luau +1016 -0
  66. package/runtime/Chrono/Shared/Events.luau +39 -0
  67. package/runtime/Chrono/Shared/Holder.luau +210 -0
  68. package/runtime/Chrono/Shared/InterpolationMath.luau +51 -0
  69. package/runtime/Chrono/Shared/ModelHelper.luau +122 -0
  70. package/runtime/Chrono/Shared/Remotes/ClientClockRelay.model.json +3 -0
  71. package/runtime/Chrono/Shared/Remotes/ClientHeartbeat.model.json +3 -0
  72. package/runtime/Chrono/Shared/Remotes/ClientLoaded.model.json +3 -0
  73. package/runtime/Chrono/Shared/Remotes/Death.model.json +3 -0
  74. package/runtime/Chrono/Shared/Remotes/Heartbeat.model.json +3 -0
  75. package/runtime/Chrono/Shared/Remotes/Replicate.model.json +3 -0
  76. package/runtime/Chrono/Shared/Remotes/ReplicateFull.model.json +3 -0
  77. package/runtime/Chrono/Shared/Remotes/SafeReplicate.model.json +3 -0
  78. package/runtime/Chrono/Shared/ReplicationRules.luau +122 -0
  79. package/runtime/Chrono/Shared/Signal.luau +219 -0
  80. package/runtime/Chrono/Shared/Snapshots.luau +218 -0
  81. package/runtime/Chrono/Shared/Stats.luau +204 -0
  82. package/runtime/Chrono/Shared/Ticker.luau +112 -0
  83. package/runtime/Chrono/Shared/Types.luau +247 -0
  84. package/runtime/Chrono/Shared/Warn.luau +33 -0
  85. package/runtime/Chrono/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
  86. package/runtime/Chrono/_impl/Client/ClientClock.luau +202 -0
  87. package/runtime/Chrono/_impl/Client/InterpolationBuffer.luau +74 -0
  88. package/runtime/Chrono/_impl/Client/ModelResolver.luau +53 -0
  89. package/runtime/Chrono/_impl/Client/Player.luau +113 -0
  90. package/runtime/Chrono/_impl/Client/Receiver.luau +395 -0
  91. package/runtime/Chrono/_impl/Client/Replicate.luau +333 -0
  92. package/runtime/Chrono/_impl/Client/Sender.luau +205 -0
  93. package/runtime/Chrono/_impl/LICENSE +21 -0
  94. package/runtime/Chrono/_impl/Server/EntityGrid.luau +299 -0
  95. package/runtime/Chrono/_impl/Server/Player.luau +141 -0
  96. package/runtime/Chrono/_impl/Server/Receiver.luau +287 -0
  97. package/runtime/Chrono/_impl/Server/Replicate.luau +415 -0
  98. package/runtime/Chrono/_impl/Server/Sender.luau +306 -0
  99. package/runtime/Chrono/_impl/Server/ServerClock.luau +50 -0
  100. package/runtime/Chrono/_impl/Shared/ApplyMounts.luau +137 -0
  101. package/runtime/Chrono/_impl/Shared/Bin.luau +31 -0
  102. package/runtime/Chrono/_impl/Shared/ClockUnwrap.luau +70 -0
  103. package/runtime/Chrono/_impl/Shared/Config.luau +264 -0
  104. package/runtime/Chrono/_impl/Shared/Entity.luau +1016 -0
  105. package/runtime/Chrono/_impl/Shared/Events.luau +39 -0
  106. package/runtime/Chrono/_impl/Shared/Holder.luau +210 -0
  107. package/runtime/Chrono/_impl/Shared/InterpolationMath.luau +51 -0
  108. package/runtime/Chrono/_impl/Shared/ModelHelper.luau +122 -0
  109. package/runtime/Chrono/_impl/Shared/Remotes/ClientClockRelay.model.json +3 -0
  110. package/runtime/Chrono/_impl/Shared/Remotes/ClientHeartbeat.model.json +3 -0
  111. package/runtime/Chrono/_impl/Shared/Remotes/ClientLoaded.model.json +3 -0
  112. package/runtime/Chrono/_impl/Shared/Remotes/Death.model.json +3 -0
  113. package/runtime/Chrono/_impl/Shared/Remotes/Heartbeat.model.json +3 -0
  114. package/runtime/Chrono/_impl/Shared/Remotes/Replicate.model.json +3 -0
  115. package/runtime/Chrono/_impl/Shared/Remotes/ReplicateFull.model.json +3 -0
  116. package/runtime/Chrono/_impl/Shared/Remotes/SafeReplicate.model.json +3 -0
  117. package/runtime/Chrono/_impl/Shared/ReplicationRules.luau +122 -0
  118. package/runtime/Chrono/_impl/Shared/Signal.luau +219 -0
  119. package/runtime/Chrono/_impl/Shared/Snapshots.luau +218 -0
  120. package/runtime/Chrono/_impl/Shared/Stats.luau +204 -0
  121. package/runtime/Chrono/_impl/Shared/Ticker.luau +112 -0
  122. package/runtime/Chrono/_impl/Shared/Types.luau +247 -0
  123. package/runtime/Chrono/_impl/Shared/Warn.luau +33 -0
  124. package/runtime/Chrono/_impl/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
  125. package/runtime/Chrono/_impl/init.luau +96 -0
  126. package/runtime/Chrono/init.luau +14 -0
  127. package/runtime/Cmdr/BuiltInCommands/Admin/announce.luau +21 -0
  128. package/runtime/Cmdr/BuiltInCommands/Admin/announceServer.luau +17 -0
  129. package/runtime/Cmdr/BuiltInCommands/Admin/ban.luau +59 -0
  130. package/runtime/Cmdr/BuiltInCommands/Admin/banServer.luau +30 -0
  131. package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlace.luau +35 -0
  132. package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
  133. package/runtime/Cmdr/BuiltInCommands/Admin/kick.luau +19 -0
  134. package/runtime/Cmdr/BuiltInCommands/Admin/kickServer.luau +27 -0
  135. package/runtime/Cmdr/BuiltInCommands/Admin/kill.luau +13 -0
  136. package/runtime/Cmdr/BuiltInCommands/Admin/killServer.luau +13 -0
  137. package/runtime/Cmdr/BuiltInCommands/Admin/respawn.luau +15 -0
  138. package/runtime/Cmdr/BuiltInCommands/Admin/respawnServer.luau +7 -0
  139. package/runtime/Cmdr/BuiltInCommands/Admin/teleport.luau +30 -0
  140. package/runtime/Cmdr/BuiltInCommands/Admin/teleportServer.luau +26 -0
  141. package/runtime/Cmdr/BuiltInCommands/Admin/unban.luau +26 -0
  142. package/runtime/Cmdr/BuiltInCommands/Admin/unbanServer.luau +10 -0
  143. package/runtime/Cmdr/BuiltInCommands/Debug/blink.luau +35 -0
  144. package/runtime/Cmdr/BuiltInCommands/Debug/fetch.luau +12 -0
  145. package/runtime/Cmdr/BuiltInCommands/Debug/fetchServer.luau +7 -0
  146. package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
  147. package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
  148. package/runtime/Cmdr/BuiltInCommands/Debug/position.luau +30 -0
  149. package/runtime/Cmdr/BuiltInCommands/Debug/thru.luau +50 -0
  150. package/runtime/Cmdr/BuiltInCommands/Debug/uptime.luau +6 -0
  151. package/runtime/Cmdr/BuiltInCommands/Debug/uptimeServer.luau +12 -0
  152. package/runtime/Cmdr/BuiltInCommands/Debug/version.luau +12 -0
  153. package/runtime/Cmdr/BuiltInCommands/Utility/alias.luau +22 -0
  154. package/runtime/Cmdr/BuiltInCommands/Utility/bind.luau +104 -0
  155. package/runtime/Cmdr/BuiltInCommands/Utility/clear.luau +20 -0
  156. package/runtime/Cmdr/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
  157. package/runtime/Cmdr/BuiltInCommands/Utility/echo.luau +17 -0
  158. package/runtime/Cmdr/BuiltInCommands/Utility/edit.luau +75 -0
  159. package/runtime/Cmdr/BuiltInCommands/Utility/exit.luau +11 -0
  160. package/runtime/Cmdr/BuiltInCommands/Utility/history.luau +27 -0
  161. package/runtime/Cmdr/BuiltInCommands/Utility/hover.luau +21 -0
  162. package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
  163. package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
  164. package/runtime/Cmdr/BuiltInCommands/Utility/len.luau +16 -0
  165. package/runtime/Cmdr/BuiltInCommands/Utility/math.luau +36 -0
  166. package/runtime/Cmdr/BuiltInCommands/Utility/pick.luau +21 -0
  167. package/runtime/Cmdr/BuiltInCommands/Utility/rand.luau +27 -0
  168. package/runtime/Cmdr/BuiltInCommands/Utility/replace.luau +32 -0
  169. package/runtime/Cmdr/BuiltInCommands/Utility/resolve.luau +32 -0
  170. package/runtime/Cmdr/BuiltInCommands/Utility/run.luau +20 -0
  171. package/runtime/Cmdr/BuiltInCommands/Utility/runLines.luau +34 -0
  172. package/runtime/Cmdr/BuiltInCommands/Utility/runif.luau +95 -0
  173. package/runtime/Cmdr/BuiltInCommands/Utility/unbind.luau +27 -0
  174. package/runtime/Cmdr/BuiltInCommands/Utility/var.luau +29 -0
  175. package/runtime/Cmdr/BuiltInCommands/Utility/varServer.luau +37 -0
  176. package/runtime/Cmdr/BuiltInCommands/Utility/varSet.luau +30 -0
  177. package/runtime/Cmdr/BuiltInCommands/Utility/varSetServer.luau +29 -0
  178. package/runtime/Cmdr/BuiltInCommands/help.luau +96 -0
  179. package/runtime/Cmdr/BuiltInTypes/BrickColor.luau +258 -0
  180. package/runtime/Cmdr/BuiltInTypes/Color3.luau +59 -0
  181. package/runtime/Cmdr/BuiltInTypes/Command.luau +23 -0
  182. package/runtime/Cmdr/BuiltInTypes/Duration.luau +111 -0
  183. package/runtime/Cmdr/BuiltInTypes/JSON.luau +13 -0
  184. package/runtime/Cmdr/BuiltInTypes/MathOperator.luau +43 -0
  185. package/runtime/Cmdr/BuiltInTypes/Player.luau +36 -0
  186. package/runtime/Cmdr/BuiltInTypes/PlayerId.luau +66 -0
  187. package/runtime/Cmdr/BuiltInTypes/Primitives.luau +145 -0
  188. package/runtime/Cmdr/BuiltInTypes/StoredKey.luau +33 -0
  189. package/runtime/Cmdr/BuiltInTypes/Team.luau +49 -0
  190. package/runtime/Cmdr/BuiltInTypes/Type.luau +23 -0
  191. package/runtime/Cmdr/BuiltInTypes/URL.luau +18 -0
  192. package/runtime/Cmdr/BuiltInTypes/UserInput.luau +32 -0
  193. package/runtime/Cmdr/BuiltInTypes/Vector.luau +58 -0
  194. package/runtime/Cmdr/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
  195. package/runtime/Cmdr/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
  196. package/runtime/Cmdr/CmdrClient/CmdrInterface/Window.luau +713 -0
  197. package/runtime/Cmdr/CmdrClient/CmdrInterface/init.luau +18 -0
  198. package/runtime/Cmdr/CmdrClient/DefaultEventHandlers.luau +18 -0
  199. package/runtime/Cmdr/CmdrClient/Shared/Argument.luau +395 -0
  200. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
  201. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
  202. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
  203. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
  204. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
  205. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
  206. package/runtime/Cmdr/CmdrClient/Shared/Command.luau +415 -0
  207. package/runtime/Cmdr/CmdrClient/Shared/Dispatcher.luau +407 -0
  208. package/runtime/Cmdr/CmdrClient/Shared/Registry.luau +717 -0
  209. package/runtime/Cmdr/CmdrClient/Shared/Util.luau +879 -0
  210. package/runtime/Cmdr/CmdrClient/init.luau +377 -0
  211. package/runtime/Cmdr/LICENSE +21 -0
  212. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announce.luau +21 -0
  213. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announceServer.luau +17 -0
  214. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/ban.luau +59 -0
  215. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/banServer.luau +30 -0
  216. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlace.luau +35 -0
  217. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
  218. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kick.luau +19 -0
  219. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kickServer.luau +27 -0
  220. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kill.luau +13 -0
  221. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/killServer.luau +13 -0
  222. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawn.luau +15 -0
  223. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawnServer.luau +7 -0
  224. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleport.luau +30 -0
  225. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleportServer.luau +26 -0
  226. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unban.luau +26 -0
  227. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unbanServer.luau +10 -0
  228. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/blink.luau +35 -0
  229. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetch.luau +12 -0
  230. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetchServer.luau +7 -0
  231. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
  232. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
  233. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/position.luau +30 -0
  234. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/thru.luau +50 -0
  235. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptime.luau +6 -0
  236. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptimeServer.luau +12 -0
  237. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/version.luau +12 -0
  238. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/alias.luau +22 -0
  239. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/bind.luau +104 -0
  240. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/clear.luau +20 -0
  241. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
  242. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/echo.luau +17 -0
  243. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/edit.luau +75 -0
  244. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/exit.luau +11 -0
  245. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/history.luau +27 -0
  246. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/hover.luau +21 -0
  247. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
  248. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
  249. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/len.luau +16 -0
  250. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/math.luau +36 -0
  251. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/pick.luau +21 -0
  252. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/rand.luau +27 -0
  253. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/replace.luau +32 -0
  254. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/resolve.luau +32 -0
  255. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/run.luau +20 -0
  256. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runLines.luau +34 -0
  257. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runif.luau +95 -0
  258. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/unbind.luau +27 -0
  259. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/var.luau +29 -0
  260. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varServer.luau +37 -0
  261. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSet.luau +30 -0
  262. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSetServer.luau +29 -0
  263. package/runtime/Cmdr/_impl/BuiltInCommands/help.luau +96 -0
  264. package/runtime/Cmdr/_impl/BuiltInTypes/BrickColor.luau +258 -0
  265. package/runtime/Cmdr/_impl/BuiltInTypes/Color3.luau +59 -0
  266. package/runtime/Cmdr/_impl/BuiltInTypes/Command.luau +23 -0
  267. package/runtime/Cmdr/_impl/BuiltInTypes/Duration.luau +111 -0
  268. package/runtime/Cmdr/_impl/BuiltInTypes/JSON.luau +13 -0
  269. package/runtime/Cmdr/_impl/BuiltInTypes/MathOperator.luau +43 -0
  270. package/runtime/Cmdr/_impl/BuiltInTypes/Player.luau +36 -0
  271. package/runtime/Cmdr/_impl/BuiltInTypes/PlayerId.luau +66 -0
  272. package/runtime/Cmdr/_impl/BuiltInTypes/Primitives.luau +145 -0
  273. package/runtime/Cmdr/_impl/BuiltInTypes/StoredKey.luau +33 -0
  274. package/runtime/Cmdr/_impl/BuiltInTypes/Team.luau +49 -0
  275. package/runtime/Cmdr/_impl/BuiltInTypes/Type.luau +23 -0
  276. package/runtime/Cmdr/_impl/BuiltInTypes/URL.luau +18 -0
  277. package/runtime/Cmdr/_impl/BuiltInTypes/UserInput.luau +32 -0
  278. package/runtime/Cmdr/_impl/BuiltInTypes/Vector.luau +58 -0
  279. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
  280. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
  281. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/Window.luau +713 -0
  282. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/init.luau +18 -0
  283. package/runtime/Cmdr/_impl/CmdrClient/DefaultEventHandlers.luau +18 -0
  284. package/runtime/Cmdr/_impl/CmdrClient/Shared/Argument.luau +395 -0
  285. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
  286. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
  287. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
  288. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
  289. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
  290. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
  291. package/runtime/Cmdr/_impl/CmdrClient/Shared/Command.luau +415 -0
  292. package/runtime/Cmdr/_impl/CmdrClient/Shared/Dispatcher.luau +407 -0
  293. package/runtime/Cmdr/_impl/CmdrClient/Shared/Registry.luau +717 -0
  294. package/runtime/Cmdr/_impl/CmdrClient/Shared/Util.luau +879 -0
  295. package/runtime/Cmdr/_impl/CmdrClient/init.luau +377 -0
  296. package/runtime/Cmdr/_impl/LICENSE +21 -0
  297. package/runtime/Cmdr/_impl/init.luau +178 -0
  298. package/runtime/Cmdr/init.luau +8 -0
  299. package/runtime/DataService/Client.luau +209 -0
  300. package/runtime/DataService/Data.luau +886 -0
  301. package/runtime/DataService/Enum.luau +6 -0
  302. package/runtime/DataService/Enums.luau +10 -0
  303. package/runtime/DataService/Packages/quicknet/DataTypes.luau +70 -0
  304. package/runtime/DataService/Packages/quicknet/Enums.luau +85 -0
  305. package/runtime/DataService/Packages/quicknet/EnumsToNativeTypes.luau +57 -0
  306. package/runtime/DataService/Packages/quicknet/Parser.luau +355 -0
  307. package/runtime/DataService/Packages/quicknet/QuickNet.luau +953 -0
  308. package/runtime/DataService/Packages/quicknet/Serialize.luau +2020 -0
  309. package/runtime/DataService/Packages/quicknet/Types.luau +72 -0
  310. package/runtime/DataService/Packages/quicknet/init.luau +1 -0
  311. package/runtime/DataService/Packages/signal/init.luau +433 -0
  312. package/runtime/DataService/Path.luau +236 -0
  313. package/runtime/DataService/ProfileStore.luau +2243 -0
  314. package/runtime/DataService/Replicator.luau +172 -0
  315. package/runtime/DataService/Server.luau +412 -0
  316. package/runtime/DataService/init.luau +204 -0
  317. package/runtime/Display/LICENSE +201 -0
  318. package/runtime/Display/_impl/LICENSE +201 -0
  319. package/runtime/Display/_impl/init.luau +269 -0
  320. package/runtime/Display/_impl/option.luau +237 -0
  321. package/runtime/Display/init.luau +10 -0
  322. package/runtime/Display/option.luau +237 -0
  323. package/runtime/EzVisualz/Dropshadow.luau +148 -0
  324. package/runtime/EzVisualz/Gradient.luau +452 -0
  325. package/runtime/EzVisualz/GradientTemplates/Bubblegum.luau +16 -0
  326. package/runtime/EzVisualz/GradientTemplates/Chrome.luau +16 -0
  327. package/runtime/EzVisualz/GradientTemplates/Death.luau +15 -0
  328. package/runtime/EzVisualz/GradientTemplates/Electric.luau +14 -0
  329. package/runtime/EzVisualz/GradientTemplates/Fire.luau +13 -0
  330. package/runtime/EzVisualz/GradientTemplates/Galaxy.luau +11 -0
  331. package/runtime/EzVisualz/GradientTemplates/Ghost.luau +16 -0
  332. package/runtime/EzVisualz/GradientTemplates/Gold.luau +14 -0
  333. package/runtime/EzVisualz/GradientTemplates/Green.luau +14 -0
  334. package/runtime/EzVisualz/GradientTemplates/Ice.luau +14 -0
  335. package/runtime/EzVisualz/GradientTemplates/Lava.luau +15 -0
  336. package/runtime/EzVisualz/GradientTemplates/Matrix.luau +19 -0
  337. package/runtime/EzVisualz/GradientTemplates/Neon.luau +12 -0
  338. package/runtime/EzVisualz/GradientTemplates/Oceanic.luau +15 -0
  339. package/runtime/EzVisualz/GradientTemplates/Rainbow.luau +13 -0
  340. package/runtime/EzVisualz/GradientTemplates/Silver.luau +12 -0
  341. package/runtime/EzVisualz/GradientTemplates/Sunset.luau +11 -0
  342. package/runtime/EzVisualz/GradientTemplates/Zebra.luau +18 -0
  343. package/runtime/EzVisualz/GradientTemplates/init.luau +9 -0
  344. package/runtime/EzVisualz/LICENSE.md +21 -0
  345. package/runtime/EzVisualz/Presets/Bubblegum.luau +36 -0
  346. package/runtime/EzVisualz/Presets/ChromeStroke.luau +15 -0
  347. package/runtime/EzVisualz/Presets/DeathStroke.luau +15 -0
  348. package/runtime/EzVisualz/Presets/ElectricStroke.luau +54 -0
  349. package/runtime/EzVisualz/Presets/FireStroke.luau +29 -0
  350. package/runtime/EzVisualz/Presets/GalaxyStroke.luau +31 -0
  351. package/runtime/EzVisualz/Presets/Ghost.luau +10 -0
  352. package/runtime/EzVisualz/Presets/GhostStroke.luau +15 -0
  353. package/runtime/EzVisualz/Presets/Gold.luau +10 -0
  354. package/runtime/EzVisualz/Presets/GoldStroke.luau +15 -0
  355. package/runtime/EzVisualz/Presets/GreenOutline.luau +23 -0
  356. package/runtime/EzVisualz/Presets/IceStroke.luau +15 -0
  357. package/runtime/EzVisualz/Presets/Lava.luau +9 -0
  358. package/runtime/EzVisualz/Presets/LavaStroke.luau +13 -0
  359. package/runtime/EzVisualz/Presets/Matrix.luau +21 -0
  360. package/runtime/EzVisualz/Presets/NeonStroke.luau +30 -0
  361. package/runtime/EzVisualz/Presets/OceanicStroke.luau +15 -0
  362. package/runtime/EzVisualz/Presets/Rainbow.luau +9 -0
  363. package/runtime/EzVisualz/Presets/RainbowOutline.luau +23 -0
  364. package/runtime/EzVisualz/Presets/RainbowStroke.luau +13 -0
  365. package/runtime/EzVisualz/Presets/Shine.luau +48 -0
  366. package/runtime/EzVisualz/Presets/ShineOutline.luau +66 -0
  367. package/runtime/EzVisualz/Presets/Silver.luau +10 -0
  368. package/runtime/EzVisualz/Presets/SilverStroke.luau +15 -0
  369. package/runtime/EzVisualz/Presets/SunsetStroke.luau +31 -0
  370. package/runtime/EzVisualz/Presets/WaveStroke.luau +33 -0
  371. package/runtime/EzVisualz/Presets/Zebra.luau +21 -0
  372. package/runtime/EzVisualz/Presets/init.luau +9 -0
  373. package/runtime/EzVisualz/Stroke.luau +167 -0
  374. package/runtime/EzVisualz/Util.luau +7 -0
  375. package/runtime/EzVisualz/_impl/Dropshadow.luau +148 -0
  376. package/runtime/EzVisualz/_impl/Gradient.luau +452 -0
  377. package/runtime/EzVisualz/_impl/GradientTemplates/Bubblegum.luau +16 -0
  378. package/runtime/EzVisualz/_impl/GradientTemplates/Chrome.luau +16 -0
  379. package/runtime/EzVisualz/_impl/GradientTemplates/Death.luau +15 -0
  380. package/runtime/EzVisualz/_impl/GradientTemplates/Electric.luau +14 -0
  381. package/runtime/EzVisualz/_impl/GradientTemplates/Fire.luau +13 -0
  382. package/runtime/EzVisualz/_impl/GradientTemplates/Galaxy.luau +11 -0
  383. package/runtime/EzVisualz/_impl/GradientTemplates/Ghost.luau +16 -0
  384. package/runtime/EzVisualz/_impl/GradientTemplates/Gold.luau +14 -0
  385. package/runtime/EzVisualz/_impl/GradientTemplates/Green.luau +14 -0
  386. package/runtime/EzVisualz/_impl/GradientTemplates/Ice.luau +14 -0
  387. package/runtime/EzVisualz/_impl/GradientTemplates/Lava.luau +15 -0
  388. package/runtime/EzVisualz/_impl/GradientTemplates/Matrix.luau +19 -0
  389. package/runtime/EzVisualz/_impl/GradientTemplates/Neon.luau +12 -0
  390. package/runtime/EzVisualz/_impl/GradientTemplates/Oceanic.luau +15 -0
  391. package/runtime/EzVisualz/_impl/GradientTemplates/Rainbow.luau +13 -0
  392. package/runtime/EzVisualz/_impl/GradientTemplates/Silver.luau +12 -0
  393. package/runtime/EzVisualz/_impl/GradientTemplates/Sunset.luau +11 -0
  394. package/runtime/EzVisualz/_impl/GradientTemplates/Zebra.luau +18 -0
  395. package/runtime/EzVisualz/_impl/GradientTemplates/init.luau +9 -0
  396. package/runtime/EzVisualz/_impl/LICENSE.md +21 -0
  397. package/runtime/EzVisualz/_impl/Presets/Bubblegum.luau +36 -0
  398. package/runtime/EzVisualz/_impl/Presets/ChromeStroke.luau +15 -0
  399. package/runtime/EzVisualz/_impl/Presets/DeathStroke.luau +15 -0
  400. package/runtime/EzVisualz/_impl/Presets/ElectricStroke.luau +54 -0
  401. package/runtime/EzVisualz/_impl/Presets/FireStroke.luau +29 -0
  402. package/runtime/EzVisualz/_impl/Presets/GalaxyStroke.luau +31 -0
  403. package/runtime/EzVisualz/_impl/Presets/Ghost.luau +10 -0
  404. package/runtime/EzVisualz/_impl/Presets/GhostStroke.luau +15 -0
  405. package/runtime/EzVisualz/_impl/Presets/Gold.luau +10 -0
  406. package/runtime/EzVisualz/_impl/Presets/GoldStroke.luau +15 -0
  407. package/runtime/EzVisualz/_impl/Presets/GreenOutline.luau +23 -0
  408. package/runtime/EzVisualz/_impl/Presets/IceStroke.luau +15 -0
  409. package/runtime/EzVisualz/_impl/Presets/Lava.luau +9 -0
  410. package/runtime/EzVisualz/_impl/Presets/LavaStroke.luau +13 -0
  411. package/runtime/EzVisualz/_impl/Presets/Matrix.luau +21 -0
  412. package/runtime/EzVisualz/_impl/Presets/NeonStroke.luau +30 -0
  413. package/runtime/EzVisualz/_impl/Presets/OceanicStroke.luau +15 -0
  414. package/runtime/EzVisualz/_impl/Presets/Rainbow.luau +9 -0
  415. package/runtime/EzVisualz/_impl/Presets/RainbowOutline.luau +23 -0
  416. package/runtime/EzVisualz/_impl/Presets/RainbowStroke.luau +13 -0
  417. package/runtime/EzVisualz/_impl/Presets/Shine.luau +48 -0
  418. package/runtime/EzVisualz/_impl/Presets/ShineOutline.luau +66 -0
  419. package/runtime/EzVisualz/_impl/Presets/Silver.luau +10 -0
  420. package/runtime/EzVisualz/_impl/Presets/SilverStroke.luau +15 -0
  421. package/runtime/EzVisualz/_impl/Presets/SunsetStroke.luau +31 -0
  422. package/runtime/EzVisualz/_impl/Presets/WaveStroke.luau +33 -0
  423. package/runtime/EzVisualz/_impl/Presets/Zebra.luau +21 -0
  424. package/runtime/EzVisualz/_impl/Presets/init.luau +9 -0
  425. package/runtime/EzVisualz/_impl/Stroke.luau +167 -0
  426. package/runtime/EzVisualz/_impl/Util.luau +7 -0
  427. package/runtime/EzVisualz/_impl/init.luau +319 -0
  428. package/runtime/EzVisualz/_impl/wally.lock +8 -0
  429. package/runtime/EzVisualz/_impl/wally.toml +8 -0
  430. package/runtime/EzVisualz/init.luau +9 -0
  431. package/runtime/EzVisualz/wally.lock +8 -0
  432. package/runtime/EzVisualz/wally.toml +8 -0
  433. package/runtime/FormatNumber/LICENSE.md +25 -0
  434. package/runtime/FormatNumber/Main/DecimalFormatSymbols.lua +43 -0
  435. package/runtime/FormatNumber/Main/IntegerWidth.lua +41 -0
  436. package/runtime/FormatNumber/Main/Notation.lua +116 -0
  437. package/runtime/FormatNumber/Main/Precision.lua +179 -0
  438. package/runtime/FormatNumber/Main/init.lua +199 -0
  439. package/runtime/FormatNumber/Simple/init.lua +76 -0
  440. package/runtime/FormatNumber/Version.lua +82 -0
  441. package/runtime/FormatNumber/_impl/LICENSE.md +25 -0
  442. package/runtime/FormatNumber/_impl/Main/DecimalFormatSymbols.lua +43 -0
  443. package/runtime/FormatNumber/_impl/Main/IntegerWidth.lua +41 -0
  444. package/runtime/FormatNumber/_impl/Main/Notation.lua +116 -0
  445. package/runtime/FormatNumber/_impl/Main/Precision.lua +179 -0
  446. package/runtime/FormatNumber/_impl/Main/init.lua +199 -0
  447. package/runtime/FormatNumber/_impl/Simple/init.lua +76 -0
  448. package/runtime/FormatNumber/_impl/Version.lua +82 -0
  449. package/runtime/FormatNumber/_impl/_internal/class.lua +204 -0
  450. package/runtime/FormatNumber/_impl/_internal/decimal_conversion.lua +30 -0
  451. package/runtime/FormatNumber/_impl/_internal/enums.lua +55 -0
  452. package/runtime/FormatNumber/_impl/_internal/format.lua +342 -0
  453. package/runtime/FormatNumber/_impl/_internal/formatter_settings.lua +160 -0
  454. package/runtime/FormatNumber/_impl/_internal/init.lua +8 -0
  455. package/runtime/FormatNumber/_impl/_internal/skeleton.lua +541 -0
  456. package/runtime/FormatNumber/_impl/init.lua +20 -0
  457. package/runtime/FormatNumber/_internal/class.lua +204 -0
  458. package/runtime/FormatNumber/_internal/decimal_conversion.lua +30 -0
  459. package/runtime/FormatNumber/_internal/enums.lua +55 -0
  460. package/runtime/FormatNumber/_internal/format.lua +342 -0
  461. package/runtime/FormatNumber/_internal/formatter_settings.lua +160 -0
  462. package/runtime/FormatNumber/_internal/init.lua +8 -0
  463. package/runtime/FormatNumber/_internal/skeleton.lua +541 -0
  464. package/runtime/FormatNumber/init.lua +20 -0
  465. package/runtime/FormatNumber/init.luau +20 -0
  466. package/runtime/Fusion/Animation/ExternalTime.luau +84 -0
  467. package/runtime/Fusion/Animation/Spring.luau +313 -0
  468. package/runtime/Fusion/Animation/Stopwatch.luau +128 -0
  469. package/runtime/Fusion/Animation/Tween.luau +178 -0
  470. package/runtime/Fusion/Animation/getTweenDuration.luau +27 -0
  471. package/runtime/Fusion/Animation/getTweenRatio.luau +47 -0
  472. package/runtime/Fusion/Animation/lerpType.luau +164 -0
  473. package/runtime/Fusion/Animation/packType.luau +100 -0
  474. package/runtime/Fusion/Animation/springCoefficients.luau +80 -0
  475. package/runtime/Fusion/Animation/unpackType.luau +103 -0
  476. package/runtime/Fusion/Colour/Oklab.luau +70 -0
  477. package/runtime/Fusion/Colour/sRGB.luau +47 -0
  478. package/runtime/Fusion/External.luau +156 -0
  479. package/runtime/Fusion/ExternalDebug.luau +70 -0
  480. package/runtime/Fusion/Graph/Observer.luau +111 -0
  481. package/runtime/Fusion/Graph/castToGraph.luau +29 -0
  482. package/runtime/Fusion/Graph/change.luau +81 -0
  483. package/runtime/Fusion/Graph/depend.luau +33 -0
  484. package/runtime/Fusion/Graph/evaluate.luau +56 -0
  485. package/runtime/Fusion/Instances/Attribute.luau +58 -0
  486. package/runtime/Fusion/Instances/AttributeChange.luau +47 -0
  487. package/runtime/Fusion/Instances/AttributeOut.luau +63 -0
  488. package/runtime/Fusion/Instances/Child.luau +21 -0
  489. package/runtime/Fusion/Instances/Children.luau +148 -0
  490. package/runtime/Fusion/Instances/Hydrate.luau +29 -0
  491. package/runtime/Fusion/Instances/New.luau +48 -0
  492. package/runtime/Fusion/Instances/OnChange.luau +50 -0
  493. package/runtime/Fusion/Instances/OnEvent.luau +54 -0
  494. package/runtime/Fusion/Instances/Out.luau +69 -0
  495. package/runtime/Fusion/Instances/Tag.luau +61 -0
  496. package/runtime/Fusion/Instances/applyInstanceProps.luau +149 -0
  497. package/runtime/Fusion/Instances/defaultProps.luau +194 -0
  498. package/runtime/Fusion/LICENSE +21 -0
  499. package/runtime/Fusion/Logging/formatError.luau +49 -0
  500. package/runtime/Fusion/Logging/messages.luau +46 -0
  501. package/runtime/Fusion/Logging/parseError.luau +25 -0
  502. package/runtime/Fusion/Memory/checkLifetime.luau +134 -0
  503. package/runtime/Fusion/Memory/deriveScope.luau +24 -0
  504. package/runtime/Fusion/Memory/deriveScopeImpl.luau +40 -0
  505. package/runtime/Fusion/Memory/doCleanup.luau +91 -0
  506. package/runtime/Fusion/Memory/innerScope.luau +34 -0
  507. package/runtime/Fusion/Memory/insert.luau +22 -0
  508. package/runtime/Fusion/Memory/needsDestruction.luau +17 -0
  509. package/runtime/Fusion/Memory/scoped.luau +24 -0
  510. package/runtime/Fusion/RobloxExternal.luau +98 -0
  511. package/runtime/Fusion/State/Computed.luau +122 -0
  512. package/runtime/Fusion/State/For/Disassembly.luau +207 -0
  513. package/runtime/Fusion/State/For/ForTypes.luau +30 -0
  514. package/runtime/Fusion/State/For/init.luau +101 -0
  515. package/runtime/Fusion/State/ForKeys.luau +88 -0
  516. package/runtime/Fusion/State/ForPairs.luau +91 -0
  517. package/runtime/Fusion/State/ForValues.luau +88 -0
  518. package/runtime/Fusion/State/Value.luau +76 -0
  519. package/runtime/Fusion/State/castToState.luau +26 -0
  520. package/runtime/Fusion/State/peek.luau +31 -0
  521. package/runtime/Fusion/State/updateAll.luau +1 -0
  522. package/runtime/Fusion/Types.luau +318 -0
  523. package/runtime/Fusion/Utility/Contextual.luau +91 -0
  524. package/runtime/Fusion/Utility/Safe.luau +23 -0
  525. package/runtime/Fusion/Utility/isSimilar.luau +29 -0
  526. package/runtime/Fusion/Utility/merge.luau +35 -0
  527. package/runtime/Fusion/Utility/nameOf.luau +35 -0
  528. package/runtime/Fusion/Utility/never.luau +14 -0
  529. package/runtime/Fusion/Utility/nicknames.luau +11 -0
  530. package/runtime/Fusion/Utility/xtypeof.luau +27 -0
  531. package/runtime/Fusion/_impl/Animation/ExternalTime.luau +84 -0
  532. package/runtime/Fusion/_impl/Animation/Spring.luau +313 -0
  533. package/runtime/Fusion/_impl/Animation/Stopwatch.luau +128 -0
  534. package/runtime/Fusion/_impl/Animation/Tween.luau +178 -0
  535. package/runtime/Fusion/_impl/Animation/getTweenDuration.luau +27 -0
  536. package/runtime/Fusion/_impl/Animation/getTweenRatio.luau +47 -0
  537. package/runtime/Fusion/_impl/Animation/lerpType.luau +164 -0
  538. package/runtime/Fusion/_impl/Animation/packType.luau +100 -0
  539. package/runtime/Fusion/_impl/Animation/springCoefficients.luau +80 -0
  540. package/runtime/Fusion/_impl/Animation/unpackType.luau +103 -0
  541. package/runtime/Fusion/_impl/Colour/Oklab.luau +70 -0
  542. package/runtime/Fusion/_impl/Colour/sRGB.luau +47 -0
  543. package/runtime/Fusion/_impl/External.luau +156 -0
  544. package/runtime/Fusion/_impl/ExternalDebug.luau +70 -0
  545. package/runtime/Fusion/_impl/Graph/Observer.luau +111 -0
  546. package/runtime/Fusion/_impl/Graph/castToGraph.luau +29 -0
  547. package/runtime/Fusion/_impl/Graph/change.luau +81 -0
  548. package/runtime/Fusion/_impl/Graph/depend.luau +33 -0
  549. package/runtime/Fusion/_impl/Graph/evaluate.luau +56 -0
  550. package/runtime/Fusion/_impl/Instances/Attribute.luau +58 -0
  551. package/runtime/Fusion/_impl/Instances/AttributeChange.luau +47 -0
  552. package/runtime/Fusion/_impl/Instances/AttributeOut.luau +63 -0
  553. package/runtime/Fusion/_impl/Instances/Child.luau +21 -0
  554. package/runtime/Fusion/_impl/Instances/Children.luau +148 -0
  555. package/runtime/Fusion/_impl/Instances/Hydrate.luau +29 -0
  556. package/runtime/Fusion/_impl/Instances/New.luau +48 -0
  557. package/runtime/Fusion/_impl/Instances/OnChange.luau +50 -0
  558. package/runtime/Fusion/_impl/Instances/OnEvent.luau +54 -0
  559. package/runtime/Fusion/_impl/Instances/Out.luau +69 -0
  560. package/runtime/Fusion/_impl/Instances/Tag.luau +61 -0
  561. package/runtime/Fusion/_impl/Instances/applyInstanceProps.luau +149 -0
  562. package/runtime/Fusion/_impl/Instances/defaultProps.luau +194 -0
  563. package/runtime/Fusion/_impl/LICENSE +21 -0
  564. package/runtime/Fusion/_impl/Logging/formatError.luau +49 -0
  565. package/runtime/Fusion/_impl/Logging/messages.luau +46 -0
  566. package/runtime/Fusion/_impl/Logging/parseError.luau +25 -0
  567. package/runtime/Fusion/_impl/Memory/checkLifetime.luau +134 -0
  568. package/runtime/Fusion/_impl/Memory/deriveScope.luau +24 -0
  569. package/runtime/Fusion/_impl/Memory/deriveScopeImpl.luau +40 -0
  570. package/runtime/Fusion/_impl/Memory/doCleanup.luau +91 -0
  571. package/runtime/Fusion/_impl/Memory/innerScope.luau +34 -0
  572. package/runtime/Fusion/_impl/Memory/insert.luau +22 -0
  573. package/runtime/Fusion/_impl/Memory/needsDestruction.luau +17 -0
  574. package/runtime/Fusion/_impl/Memory/scoped.luau +24 -0
  575. package/runtime/Fusion/_impl/RobloxExternal.luau +98 -0
  576. package/runtime/Fusion/_impl/State/Computed.luau +122 -0
  577. package/runtime/Fusion/_impl/State/For/Disassembly.luau +207 -0
  578. package/runtime/Fusion/_impl/State/For/ForTypes.luau +30 -0
  579. package/runtime/Fusion/_impl/State/For/init.luau +101 -0
  580. package/runtime/Fusion/_impl/State/ForKeys.luau +88 -0
  581. package/runtime/Fusion/_impl/State/ForPairs.luau +91 -0
  582. package/runtime/Fusion/_impl/State/ForValues.luau +88 -0
  583. package/runtime/Fusion/_impl/State/Value.luau +76 -0
  584. package/runtime/Fusion/_impl/State/castToState.luau +26 -0
  585. package/runtime/Fusion/_impl/State/peek.luau +31 -0
  586. package/runtime/Fusion/_impl/State/updateAll.luau +1 -0
  587. package/runtime/Fusion/_impl/Types.luau +318 -0
  588. package/runtime/Fusion/_impl/Utility/Contextual.luau +91 -0
  589. package/runtime/Fusion/_impl/Utility/Safe.luau +23 -0
  590. package/runtime/Fusion/_impl/Utility/isSimilar.luau +29 -0
  591. package/runtime/Fusion/_impl/Utility/merge.luau +35 -0
  592. package/runtime/Fusion/_impl/Utility/nameOf.luau +35 -0
  593. package/runtime/Fusion/_impl/Utility/never.luau +14 -0
  594. package/runtime/Fusion/_impl/Utility/nicknames.luau +11 -0
  595. package/runtime/Fusion/_impl/Utility/xtypeof.luau +27 -0
  596. package/runtime/Fusion/_impl/init.luau +83 -0
  597. package/runtime/Fusion/init.luau +27 -0
  598. package/runtime/Iris/API.lua +2085 -0
  599. package/runtime/Iris/Internal.lua +895 -0
  600. package/runtime/Iris/LICENSE.txt +21 -0
  601. package/runtime/Iris/PubTypes.lua +43 -0
  602. package/runtime/Iris/Types.lua +660 -0
  603. package/runtime/Iris/WidgetTypes.lua +521 -0
  604. package/runtime/Iris/_impl/API.lua +2085 -0
  605. package/runtime/Iris/_impl/Internal.lua +895 -0
  606. package/runtime/Iris/_impl/LICENSE.txt +21 -0
  607. package/runtime/Iris/_impl/PubTypes.lua +43 -0
  608. package/runtime/Iris/_impl/Types.lua +660 -0
  609. package/runtime/Iris/_impl/WidgetTypes.lua +521 -0
  610. package/runtime/Iris/_impl/config.lua +305 -0
  611. package/runtime/Iris/_impl/init.lua +696 -0
  612. package/runtime/Iris/_impl/widgets/Button.lua +90 -0
  613. package/runtime/Iris/_impl/widgets/Checkbox.lua +115 -0
  614. package/runtime/Iris/_impl/widgets/Combo.lua +492 -0
  615. package/runtime/Iris/_impl/widgets/Format.lua +140 -0
  616. package/runtime/Iris/_impl/widgets/Image.lua +155 -0
  617. package/runtime/Iris/_impl/widgets/Input.lua +1232 -0
  618. package/runtime/Iris/_impl/widgets/Menu.lua +599 -0
  619. package/runtime/Iris/_impl/widgets/Plot.lua +639 -0
  620. package/runtime/Iris/_impl/widgets/RadioButton.lua +126 -0
  621. package/runtime/Iris/_impl/widgets/Root.lua +143 -0
  622. package/runtime/Iris/_impl/widgets/Tab.lua +333 -0
  623. package/runtime/Iris/_impl/widgets/Table.lua +635 -0
  624. package/runtime/Iris/_impl/widgets/Text.lua +132 -0
  625. package/runtime/Iris/_impl/widgets/Tree.lua +287 -0
  626. package/runtime/Iris/_impl/widgets/Window.lua +1075 -0
  627. package/runtime/Iris/_impl/widgets/init.lua +447 -0
  628. package/runtime/Iris/config.lua +305 -0
  629. package/runtime/Iris/init.lua +696 -0
  630. package/runtime/Iris/init.luau +12 -0
  631. package/runtime/Iris/widgets/Button.lua +90 -0
  632. package/runtime/Iris/widgets/Checkbox.lua +115 -0
  633. package/runtime/Iris/widgets/Combo.lua +492 -0
  634. package/runtime/Iris/widgets/Format.lua +140 -0
  635. package/runtime/Iris/widgets/Image.lua +155 -0
  636. package/runtime/Iris/widgets/Input.lua +1232 -0
  637. package/runtime/Iris/widgets/Menu.lua +599 -0
  638. package/runtime/Iris/widgets/Plot.lua +639 -0
  639. package/runtime/Iris/widgets/RadioButton.lua +126 -0
  640. package/runtime/Iris/widgets/Root.lua +143 -0
  641. package/runtime/Iris/widgets/Tab.lua +333 -0
  642. package/runtime/Iris/widgets/Table.lua +635 -0
  643. package/runtime/Iris/widgets/Text.lua +132 -0
  644. package/runtime/Iris/widgets/Tree.lua +287 -0
  645. package/runtime/Iris/widgets/Window.lua +1075 -0
  646. package/runtime/Iris/widgets/init.lua +447 -0
  647. package/runtime/Janitor/FastDefer.luau +33 -0
  648. package/runtime/Janitor/LICENSE +21 -0
  649. package/runtime/Janitor/_impl/FastDefer.luau +33 -0
  650. package/runtime/Janitor/_impl/LICENSE +21 -0
  651. package/runtime/Janitor/_impl/init.luau +999 -0
  652. package/runtime/Janitor/init.luau +45 -0
  653. package/runtime/MathUtils/init.luau +100 -0
  654. package/runtime/Module3D/LICENSE +21 -0
  655. package/runtime/Module3D/_impl/LICENSE +21 -0
  656. package/runtime/Module3D/_impl/init.luau +269 -0
  657. package/runtime/Module3D/init.luau +14 -0
  658. package/runtime/Net/init.luau +125 -0
  659. package/runtime/Net/src/codec.luau +153 -0
  660. package/runtime/Occlude/init.luau +54 -0
  661. package/runtime/Promise/LICENSE +21 -0
  662. package/runtime/Promise/_impl/LICENSE +21 -0
  663. package/runtime/Promise/_impl/init.lua +1991 -0
  664. package/runtime/Promise/init.lua +1990 -0
  665. package/runtime/Promise/init.luau +13 -0
  666. package/runtime/Promise/types.luau +46 -0
  667. package/runtime/SOURCES.md +22 -0
  668. package/runtime/Spring/LICENSE +201 -0
  669. package/runtime/Spring/_impl/LICENSE +201 -0
  670. package/runtime/Spring/_impl/init.luau +111 -0
  671. package/runtime/Spring/init.luau +24 -0
  672. package/runtime/StateMachine/Classes/State.lua +375 -0
  673. package/runtime/StateMachine/Classes/Transition.lua +336 -0
  674. package/runtime/StateMachine/Functions/deepCopy.lua +19 -0
  675. package/runtime/StateMachine/Functions/mergeTables.lua +22 -0
  676. package/runtime/StateMachine/LICENSE +19 -0
  677. package/runtime/StateMachine/Vendor/Signal.lua +386 -0
  678. package/runtime/StateMachine/Vendor/Trove.lua +188 -0
  679. package/runtime/StateMachine/_impl/Classes/State.lua +375 -0
  680. package/runtime/StateMachine/_impl/Classes/Transition.lua +336 -0
  681. package/runtime/StateMachine/_impl/Functions/deepCopy.lua +19 -0
  682. package/runtime/StateMachine/_impl/Functions/mergeTables.lua +22 -0
  683. package/runtime/StateMachine/_impl/LICENSE +19 -0
  684. package/runtime/StateMachine/_impl/Vendor/Signal.lua +386 -0
  685. package/runtime/StateMachine/_impl/Vendor/Trove.lua +188 -0
  686. package/runtime/StateMachine/_impl/init.lua +595 -0
  687. package/runtime/StateMachine/init.lua +595 -0
  688. package/runtime/StateMachine/init.luau +10 -0
  689. package/runtime/StickyBillboard/init.luau +167 -0
  690. package/runtime/TopbarPlus/Attribute.lua +35 -0
  691. package/runtime/TopbarPlus/Elements/Caption.lua +316 -0
  692. package/runtime/TopbarPlus/Elements/Container.lua +215 -0
  693. package/runtime/TopbarPlus/Elements/Dropdown.lua +315 -0
  694. package/runtime/TopbarPlus/Elements/Indicator.lua +91 -0
  695. package/runtime/TopbarPlus/Elements/Menu.lua +180 -0
  696. package/runtime/TopbarPlus/Elements/Notice.lua +113 -0
  697. package/runtime/TopbarPlus/Elements/Selection.lua +49 -0
  698. package/runtime/TopbarPlus/Elements/Widget.lua +437 -0
  699. package/runtime/TopbarPlus/Features/Gamepad.lua +201 -0
  700. package/runtime/TopbarPlus/Features/Overflow.lua +360 -0
  701. package/runtime/TopbarPlus/Features/Themes/Classic.lua +27 -0
  702. package/runtime/TopbarPlus/Features/Themes/Default.lua +75 -0
  703. package/runtime/TopbarPlus/Features/Themes/init.lua +353 -0
  704. package/runtime/TopbarPlus/LICENSE +381 -0
  705. package/runtime/TopbarPlus/Packages/GoodSignal.lua +182 -0
  706. package/runtime/TopbarPlus/Packages/Janitor.lua +322 -0
  707. package/runtime/TopbarPlus/Reference.lua +30 -0
  708. package/runtime/TopbarPlus/Types.lua +477 -0
  709. package/runtime/TopbarPlus/Utility.lua +462 -0
  710. package/runtime/TopbarPlus/VERSION.lua +51 -0
  711. package/runtime/TopbarPlus/_impl/Attribute.lua +35 -0
  712. package/runtime/TopbarPlus/_impl/Elements/Caption.lua +316 -0
  713. package/runtime/TopbarPlus/_impl/Elements/Container.lua +215 -0
  714. package/runtime/TopbarPlus/_impl/Elements/Dropdown.lua +315 -0
  715. package/runtime/TopbarPlus/_impl/Elements/Indicator.lua +91 -0
  716. package/runtime/TopbarPlus/_impl/Elements/Menu.lua +180 -0
  717. package/runtime/TopbarPlus/_impl/Elements/Notice.lua +113 -0
  718. package/runtime/TopbarPlus/_impl/Elements/Selection.lua +49 -0
  719. package/runtime/TopbarPlus/_impl/Elements/Widget.lua +437 -0
  720. package/runtime/TopbarPlus/_impl/Features/Gamepad.lua +201 -0
  721. package/runtime/TopbarPlus/_impl/Features/Overflow.lua +360 -0
  722. package/runtime/TopbarPlus/_impl/Features/Themes/Classic.lua +27 -0
  723. package/runtime/TopbarPlus/_impl/Features/Themes/Default.lua +75 -0
  724. package/runtime/TopbarPlus/_impl/Features/Themes/init.lua +353 -0
  725. package/runtime/TopbarPlus/_impl/LICENSE +381 -0
  726. package/runtime/TopbarPlus/_impl/Packages/GoodSignal.lua +182 -0
  727. package/runtime/TopbarPlus/_impl/Packages/Janitor.lua +322 -0
  728. package/runtime/TopbarPlus/_impl/Reference.lua +30 -0
  729. package/runtime/TopbarPlus/_impl/Types.lua +477 -0
  730. package/runtime/TopbarPlus/_impl/Utility.lua +462 -0
  731. package/runtime/TopbarPlus/_impl/VERSION.lua +51 -0
  732. package/runtime/TopbarPlus/_impl/init.lua +1249 -0
  733. package/runtime/TopbarPlus/init.lua +1249 -0
  734. package/runtime/TopbarPlus/init.luau +8 -0
  735. package/runtime/Twinkle/init.luau +157 -0
  736. package/runtime/VfxUtil/init.luau +164 -0
  737. package/src/api.generated.js +3675 -0
  738. package/src/api.js +57 -0
  739. package/src/architecture.js +393 -0
  740. package/src/cli.js +192 -0
  741. package/src/compile.js +40 -0
  742. package/src/emit.js +213 -0
  743. package/src/lex.js +149 -0
  744. package/src/libs.js +355 -0
  745. package/src/parse.js +421 -0
  746. package/src/preprocess.js +80 -0
  747. package/src/understand.js +453 -0
  748. package/templates/game/.clangd +5 -0
  749. package/templates/game/.vscode/c_cpp_properties.json +23 -0
  750. package/templates/game/.vscode/settings.json +12 -0
  751. package/templates/game/Packages/.gitkeep +0 -0
  752. package/templates/game/cluaupp.config.json +6 -0
  753. package/templates/game/compile_flags.txt +3 -0
  754. package/templates/game/default.project.json +39 -0
  755. package/templates/game/package.json +9 -0
  756. package/templates/game/src/client/init.client.cpp +5 -0
  757. package/templates/game/src/server/leaderstats.server.cpp +28 -0
  758. package/templates/game/src/shared/config.cpp +5 -0
  759. package/templates/game/src/shared/config.h +3 -0
  760. package/templates/game/wally.toml +11 -0
@@ -0,0 +1,1075 @@
1
+ local Types = require(script.Parent.Parent.Types)
2
+
3
+ return function(Iris: Types.Internal, widgets: Types.WidgetUtility)
4
+ local function relocateTooltips()
5
+ if Iris._rootInstance == nil then
6
+ return
7
+ end
8
+ local PopupScreenGui = Iris._rootInstance:FindFirstChild("PopupScreenGui")
9
+ local TooltipContainer: Frame = PopupScreenGui.TooltipContainer
10
+ local mouseLocation = widgets.getMouseLocation()
11
+ local newPosition = widgets.findBestWindowPosForPopup(mouseLocation, TooltipContainer.AbsoluteSize, Iris._config.DisplaySafeAreaPadding, PopupScreenGui.AbsoluteSize)
12
+ TooltipContainer.Position = UDim2.fromOffset(newPosition.X, newPosition.Y)
13
+ end
14
+
15
+ widgets.registerEvent("InputChanged", function()
16
+ if not Iris._started then
17
+ return
18
+ end
19
+ relocateTooltips()
20
+ end)
21
+
22
+ --stylua: ignore
23
+ Iris.WidgetConstructor("Tooltip", {
24
+ hasState = false,
25
+ hasChildren = false,
26
+ Args = {
27
+ ["Text"] = 1,
28
+ },
29
+ Events = {},
30
+ Generate = function(thisWidget: Types.Tooltip)
31
+ thisWidget.parentWidget = Iris._rootWidget -- only allow root as parent
32
+
33
+ local Tooltip = Instance.new("Frame")
34
+ Tooltip.Name = "Iris_Tooltip"
35
+ Tooltip.AutomaticSize = Enum.AutomaticSize.Y
36
+ Tooltip.Size = UDim2.new(Iris._config.ContentWidth, UDim.new(0, 0))
37
+ Tooltip.BorderSizePixel = 0
38
+ Tooltip.BackgroundTransparency = 1
39
+
40
+ local TooltipText = Instance.new("TextLabel")
41
+ TooltipText.Name = "TooltipText"
42
+ TooltipText.AutomaticSize = Enum.AutomaticSize.XY
43
+ TooltipText.Size = UDim2.fromOffset(0, 0)
44
+ TooltipText.BackgroundColor3 = Iris._config.PopupBgColor
45
+ TooltipText.BackgroundTransparency = Iris._config.PopupBgTransparency
46
+
47
+ widgets.applyTextStyle(TooltipText)
48
+ widgets.UIStroke(TooltipText, Iris._config.PopupBorderSize, Iris._config.BorderActiveColor, Iris._config.BorderActiveTransparency)
49
+ widgets.UIPadding(TooltipText, Iris._config.WindowPadding)
50
+ if Iris._config.PopupRounding > 0 then
51
+ widgets.UICorner(TooltipText, Iris._config.PopupRounding)
52
+ end
53
+
54
+ TooltipText.Parent = Tooltip
55
+
56
+ return Tooltip
57
+ end,
58
+ Update = function(thisWidget: Types.Tooltip)
59
+ local Tooltip = thisWidget.Instance :: Frame
60
+ local TooltipText: TextLabel = Tooltip.TooltipText
61
+ if thisWidget.arguments.Text == nil then
62
+ error("Text argument is required for Iris.Tooltip().", 5)
63
+ end
64
+ TooltipText.Text = thisWidget.arguments.Text
65
+ relocateTooltips()
66
+ end,
67
+ Discard = function(thisWidget: Types.Tooltip)
68
+ thisWidget.Instance:Destroy()
69
+ end,
70
+ } :: Types.WidgetClass)
71
+
72
+ local windowDisplayOrder = 0 -- incremental count which is used for determining focused windows ZIndex
73
+ local dragWindow: Types.Window? -- window being dragged, may be nil
74
+ local isDragging = false
75
+ local moveDeltaCursorPosition: Vector2 -- cursor offset from drag origin (top left of window)
76
+
77
+ local resizeWindow: Types.Window? -- window being resized, may be nil
78
+ local isResizing = false
79
+ local isInsideResize = false -- is cursor inside of the focused window resize outer padding
80
+ local isInsideWindow = false -- is cursor inside of the focused window
81
+ local resizeFromTopBottom = Enum.TopBottom.Top
82
+ local resizeFromLeftRight = Enum.LeftRight.Left
83
+
84
+ local lastCursorPosition: Vector2
85
+
86
+ local focusedWindow: Types.Window? -- window with focus, may be nil
87
+ local anyFocusedWindow = false -- is there any focused window?
88
+
89
+ local windowWidgets: { [Types.ID]: Types.Window } = {} -- array of widget objects of type window
90
+
91
+ local function quickSwapWindows()
92
+ -- ctrl + tab swapping functionality
93
+ if Iris._config.UseScreenGUIs == false then
94
+ return
95
+ end
96
+
97
+ local lowest = 0xFFFF
98
+ local lowestWidget: Types.Window
99
+
100
+ for _, widget in windowWidgets do
101
+ if widget.state.isOpened.value and not widget.arguments.NoNav then
102
+ if widget.Instance:IsA("ScreenGui") then
103
+ local value = widget.Instance.DisplayOrder
104
+ if value < lowest then
105
+ lowest = value
106
+ lowestWidget = widget
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ if not lowestWidget then
113
+ return
114
+ end
115
+
116
+ if lowestWidget.state.isUncollapsed.value == false then
117
+ lowestWidget.state.isUncollapsed:set(true)
118
+ end
119
+ Iris.SetFocusedWindow(lowestWidget)
120
+ end
121
+
122
+ local function fitSizeToWindowBounds(thisWidget: Types.Window, intentedSize: Vector2)
123
+ local windowSize = Vector2.new(thisWidget.state.position.value.X, thisWidget.state.position.value.Y)
124
+ local minWindowSize = (Iris._config.TextSize + 2 * Iris._config.FramePadding.Y) * 2
125
+ local usableSize = widgets.getScreenSizeForWindow(thisWidget)
126
+ local safeAreaPadding = Vector2.new(Iris._config.WindowBorderSize + Iris._config.DisplaySafeAreaPadding.X, Iris._config.WindowBorderSize + Iris._config.DisplaySafeAreaPadding.Y)
127
+
128
+ local maxWindowSize = (usableSize - windowSize - safeAreaPadding)
129
+ return Vector2.new(math.clamp(intentedSize.X, minWindowSize, math.max(maxWindowSize.X, minWindowSize)), math.clamp(intentedSize.Y, minWindowSize, math.max(maxWindowSize.Y, minWindowSize)))
130
+ end
131
+
132
+ local function fitPositionToWindowBounds(thisWidget: Types.Window, intendedPosition: Vector2)
133
+ local thisWidgetInstance = thisWidget.Instance
134
+ local usableSize = widgets.getScreenSizeForWindow(thisWidget)
135
+ local safeAreaPadding = Vector2.new(Iris._config.WindowBorderSize + Iris._config.DisplaySafeAreaPadding.X, Iris._config.WindowBorderSize + Iris._config.DisplaySafeAreaPadding.Y)
136
+
137
+ return Vector2.new(
138
+ math.clamp(intendedPosition.X, safeAreaPadding.X, math.max(safeAreaPadding.X, usableSize.X - thisWidgetInstance.WindowButton.AbsoluteSize.X - safeAreaPadding.X)),
139
+ math.clamp(intendedPosition.Y, safeAreaPadding.Y, math.max(safeAreaPadding.Y, usableSize.Y - thisWidgetInstance.WindowButton.AbsoluteSize.Y - safeAreaPadding.Y))
140
+ )
141
+ end
142
+
143
+ Iris.SetFocusedWindow = function(thisWidget: Types.Window?)
144
+ if focusedWindow == thisWidget then
145
+ return
146
+ end
147
+
148
+ if anyFocusedWindow and focusedWindow ~= nil then
149
+ if windowWidgets[focusedWindow.ID] then
150
+ local Window = focusedWindow.Instance :: Frame
151
+ local WindowButton = Window.WindowButton :: TextButton
152
+ local Content = WindowButton.Content :: Frame
153
+ local TitleBar: Frame = Content.TitleBar
154
+ -- update appearance to unfocus
155
+ if focusedWindow.state.isUncollapsed.value then
156
+ TitleBar.BackgroundColor3 = Iris._config.TitleBgColor
157
+ TitleBar.BackgroundTransparency = Iris._config.TitleBgTransparency
158
+ else
159
+ TitleBar.BackgroundColor3 = Iris._config.TitleBgCollapsedColor
160
+ TitleBar.BackgroundTransparency = Iris._config.TitleBgCollapsedTransparency
161
+ end
162
+ WindowButton.UIStroke.Color = Iris._config.BorderColor
163
+ end
164
+
165
+ anyFocusedWindow = false
166
+ focusedWindow = nil
167
+ end
168
+
169
+ if thisWidget ~= nil then
170
+ -- update appearance to focus
171
+ anyFocusedWindow = true
172
+ focusedWindow = thisWidget
173
+ local Window = thisWidget.Instance :: Frame
174
+ local WindowButton = Window.WindowButton :: TextButton
175
+ local Content = WindowButton.Content :: Frame
176
+ local TitleBar: Frame = Content.TitleBar
177
+
178
+ TitleBar.BackgroundColor3 = Iris._config.TitleBgActiveColor
179
+ TitleBar.BackgroundTransparency = Iris._config.TitleBgActiveTransparency
180
+ WindowButton.UIStroke.Color = Iris._config.BorderActiveColor
181
+
182
+ windowDisplayOrder += 1
183
+ if thisWidget.usesScreenGuis then
184
+ Window.DisplayOrder = windowDisplayOrder + Iris._config.DisplayOrderOffset
185
+ else
186
+ Window.ZIndex = windowDisplayOrder + Iris._config.DisplayOrderOffset
187
+ end
188
+
189
+ if thisWidget.state.isUncollapsed.value == false then
190
+ thisWidget.state.isUncollapsed:set(true)
191
+ end
192
+
193
+ local firstSelectedObject: GuiObject? = widgets.GuiService.SelectedObject
194
+ if firstSelectedObject then
195
+ if TitleBar.Visible then
196
+ widgets.GuiService:Select(TitleBar)
197
+ else
198
+ widgets.GuiService:Select(thisWidget.ChildContainer)
199
+ end
200
+ end
201
+ end
202
+ end
203
+
204
+ widgets.registerEvent("InputBegan", function(input: InputObject)
205
+ if not Iris._started then
206
+ return
207
+ end
208
+ if input.UserInputType == Enum.UserInputType.MouseButton1 then
209
+ local inWindow = false
210
+ local position = widgets.getMouseLocation()
211
+ for _, window in windowWidgets do
212
+ local Window = window.Instance
213
+ if not Window then
214
+ continue
215
+ end
216
+ local WindowButton = Window.WindowButton :: TextButton
217
+ local ResizeBorder: TextButton = WindowButton.ResizeBorder
218
+ if ResizeBorder and widgets.isPosInsideRect(position, ResizeBorder.AbsolutePosition - widgets.GuiOffset, ResizeBorder.AbsolutePosition - widgets.GuiOffset + ResizeBorder.AbsoluteSize) then
219
+ inWindow = true
220
+ break
221
+ end
222
+ end
223
+
224
+ if not inWindow then
225
+ Iris.SetFocusedWindow(nil)
226
+ end
227
+ end
228
+
229
+ if input.KeyCode == Enum.KeyCode.Tab and (widgets.UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or widgets.UserInputService:IsKeyDown(Enum.KeyCode.RightControl)) then
230
+ quickSwapWindows()
231
+ end
232
+
233
+ if input.UserInputType == Enum.UserInputType.MouseButton1 and isInsideResize and not isInsideWindow and anyFocusedWindow and focusedWindow then
234
+ local midWindow = focusedWindow.state.position.value + (focusedWindow.state.size.value / 2)
235
+ local cursorPosition = widgets.getMouseLocation() - midWindow
236
+
237
+ -- check which axis its closest to, then check which side is closest with math.sign
238
+ if math.abs(cursorPosition.X) * focusedWindow.state.size.value.Y >= math.abs(cursorPosition.Y) * focusedWindow.state.size.value.X then
239
+ resizeFromTopBottom = Enum.TopBottom.Center
240
+ resizeFromLeftRight = if math.sign(cursorPosition.X) == -1 then Enum.LeftRight.Left else Enum.LeftRight.Right
241
+ else
242
+ resizeFromLeftRight = Enum.LeftRight.Center
243
+ resizeFromTopBottom = if math.sign(cursorPosition.Y) == -1 then Enum.TopBottom.Top else Enum.TopBottom.Bottom
244
+ end
245
+ isResizing = true
246
+ resizeWindow = focusedWindow
247
+ end
248
+ end)
249
+
250
+ widgets.registerEvent("TouchTapInWorld", function(_, gameProcessedEvent: boolean)
251
+ if not Iris._started then
252
+ return
253
+ end
254
+ if not gameProcessedEvent then
255
+ Iris.SetFocusedWindow(nil)
256
+ end
257
+ end)
258
+
259
+ widgets.registerEvent("InputChanged", function(input: InputObject)
260
+ if not Iris._started then
261
+ return
262
+ end
263
+ if isDragging and dragWindow then
264
+ local mouseLocation
265
+ if input.UserInputType == Enum.UserInputType.Touch then
266
+ local location = input.Position
267
+ mouseLocation = Vector2.new(location.X, location.Y)
268
+ else
269
+ mouseLocation = widgets.getMouseLocation()
270
+ end
271
+ local Window = dragWindow.Instance :: Frame
272
+ local dragInstance: TextButton = Window.WindowButton
273
+ local intendedPosition = mouseLocation - moveDeltaCursorPosition
274
+ local newPos = fitPositionToWindowBounds(dragWindow, intendedPosition)
275
+
276
+ -- state shouldnt be used like this, but calling :set would run the entire UpdateState function for the window, which is slow.
277
+ dragInstance.Position = UDim2.fromOffset(newPos.X, newPos.Y)
278
+ dragWindow.state.position.value = newPos
279
+ end
280
+ if isResizing and resizeWindow and resizeWindow.arguments.NoResize ~= true then
281
+ local Window = resizeWindow.Instance :: Frame
282
+ local resizeInstance: TextButton = Window.WindowButton
283
+ local windowPosition = Vector2.new(resizeInstance.Position.X.Offset, resizeInstance.Position.Y.Offset)
284
+ local windowSize = Vector2.new(resizeInstance.Size.X.Offset, resizeInstance.Size.Y.Offset)
285
+
286
+ local mouseDelta
287
+ if input.UserInputType == Enum.UserInputType.Touch then
288
+ mouseDelta = input.Delta
289
+ else
290
+ mouseDelta = widgets.getMouseLocation() - lastCursorPosition
291
+ end
292
+
293
+ local intendedPosition = windowPosition + Vector2.new(if resizeFromLeftRight == Enum.LeftRight.Left then mouseDelta.X else 0, if resizeFromTopBottom == Enum.TopBottom.Top then mouseDelta.Y else 0)
294
+
295
+ local intendedSize = windowSize
296
+ + Vector2.new(
297
+ if resizeFromLeftRight == Enum.LeftRight.Left then -mouseDelta.X elseif resizeFromLeftRight == Enum.LeftRight.Right then mouseDelta.X else 0,
298
+ if resizeFromTopBottom == Enum.TopBottom.Top then -mouseDelta.Y elseif resizeFromTopBottom == Enum.TopBottom.Bottom then mouseDelta.Y else 0
299
+ )
300
+
301
+ local newSize = fitSizeToWindowBounds(resizeWindow, intendedSize)
302
+ local newPosition = fitPositionToWindowBounds(resizeWindow, intendedPosition)
303
+
304
+ resizeInstance.Size = UDim2.fromOffset(newSize.X, newSize.Y)
305
+ resizeWindow.state.size.value = newSize
306
+ resizeInstance.Position = UDim2.fromOffset(newPosition.X, newPosition.Y)
307
+ resizeWindow.state.position.value = newPosition
308
+ end
309
+
310
+ lastCursorPosition = widgets.getMouseLocation()
311
+ end)
312
+
313
+ widgets.registerEvent("InputEnded", function(input, _)
314
+ if not Iris._started then
315
+ return
316
+ end
317
+ if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and isDragging and dragWindow then
318
+ local Window = dragWindow.Instance :: Frame
319
+ local dragInstance: TextButton = Window.WindowButton
320
+ isDragging = false
321
+ dragWindow.state.position:set(Vector2.new(dragInstance.Position.X.Offset, dragInstance.Position.Y.Offset))
322
+ end
323
+ if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and isResizing and resizeWindow then
324
+ local Window = resizeWindow.Instance :: Instance
325
+ isResizing = false
326
+ resizeWindow.state.size:set(Window.WindowButton.AbsoluteSize)
327
+ end
328
+
329
+ if input.KeyCode == Enum.KeyCode.ButtonX then
330
+ quickSwapWindows()
331
+ end
332
+ end)
333
+
334
+ --stylua: ignore
335
+ Iris.WidgetConstructor("Window", {
336
+ hasState = true,
337
+ hasChildren = true,
338
+ Args = {
339
+ ["Title"] = 1,
340
+ ["NoTitleBar"] = 2,
341
+ ["NoBackground"] = 3,
342
+ ["NoCollapse"] = 4,
343
+ ["NoClose"] = 5,
344
+ ["NoMove"] = 6,
345
+ ["NoScrollbar"] = 7,
346
+ ["NoResize"] = 8,
347
+ ["NoNav"] = 9,
348
+ ["NoMenu"] = 10,
349
+ },
350
+ Events = {
351
+ ["closed"] = {
352
+ ["Init"] = function(_thisWidget: Types.Window) end,
353
+ ["Get"] = function(thisWidget: Types.Window)
354
+ return thisWidget.lastClosedTick == Iris._cycleTick
355
+ end,
356
+ },
357
+ ["opened"] = {
358
+ ["Init"] = function(_thisWidget: Types.Window) end,
359
+ ["Get"] = function(thisWidget: Types.Window)
360
+ return thisWidget.lastOpenedTick == Iris._cycleTick
361
+ end,
362
+ },
363
+ ["collapsed"] = {
364
+ ["Init"] = function(_thisWidget: Types.Window) end,
365
+ ["Get"] = function(thisWidget: Types.Window)
366
+ return thisWidget.lastCollapsedTick == Iris._cycleTick
367
+ end,
368
+ },
369
+ ["uncollapsed"] = {
370
+ ["Init"] = function(_thisWidget: Types.Window) end,
371
+ ["Get"] = function(thisWidget: Types.Window)
372
+ return thisWidget.lastUncollapsedTick == Iris._cycleTick
373
+ end,
374
+ },
375
+ ["hovered"] = widgets.EVENTS.hover(function(thisWidget: Types.Widget)
376
+ local Window = thisWidget.Instance :: Frame
377
+ return Window.WindowButton
378
+ end),
379
+ },
380
+ Generate = function(thisWidget: Types.Window)
381
+ thisWidget.parentWidget = Iris._rootWidget -- only allow root as parent
382
+
383
+ thisWidget.usesScreenGuis = Iris._config.UseScreenGUIs
384
+ windowWidgets[thisWidget.ID] = thisWidget
385
+
386
+ local Window
387
+ if thisWidget.usesScreenGuis then
388
+ Window = Instance.new("ScreenGui")
389
+ Window.ResetOnSpawn = false
390
+ Window.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
391
+ Window.DisplayOrder = Iris._config.DisplayOrderOffset
392
+ Window.ScreenInsets = Iris._config.ScreenInsets
393
+ Window.IgnoreGuiInset = Iris._config.IgnoreGuiInset
394
+ else
395
+ Window = Instance.new("Frame")
396
+ Window.AnchorPoint = Vector2.new(0.5, 0.5)
397
+ Window.Position = UDim2.fromScale(0.5, 0.5)
398
+ Window.Size = UDim2.fromScale(1, 1)
399
+ Window.BackgroundTransparency = 1
400
+ Window.ZIndex = Iris._config.DisplayOrderOffset
401
+ end
402
+ Window.Name = "Iris_Window"
403
+
404
+ local WindowButton = Instance.new("TextButton")
405
+ WindowButton.Name = "WindowButton"
406
+ WindowButton.Size = UDim2.fromOffset(0, 0)
407
+ WindowButton.BackgroundTransparency = 1
408
+ WindowButton.BorderSizePixel = 0
409
+ WindowButton.Text = ""
410
+ WindowButton.AutoButtonColor = false
411
+ WindowButton.ClipsDescendants = false
412
+ WindowButton.Selectable = false
413
+
414
+ WindowButton.SelectionImageObject = Iris.SelectionImageObject
415
+ WindowButton.SelectionGroup = true
416
+ WindowButton.SelectionBehaviorUp = Enum.SelectionBehavior.Stop
417
+ WindowButton.SelectionBehaviorDown = Enum.SelectionBehavior.Stop
418
+ WindowButton.SelectionBehaviorLeft = Enum.SelectionBehavior.Stop
419
+ WindowButton.SelectionBehaviorRight = Enum.SelectionBehavior.Stop
420
+
421
+ widgets.UIStroke(WindowButton, Iris._config.WindowBorderSize, Iris._config.BorderColor, Iris._config.BorderTransparency)
422
+
423
+ WindowButton.Parent = Window
424
+
425
+ widgets.applyInputBegan(WindowButton, function(input)
426
+ if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Keyboard then
427
+ return
428
+ end
429
+ if thisWidget.state.isUncollapsed.value then
430
+ Iris.SetFocusedWindow(thisWidget)
431
+ end
432
+ if not thisWidget.arguments.NoMove and input.UserInputType == Enum.UserInputType.MouseButton1 then
433
+ dragWindow = thisWidget
434
+ isDragging = true
435
+ moveDeltaCursorPosition = widgets.getMouseLocation() - thisWidget.state.position.value
436
+ end
437
+ end)
438
+
439
+ local Content = Instance.new("Frame")
440
+ Content.Name = "Content"
441
+ Content.AnchorPoint = Vector2.new(0.5, 0.5)
442
+ Content.Position = UDim2.fromScale(0.5, 0.5)
443
+ Content.Size = UDim2.fromScale(1, 1)
444
+ Content.BackgroundTransparency = 1
445
+ Content.ClipsDescendants = true
446
+ Content.Parent = WindowButton
447
+
448
+ local UIListLayout = widgets.UIListLayout(Content, Enum.FillDirection.Vertical, UDim.new(0, 0))
449
+ UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
450
+ UIListLayout.VerticalAlignment = Enum.VerticalAlignment.Top
451
+
452
+ local ChildContainer = Instance.new("ScrollingFrame")
453
+ ChildContainer.Name = "WindowContainer"
454
+ ChildContainer.Size = UDim2.fromScale(1, 1)
455
+ ChildContainer.BackgroundColor3 = Iris._config.WindowBgColor
456
+ ChildContainer.BackgroundTransparency = Iris._config.WindowBgTransparency
457
+ ChildContainer.BorderSizePixel = 0
458
+
459
+ ChildContainer.AutomaticCanvasSize = Enum.AutomaticSize.Y
460
+ ChildContainer.ScrollBarImageTransparency = Iris._config.ScrollbarGrabTransparency
461
+ ChildContainer.ScrollBarImageColor3 = Iris._config.ScrollbarGrabColor
462
+ ChildContainer.CanvasSize = UDim2.fromScale(0, 0)
463
+ ChildContainer.VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
464
+ ChildContainer.TopImage = widgets.ICONS.BLANK_SQUARE
465
+ ChildContainer.MidImage = widgets.ICONS.BLANK_SQUARE
466
+ ChildContainer.BottomImage = widgets.ICONS.BLANK_SQUARE
467
+
468
+ ChildContainer.LayoutOrder = thisWidget.ZIndex + 0xFFFF
469
+ ChildContainer.ClipsDescendants = true
470
+
471
+ widgets.UIPadding(ChildContainer, Iris._config.WindowPadding)
472
+
473
+ ChildContainer.Parent = Content
474
+
475
+ local UIFlexItem = Instance.new("UIFlexItem")
476
+ UIFlexItem.FlexMode = Enum.UIFlexMode.Fill
477
+ UIFlexItem.ItemLineAlignment = Enum.ItemLineAlignment.End
478
+ UIFlexItem.Parent = ChildContainer
479
+
480
+ ChildContainer:GetPropertyChangedSignal("CanvasPosition"):Connect(function()
481
+ -- "wrong" use of state here, for optimization
482
+ thisWidget.state.scrollDistance.value = ChildContainer.CanvasPosition.Y
483
+ end)
484
+
485
+ widgets.applyInputBegan(ChildContainer, function(input)
486
+ if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Keyboard then
487
+ return
488
+ end
489
+ if thisWidget.state.isUncollapsed.value then
490
+ Iris.SetFocusedWindow(thisWidget)
491
+ end
492
+ end)
493
+
494
+ local TerminatingFrame = Instance.new("Frame")
495
+ TerminatingFrame.Name = "TerminatingFrame"
496
+ TerminatingFrame.Size = UDim2.fromOffset(0, Iris._config.WindowPadding.Y + Iris._config.FramePadding.Y)
497
+ TerminatingFrame.BackgroundTransparency = 1
498
+ TerminatingFrame.BorderSizePixel = 0
499
+ TerminatingFrame.LayoutOrder = 0x7FFFFFF0
500
+
501
+ widgets.UIListLayout(ChildContainer, Enum.FillDirection.Vertical, UDim.new(0, Iris._config.ItemSpacing.Y)).VerticalAlignment = Enum.VerticalAlignment.Top
502
+
503
+ TerminatingFrame.Parent = ChildContainer
504
+
505
+ local TitleBar = Instance.new("Frame")
506
+ TitleBar.Name = "TitleBar"
507
+ TitleBar.AutomaticSize = Enum.AutomaticSize.Y
508
+ TitleBar.Size = UDim2.fromScale(1, 0)
509
+ TitleBar.BorderSizePixel = 0
510
+ TitleBar.ClipsDescendants = true
511
+
512
+ TitleBar.Parent = Content
513
+
514
+ widgets.UIPadding(TitleBar, Vector2.new(Iris._config.FramePadding.X))
515
+ widgets.UIListLayout(TitleBar, Enum.FillDirection.Horizontal, UDim.new(0, Iris._config.ItemInnerSpacing.X)).VerticalAlignment = Enum.VerticalAlignment.Center
516
+ widgets.applyInputBegan(TitleBar, function(input)
517
+ if input.UserInputType == Enum.UserInputType.Touch then
518
+ if not thisWidget.arguments.NoMove then
519
+ dragWindow = thisWidget
520
+ isDragging = true
521
+ local location = input.Position
522
+ moveDeltaCursorPosition = Vector2.new(location.X, location.Y) - thisWidget.state.position.value
523
+ end
524
+ end
525
+ end)
526
+
527
+ local TitleButtonSize = Iris._config.TextSize + ((Iris._config.FramePadding.Y - 1) * 2)
528
+
529
+ local CollapseButton = Instance.new("TextButton")
530
+ CollapseButton.Name = "CollapseButton"
531
+ CollapseButton.AutomaticSize = Enum.AutomaticSize.None
532
+ CollapseButton.AnchorPoint = Vector2.new(0, 0.5)
533
+ CollapseButton.Size = UDim2.fromOffset(TitleButtonSize, TitleButtonSize)
534
+ CollapseButton.Position = UDim2.fromScale(0, 0.5)
535
+ CollapseButton.BackgroundTransparency = 1
536
+ CollapseButton.BorderSizePixel = 0
537
+ CollapseButton.AutoButtonColor = false
538
+ CollapseButton.Text = ""
539
+
540
+ widgets.UICorner(CollapseButton)
541
+
542
+ CollapseButton.Parent = TitleBar
543
+
544
+ widgets.applyButtonClick(CollapseButton, function()
545
+ thisWidget.state.isUncollapsed:set(not thisWidget.state.isUncollapsed.value)
546
+ end)
547
+
548
+ widgets.applyInteractionHighlights("Background", CollapseButton, CollapseButton, {
549
+ Color = Iris._config.ButtonColor,
550
+ Transparency = 1,
551
+ HoveredColor = Iris._config.ButtonHoveredColor,
552
+ HoveredTransparency = Iris._config.ButtonHoveredTransparency,
553
+ ActiveColor = Iris._config.ButtonActiveColor,
554
+ ActiveTransparency = Iris._config.ButtonActiveTransparency,
555
+ })
556
+
557
+ local CollapseArrow = Instance.new("ImageLabel")
558
+ CollapseArrow.Name = "Arrow"
559
+ CollapseArrow.AnchorPoint = Vector2.new(0.5, 0.5)
560
+ CollapseArrow.Size = UDim2.fromOffset(math.floor(0.7 * TitleButtonSize), math.floor(0.7 * TitleButtonSize))
561
+ CollapseArrow.Position = UDim2.fromScale(0.5, 0.5)
562
+ CollapseArrow.BackgroundTransparency = 1
563
+ CollapseArrow.BorderSizePixel = 0
564
+ CollapseArrow.Image = widgets.ICONS.MULTIPLICATION_SIGN
565
+ CollapseArrow.ImageColor3 = Iris._config.TextColor
566
+ CollapseArrow.ImageTransparency = Iris._config.TextTransparency
567
+ CollapseArrow.Parent = CollapseButton
568
+
569
+ local CloseButton = Instance.new("TextButton")
570
+ CloseButton.Name = "CloseButton"
571
+ CloseButton.AutomaticSize = Enum.AutomaticSize.None
572
+ CloseButton.AnchorPoint = Vector2.new(1, 0.5)
573
+ CloseButton.Size = UDim2.fromOffset(TitleButtonSize, TitleButtonSize)
574
+ CloseButton.Position = UDim2.fromScale(1, 0.5)
575
+ CloseButton.BackgroundTransparency = 1
576
+ CloseButton.BorderSizePixel = 0
577
+ CloseButton.Text = ""
578
+ CloseButton.AutoButtonColor = false
579
+ CloseButton.LayoutOrder = 2
580
+
581
+ widgets.UICorner(CloseButton)
582
+
583
+ widgets.applyButtonClick(CloseButton, function()
584
+ thisWidget.state.isOpened:set(false)
585
+ end)
586
+
587
+ widgets.applyInteractionHighlights("Background", CloseButton, CloseButton, {
588
+ Color = Iris._config.ButtonColor,
589
+ Transparency = 1,
590
+ HoveredColor = Iris._config.ButtonHoveredColor,
591
+ HoveredTransparency = Iris._config.ButtonHoveredTransparency,
592
+ ActiveColor = Iris._config.ButtonActiveColor,
593
+ ActiveTransparency = Iris._config.ButtonActiveTransparency,
594
+ })
595
+
596
+ CloseButton.Parent = TitleBar
597
+
598
+ local CloseIcon = Instance.new("ImageLabel")
599
+ CloseIcon.Name = "Icon"
600
+ CloseIcon.AnchorPoint = Vector2.new(0.5, 0.5)
601
+ CloseIcon.Size = UDim2.fromOffset(math.floor(0.7 * TitleButtonSize), math.floor(0.7 * TitleButtonSize))
602
+ CloseIcon.Position = UDim2.fromScale(0.5, 0.5)
603
+ CloseIcon.BackgroundTransparency = 1
604
+ CloseIcon.BorderSizePixel = 0
605
+ CloseIcon.Image = widgets.ICONS.MULTIPLICATION_SIGN
606
+ CloseIcon.ImageColor3 = Iris._config.TextColor
607
+ CloseIcon.ImageTransparency = Iris._config.TextTransparency
608
+ CloseIcon.Parent = CloseButton
609
+
610
+ -- allowing fractional titlebar title location dosent seem useful, as opposed to Enum.LeftRight.
611
+
612
+ local Title = Instance.new("TextLabel")
613
+ Title.Name = "Title"
614
+ Title.AutomaticSize = Enum.AutomaticSize.XY
615
+ Title.BorderSizePixel = 0
616
+ Title.BackgroundTransparency = 1
617
+ Title.LayoutOrder = 1
618
+ Title.ClipsDescendants = true
619
+
620
+ widgets.UIPadding(Title, Vector2.new(0, Iris._config.FramePadding.Y))
621
+ widgets.applyTextStyle(Title)
622
+ Title.TextXAlignment = Enum.TextXAlignment[Iris._config.WindowTitleAlign.Name] :: Enum.TextXAlignment
623
+
624
+ local TitleFlexItem = Instance.new("UIFlexItem")
625
+ TitleFlexItem.FlexMode = Enum.UIFlexMode.Fill
626
+ TitleFlexItem.ItemLineAlignment = Enum.ItemLineAlignment.Center
627
+
628
+ TitleFlexItem.Parent = Title
629
+
630
+ Title.Parent = TitleBar
631
+
632
+ local ResizeButtonSize = Iris._config.TextSize + Iris._config.FramePadding.X
633
+
634
+ local LeftResizeGrip = Instance.new("ImageButton")
635
+ LeftResizeGrip.Name = "LeftResizeGrip"
636
+ LeftResizeGrip.AnchorPoint = Vector2.yAxis
637
+ LeftResizeGrip.Rotation = 180
638
+ LeftResizeGrip.Position = UDim2.fromScale(0, 1)
639
+ LeftResizeGrip.Size = UDim2.fromOffset(ResizeButtonSize, ResizeButtonSize)
640
+ LeftResizeGrip.BackgroundTransparency = 1
641
+ LeftResizeGrip.BorderSizePixel = 0
642
+ LeftResizeGrip.Image = widgets.ICONS.BOTTOM_RIGHT_CORNER
643
+ LeftResizeGrip.ImageColor3 = Iris._config.ResizeGripColor
644
+ LeftResizeGrip.ImageTransparency = 1
645
+ LeftResizeGrip.AutoButtonColor = false
646
+ LeftResizeGrip.ZIndex = 3
647
+ LeftResizeGrip.Parent = WindowButton
648
+
649
+ widgets.applyInteractionHighlights("Image", LeftResizeGrip, LeftResizeGrip, {
650
+ Color = Iris._config.ResizeGripColor,
651
+ Transparency = 1,
652
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
653
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
654
+ ActiveColor = Iris._config.ResizeGripActiveColor,
655
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
656
+ })
657
+
658
+ widgets.applyButtonDown(LeftResizeGrip, function()
659
+ if not anyFocusedWindow or not (focusedWindow == thisWidget) then
660
+ Iris.SetFocusedWindow(thisWidget)
661
+ -- mitigating wrong focus when clicking on buttons inside of a window without clicking the window itself
662
+ end
663
+ isResizing = true
664
+ resizeFromTopBottom = Enum.TopBottom.Bottom
665
+ resizeFromLeftRight = Enum.LeftRight.Left
666
+ resizeWindow = thisWidget
667
+ end)
668
+
669
+ -- each border uses an image, allowing it to have a visible borde which is larger than the UI
670
+ local RightResizeGrip = Instance.new("ImageButton")
671
+ RightResizeGrip.Name = "RightResizeGrip"
672
+ RightResizeGrip.AnchorPoint = Vector2.one
673
+ RightResizeGrip.Rotation = 90
674
+ RightResizeGrip.Position = UDim2.fromScale(1, 1)
675
+ RightResizeGrip.Size = UDim2.fromOffset(ResizeButtonSize, ResizeButtonSize)
676
+ RightResizeGrip.BackgroundTransparency = 1
677
+ RightResizeGrip.BorderSizePixel = 0
678
+ RightResizeGrip.Image = widgets.ICONS.BOTTOM_RIGHT_CORNER
679
+ RightResizeGrip.ImageColor3 = Iris._config.ResizeGripColor
680
+ RightResizeGrip.ImageTransparency = Iris._config.ResizeGripTransparency
681
+ RightResizeGrip.AutoButtonColor = false
682
+ RightResizeGrip.ZIndex = 3
683
+ RightResizeGrip.Parent = WindowButton
684
+
685
+ widgets.applyInteractionHighlights("Image", RightResizeGrip, RightResizeGrip, {
686
+ Color = Iris._config.ResizeGripColor,
687
+ Transparency = Iris._config.ResizeGripTransparency,
688
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
689
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
690
+ ActiveColor = Iris._config.ResizeGripActiveColor,
691
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
692
+ })
693
+
694
+ widgets.applyButtonDown(RightResizeGrip, function()
695
+ if not anyFocusedWindow or not (focusedWindow == thisWidget) then
696
+ Iris.SetFocusedWindow(thisWidget)
697
+ -- mitigating wrong focus when clicking on buttons inside of a window without clicking the window itself
698
+ end
699
+ isResizing = true
700
+ resizeFromTopBottom = Enum.TopBottom.Bottom
701
+ resizeFromLeftRight = Enum.LeftRight.Right
702
+ resizeWindow = thisWidget
703
+ end)
704
+
705
+ local LeftResizeBorder = Instance.new("ImageButton")
706
+ LeftResizeBorder.Name = "LeftResizeBorder"
707
+ LeftResizeBorder.AnchorPoint = Vector2.new(1, .5)
708
+ LeftResizeBorder.Position = UDim2.fromScale(0, .5)
709
+ LeftResizeBorder.Size = UDim2.new(0, Iris._config.WindowResizePadding.X, 1, 2 * Iris._config.WindowBorderSize)
710
+ LeftResizeBorder.Transparency = 1
711
+ LeftResizeBorder.Image = widgets.ICONS.BORDER
712
+ LeftResizeBorder.ResampleMode = Enum.ResamplerMode.Pixelated
713
+ LeftResizeBorder.ScaleType = Enum.ScaleType.Slice
714
+ LeftResizeBorder.SliceCenter = Rect.new(0, 0, 1, 1)
715
+ LeftResizeBorder.ImageRectOffset = Vector2.new(2, 2)
716
+ LeftResizeBorder.ImageRectSize = Vector2.new(2, 1)
717
+ LeftResizeBorder.ImageTransparency = 1
718
+ LeftResizeBorder.AutoButtonColor = false
719
+ LeftResizeBorder.ZIndex = 4
720
+
721
+ LeftResizeBorder.Parent = WindowButton
722
+
723
+ local RightResizeBorder = Instance.new("ImageButton")
724
+ RightResizeBorder.Name = "RightResizeBorder"
725
+ RightResizeBorder.AnchorPoint = Vector2.new(0, .5)
726
+ RightResizeBorder.Position = UDim2.fromScale(1, .5)
727
+ RightResizeBorder.Size = UDim2.new(0, Iris._config.WindowResizePadding.X, 1, 2 * Iris._config.WindowBorderSize)
728
+ RightResizeBorder.Transparency = 1
729
+ RightResizeBorder.Image = widgets.ICONS.BORDER
730
+ RightResizeBorder.ResampleMode = Enum.ResamplerMode.Pixelated
731
+ RightResizeBorder.ScaleType = Enum.ScaleType.Slice
732
+ RightResizeBorder.SliceCenter = Rect.new(1, 0, 2, 1)
733
+ RightResizeBorder.ImageRectOffset = Vector2.new(1, 2)
734
+ RightResizeBorder.ImageRectSize = Vector2.new(2, 1)
735
+ RightResizeBorder.ImageTransparency = 1
736
+ RightResizeBorder.AutoButtonColor = false
737
+ RightResizeBorder.ZIndex = 4
738
+
739
+ RightResizeBorder.Parent = WindowButton
740
+
741
+ local TopResizeBorder = Instance.new("ImageButton")
742
+ TopResizeBorder.Name = "TopResizeBorder"
743
+ TopResizeBorder.AnchorPoint = Vector2.new(.5, 1)
744
+ TopResizeBorder.Position = UDim2.fromScale(.5, 0)
745
+ TopResizeBorder.Size = UDim2.new(1, 2 * Iris._config.WindowBorderSize, 0, Iris._config.WindowResizePadding.Y)
746
+ TopResizeBorder.Transparency = 1
747
+ TopResizeBorder.Image = widgets.ICONS.BORDER
748
+ TopResizeBorder.ResampleMode = Enum.ResamplerMode.Pixelated
749
+ TopResizeBorder.ScaleType = Enum.ScaleType.Slice
750
+ TopResizeBorder.SliceCenter = Rect.new(0, 0, 1, 1)
751
+ TopResizeBorder.ImageRectOffset = Vector2.new(2, 2)
752
+ TopResizeBorder.ImageRectSize = Vector2.new(1, 2)
753
+ TopResizeBorder.ImageTransparency = 1
754
+ TopResizeBorder.AutoButtonColor = false
755
+ TopResizeBorder.ZIndex = 4
756
+
757
+ TopResizeBorder.Parent = WindowButton
758
+
759
+ local BottomResizeBorder = Instance.new("ImageButton")
760
+ BottomResizeBorder.Name = "BottomResizeBorder"
761
+ BottomResizeBorder.AnchorPoint = Vector2.new(.5, 0)
762
+ BottomResizeBorder.Position = UDim2.fromScale(.5, 1)
763
+ BottomResizeBorder.Size = UDim2.new(1, 2 * Iris._config.WindowBorderSize, 0, Iris._config.WindowResizePadding.Y)
764
+ BottomResizeBorder.Transparency = 1
765
+ BottomResizeBorder.Image = widgets.ICONS.BORDER
766
+ BottomResizeBorder.ResampleMode = Enum.ResamplerMode.Pixelated
767
+ BottomResizeBorder.ScaleType = Enum.ScaleType.Slice
768
+ BottomResizeBorder.SliceCenter = Rect.new(0, 1, 1, 2)
769
+ BottomResizeBorder.ImageRectOffset = Vector2.new(2, 1)
770
+ BottomResizeBorder.ImageRectSize = Vector2.new(1, 2)
771
+ BottomResizeBorder.ImageTransparency = 1
772
+ BottomResizeBorder.AutoButtonColor = false
773
+ BottomResizeBorder.ZIndex = 4
774
+
775
+ BottomResizeBorder.Parent = WindowButton
776
+
777
+ widgets.applyInteractionHighlights("Image", LeftResizeBorder, LeftResizeBorder, {
778
+ Color = Iris._config.ResizeGripColor,
779
+ Transparency = 1,
780
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
781
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
782
+ ActiveColor = Iris._config.ResizeGripActiveColor,
783
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
784
+ })
785
+
786
+ widgets.applyInteractionHighlights("Image", RightResizeBorder, RightResizeBorder, {
787
+ Color = Iris._config.ResizeGripColor,
788
+ Transparency = 1,
789
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
790
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
791
+ ActiveColor = Iris._config.ResizeGripActiveColor,
792
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
793
+ })
794
+
795
+ widgets.applyInteractionHighlights("Image", TopResizeBorder, TopResizeBorder, {
796
+ Color = Iris._config.ResizeGripColor,
797
+ Transparency = 1,
798
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
799
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
800
+ ActiveColor = Iris._config.ResizeGripActiveColor,
801
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
802
+ })
803
+
804
+ widgets.applyInteractionHighlights("Image", BottomResizeBorder, BottomResizeBorder, {
805
+ Color = Iris._config.ResizeGripColor,
806
+ Transparency = 1,
807
+ HoveredColor = Iris._config.ResizeGripHoveredColor,
808
+ HoveredTransparency = Iris._config.ResizeGripHoveredTransparency,
809
+ ActiveColor = Iris._config.ResizeGripActiveColor,
810
+ ActiveTransparency = Iris._config.ResizeGripActiveTransparency,
811
+ })
812
+
813
+ local ResizeBorder = Instance.new("Frame")
814
+ ResizeBorder.Name = "ResizeBorder"
815
+ ResizeBorder.Position = UDim2.fromOffset(-Iris._config.WindowResizePadding.X, -Iris._config.WindowResizePadding.Y)
816
+ ResizeBorder.Size = UDim2.new(1, Iris._config.WindowResizePadding.X * 2, 1, Iris._config.WindowResizePadding.Y * 2)
817
+ ResizeBorder.BackgroundTransparency = 1
818
+ ResizeBorder.BorderSizePixel = 0
819
+ ResizeBorder.Active = false
820
+ ResizeBorder.Selectable = false
821
+ ResizeBorder.ClipsDescendants = false
822
+ ResizeBorder.Parent = WindowButton
823
+
824
+ widgets.applyMouseEnter(ResizeBorder, function()
825
+ if focusedWindow == thisWidget then
826
+ isInsideResize = true
827
+ end
828
+ end)
829
+ widgets.applyMouseLeave(ResizeBorder, function()
830
+ if focusedWindow == thisWidget then
831
+ isInsideResize = false
832
+ end
833
+ end)
834
+ widgets.applyInputBegan(ResizeBorder, function(input)
835
+ if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Keyboard then
836
+ return
837
+ end
838
+ if thisWidget.state.isUncollapsed.value then
839
+ Iris.SetFocusedWindow(thisWidget)
840
+ end
841
+ end)
842
+
843
+ widgets.applyMouseEnter(WindowButton, function()
844
+ if focusedWindow == thisWidget then
845
+ isInsideWindow = true
846
+ end
847
+ end)
848
+ widgets.applyMouseLeave(WindowButton, function()
849
+ if focusedWindow == thisWidget then
850
+ isInsideWindow = false
851
+ end
852
+ end)
853
+
854
+ thisWidget.ChildContainer = ChildContainer
855
+ return Window
856
+ end,
857
+ GenerateState = function(thisWidget: Types.Window)
858
+ if thisWidget.state.size == nil then
859
+ thisWidget.state.size = Iris._widgetState(thisWidget, "size", Vector2.new(400, 300))
860
+ end
861
+ if thisWidget.state.position == nil then
862
+ thisWidget.state.position = Iris._widgetState(thisWidget, "position", if anyFocusedWindow and focusedWindow then focusedWindow.state.position.value + Vector2.new(15, 45) else Vector2.new(150, 250))
863
+ end
864
+ thisWidget.state.position.value = fitPositionToWindowBounds(thisWidget, thisWidget.state.position.value)
865
+ thisWidget.state.size.value = fitSizeToWindowBounds(thisWidget, thisWidget.state.size.value)
866
+
867
+ if thisWidget.state.isUncollapsed == nil then
868
+ thisWidget.state.isUncollapsed = Iris._widgetState(thisWidget, "isUncollapsed", true)
869
+ end
870
+ if thisWidget.state.isOpened == nil then
871
+ thisWidget.state.isOpened = Iris._widgetState(thisWidget, "isOpened", true)
872
+ end
873
+ if thisWidget.state.scrollDistance == nil then
874
+ thisWidget.state.scrollDistance = Iris._widgetState(thisWidget, "scrollDistance", 0)
875
+ end
876
+ end,
877
+ Update = function(thisWidget: Types.Window)
878
+ local Window = thisWidget.Instance :: GuiObject
879
+ local ChildContainer = thisWidget.ChildContainer :: ScrollingFrame
880
+ local WindowButton = Window.WindowButton :: TextButton
881
+ local Content = WindowButton.Content :: Frame
882
+ local TitleBar = Content.TitleBar :: Frame
883
+ local Title: TextLabel = TitleBar.Title
884
+ local MenuBar: Frame? = Content:FindFirstChild("Iris_MenuBar")
885
+ local LeftResizeGrip: TextButton = WindowButton.LeftResizeGrip
886
+ local RightResizeGrip: TextButton = WindowButton.RightResizeGrip
887
+ local LeftResizeBorder: Frame = WindowButton.LeftResizeBorder
888
+ local RightResizeBorder: Frame = WindowButton.RightResizeBorder
889
+ local TopResizeBorder: Frame = WindowButton.TopResizeBorder
890
+ local BottomResizeBorder: Frame = WindowButton.BottomResizeBorder
891
+
892
+ if thisWidget.arguments.NoResize ~= true then
893
+ LeftResizeGrip.Visible = true
894
+ RightResizeGrip.Visible = true
895
+ LeftResizeBorder.Visible = true
896
+ RightResizeBorder.Visible = true
897
+ TopResizeBorder.Visible = true
898
+ BottomResizeBorder.Visible = true
899
+ else
900
+ LeftResizeGrip.Visible = false
901
+ RightResizeGrip.Visible = false
902
+ LeftResizeBorder.Visible = false
903
+ RightResizeBorder.Visible = false
904
+ TopResizeBorder.Visible = false
905
+ BottomResizeBorder.Visible = false
906
+ end
907
+ if thisWidget.arguments.NoScrollbar then
908
+ ChildContainer.ScrollBarThickness = 0
909
+ else
910
+ ChildContainer.ScrollBarThickness = Iris._config.ScrollbarSize
911
+ end
912
+ if thisWidget.arguments.NoTitleBar then
913
+ TitleBar.Visible = false
914
+ else
915
+ TitleBar.Visible = true
916
+ end
917
+ if MenuBar then
918
+ if thisWidget.arguments.NoMenu then
919
+ MenuBar.Visible = false
920
+ else
921
+ MenuBar.Visible = true
922
+ end
923
+ end
924
+ if thisWidget.arguments.NoBackground then
925
+ ChildContainer.BackgroundTransparency = 1
926
+ else
927
+ ChildContainer.BackgroundTransparency = Iris._config.WindowBgTransparency
928
+ end
929
+
930
+ -- TitleBar buttons
931
+ if thisWidget.arguments.NoCollapse then
932
+ TitleBar.CollapseButton.Visible = false
933
+ else
934
+ TitleBar.CollapseButton.Visible = true
935
+ end
936
+ if thisWidget.arguments.NoClose then
937
+ TitleBar.CloseButton.Visible = false
938
+ else
939
+ TitleBar.CloseButton.Visible = true
940
+ end
941
+
942
+ Title.Text = thisWidget.arguments.Title or ""
943
+ end,
944
+ UpdateState = function(thisWidget: Types.Window)
945
+ local stateSize = thisWidget.state.size.value
946
+ local statePosition = thisWidget.state.position.value
947
+ local stateIsUncollapsed = thisWidget.state.isUncollapsed.value
948
+ local stateIsOpened = thisWidget.state.isOpened.value
949
+ local stateScrollDistance = thisWidget.state.scrollDistance.value
950
+
951
+ local Window = thisWidget.Instance :: Frame
952
+ local ChildContainer = thisWidget.ChildContainer :: ScrollingFrame
953
+ local WindowButton = Window.WindowButton :: TextButton
954
+ local Content = WindowButton.Content :: Frame
955
+ local TitleBar = Content.TitleBar :: Frame
956
+ local MenuBar: Frame? = Content:FindFirstChild("Iris_MenuBar")
957
+ local LeftResizeGrip: TextButton = WindowButton.LeftResizeGrip
958
+ local RightResizeGrip: TextButton = WindowButton.RightResizeGrip
959
+ local LeftResizeBorder: Frame = WindowButton.LeftResizeBorder
960
+ local RightResizeBorder: Frame = WindowButton.RightResizeBorder
961
+ local TopResizeBorder: Frame = WindowButton.TopResizeBorder
962
+ local BottomResizeBorder: Frame = WindowButton.BottomResizeBorder
963
+
964
+ WindowButton.Size = UDim2.fromOffset(stateSize.X, stateSize.Y)
965
+ WindowButton.Position = UDim2.fromOffset(statePosition.X, statePosition.Y)
966
+
967
+ if stateIsOpened then
968
+ if thisWidget.usesScreenGuis then
969
+ Window.Enabled = true
970
+ WindowButton.Visible = true
971
+ else
972
+ Window.Visible = true
973
+ WindowButton.Visible = true
974
+ end
975
+ thisWidget.lastOpenedTick = Iris._cycleTick + 1
976
+ else
977
+ if thisWidget.usesScreenGuis then
978
+ Window.Enabled = false
979
+ WindowButton.Visible = false
980
+ else
981
+ Window.Visible = false
982
+ WindowButton.Visible = false
983
+ end
984
+ thisWidget.lastClosedTick = Iris._cycleTick + 1
985
+ end
986
+
987
+ if stateIsUncollapsed then
988
+ TitleBar.CollapseButton.Arrow.Image = widgets.ICONS.DOWN_POINTING_TRIANGLE
989
+ if MenuBar then
990
+ MenuBar.Visible = not thisWidget.arguments.NoMenu
991
+ end
992
+ ChildContainer.Visible = true
993
+ if thisWidget.arguments.NoResize ~= true then
994
+ LeftResizeGrip.Visible = true
995
+ RightResizeGrip.Visible = true
996
+ LeftResizeBorder.Visible = true
997
+ RightResizeBorder.Visible = true
998
+ TopResizeBorder.Visible = true
999
+ BottomResizeBorder.Visible = true
1000
+ end
1001
+ WindowButton.AutomaticSize = Enum.AutomaticSize.None
1002
+ thisWidget.lastUncollapsedTick = Iris._cycleTick + 1
1003
+ else
1004
+ local collapsedHeight: number = TitleBar.AbsoluteSize.Y -- Iris._config.TextSize + Iris._config.FramePadding.Y * 2
1005
+ TitleBar.CollapseButton.Arrow.Image = widgets.ICONS.RIGHT_POINTING_TRIANGLE
1006
+
1007
+ if MenuBar then
1008
+ MenuBar.Visible = false
1009
+ end
1010
+ ChildContainer.Visible = false
1011
+ LeftResizeGrip.Visible = false
1012
+ RightResizeGrip.Visible = false
1013
+ LeftResizeBorder.Visible = false
1014
+ RightResizeBorder.Visible = false
1015
+ TopResizeBorder.Visible = false
1016
+ BottomResizeBorder.Visible = false
1017
+ WindowButton.Size = UDim2.fromOffset(stateSize.X, collapsedHeight)
1018
+ thisWidget.lastCollapsedTick = Iris._cycleTick + 1
1019
+ end
1020
+
1021
+ if stateIsOpened and stateIsUncollapsed then
1022
+ Iris.SetFocusedWindow(thisWidget)
1023
+ else
1024
+ TitleBar.BackgroundColor3 = Iris._config.TitleBgCollapsedColor
1025
+ TitleBar.BackgroundTransparency = Iris._config.TitleBgCollapsedTransparency
1026
+ WindowButton.UIStroke.Color = Iris._config.BorderColor
1027
+
1028
+ Iris.SetFocusedWindow(nil)
1029
+ end
1030
+
1031
+ -- cant update canvasPosition in this cycle because scrollingframe isint ready to be changed
1032
+ if stateScrollDistance and stateScrollDistance ~= 0 then
1033
+ local callbackIndex = #Iris._postCycleCallbacks + 1
1034
+ local desiredCycleTick = Iris._cycleTick + 1
1035
+ Iris._postCycleCallbacks[callbackIndex] = function()
1036
+ if Iris._cycleTick >= desiredCycleTick then
1037
+ if thisWidget.lastCycleTick ~= -1 then
1038
+ ChildContainer.CanvasPosition = Vector2.new(0, stateScrollDistance)
1039
+ end
1040
+ Iris._postCycleCallbacks[callbackIndex] = nil
1041
+ end
1042
+ end
1043
+ end
1044
+ end,
1045
+ ChildAdded = function(thisWidget: Types.Window, thisChid: Types.Widget)
1046
+ local Window = thisWidget.Instance :: Frame
1047
+ local WindowButton = Window.WindowButton :: TextButton
1048
+ local Content = WindowButton.Content :: Frame
1049
+ if thisChid.type == "MenuBar" then
1050
+ local ChildContainer = thisWidget.ChildContainer :: ScrollingFrame
1051
+ thisChid.Instance.ZIndex = ChildContainer.ZIndex + 1
1052
+ thisChid.Instance.LayoutOrder = ChildContainer.LayoutOrder - 1
1053
+ return Content
1054
+ end
1055
+ return thisWidget.ChildContainer
1056
+ end,
1057
+ Discard = function(thisWidget: Types.Window)
1058
+ if focusedWindow == thisWidget then
1059
+ focusedWindow = nil
1060
+ anyFocusedWindow = false
1061
+ end
1062
+ if dragWindow == thisWidget then
1063
+ dragWindow = nil
1064
+ isDragging = false
1065
+ end
1066
+ if resizeWindow == thisWidget then
1067
+ resizeWindow = nil
1068
+ isResizing = false
1069
+ end
1070
+ windowWidgets[thisWidget.ID] = nil
1071
+ thisWidget.Instance:Destroy()
1072
+ widgets.discardState(thisWidget)
1073
+ end,
1074
+ } :: Types.WidgetClass)
1075
+ end