diff --git a/.github/workflows/commit.yml b/.github/workflows/commit.yml new file mode 100644 index 00000000..eedb5046 --- /dev/null +++ b/.github/workflows/commit.yml @@ -0,0 +1,79 @@ +name: Validate Commit + +on: + push: + +jobs: + + validate: + runs-on: windows-latest + + strategy: + matrix: + scene: [main] + include: + - name: main + steps: + # Checkout your Git repo + - uses: actions/checkout@v2 + + # Install foreman and all foreman tools + - uses: Roblox/setup-foreman@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + # Install wally packages + - name: update wally packages + run: wally-update patch + + - name: install wally packages + run: wally install + + - name: generate sourcemap + run: rojo sourcemap dev.project.json --output sourcemap.json + + - name: export wally package types + run: wally-package-types --sourcemap sourcemap.json Packages + + - name: Install testing files + shell: bash + run: | + # type definitions + if [ ! -d "types" ]; then + mkdir "types" + fi + curl -L "https://gist.github.com/nightcycle/50ca8f42147077b8f584b503030c8500/raw" > "types/testEZ.d.lua" + curl -L "https://gist.github.com/nightcycle/ae7ea3376337512772d1d2b314ef467b/raw" > "types/remodel.d.lua" + curl -L "https://raw.githubusercontent.com/JohnnyMorganz/luau-lsp/main/scripts/globalTypes.d.lua" > "types/globalTypes.d.lua" + + # lint definitions + if [ ! -d "lints" ]; then + mkdir "lints" + fi + curl -L "https://gist.github.com/nightcycle/a57e04de443dfa89bd08c8eb001b03c6/raw" > "lints/lua51.yml" + curl -L "https://gist.github.com/nightcycle/93c4b9af5bbf4ed09f39aa908dffccd0/raw" > "lints/luau.yml" + curl -L "https://gist.github.com/nightcycle/e8c4a9a1d71cfd1a1fff59cad84156d1/raw" > "lints/roblox.yml" + + # apply code styling + - name: style src scripts + run: stylua src + + # - name: style built scripts + # shell: bash + # run: | + # if [ ! -d "out" ]; then + # mkdir "out" + # fi + # stylua out + + - name: generate sourcemap + run: rojo sourcemap dev.project.json --output sourcemap.json + + # Test validity + - name: typecheck src files + run: luau-lsp analyze --sourcemap="sourcemap.json" --ignore="Packages/**" --ignore="src/Server/NPC/Animate.server.lua" --ignore="**/Packages/**" --ignore="*.spec.luau" --ignore="out/**" --flag:LuauTypeInferIterationLimit=0 --flag:LuauCheckRecursionLimit=0 --flag:LuauTypeInferRecursionLimit=0 --flag:LuauTarjanChildLimit=0 --flag:LuauTypeInferTypePackLoopLimit=0 --flag:LuauVisitRecursionLimit=0 --definitions=types/globalTypes.d.lua --flag:LuauParseDeclareClassIndexer=true src + + - name: lint src files + run: selene src + + # - name: lint built files + # run: selene out \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 834d0e3e..df0780f7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -84,7 +84,6 @@ jobs: fi curl -L "https://gist.github.com/nightcycle/a57e04de443dfa89bd08c8eb001b03c6/raw" > "lints/lua51.yml" curl -L "https://gist.github.com/nightcycle/93c4b9af5bbf4ed09f39aa908dffccd0/raw" > "lints/luau.yml" - curl -L "https://gist.github.com/nightcycle/e8c4a9a1d71cfd1a1fff59cad84156d1/raw" > "lints/roblox.yml" # apply code styling - name: style src scripts @@ -103,7 +102,7 @@ jobs: # Test validity - name: typecheck src files - run: luau-lsp analyze src --sourcemap=sourcemap.json --ignore="Packages/**" --ignore="**/Packages/**" --ignore="*.spec.luau" --flag:LuauTypeInferIterationLimit=0 --flag:LuauCheckRecursionLimit=0 --flag:LuauTypeInferRecursionLimit=0 --flag:LuauTarjanChildLimit=0 --flag:LuauTypeInferTypePackLoopLimit=0 --flag:LuauVisitRecursionLimit=0 --definitions=types/globalTypes.d.lua --flag:LuauParseDeclareClassIndexer=true + run: luau-lsp analyze --sourcemap="sourcemap.json" --ignore="Packages/**" --ignore="src/Server/NPC/Animate.server.lua" --ignore="**/Packages/**" --ignore="*.spec.luau" --ignore="out/**" --flag:LuauTypeInferIterationLimit=0 --flag:LuauCheckRecursionLimit=0 --flag:LuauTypeInferRecursionLimit=0 --flag:LuauTarjanChildLimit=0 --flag:LuauTypeInferTypePackLoopLimit=0 --flag:LuauVisitRecursionLimit=0 --definitions=types/globalTypes.d.lua --flag:LuauParseDeclareClassIndexer=true src - name: lint src files run: selene src diff --git a/README.md b/README.md index a6a632e5..61de2e0b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -## Synthetic -Material UI inspired elements ported to Fusion! You can read all you need to know about Material UI design [here!](https://material.io/design) +# Synthetic +A UI component framework for Roblox Front-End development with the goal of compiling a robust library of professional grade components UI components with (eventual) support for popular workflows in both its development and application. diff --git a/foreman.toml b/foreman.toml index 5faaba04..56ffe1af 100644 --- a/foreman.toml +++ b/foreman.toml @@ -3,7 +3,8 @@ wally = {source = "UpliftGames/wally", version = "0.3.2" } wally-package-types = {source = "JohnnyMorganz/wally-package-types", version = "1.2.0"} selene = {source = "kampfkarren/selene", version = "0.25.0"} rojo = {source = "rojo-rbx/rojo", version = "7.3.0" } -luau-lsp = {source="JohnnyMorganz/luau-lsp", version="1.22.1"} +luau-lsp = {source="JohnnyMorganz/luau-lsp", version="1.26.0"} run-in-roblox = { source = "rojo-rbx/run-in-roblox", version = "0.3.0" } stylua = {source = "JohnnyMorganz/StyLua", version = "0.18.0"} wally-update = {source = "nightcycle/wally-update", version = "0.1.2"} +pseudo-enum = {source = "nightcycle/pseudo-enum", version = "0.2.2"} diff --git a/logo.png b/logo.png deleted file mode 100644 index 615a8ac8..00000000 Binary files a/logo.png and /dev/null differ diff --git a/pseudo-enum.toml b/pseudo-enum.toml new file mode 100644 index 00000000..a3153f7a --- /dev/null +++ b/pseudo-enum.toml @@ -0,0 +1,151 @@ +build_path = "src/Enums.luau" +use_union_types_for_tree = false +use_union_types_for_export = true + +[enums] + +SoundType = [ + "hero_simple_celebration_02", + "navigation_cancel", + "ui_tap_variant_03", + "alert_error_03", + "notification_ambient", + "state_change_confirm_up", + "ringtone_minimal", + "hero_decorative_celebration_01", + "navigation_transition_right", + "hero_decorative_celebration_02", + "alert_simple", + "ui_loading", + "notification_decorative_01", + "notification_high_intensity", + "navigation_backward_selection_minimal", + "navigation_unavailable_selection", + "ui_unlock", + "notification_decorative_02", + "navigation_hover_tap", + "ui_tap_variant_01", + "ui_tap_variant_04", + "ui_tap_variant_02", + "alert_error_02", + "alarm_gentle", + "ui_refresh_feed", + "hero_simple_celebration_01", + "hero_decorative_celebration_03", + "hero_simple_celebration_03", + "alert_high_intensity", + "state_change_confirm_down", + "navigation_transition_left", + "notification_simple_01", + "navigation_forward_selection", + "navigation_selection_complete_celebration", + "ui_camera_shutter", + "navigation_forward_selection_minimal", + "notification_simple_02", + "navigation_backward_selection", + "ui_lock", + "alert_error_01", +] +FontType = [ + "DisplayLarge", + "DisplayMedium", + "DisplaySmall", + "HeadlineLarge", + "HeadlineMedium", + "HeadlineSmall", + "TitleLarge", + "TitleMedium", + "TitleSmall", + "BodyLarge", + "BodyMedium", + "BodySmall", + "LabelLarge", + "LabelMedium", + "LabelSmall", +] +ButtonStateType = ["Enabled", "Disabled", "Hovered", "Focused", "Pressed"] +SchemeType = ["Light", "Dark"] +CustomColorType = [ + "Custom", + "OnCustom", + "CustomContainer", + "OnCustomContainer" +] +SelectionState = [ + "Selected", + "Unselected" +] +ColorRoleType = [ + "Primary", + "OnPrimary", + "PrimaryContainer", + "OnPrimaryContainer", + "Secondary", + "OnSecondary", + "SecondaryContainer", + "OnSecondaryContainer", + "Tertiary", + "OnTertiary", + "TertiaryContainer", + "OnTertiaryContainer", + "Error", + "OnError", + "ErrorContainer", + "OnErrorContainer", + "Background", + "OnBackground", + "Surface", + "OnSurface", + "SurfaceVariant", + "OnSurfaceVariant", + "Outline", + "OutlineVariant", + "Shadow", + "Scrim", + "InverseSurface", + "InverseOnSurface", + "InversePrimary", + "SurfaceDim", + "SurfaceBright", + "SurfaceContainerLowest", + "SurfaceContainerLow", + "SurfaceContainer", + "SurfaceContainerHigh", + "SurfaceContainerHighest", + "SurfaceTint", +] +PaletteType = [ + "Primary", + "Secondary", + "Tertiary", + "Neutral", + "NeutralVariant", + "Error", +] +TransitionType = [ + "Emphasized", + "EmphasizedDecelerate", + "EmphasizedAccelerate", + "Standard", + "StandardDecelerate", + "StandardAccelerate", +] +TransitionDuration = [ + "Short1", + "Short2", + "Short3", + "Short4", + "Medium1", + "Medium2", + "Medium3", + "Medium4", + "Long1", + "Long2", + "Long3", + "Long4", + "ExtraLong1", + "ExtraLong2", + "ExtraLong3", + "ExtraLong4", + +] \ No newline at end of file diff --git a/scripts/js-to-luau/convert.sh b/scripts/js-to-luau/convert.sh new file mode 100644 index 00000000..32e2138d --- /dev/null +++ b/scripts/js-to-luau/convert.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +js_to_lua="C:/Users/coyer/js-to-lua" +target_dir="C:/Users/coyer/material-ui/packages/mui-material" +synthetic="C:/Users/coyer/Documents/GitHub/synthetic" +out="${synthetic}/src/mui-test" + +"${js_to_lua}/dist/apps/convert-js-to-lua/index.js" --input "${target_dir}/src/Badge/index.js" --output $out diff --git a/scripts/pseudo-enum.sh b/scripts/pseudo-enum.sh new file mode 100644 index 00000000..a107d7bf --- /dev/null +++ b/scripts/pseudo-enum.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +pseudo-enum build \ No newline at end of file diff --git a/scripts/test/all.sh b/scripts/test/all.sh index 198afd1d..26b02bf4 100644 --- a/scripts/test/all.sh +++ b/scripts/test/all.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # sh scripts/test/download.sh # sh scripts/test/unit-test.sh -sh scripts/test/lsp.sh src out +luau-lsp analyze --sourcemap="sourcemap.json" --ignore="Packages/**" --ignore="src/Server/NPC/Animate.server.lua" --ignore="**/Packages/**" --ignore="*.spec.luau" --ignore="out/**" --flag:LuauTypeInferIterationLimit=0 --flag:LuauCheckRecursionLimit=0 --flag:LuauTypeInferRecursionLimit=0 --flag:LuauTarjanChildLimit=0 --flag:LuauTypeInferTypePackLoopLimit=0 --flag:LuauVisitRecursionLimit=0 --definitions=types/globalTypes.d.lua src # sh scripts/test/lsp.sh out src -sh scripts/test/selene.sh src -# sh scripts/test/selene.sh out +selene src +# selene out diff --git a/scripts/test/download.sh b/scripts/test/download.sh index 0fb3935d..3d6c521d 100644 --- a/scripts/test/download.sh +++ b/scripts/test/download.sh @@ -14,4 +14,3 @@ if [ ! -d "lints" ]; then fi curl -L "https://gist.github.com/nightcycle/a57e04de443dfa89bd08c8eb001b03c6/raw" > "lints/lua51.yml" curl -L "https://gist.github.com/nightcycle/93c4b9af5bbf4ed09f39aa908dffccd0/raw" > "lints/luau.yml" -curl -L "https://gist.github.com/nightcycle/e8c4a9a1d71cfd1a1fff59cad84156d1/raw" > "lints/roblox.yml" \ No newline at end of file diff --git a/scripts/test/lsp.sh b/scripts/test/lsp.sh deleted file mode 100644 index 2e3d391c..00000000 --- a/scripts/test/lsp.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -content_dir_path=$1 -ignore_dir=$2 - -luau-lsp analyze $content_dir_path \ ---sourcemap=sourcemap.json \ ---ignore="Packages/**" \ ---ignore="**/Packages/**" \ ---ignore="*.spec.luau" \ ---ignore="${ignore_dir}/**" \ ---flag:LuauTypeInferIterationLimit=0 \ ---flag:LuauCheckRecursionLimit=0 \ ---flag:LuauTypeInferRecursionLimit=0 \ ---flag:LuauTarjanChildLimit=0 \ ---flag:LuauTypeInferTypePackLoopLimit=0 \ ---flag:LuauVisitRecursionLimit=0 \ ---flag:LuauParseDeclareClassIndexer=true \ ---definitions=types/globalTypes.d.lua \ - > tests/lsp/$content_dir_path.txt 2>&1 -echo "${content_dir_path} lsp errors: $(wc -l < tests/lsp/${content_dir_path}.txt)" diff --git a/scripts/test/selene.sh b/scripts/test/selene.sh index fad09252..dd938b43 100644 --- a/scripts/test/selene.sh +++ b/scripts/test/selene.sh @@ -1,6 +1,2 @@ #!/usr/bin/env bash -content_dir_path=$1 -selene $content_dir_path > tests/selene/$content_dir_path.txt -error_count=$(grep -o -w "error" "tests/selene/${content_dir_path}.txt" | wc -l) -warn_count=$(grep -o -w "warning" "tests/selene/${content_dir_path}.txt" | wc -l) -echo "${content_dir_path} selene errors: ${error_count}, warnings: ${warn_count}" \ No newline at end of file +selene $1 \ No newline at end of file diff --git a/scripts/workspace/build-project.sh b/scripts/workspace/build-project.sh new file mode 100644 index 00000000..4d406d5b --- /dev/null +++ b/scripts/workspace/build-project.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +rojo build --output synthetic.rbxl dev.project.json \ No newline at end of file diff --git a/scripts/workspace/install-packages.sh b/scripts/workspace/install-packages.sh new file mode 100644 index 00000000..d230493c --- /dev/null +++ b/scripts/workspace/install-packages.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +wally install +rojo sourcemap dev.project.json --output sourcemap.json +wally-package-types --sourcemap sourcemap.json Packages \ No newline at end of file diff --git a/scripts/serve.sh b/scripts/workspace/serve.sh similarity index 100% rename from scripts/serve.sh rename to scripts/workspace/serve.sh diff --git a/scripts/sourcemap.sh b/scripts/workspace/sourcemap.sh similarity index 100% rename from scripts/sourcemap.sh rename to scripts/workspace/sourcemap.sh diff --git a/scripts/update-packages.sh b/scripts/workspace/update-packages.sh similarity index 88% rename from scripts/update-packages.sh rename to scripts/workspace/update-packages.sh index be539c89..73319311 100644 --- a/scripts/update-packages.sh +++ b/scripts/workspace/update-packages.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -wally-update minor +wally-update major wally install rojo sourcemap dev.project.json --output sourcemap.json wally-package-types --sourcemap sourcemap.json Packages \ No newline at end of file diff --git a/selene.toml b/selene.toml index f1f90a1f..132fad72 100644 --- a/selene.toml +++ b/selene.toml @@ -1,4 +1,4 @@ -std = "lints/roblox" +std = "lints/luau+roblox" exclude = [ "out/*", "*.spec.lua", diff --git a/sourcemap.json b/sourcemap.json index 5c27e7ed..36fc73b8 100644 --- a/sourcemap.json +++ b/sourcemap.json @@ -1 +1 @@ -{"name":"synthetic-test","className":"DataModel","filePaths":["dev.project.json"],"children":[{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Packages","className":"Folder","children":[{"name":"ColdFusion","className":"ModuleScript","filePaths":["Packages\\ColdFusion.lua"]},{"name":"Format","className":"ModuleScript","filePaths":["Packages\\Format.lua"]},{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\Maid.lua"]},{"name":"MeshUtil","className":"ModuleScript","filePaths":["Packages\\MeshUtil.lua"]},{"name":"Signal","className":"ModuleScript","filePaths":["Packages\\Signal.lua"]},{"name":"_Index","className":"Folder","children":[{"name":"nightcycle_cold-fusion@9.0.7","className":"Folder","children":[{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\Maid.lua"]},{"name":"ServiceProxy","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\ServiceProxy.lua"]},{"name":"Signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\Signal.lua"]},{"name":"TableUtil","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\TableUtil.lua"]},{"name":"cold-fusion","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\init.luau","Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\default.project.json"],"children":[{"name":"Fusion","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\init.lua"],"children":[{"name":"Animation","className":"Folder","children":[{"name":"Spring","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\Spring.lua"]},{"name":"SpringScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\SpringScheduler.lua"]},{"name":"Tween","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\Tween.lua"]},{"name":"TweenScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\TweenScheduler.lua"]},{"name":"getTweenRatio","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\getTweenRatio.lua"]},{"name":"lerpType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\lerpType.lua"]},{"name":"packType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\packType.lua"]},{"name":"springCoefficients","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\springCoefficients.lua"]},{"name":"unpackType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\unpackType.lua"]}]},{"name":"Colour","className":"Folder","children":[{"name":"Oklab","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Colour\\Oklab.lua"]}]},{"name":"Instances","className":"Folder","children":[{"name":"Attribute","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Attribute.lua"]},{"name":"AttributeChange","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\AttributeChange.lua"]},{"name":"AttributeOut","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\AttributeOut.lua"]},{"name":"Children","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Children.lua"]},{"name":"Cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Cleanup.lua"]},{"name":"Hydrate","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Hydrate.lua"]},{"name":"New","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\New.lua"]},{"name":"OnChange","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\OnChange.lua"]},{"name":"OnEvent","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\OnEvent.lua"]},{"name":"Out","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Out.lua"]},{"name":"Ref","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Ref.lua"]},{"name":"applyInstanceProps","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\applyInstanceProps.lua"]},{"name":"defaultProps","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\defaultProps.lua"]}]},{"name":"Logging","className":"Folder","children":[{"name":"logError","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logError.lua"]},{"name":"logErrorNonFatal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logErrorNonFatal.lua"]},{"name":"logWarn","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logWarn.lua"]},{"name":"messages","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\messages.lua"]},{"name":"parseError","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\parseError.lua"]}]},{"name":"PubTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\PubTypes.lua"]},{"name":"State","className":"Folder","children":[{"name":"Computed","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Computed.lua"]},{"name":"ForKeys","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForKeys.lua"]},{"name":"ForPairs","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForPairs.lua"]},{"name":"ForValues","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForValues.lua"]},{"name":"Observer","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Observer.lua"]},{"name":"Value","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Value.lua"]},{"name":"isState","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\isState.lua"]},{"name":"makeUseCallback","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\makeUseCallback.lua"]},{"name":"peek","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\peek.lua"]},{"name":"updateAll","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\updateAll.lua"]}]},{"name":"Types","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Types.lua"]},{"name":"Utility","className":"Folder","children":[{"name":"None","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\None.lua"]},{"name":"cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\cleanup.lua"]},{"name":"doNothing","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\doNothing.lua"]},{"name":"isSimilar","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\isSimilar.lua"]},{"name":"needsDestruction","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\needsDestruction.lua"]},{"name":"restrictRead","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\restrictRead.lua"]},{"name":"xtypeof","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\xtypeof.lua"]}]}]},{"name":"InstanceTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\InstanceTypes.luau"]},{"name":"Interface","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Interface.luau"]},{"name":"Test.story","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Test.story.luau"]},{"name":"Types","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Types.luau"]},{"name":"Util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Util.luau"]}]}]},{"name":"nightcycle_format@0.1.3","className":"Folder","children":[{"name":"format","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\init.lua","Packages\\_Index\\nightcycle_format@0.1.3\\format\\default.project.json"],"children":[{"name":"Emoji","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\Emoji.lua"]},{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\init.spec.lua"]}]},{"name":"maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\maid.lua"]},{"name":"signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\signal.lua"]},{"name":"string","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\string.lua"]}]},{"name":"nightcycle_geometry-util@1.1.1","className":"Folder","children":[{"name":"geometry-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\init.lua","Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\default.project.json"],"children":[{"name":"Earcut","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\Earcut\\init.lua"],"children":[{"name":"ZeroArray","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\Earcut\\ZeroArray.lua"]}]}]}]},{"name":"nightcycle_maid@1.1.4","className":"Folder","children":[{"name":"maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\init.lua","Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\default.project.json"],"children":[{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\Maid.lua"]},{"name":"MaidTaskUtils","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\MaidTaskUtils.lua"]}]}]},{"name":"nightcycle_mesh-util@1.0.3","className":"Folder","children":[{"name":"GeometryUtil","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\GeometryUtil.lua"]},{"name":"mesh-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\init.lua","Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\default.project.json"],"children":[{"name":"CornerWedgePart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\CornerWedgePart.lua"]},{"name":"Part","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\Part.lua"]},{"name":"TetraPart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\TetraPart.lua"]},{"name":"WedgePart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\WedgePart.lua"]}]}]},{"name":"nightcycle_service-proxy@1.0.0","className":"Folder","children":[{"name":"service-proxy","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_service-proxy@1.0.0\\service-proxy\\src\\init.lua","Packages\\_Index\\nightcycle_service-proxy@1.0.0\\service-proxy\\default.project.json"]}]},{"name":"nightcycle_signal@1.0.2","className":"Folder","children":[{"name":"signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_signal@1.0.2\\signal\\src\\init.lua","Packages\\_Index\\nightcycle_signal@1.0.2\\signal\\default.project.json"]}]},{"name":"nightcycle_string@0.1.0","className":"Folder","children":[{"name":"string","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_string@0.1.0\\string\\src\\init.lua","Packages\\_Index\\nightcycle_string@0.1.0\\string\\default.project.json"],"children":[{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_string@0.1.0\\string\\src\\init.spec.lua"]}]}]},{"name":"nightcycle_table-util@1.1.0","className":"Folder","children":[{"name":"table-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_table-util@1.1.0\\table-util\\src\\init.lua","Packages\\_Index\\nightcycle_table-util@1.1.0\\table-util\\default.project.json"]}]}]},{"name":"synthetic","className":"ModuleScript","filePaths":["src\\init.lua"],"children":[{"name":"BillboardFrame","className":"ModuleScript","filePaths":["src\\BillboardFrame\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\BillboardFrame\\demo.story.lua"]}]},{"name":"BoardFrame","className":"ModuleScript","filePaths":["src\\BoardFrame\\init.lua"]},{"name":"BoundingBoxFrame","className":"ModuleScript","filePaths":["src\\BoundingBoxFrame\\init.lua"]},{"name":"Bubble","className":"ModuleScript","filePaths":["src\\Bubble\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Bubble\\demo.story.lua"]}]},{"name":"Button","className":"ModuleScript","filePaths":["src\\Button\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Button\\demo.story.lua"]}]},{"name":"Checkbox","className":"ModuleScript","filePaths":["src\\Checkbox\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Checkbox\\demo.story.lua"]}]},{"name":"EffectGui","className":"ModuleScript","filePaths":["src\\EffectGui\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\EffectGui\\demo.story.lua"]}]},{"name":"Hint","className":"ModuleScript","filePaths":["src\\Hint\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Hint\\demo.story.lua"]}]},{"name":"IconLabel","className":"ModuleScript","filePaths":["src\\IconLabel\\init.lua"],"children":[{"name":"Spritesheet","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\init.lua"],"children":[{"name":"Sheet1","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet1.lua"]},{"name":"Sheet10","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet10.lua"]},{"name":"Sheet11","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet11.lua"]},{"name":"Sheet12","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet12.lua"]},{"name":"Sheet2","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet2.lua"]},{"name":"Sheet3","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet3.lua"]},{"name":"Sheet4","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet4.lua"]},{"name":"Sheet5","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet5.lua"]},{"name":"Sheet6","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet6.lua"]},{"name":"Sheet7","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet7.lua"]},{"name":"Sheet8","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet8.lua"]},{"name":"Sheet9","className":"ModuleScript","filePaths":["src\\IconLabel\\Spritesheet\\Sheet9.lua"]}]},{"name":"demo.story","className":"ModuleScript","filePaths":["src\\IconLabel\\demo.story.lua"]}]},{"name":"RadioButton","className":"ModuleScript","filePaths":["src\\RadioButton\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\RadioButton\\demo.story.lua"]}]},{"name":"Slider","className":"ModuleScript","filePaths":["src\\Slider\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Slider\\demo.story.lua"]}]},{"name":"SurfaceFrame","className":"ModuleScript","filePaths":["src\\SurfaceFrame\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\SurfaceFrame\\demo.story.lua"]}]},{"name":"Switch","className":"ModuleScript","filePaths":["src\\Switch\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\Switch\\demo.story.lua"]}]},{"name":"TextField","className":"ModuleScript","filePaths":["src\\TextField\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\TextField\\demo.story.lua"]}]},{"name":"TextLabel","className":"ModuleScript","filePaths":["src\\TextLabel\\init.lua"],"children":[{"name":"demo.story","className":"ModuleScript","filePaths":["src\\TextLabel\\demo.story.lua"]}]},{"name":"Types","className":"ModuleScript","filePaths":["src\\Types.lua"]},{"name":"Util","className":"ModuleScript","filePaths":["src\\Util.lua"]},{"name":"ViewportMountFrame","className":"ModuleScript","filePaths":["src\\ViewportMountFrame\\init.lua"]}]}]}]}]} \ No newline at end of file +{"name":"synthetic-test","className":"DataModel","filePaths":["dev.project.json"],"children":[{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Packages","className":"Folder","children":[{"name":"ColdFusion","className":"ModuleScript","filePaths":["Packages\\ColdFusion.lua"]},{"name":"CurveUtil","className":"ModuleScript","filePaths":["Packages\\CurveUtil.lua"]},{"name":"Format","className":"ModuleScript","filePaths":["Packages\\Format.lua"]},{"name":"Fusion","className":"ModuleScript","filePaths":["Packages\\Fusion.lua"]},{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\Maid.lua"]},{"name":"MaterialIcons","className":"ModuleScript","filePaths":["Packages\\MaterialIcons.lua"]},{"name":"MeshUtil","className":"ModuleScript","filePaths":["Packages\\MeshUtil.lua"]},{"name":"React","className":"ModuleScript","filePaths":["Packages\\React.lua"]},{"name":"Ripple","className":"ModuleScript","filePaths":["Packages\\Ripple.lua"]},{"name":"Roact","className":"ModuleScript","filePaths":["Packages\\Roact.lua"]},{"name":"Signal","className":"ModuleScript","filePaths":["Packages\\Signal.lua"]},{"name":"TableUtil","className":"ModuleScript","filePaths":["Packages\\TableUtil.lua"]},{"name":"_Index","className":"Folder","children":[{"name":"core-packages_boolean@0.0.1","className":"Folder","children":[{"name":"Number","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_boolean@0.0.1\\Number.lua"]},{"name":"boolean","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_boolean@0.0.1\\boolean\\src\\init.lua","Packages\\_Index\\core-packages_boolean@0.0.1\\boolean\\default.project.json"],"children":[{"name":"toJSBoolean","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_boolean@0.0.1\\boolean\\src\\toJSBoolean.lua"]}]}]},{"name":"core-packages_collections@0.0.1","className":"Folder","children":[{"name":"ES7Types","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\ES7Types.lua"]},{"name":"InstanceOf","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\InstanceOf.lua"]},{"name":"collections","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\init.lua","Packages\\_Index\\core-packages_collections@0.0.1\\collections\\default.project.json"],"children":[{"name":"Array","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\init.lua"],"children":[{"name":"concat","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\concat.lua"]},{"name":"every","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\every.lua"]},{"name":"filter","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\filter.lua"]},{"name":"find","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\find.lua"]},{"name":"findIndex","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\findIndex.lua"]},{"name":"forEach","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\forEach.lua"]},{"name":"from","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\from\\init.lua"],"children":[{"name":"fromArray","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\from\\fromArray.lua"]},{"name":"fromMap","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\from\\fromMap.lua"]},{"name":"fromSet","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\from\\fromSet.lua"]},{"name":"fromString","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\from\\fromString.lua"]}]},{"name":"includes","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\includes.lua"]},{"name":"indexOf","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\indexOf.lua"]},{"name":"isArray","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\isArray.lua"]},{"name":"join","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\join.lua"]},{"name":"map","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\map.lua"]},{"name":"reduce","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\reduce.lua"]},{"name":"reverse","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\reverse.lua"]},{"name":"shift","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\shift.lua"]},{"name":"slice","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\slice.lua"]},{"name":"some","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\some.lua"]},{"name":"sort","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\sort.lua"]},{"name":"splice","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\splice.lua"]},{"name":"unshift","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Array\\unshift.lua"]}]},{"name":"Map","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Map\\init.lua"],"children":[{"name":"Map","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Map\\Map.lua"]},{"name":"coerceToMap","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Map\\coerceToMap.lua"]},{"name":"coerceToTable","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Map\\coerceToTable.lua"]}]},{"name":"Object","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\init.lua"],"children":[{"name":"None","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\None.lua"]},{"name":"assign","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\assign.lua"]},{"name":"entries","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\entries.lua"]},{"name":"freeze","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\freeze.lua"]},{"name":"is","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\is.lua"]},{"name":"isFrozen","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\isFrozen.lua"]},{"name":"keys","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\keys.lua"]},{"name":"preventExtensions","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\preventExtensions.lua"]},{"name":"seal","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\seal.lua"]},{"name":"values","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Object\\values.lua"]}]},{"name":"Set","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\Set.lua"]},{"name":"WeakMap","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\WeakMap.lua"]},{"name":"inspect","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_collections@0.0.1\\collections\\src\\inspect.lua"]}]}]},{"name":"core-packages_console@0.0.1","className":"Folder","children":[{"name":"Collections","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_console@0.0.1\\Collections.lua"]},{"name":"console","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_console@0.0.1\\console\\src\\init.lua","Packages\\_Index\\core-packages_console@0.0.1\\console\\default.project.json"],"children":[{"name":"makeConsoleImpl","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_console@0.0.1\\console\\src\\makeConsoleImpl.lua"]}]}]},{"name":"core-packages_es-7-types@0.0.1","className":"Folder","children":[{"name":"es-7-types","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_es-7-types@0.0.1\\es-7-types\\src\\init.lua","Packages\\_Index\\core-packages_es-7-types@0.0.1\\es-7-types\\default.project.json"]}]},{"name":"core-packages_instance-of@0.0.1","className":"Folder","children":[{"name":"instance-of","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_instance-of@0.0.1\\instance-of\\src\\init.lua","Packages\\_Index\\core-packages_instance-of@0.0.1\\instance-of\\default.project.json"],"children":[{"name":"instanceof","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_instance-of@0.0.1\\instance-of\\src\\instanceof.lua"]}]}]},{"name":"core-packages_luau-polyfill@0.0.1","className":"Folder","children":[{"name":"Boolean","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Boolean.lua"]},{"name":"Collections","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Collections.lua"]},{"name":"Console","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Console.lua"]},{"name":"ES7Types","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\ES7Types.lua"]},{"name":"InstanceOf","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\InstanceOf.lua"]},{"name":"Math","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Math.lua"]},{"name":"Number","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Number.lua"]},{"name":"String","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\String.lua"]},{"name":"Symbol","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Symbol.lua"]},{"name":"Timers","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\Timers.lua"]},{"name":"luau-polyfill","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\init.lua","Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\default.project.json"],"children":[{"name":"AssertionError","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\AssertionError\\init.lua"],"children":[{"name":"AssertionError","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\AssertionError\\AssertionError.lua"]}]},{"name":"Error","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\Error.lua"]},{"name":"Promise","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\Promise.lua"]},{"name":"encodeURIComponent","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\encodeURIComponent.lua"]},{"name":"extends","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_luau-polyfill@0.0.1\\luau-polyfill\\src\\extends.lua"]}]}]},{"name":"core-packages_math@0.0.1","className":"Folder","children":[{"name":"math","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_math@0.0.1\\math\\src\\init.lua","Packages\\_Index\\core-packages_math@0.0.1\\math\\default.project.json"],"children":[{"name":"clz32","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_math@0.0.1\\math\\src\\clz32.lua"]}]}]},{"name":"core-packages_number@0.0.1","className":"Folder","children":[{"name":"number","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\init.lua","Packages\\_Index\\core-packages_number@0.0.1\\number\\default.project.json"],"children":[{"name":"MAX_SAFE_INTEGER","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\MAX_SAFE_INTEGER.lua"]},{"name":"MIN_SAFE_INTEGER","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\MIN_SAFE_INTEGER.lua"]},{"name":"isFinite","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\isFinite.lua"]},{"name":"isInteger","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\isInteger.lua"]},{"name":"isNaN","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\isNaN.lua"]},{"name":"isSafeInteger","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\isSafeInteger.lua"]},{"name":"toExponential","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_number@0.0.1\\number\\src\\toExponential.lua"]}]}]},{"name":"core-packages_react@0.0.1","className":"Folder","children":[{"name":"LuauPolyfill","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\LuauPolyfill.lua"]},{"name":"Shared","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\Shared.lua"]},{"name":"react","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\init.lua","Packages\\_Index\\core-packages_react@0.0.1\\react\\default.project.json"],"children":[{"name":"None.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\None.roblox.lua"]},{"name":"React","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\React.lua"]},{"name":"ReactBaseClasses","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactBaseClasses.lua"]},{"name":"ReactBinding.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactBinding.roblox.lua"]},{"name":"ReactChildren","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactChildren.lua"]},{"name":"ReactContext","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactContext.lua"]},{"name":"ReactCreateRef","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactCreateRef.lua"]},{"name":"ReactElement","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactElement.lua"]},{"name":"ReactElementValidator","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactElementValidator.lua"]},{"name":"ReactForwardRef","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactForwardRef.lua"]},{"name":"ReactHooks","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactHooks.lua"]},{"name":"ReactLazy","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactLazy.lua"]},{"name":"ReactMemo","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactMemo.lua"]},{"name":"ReactMutableSource","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactMutableSource.lua"]},{"name":"ReactNoopUpdateQueue","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\ReactNoopUpdateQueue.lua"]},{"name":"createSignal.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_react@0.0.1\\react\\src\\createSignal.roblox.lua"]}]}]},{"name":"core-packages_shared@0.0.1","className":"Folder","children":[{"name":"LuauPolyfill","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\LuauPolyfill.lua"]},{"name":"shared","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\init.lua","Packages\\_Index\\core-packages_shared@0.0.1\\shared\\default.project.json"],"children":[{"name":"ConsolePatchingDev.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ConsolePatchingDev.roblox.lua"]},{"name":"ErrorHandling.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ErrorHandling.roblox.lua"]},{"name":"ExecutionEnvironment","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ExecutionEnvironment.lua"]},{"name":"PropMarkers","className":"Folder","children":[{"name":"Change","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\PropMarkers\\Change.lua"]},{"name":"Event","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\PropMarkers\\Event.lua"]},{"name":"Tag","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\PropMarkers\\Tag.lua"]}]},{"name":"ReactComponentStackFrame","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactComponentStackFrame.lua"]},{"name":"ReactElementType","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactElementType.lua"]},{"name":"ReactErrorUtils","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactErrorUtils.lua"]},{"name":"ReactFeatureFlags","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactFeatureFlags.lua"]},{"name":"ReactFiberHostConfig","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactFiberHostConfig\\init.lua"],"children":[{"name":"WithNoHydration","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactFiberHostConfig\\WithNoHydration.lua"]},{"name":"WithNoPersistence","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactFiberHostConfig\\WithNoPersistence.lua"]},{"name":"WithNoTestSelectors","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactFiberHostConfig\\WithNoTestSelectors.lua"]}]},{"name":"ReactInstanceMap","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactInstanceMap.lua"]},{"name":"ReactSharedInternals","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\init.lua"],"children":[{"name":"IsSomeRendererActing","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\IsSomeRendererActing.lua"]},{"name":"ReactCurrentBatchConfig","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\ReactCurrentBatchConfig.lua"]},{"name":"ReactCurrentDispatcher","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\ReactCurrentDispatcher.lua"]},{"name":"ReactCurrentOwner","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\ReactCurrentOwner.lua"]},{"name":"ReactDebugCurrentFrame","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSharedInternals\\ReactDebugCurrentFrame.lua"]}]},{"name":"ReactSymbols","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactSymbols.lua"]},{"name":"ReactTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactTypes.lua"]},{"name":"ReactVersion","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\ReactVersion.lua"]},{"name":"Symbol.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\Symbol.roblox.lua"]},{"name":"Type.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\Type.roblox.lua"]},{"name":"UninitializedState.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\UninitializedState.roblox.lua"]},{"name":"checkPropTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\checkPropTypes.lua"]},{"name":"console","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\console.lua"]},{"name":"consoleWithStackDev","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\consoleWithStackDev.lua"]},{"name":"enqueueTask.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\enqueueTask.roblox.lua"]},{"name":"flowtypes.roblox","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\flowtypes.roblox.lua"]},{"name":"formatProdErrorMessage","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\formatProdErrorMessage.lua"]},{"name":"getComponentName","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\getComponentName.lua"]},{"name":"invariant","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\invariant.lua"]},{"name":"invokeGuardedCallbackImpl","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\invokeGuardedCallbackImpl.lua"]},{"name":"isValidElementType","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\isValidElementType.lua"]},{"name":"objectIs","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\objectIs.lua"]},{"name":"shallowEqual","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_shared@0.0.1\\shared\\src\\shallowEqual.lua"]}]}]},{"name":"core-packages_string@0.0.1","className":"Folder","children":[{"name":"ES7Types","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\ES7Types.lua"]},{"name":"Number","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\Number.lua"]},{"name":"string","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\init.lua","Packages\\_Index\\core-packages_string@0.0.1\\string\\default.project.json"],"children":[{"name":"charCodeAt","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\charCodeAt.lua"]},{"name":"endsWith","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\endsWith.lua"]},{"name":"findOr","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\findOr.lua"]},{"name":"includes","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\includes.lua"]},{"name":"indexOf","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\indexOf.lua"]},{"name":"lastIndexOf","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\lastIndexOf.lua"]},{"name":"slice","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\slice.lua"]},{"name":"split","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\split.lua"]},{"name":"startsWith","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\startsWith.lua"]},{"name":"substr","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\substr.lua"]},{"name":"trim","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\trim.lua"]},{"name":"trimEnd","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\trimEnd.lua"]},{"name":"trimStart","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_string@0.0.1\\string\\src\\trimStart.lua"]}]}]},{"name":"core-packages_symbol@0.0.1","className":"Folder","children":[{"name":"symbol","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_symbol@0.0.1\\symbol\\src\\init.lua","Packages\\_Index\\core-packages_symbol@0.0.1\\symbol\\default.project.json"],"children":[{"name":"GlobalRegistry","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_symbol@0.0.1\\symbol\\src\\GlobalRegistry.lua"]},{"name":"Symbol","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_symbol@0.0.1\\symbol\\src\\Symbol.lua"]}]}]},{"name":"core-packages_timers@0.0.1","className":"Folder","children":[{"name":"Collections","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_timers@0.0.1\\Collections.lua"]},{"name":"timers","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_timers@0.0.1\\timers\\src\\init.lua","Packages\\_Index\\core-packages_timers@0.0.1\\timers\\default.project.json"],"children":[{"name":"makeIntervalImpl","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_timers@0.0.1\\timers\\src\\makeIntervalImpl.lua"]},{"name":"makeTimerImpl","className":"ModuleScript","filePaths":["Packages\\_Index\\core-packages_timers@0.0.1\\timers\\src\\makeTimerImpl.lua"]}]}]},{"name":"elttob_fusion@0.2.0","className":"Folder","children":[{"name":"fusion","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\init.lua","Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\default.project.json"],"children":[{"name":"Animation","className":"Folder","children":[{"name":"Spring","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\Spring.lua"]},{"name":"SpringScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\SpringScheduler.lua"]},{"name":"Tween","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\Tween.lua"]},{"name":"TweenScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\TweenScheduler.lua"]},{"name":"getTweenRatio","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\getTweenRatio.lua"]},{"name":"lerpType","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\lerpType.lua"]},{"name":"packType","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\packType.lua"]},{"name":"springCoefficients","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\springCoefficients.lua"]},{"name":"unpackType","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Animation\\unpackType.lua"]}]},{"name":"Colour","className":"Folder","children":[{"name":"Oklab","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Colour\\Oklab.lua"]}]},{"name":"Dependencies","className":"Folder","children":[{"name":"captureDependencies","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Dependencies\\captureDependencies.lua"]},{"name":"initDependency","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Dependencies\\initDependency.lua"]},{"name":"sharedState","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Dependencies\\sharedState.lua"]},{"name":"updateAll","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Dependencies\\updateAll.lua"]},{"name":"useDependency","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Dependencies\\useDependency.lua"]}]},{"name":"Instances","className":"Folder","children":[{"name":"Children","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\Children.lua"]},{"name":"Cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\Cleanup.lua"]},{"name":"Hydrate","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\Hydrate.lua"]},{"name":"New","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\New.lua"]},{"name":"OnChange","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\OnChange.lua"]},{"name":"OnEvent","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\OnEvent.lua"]},{"name":"Out","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\Out.lua"]},{"name":"Ref","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\Ref.lua"]},{"name":"applyInstanceProps","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\applyInstanceProps.lua"]},{"name":"defaultProps","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Instances\\defaultProps.lua"]}]},{"name":"Logging","className":"Folder","children":[{"name":"logError","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Logging\\logError.lua"]},{"name":"logErrorNonFatal","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Logging\\logErrorNonFatal.lua"]},{"name":"logWarn","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Logging\\logWarn.lua"]},{"name":"messages","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Logging\\messages.lua"]},{"name":"parseError","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Logging\\parseError.lua"]}]},{"name":"PubTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\PubTypes.lua"]},{"name":"State","className":"Folder","children":[{"name":"Computed","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\Computed.lua"]},{"name":"ForKeys","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\ForKeys.lua"]},{"name":"ForPairs","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\ForPairs.lua"]},{"name":"ForValues","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\ForValues.lua"]},{"name":"Observer","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\Observer.lua"]},{"name":"Value","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\Value.lua"]},{"name":"unwrap","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\State\\unwrap.lua"]}]},{"name":"Types","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Types.lua"]},{"name":"Utility","className":"Folder","children":[{"name":"None","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\None.lua"]},{"name":"cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\cleanup.lua"]},{"name":"doNothing","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\doNothing.lua"]},{"name":"isSimilar","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\isSimilar.lua"]},{"name":"needsDestruction","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\needsDestruction.lua"]},{"name":"restrictRead","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\restrictRead.lua"]},{"name":"xtypeof","className":"ModuleScript","filePaths":["Packages\\_Index\\elttob_fusion@0.2.0\\fusion\\src\\Utility\\xtypeof.lua"]}]}]}]},{"name":"evaera_promise@4.0.0","className":"Folder","children":[{"name":"promise","className":"ModuleScript","filePaths":["Packages\\_Index\\evaera_promise@4.0.0\\promise\\lib\\init.lua","Packages\\_Index\\evaera_promise@4.0.0\\promise\\default.project.json"],"children":[{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\evaera_promise@4.0.0\\promise\\lib\\init.spec.lua"]}]}]},{"name":"littensy_ripple@0.7.1","className":"Folder","children":[{"name":"Promise","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\Promise.lua"]},{"name":"ripple","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\init.lua","Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\default.project.json"],"children":[{"name":"config","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\config.lua"]},{"name":"createMotion","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\createMotion.lua"]},{"name":"createMotion.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\createMotion.spec.lua"]},{"name":"solvers","className":"Folder","children":[{"name":"immediate","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\immediate.lua"]},{"name":"immediate.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\immediate.spec.lua"]},{"name":"linear","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\linear.lua"]},{"name":"linear.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\linear.spec.lua"]},{"name":"spring","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\spring.lua"]},{"name":"spring.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\spring.spec.lua"]},{"name":"tween","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\tween.lua"]},{"name":"tween.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\solvers\\tween.spec.lua"]}]},{"name":"types","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\types.lua"]},{"name":"utils","className":"Folder","children":[{"name":"assign","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\assign.lua"]},{"name":"graph","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\graph.lua"]},{"name":"intermediate","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\intermediate.lua"]},{"name":"merge","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\merge.lua"]},{"name":"snapshot","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\snapshot.lua"]},{"name":"spy","className":"ModuleScript","filePaths":["Packages\\_Index\\littensy_ripple@0.7.1\\ripple\\src\\utils\\spy.lua"]}]}]}]},{"name":"nightcycle_cold-fusion@9.0.7","className":"Folder","children":[{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\Maid.lua"]},{"name":"ServiceProxy","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\ServiceProxy.lua"]},{"name":"Signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\Signal.lua"]},{"name":"TableUtil","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\TableUtil.lua"]},{"name":"cold-fusion","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\init.luau","Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\default.project.json"],"children":[{"name":"Fusion","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\init.lua"],"children":[{"name":"Animation","className":"Folder","children":[{"name":"Spring","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\Spring.lua"]},{"name":"SpringScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\SpringScheduler.lua"]},{"name":"Tween","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\Tween.lua"]},{"name":"TweenScheduler","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\TweenScheduler.lua"]},{"name":"getTweenRatio","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\getTweenRatio.lua"]},{"name":"lerpType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\lerpType.lua"]},{"name":"packType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\packType.lua"]},{"name":"springCoefficients","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\springCoefficients.lua"]},{"name":"unpackType","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Animation\\unpackType.lua"]}]},{"name":"Colour","className":"Folder","children":[{"name":"Oklab","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Colour\\Oklab.lua"]}]},{"name":"Instances","className":"Folder","children":[{"name":"Attribute","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Attribute.lua"]},{"name":"AttributeChange","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\AttributeChange.lua"]},{"name":"AttributeOut","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\AttributeOut.lua"]},{"name":"Children","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Children.lua"]},{"name":"Cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Cleanup.lua"]},{"name":"Hydrate","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Hydrate.lua"]},{"name":"New","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\New.lua"]},{"name":"OnChange","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\OnChange.lua"]},{"name":"OnEvent","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\OnEvent.lua"]},{"name":"Out","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Out.lua"]},{"name":"Ref","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\Ref.lua"]},{"name":"applyInstanceProps","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\applyInstanceProps.lua"]},{"name":"defaultProps","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Instances\\defaultProps.lua"]}]},{"name":"Logging","className":"Folder","children":[{"name":"logError","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logError.lua"]},{"name":"logErrorNonFatal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logErrorNonFatal.lua"]},{"name":"logWarn","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\logWarn.lua"]},{"name":"messages","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\messages.lua"]},{"name":"parseError","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Logging\\parseError.lua"]}]},{"name":"PubTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\PubTypes.lua"]},{"name":"State","className":"Folder","children":[{"name":"Computed","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Computed.lua"]},{"name":"ForKeys","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForKeys.lua"]},{"name":"ForPairs","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForPairs.lua"]},{"name":"ForValues","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\ForValues.lua"]},{"name":"Observer","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Observer.lua"]},{"name":"Value","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\Value.lua"]},{"name":"isState","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\isState.lua"]},{"name":"makeUseCallback","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\makeUseCallback.lua"]},{"name":"peek","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\peek.lua"]},{"name":"updateAll","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\State\\updateAll.lua"]}]},{"name":"Types","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Types.lua"]},{"name":"Utility","className":"Folder","children":[{"name":"None","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\None.lua"]},{"name":"cleanup","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\cleanup.lua"]},{"name":"doNothing","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\doNothing.lua"]},{"name":"isSimilar","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\isSimilar.lua"]},{"name":"needsDestruction","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\needsDestruction.lua"]},{"name":"restrictRead","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\restrictRead.lua"]},{"name":"xtypeof","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Fusion\\Utility\\xtypeof.lua"]}]}]},{"name":"InstanceTypes","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\InstanceTypes.luau"]},{"name":"Interface","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Interface.luau"]},{"name":"Test.story","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Test.story.luau"]},{"name":"Types","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Types.luau"]},{"name":"Util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_cold-fusion@9.0.7\\cold-fusion\\src\\Util.luau"]}]}]},{"name":"nightcycle_curve-util@1.0.0","className":"Folder","children":[{"name":"Vector","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_curve-util@1.0.0\\Vector.lua"]},{"name":"curve-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_curve-util@1.0.0\\curve-util\\src\\init.lua","Packages\\_Index\\nightcycle_curve-util@1.0.0\\curve-util\\default.project.json"],"children":[{"name":"Ease","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_curve-util@1.0.0\\curve-util\\src\\Ease.lua"]},{"name":"Lerp","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_curve-util@1.0.0\\curve-util\\src\\Lerp.lua"]}]}]},{"name":"nightcycle_format@0.1.3","className":"Folder","children":[{"name":"format","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\init.lua","Packages\\_Index\\nightcycle_format@0.1.3\\format\\default.project.json"],"children":[{"name":"Emoji","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\Emoji.lua"]},{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\format\\src\\init.spec.lua"]}]},{"name":"maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\maid.lua"]},{"name":"signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\signal.lua"]},{"name":"string","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_format@0.1.3\\string.lua"]}]},{"name":"nightcycle_geometry-util@1.1.1","className":"Folder","children":[{"name":"geometry-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\init.lua","Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\default.project.json"],"children":[{"name":"Earcut","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\Earcut\\init.lua"],"children":[{"name":"ZeroArray","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_geometry-util@1.1.1\\geometry-util\\src\\Earcut\\ZeroArray.lua"]}]}]}]},{"name":"nightcycle_maid@1.1.4","className":"Folder","children":[{"name":"maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\init.lua","Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\default.project.json"],"children":[{"name":"Maid","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\Maid.lua"]},{"name":"MaidTaskUtils","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_maid@1.1.4\\maid\\src\\MaidTaskUtils.lua"]}]}]},{"name":"nightcycle_material-icons@1.0.1","className":"Folder","children":[{"name":"material-icons","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\init.luau","Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\default.project.json"],"children":[{"name":"Default_18_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_18_1.luau"]},{"name":"Default_18_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_18_2.luau"]},{"name":"Default_18_3","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_18_3.luau"]},{"name":"Default_18_4","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_18_4.luau"]},{"name":"Default_24_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_24_1.luau"]},{"name":"Default_24_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_24_2.luau"]},{"name":"Default_24_3","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_24_3.luau"]},{"name":"Default_24_4","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_24_4.luau"]},{"name":"Default_36_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_36_1.luau"]},{"name":"Default_36_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_36_2.luau"]},{"name":"Default_36_3","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_36_3.luau"]},{"name":"Default_36_4","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_36_4.luau"]},{"name":"Default_48_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_48_1.luau"]},{"name":"Default_48_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_48_2.luau"]},{"name":"Default_48_3","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_48_3.luau"]},{"name":"Default_48_4","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Default_48_4.luau"]},{"name":"Outlined_18_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_18_1.luau"]},{"name":"Outlined_18_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_18_2.luau"]},{"name":"Outlined_24_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_24_1.luau"]},{"name":"Outlined_24_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_24_2.luau"]},{"name":"Outlined_36_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_36_1.luau"]},{"name":"Outlined_36_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_36_2.luau"]},{"name":"Outlined_48_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_48_1.luau"]},{"name":"Outlined_48_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Outlined_48_2.luau"]},{"name":"Round_18_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_18_1.luau"]},{"name":"Round_18_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_18_2.luau"]},{"name":"Round_24_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_24_1.luau"]},{"name":"Round_24_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_24_2.luau"]},{"name":"Round_36_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_36_1.luau"]},{"name":"Round_36_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_36_2.luau"]},{"name":"Round_48_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_48_1.luau"]},{"name":"Round_48_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Round_48_2.luau"]},{"name":"Sharp_18_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_18_1.luau"]},{"name":"Sharp_18_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_18_2.luau"]},{"name":"Sharp_24_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_24_1.luau"]},{"name":"Sharp_24_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_24_2.luau"]},{"name":"Sharp_36_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_36_1.luau"]},{"name":"Sharp_36_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_36_2.luau"]},{"name":"Sharp_48_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_48_1.luau"]},{"name":"Sharp_48_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\Sharp_48_2.luau"]},{"name":"TwoTone_18_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_18_1.luau"]},{"name":"TwoTone_18_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_18_2.luau"]},{"name":"TwoTone_24_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_24_1.luau"]},{"name":"TwoTone_24_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_24_2.luau"]},{"name":"TwoTone_36_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_36_1.luau"]},{"name":"TwoTone_36_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_36_2.luau"]},{"name":"TwoTone_48_1","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_48_1.luau"]},{"name":"TwoTone_48_2","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_material-icons@1.0.1\\material-icons\\src\\TwoTone_48_2.luau"]}]}]},{"name":"nightcycle_mesh-util@1.0.3","className":"Folder","children":[{"name":"GeometryUtil","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\GeometryUtil.lua"]},{"name":"mesh-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\init.lua","Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\default.project.json"],"children":[{"name":"CornerWedgePart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\CornerWedgePart.lua"]},{"name":"Part","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\Part.lua"]},{"name":"TetraPart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\TetraPart.lua"]},{"name":"WedgePart","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_mesh-util@1.0.3\\mesh-util\\src\\WedgePart.lua"]}]}]},{"name":"nightcycle_service-proxy@1.0.0","className":"Folder","children":[{"name":"service-proxy","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_service-proxy@1.0.0\\service-proxy\\src\\init.lua","Packages\\_Index\\nightcycle_service-proxy@1.0.0\\service-proxy\\default.project.json"]}]},{"name":"nightcycle_signal@1.0.2","className":"Folder","children":[{"name":"signal","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_signal@1.0.2\\signal\\src\\init.lua","Packages\\_Index\\nightcycle_signal@1.0.2\\signal\\default.project.json"]}]},{"name":"nightcycle_string@0.1.0","className":"Folder","children":[{"name":"string","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_string@0.1.0\\string\\src\\init.lua","Packages\\_Index\\nightcycle_string@0.1.0\\string\\default.project.json"],"children":[{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_string@0.1.0\\string\\src\\init.spec.lua"]}]}]},{"name":"nightcycle_table-util@1.1.0","className":"Folder","children":[{"name":"table-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_table-util@1.1.0\\table-util\\src\\init.lua","Packages\\_Index\\nightcycle_table-util@1.1.0\\table-util\\default.project.json"]}]},{"name":"nightcycle_table-util@2.0.0","className":"Folder","children":[{"name":"table-util","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_table-util@2.0.0\\table-util\\src\\init.lua","Packages\\_Index\\nightcycle_table-util@2.0.0\\table-util\\default.project.json"]}]},{"name":"nightcycle_vector@1.0.2","className":"Folder","children":[{"name":"vector","className":"ModuleScript","filePaths":["Packages\\_Index\\nightcycle_vector@1.0.2\\vector\\src\\init.lua","Packages\\_Index\\nightcycle_vector@1.0.2\\vector\\default.project.json"]}]},{"name":"roblox_roact@1.4.4","className":"Folder","children":[{"name":"roact","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\init.lua","Packages\\_Index\\roblox_roact@1.4.4\\roact\\default.project.json"],"children":[{"name":"Binding","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Binding.lua"]},{"name":"Binding.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Binding.spec.lua"]},{"name":"Component","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.lua"]},{"name":"Component.spec","className":"Folder","children":[{"name":"context.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\context.spec.lua"]},{"name":"defaultProps.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\defaultProps.spec.lua"]},{"name":"didMount.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\didMount.spec.lua"]},{"name":"didUpdate.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\didUpdate.spec.lua"]},{"name":"extend.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\extend.spec.lua"]},{"name":"getDerivedStateFromProps.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\getDerivedStateFromProps.spec.lua"]},{"name":"getElementTraceback.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\getElementTraceback.spec.lua"]},{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\init.spec.lua"]},{"name":"legacyContext.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\legacyContext.spec.lua"]},{"name":"render.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\render.spec.lua"]},{"name":"setState.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\setState.spec.lua"]},{"name":"shouldUpdate.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\shouldUpdate.spec.lua"]},{"name":"validateProps.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\validateProps.spec.lua"]},{"name":"willUnmount.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\willUnmount.spec.lua"]},{"name":"willUpdate.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Component.spec\\willUpdate.spec.lua"]}]},{"name":"ComponentLifecyclePhase","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\ComponentLifecyclePhase.lua"]},{"name":"Config","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Config.lua"]},{"name":"Config.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Config.spec.lua"]},{"name":"ElementKind","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\ElementKind.lua"]},{"name":"ElementKind.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\ElementKind.spec.lua"]},{"name":"ElementUtils","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\ElementUtils.lua"]},{"name":"ElementUtils.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\ElementUtils.spec.lua"]},{"name":"GlobalConfig","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\GlobalConfig.lua"]},{"name":"GlobalConfig.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\GlobalConfig.spec.lua"]},{"name":"Logging","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Logging.lua"]},{"name":"None","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\None.lua"]},{"name":"NoopRenderer","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\NoopRenderer.lua"]},{"name":"Portal","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Portal.lua"]},{"name":"PropMarkers","className":"Folder","children":[{"name":"Change","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Change.lua"]},{"name":"Change.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Change.spec.lua"]},{"name":"Children","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Children.lua"]},{"name":"Event","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Event.lua"]},{"name":"Event.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Event.spec.lua"]},{"name":"Ref","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PropMarkers\\Ref.lua"]}]},{"name":"PureComponent","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PureComponent.lua"]},{"name":"PureComponent.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\PureComponent.spec.lua"]},{"name":"RobloxRenderer","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\RobloxRenderer.lua"]},{"name":"RobloxRenderer.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\RobloxRenderer.spec.lua"]},{"name":"SingleEventManager","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\SingleEventManager.lua"]},{"name":"SingleEventManager.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\SingleEventManager.spec.lua"]},{"name":"Symbol","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Symbol.lua"]},{"name":"Symbol.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Symbol.spec.lua"]},{"name":"Type","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Type.lua"]},{"name":"Type.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\Type.spec.lua"]},{"name":"assertDeepEqual","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\assertDeepEqual.lua"]},{"name":"assertDeepEqual.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\assertDeepEqual.spec.lua"]},{"name":"assign","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\assign.lua"]},{"name":"assign.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\assign.spec.lua"]},{"name":"createContext","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createContext.lua"]},{"name":"createContext.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createContext.spec.lua"]},{"name":"createElement","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createElement.lua"]},{"name":"createElement.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createElement.spec.lua"]},{"name":"createFragment","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createFragment.lua"]},{"name":"createFragment.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createFragment.spec.lua"]},{"name":"createReconciler","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createReconciler.lua"]},{"name":"createReconciler.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createReconciler.spec.lua"]},{"name":"createReconcilerCompat","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createReconcilerCompat.lua"]},{"name":"createReconcilerCompat.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createReconcilerCompat.spec.lua"]},{"name":"createRef","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createRef.lua"]},{"name":"createRef.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createRef.spec.lua"]},{"name":"createSignal","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createSignal.lua"]},{"name":"createSignal.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createSignal.spec.lua"]},{"name":"createSpy","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createSpy.lua"]},{"name":"createSpy.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\createSpy.spec.lua"]},{"name":"forwardRef","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\forwardRef.lua"]},{"name":"forwardRef.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\forwardRef.spec.lua"]},{"name":"getDefaultInstanceProperty","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\getDefaultInstanceProperty.lua"]},{"name":"getDefaultInstanceProperty.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\getDefaultInstanceProperty.spec.lua"]},{"name":"init.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\init.spec.lua"]},{"name":"internalAssert","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\internalAssert.lua"]},{"name":"invalidSetStateMessages","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\invalidSetStateMessages.lua"]},{"name":"oneChild","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\oneChild.lua"]},{"name":"oneChild.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\oneChild.spec.lua"]},{"name":"strict","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\strict.lua"]},{"name":"strict.spec","className":"ModuleScript","filePaths":["Packages\\_Index\\roblox_roact@1.4.4\\roact\\src\\strict.spec.lua"]}]}]}]},{"name":"synthetic","className":"ModuleScript","filePaths":["src\\init.luau"],"children":[{"name":"Component","className":"Folder","children":[{"name":"Bar","className":"Folder","children":[{"name":"Bottom","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Bottom\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Bottom\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Bottom\\cfusion.story.luau"]}]},{"name":"Top","className":"Folder","children":[{"name":"Base","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Base.luau"]},{"name":"Center","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Center\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Center\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Center\\cfusion.story.luau"]}]},{"name":"Large","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Large\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Large\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Large\\cfusion.story.luau"]}]},{"name":"Medium","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Medium\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Medium\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Medium\\cfusion.story.luau"]}]},{"name":"Small","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Small\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Small\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Bar\\Top\\Small\\cfusion.story.luau"]}]}]}]},{"name":"Button","className":"Folder","children":[{"name":"Badge","className":"ModuleScript","filePaths":["src\\Component\\Button\\Badge\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Badge\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Badge\\cfusion.story.luau"]}]},{"name":"Base","className":"ModuleScript","filePaths":["src\\Component\\Button\\Base.luau"]},{"name":"Chip","className":"Folder","children":[{"name":"Assist","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Assist\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Assist\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Assist\\cfusion.story.luau"]}]},{"name":"Base","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Base.luau"]},{"name":"Filter","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Filter\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Filter\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Chip\\Filter\\cfusion.story.luau"]}]}]},{"name":"ElevatedButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\ElevatedButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\ElevatedButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\ElevatedButton\\cfusion.story.luau"]}]},{"name":"ExtendedFAB","className":"ModuleScript","filePaths":["src\\Component\\Button\\ExtendedFAB\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\ExtendedFAB\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\ExtendedFAB\\cfusion.story.luau"]}]},{"name":"FAB","className":"ModuleScript","filePaths":["src\\Component\\Button\\FAB\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FAB\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FAB\\cfusion.story.luau"]}]},{"name":"FilledButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledButton\\cfusion.story.luau"]}]},{"name":"FilledIconButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledIconButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledIconButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\FilledIconButton\\cfusion.story.luau"]}]},{"name":"IconButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\IconButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\IconButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\IconButton\\cfusion.story.luau"]}]},{"name":"OutlinedButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedButton\\cfusion.story.luau"]}]},{"name":"OutlinedIconButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedIconButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedIconButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\OutlinedIconButton\\cfusion.story.luau"]}]},{"name":"Segmented","className":"ModuleScript","filePaths":["src\\Component\\Button\\Segmented\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Segmented\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\Segmented\\cfusion.story.luau"]}]},{"name":"TextButton","className":"ModuleScript","filePaths":["src\\Component\\Button\\TextButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\TextButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Button\\TextButton\\cfusion.story.luau"]}]}]},{"name":"Checkbox","className":"ModuleScript","filePaths":["src\\Component\\Checkbox\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Checkbox\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Checkbox\\cfusion.story.luau"]}]},{"name":"Dialog","className":"ModuleScript","filePaths":["src\\Component\\Dialog\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Dialog\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Dialog\\cfusion.story.luau"]}]},{"name":"RadioButton","className":"ModuleScript","filePaths":["src\\Component\\RadioButton\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\RadioButton\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\RadioButton\\cfusion.story.luau"]}]},{"name":"Switch","className":"ModuleScript","filePaths":["src\\Component\\Switch\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\Switch\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\Switch\\cfusion.story.luau"]}]},{"name":"TextFields","className":"Folder","children":[{"name":"Base","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Base.luau"]},{"name":"Filled","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Filled\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Filled\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Filled\\cfusion.story.luau"]}]},{"name":"Outlined","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Outlined\\init.luau"],"children":[{"name":"cfusion-theme.story","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Outlined\\cfusion-theme.story.luau"]},{"name":"cfusion.story","className":"ModuleScript","filePaths":["src\\Component\\TextFields\\Outlined\\cfusion.story.luau"]}]}]}]},{"name":"Enums","className":"ModuleScript","filePaths":["src\\Enums.luau"]},{"name":"Sounds","className":"ModuleScript","filePaths":["src\\Sounds.luau"]},{"name":"Style","className":"ModuleScript","filePaths":["src\\Style\\init.luau"],"children":[{"name":"Theme","className":"ModuleScript","filePaths":["src\\Style\\Theme\\init.luau"],"children":[{"name":"Blend","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Blend.luau"]},{"name":"ColorUtil","className":"ModuleScript","filePaths":["src\\Style\\Theme\\ColorUtil.luau"]},{"name":"HCT","className":"ModuleScript","filePaths":["src\\Style\\Theme\\HCT\\init.luau"],"children":[{"name":"Cam16","className":"ModuleScript","filePaths":["src\\Style\\Theme\\HCT\\Cam16.luau"]},{"name":"Solver","className":"ModuleScript","filePaths":["src\\Style\\Theme\\HCT\\Solver.luau"]}]},{"name":"MathUtil","className":"ModuleScript","filePaths":["src\\Style\\Theme\\MathUtil.luau"]},{"name":"Palette.story","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Palette.story.luau"]},{"name":"Palettes","className":"Folder","children":[{"name":"Core","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Palettes\\Core.luau"]},{"name":"Tonal","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Palettes\\Tonal.luau"]}]},{"name":"Scheme","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Scheme\\init.luau"]},{"name":"Scheme.story","className":"ModuleScript","filePaths":["src\\Style\\Theme\\Scheme.story.luau"]},{"name":"ThemeUtil","className":"ModuleScript","filePaths":["src\\Style\\Theme\\ThemeUtil.luau"]},{"name":"ViewingConditions","className":"ModuleScript","filePaths":["src\\Style\\Theme\\ViewingConditions.luau"]}]},{"name":"Typography","className":"ModuleScript","filePaths":["src\\Style\\Typography.luau"]}]},{"name":"TransitionUtil","className":"ModuleScript","filePaths":["src\\TransitionUtil\\init.luau"],"children":[{"name":"Graph.story","className":"ModuleScript","filePaths":["src\\TransitionUtil\\Graph.story.luau"]}]},{"name":"Transitions","className":"Folder","children":[{"name":"Base","className":"ModuleScript","filePaths":["src\\Transitions\\Base.luau"]}]},{"name":"Types","className":"ModuleScript","filePaths":["src\\Types.luau"]},{"name":"Util","className":"ModuleScript","filePaths":["src\\Util.luau"]}]}]}]}]} \ No newline at end of file diff --git a/src/BillboardFrame/demo.story.lua b/src/BillboardFrame/demo.story.lua deleted file mode 100644 index 35d762f2..00000000 --- a/src/BillboardFrame/demo.story.lua +++ /dev/null @@ -1,27 +0,0 @@ ---!strict -local ComponentModule = script.Parent -assert(ComponentModule) -local Package = ComponentModule.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) -local Maid = require(Packages:WaitForChild("Maid")) - -return function(coreGui) - local Maid = Maid.new() - local module = require(script.Parent) - - local demo: module.BillboardFrameParameters = { - BackgroundColor3 = Color3.fromHSV(0.75, 1, 1), - Position = Vector3.new(0, 10, 0), - AnchorPoint = Vector2.new(0.5, 0.5), - Parent = coreGui, - } :: any - - local frame = module()(demo) - - Maid:GiveTask(frame) - return function() - Maid:Destroy() - end -end diff --git a/src/BillboardFrame/init.lua b/src/BillboardFrame/init.lua deleted file mode 100644 index 5e2b9b6b..00000000 --- a/src/BillboardFrame/init.lua +++ /dev/null @@ -1,117 +0,0 @@ ---!strict -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local Types = require(Package:WaitForChild("Types")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -export type BillboardFrameParameters = Types.FrameParameters & { - Parent: CanBeState?, - Position: CanBeState?, - Size: CanBeState?, - LightInfluence: CanBeState?, - Active: CanBeState?, - AlwaysOnTop: CanBeState?, - MaxDistance: CanBeState?, - AnchorPoint: CanBeState?, -} - -export type BillboardFrame = Frame - -function Constructor(config: BillboardFrameParameters): BillboardFrame - -- init workspace - local maid = Maid.new() - local _fuse = ColdFusion.fuse(maid) - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Parent: State = _import(config.Parent, nil :: Instance?) :: any - local Position = _import(config.Position :: any, Vector3.new(0, 0, 0)) :: State - local Size: State = _import(config.Size :: any, Vector2.new(0, 0)) :: any - local LightInfluence = _import(config.LightInfluence, 0) - local AlwaysOnTop = _import(config.AlwaysOnTop, false) - local MaxDistance = _import(config.MaxDistance, 100) - local Active = _import(config.Active, true) - local AnchorPoint = _import(config.AnchorPoint, Vector2.new(0.5, 0.5)) - - -- constructing instances - - local SurfaceGui: BillboardGui = _new("BillboardGui")({ - Parent = Parent, - Active = Active, - AlwaysOnTop = AlwaysOnTop, - Size = _Computed(function(size: Vector2) - return UDim2.fromScale(size.X, size.Y) - end, Size), - ClipsDescendants = false, - LightInfluence = LightInfluence, - MaxDistance = MaxDistance, - }) :: any - - local Part = _new("Part")({ - -- Properties = { - Parent = workspace, - Position = Position, - Transparency = 1, - Size = Vector3.new(1, 1, 1) * 0.05, - Anchored = true, - CanCollide = false, - CanTouch = false, - CanQuery = false, - -- }, - }) - - SurfaceGui.Adornee = Part - - -- assemble final parameters - local parameters: any = { - Parent = SurfaceGui, - Position = UDim2.fromScale(0.5, 0.5), - Size = UDim2.fromScale(1, 1), - AnchorPoint = AnchorPoint, - } - - config.Size = nil - config.LightInfluence = nil - config.AlwaysOnTop = nil - config.MaxDistance = nil - - for k, v in pairs(config) do - if parameters[k] == nil then - parameters[k] = v - end - end - - -- construct output instance - local Output: Frame = _new("Frame")(parameters) :: any - - maid:GiveTask(Output.Destroying:Connect(function() - maid:Destroy() - end)) - - return Output -end - -return function(maid: Maid?) - return function(params: BillboardFrameParameters): BillboardFrame - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/BoardFrame/init.lua b/src/BoardFrame/init.lua deleted file mode 100644 index e8b7acf2..00000000 --- a/src/BoardFrame/init.lua +++ /dev/null @@ -1,259 +0,0 @@ ---!strict -local RunService = game:GetService("RunService") -local UserInputService = game:GetService("UserInputService") -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local Util = require(Package:WaitForChild("Util")) - -local Types = require(Package:WaitForChild("Types")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -export type BoardFrameParameters = Types.ViewportFrameParameters & { - -- Color: CanBeState?, - PixelsPerStud: CanBeState?, - CanvasPosition: CanBeState?, - CanvasTransparency: CanBeState?, - CanvasColor: CanBeState?, - CanvasMaterial: CanBeState?, - CanvasMaterialVariant: CanBeState?, - LockPosition: CanBeState?, - LockZoom: CanBeState?, - Zoom: CanBeState?, - MinZoom: CanBeState?, - MaxZoom: CanBeState?, - ZoomSpeed: CanBeState?, - CameraHeight: CanBeState?, -} - -export type BoardFrame = ViewportFrame - -function Constructor(config: BoardFrameParameters): BoardFrame - -- init workspace - local maid = Maid.new() - local _fuse = ColdFusion.fuse(maid) - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Size = _import(config.Size, UDim2.fromScale(1, 1)) - local Position = _import(config.Position, UDim2.fromScale(0.5, 0.5)) - local AnchorPoint = _import(config.AnchorPoint, Vector2.new(0.5, 0.5)) - local PixelsPerStud = _import(config.PixelsPerStud, 20) - local CanvasPosition = - _Value(if typeof(config.CanvasPosition) == "Vector2" then config.CanvasPosition elseif typeof(config.CanvasPosition) == "table" then config.CanvasPosition:Get() else Vector2.new(0, 0)) - local CanvasTransparency = _import(config.CanvasTransparency, 0) - local CanvasColor = _import(config.CanvasColor, Color3.new(1, 1, 1)) - local CanvasMaterial = _import(config.CanvasMaterial, "SmoothPlastic") - local CanvasMaterialVariant = _import(config.CanvasMaterialVariant, "") - local LockPosition = _import(config.LockPosition, false) - local LockZoom = _import(config.LockZoom, false) - local MinZoom = _import(config.MinZoom, 1) - local MaxZoom = _import(config.MaxZoom, 10) - local ZoomSpeed = _import(config.ZoomSpeed, 4) - local CameraHeight = _import(config.CameraHeight, 100) - - -- init internal states - local Zoom = _Value(if typeof(config.Zoom) == "number" then config.Zoom elseif typeof(config.Zoom) == "table" then config.Zoom:Get() else 1) - local Delta = _Value(1 / 60) - local AbsoluteSize = _Value(Vector2.new(0, 0)) - local CanvasSize = _Computed(function(absSize: Vector2, pxRatio: number) - return absSize / pxRatio - end, AbsoluteSize, PixelsPerStud) --_import(config.CanvasSize, Vector2.new(60,40)) - local SizeRatio = _Computed(function(absSize: Vector2) - return absSize.X / absSize.Y - end, AbsoluteSize) - local CameraFieldOfView = _Computed(function(zoom: number, canvasSize: Vector2, z: number) - local y = canvasSize.Y - local goalY = y / zoom - local angle = math.atan2(goalY * 0.5, z) * 2 - return math.deg(angle) - end, Zoom, CanvasSize, CameraHeight) - local CameraWindowSize = _Computed(function(height: number, fov: number, ratio: number) - local y = 2 * math.tan(math.rad(fov * 0.5)) * height - local x = y * ratio - return Vector2.new(math.abs(x), math.abs(y)) - end, CameraHeight, CameraFieldOfView, SizeRatio) - local AbsoluteCanvasPosition = _Computed(function(pos: Vector2, winSize: Vector2, canSize: Vector2) - local min = pos - winSize / 2 - local max = pos + winSize / 2 - - local x = pos.X - local y = pos.Y - - local canMin = -canSize / 2 - local canMax = canSize / 2 - - if min.X < canMin.X and max.X > canMax.X then - x = 0 - else - if min.X < canMin.X then - x += canMin.X - min.X - end - if max.X > canMax.X then - x -= max.X - canMax.X - end - end - - if min.Y < canMin.Y and max.Y > canMax.Y then - y = 0 - else - if min.Y < canMin.Y then - y += canMin.Y - min.Y - end - if max.Y > canMax.Y then - y -= max.Y - canMax.Y - end - end - return Vector2.new(x, y) - end, CanvasPosition, CameraWindowSize, CanvasSize) - local CameraCFrame = _Computed(function(canvasPos: Vector2, height: number, fov: number) - local pos = Vector3.new(canvasPos.X, canvasPos.Y, height) - return CFrame.new(pos, Vector3.new(canvasPos.X, canvasPos.Y, 0)) - end, AbsoluteCanvasPosition, CameraHeight, CameraFieldOfView) - - -- constructing instances - local Camera = _fuse.new("Camera")({ - CFrame = CameraCFrame, - FieldOfView = CameraFieldOfView, - }) - local WorldModel: any = _fuse.new("WorldModel")({ - Name = "Canvas", - }) - - -- assemble final parameters - local parameters: any = { - Parent = _import(config.Parent, nil), - Name = _import(config.Name, script.Name), - ClipsDescendants = true, - Size = Size, - Position = Position, - AnchorPoint = AnchorPoint, - Transparency = 1, - CurrentCamera = Camera, - Children = { - WorldModel, - Camera, - }, - } - - config.PixelsPerStud = nil - config.CanvasPosition = nil - config.CanvasTransparency = nil - config.CanvasColor = nil - config.CanvasMaterial = nil - config.CanvasMaterialVariant = nil - config.LockPosition = nil - config.LockZoom = nil - config.Zoom = nil - config.MinZoom = nil - config.MaxZoom = nil - config.ZoomSpeed = nil - config.CameraHeight = nil - - for k, v in pairs(config) do - if parameters[k] == nil then - parameters[k] = v - end - end - - -- construct output instance - local Output: ViewportFrame = _fuse.new("ViewportFrame")(parameters) :: any - Util.cleanUpPrep(maid, Output) - - local _Canvas = _fuse.new("Part")({ - Name = "CanvasPart", - Shape = Enum.PartType.Block, - Parent = WorldModel, - Material = _Computed(function(matName: string): Enum.Material - local enum: any = Enum.Material - return enum[matName] - end, CanvasMaterial), - MaterialVariant = CanvasMaterialVariant, - Transparency = CanvasTransparency, - Color = CanvasColor, - ["CFrame"] = CFrame.new(Vector3.new(0, 0, -1), Vector3.new(0, 0, 1)), - Size = _Computed(function(size: Vector2) - return Vector3.new(size.X, size.Y, 0.01) - end, CanvasSize), - }) - local PreviousMousePosition = _Value(Vector2.new(0, 0)) - local MousePosition = _Value(Vector2.new(0, 0)) - local MouseDelta = _Computed(function(mPos: Vector2, pMPos: Vector2) - return pMPos - mPos - end, MousePosition, PreviousMousePosition) - - local IsHovering = _Computed(function(mPos: Vector2) - local sGui = Output:FindFirstAncestorWhichIsA("BasePlayerGui") - if not sGui then - return false - end - assert(sGui ~= nil) - local guis = sGui:GetGuiObjectsAtPosition(mPos.X, mPos.Y) - for i, gui in ipairs(guis) do - if gui == Output then - return true - end - end - return false - end, MousePosition) - - maid:GiveTask(UserInputService.PointerAction:Connect(function(wheel: number, pan: Vector2, pinch: number) - if not LockZoom:Get() and IsHovering:Get() then - local currentZoom = Zoom:Get() - local zoomSpeed = ZoomSpeed:Get() - local delta = Delta:Get() - local alpha = (wheel + pinch) - - zoomSpeed *= alpha - - local goal = currentZoom * (1 + zoomSpeed) - -- print("Goal", goal, "Alpha", alpha, "Speed", zoomSpeed) - local newZoom = currentZoom + delta * (goal - currentZoom) - Zoom:Set(math.clamp(newZoom, MinZoom:Get(), MaxZoom:Get())) - end - end)) - - maid:GiveTask(RunService.RenderStepped:Connect(function(delta) - Delta:Set(delta) - AbsoluteSize:Set(Output.AbsoluteSize) - PreviousMousePosition:Set(MousePosition:Get()) - MousePosition:Set(UserInputService:GetMouseLocation()) - if IsHovering:Get() and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) and not LockPosition:Get() then - local mouseDelta = MouseDelta:Get() --UserInputService:GetMouseDelta() - -- print("Dragging", mouseDelta) - local cameraWindowSize = CameraWindowSize:Get() - local vportSize = AbsoluteSize:Get() - local mouseOffset = mouseDelta * Vector2.new(1, -1) - local worldOffset = cameraWindowSize * mouseOffset / vportSize - -- local delta = Delta:Get() - -- print("World", worldOffset, "Mouse", mouseScaleOffset, "Pos", mousePos) - CanvasPosition:Set(AbsoluteCanvasPosition:Get() + worldOffset) - end - end)) - - return Output -end - -return function(maid: Maid?) - return function(params: BoardFrameParameters): BoardFrame - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/BoundingBoxFrame/init.lua b/src/BoundingBoxFrame/init.lua deleted file mode 100644 index 84c5fdf0..00000000 --- a/src/BoundingBoxFrame/init.lua +++ /dev/null @@ -1,137 +0,0 @@ ---!strict - -local RunService = game:GetService("RunService") - -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local MeshUtil = require(Packages:WaitForChild("MeshUtil")) - -local Util = require(Package:WaitForChild("Util")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -local MountFrame = require(Package:WaitForChild("ViewportMountFrame")) - -export type BoundingBoxFrameParameters = MountFrame.ViewportMountFrameParameters & { - Target: CanBeState?, -} - -export type BoundingBoxFrame = Frame - -function Constructor(config: BoundingBoxFrameParameters): BoundingBoxFrame - -- init workspace - local maid = Maid.new() - local _fuse = ColdFusion.fuse(maid) - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Parent = _import(config.Parent, nil) - - -- init internal states - local Target: State = _Value(nil :: Instance?) - local TargetCFrame: ValueState = _Value(nil :: CFrame?) - local TargetSize: ValueState = _Value(nil :: Vector2?) - local BoardFrame: ValueState = _Value(nil :: ViewportFrame?) - local Camera: ValueState = _Value(nil :: Camera?) - maid:GiveTask(BoardFrame:Connect(function(cur: ViewportFrame?) - Camera:Set(nil) - if not cur then - return - end - assert(cur ~= nil) - maid._billboardCameraCheck = cur:GetPropertyChangedSignal("CurrentCamera"):Connect(function() - Camera:Set(cur.CurrentCamera) - end) - Camera:Set(cur.CurrentCamera) - end)) - - -- update states each frame - maid:GiveTask(RunService.Heartbeat:Connect(function(dt) - local target = Target:Get() - local cam = Camera:Get() - if not target or not cam then - return - end - assert(target ~= nil and cam ~= nil) - local camCF = cam.CFrame - - local parts = {} - if target:IsA("Model") or target:IsA("Folder") then - for i, part in ipairs(target:GetDescendants()) do - if part:IsA("BasePart") then - table.insert(parts, part) - end - end - elseif target:IsA("BasePart") then - table.insert(parts, target) - end - - local size, cf = MeshUtil.getBoundingBoxAtCFrame(camCF, parts) - - TargetCFrame:Set(cf) - TargetSize:Set(Vector2.new(size.X, size.Y) * 2) - end)) - - -- assemble final parameters - local parameters: any = { - AnchorPoint = Vector2.new(0.5, 0.5), - WorldPosition = _Computed(function(cf: CFrame?) - if not cf then - return Vector2.new(0, 0) - end - assert(cf ~= nil) - return Vector2.new(cf.Position.X, cf.Position.Y) - end, TargetCFrame), - WorldSize = _Computed(function(size: Vector2?): Vector2 - if not size then - return Vector2.new(0, 0) - end - assert(size ~= nil) - return size - end, TargetSize), - Parent = Parent, - } - - config.Target = nil - - for k, v in pairs(config) do - if parameters[k] == nil then - parameters[k] = v - end - end - - -- construct output instance - local Output = MountFrame(maid)(parameters) - Util.cleanUpPrep(maid, Output) - - BoardFrame:Set(Output:FindFirstAncestorOfClass("ViewportFrame")) - maid:GiveTask(Output.AncestryChanged:Connect(function() - BoardFrame:Set(Output:FindFirstAncestorOfClass("ViewportFrame")) - end)) - - return Output -end - -return function(maid: Maid?) - return function(params: BoundingBoxFrameParameters): BoundingBoxFrame - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/Bubble/demo.story.lua b/src/Bubble/demo.story.lua deleted file mode 100644 index 35281e8e..00000000 --- a/src/Bubble/demo.story.lua +++ /dev/null @@ -1,13 +0,0 @@ ---!strict - -return function(coreGui) - local module = require(script.Parent) - local demo = { - Name = "FX", - Parent = coreGui, - } - local object = module()(demo) - return function() - object:Destroy() - end -end diff --git a/src/Bubble/init.lua b/src/Bubble/init.lua deleted file mode 100644 index 3572a108..00000000 --- a/src/Bubble/init.lua +++ /dev/null @@ -1,133 +0,0 @@ ---!strict -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local Util = require(Package:WaitForChild("Util")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -local EffectGui = require(Package:WaitForChild("EffectGui")) - -export type BubbleParameters = { - Name: CanBeState?, - Parent: CanBeState?, - Scale: CanBeState?, - BackgroundTransparency: CanBeState?, - FinalTransparency: CanBeState?, - BackgroundColor3: CanBeState?, -} - -export type Bubble = EffectGui.EffectGui - -function Constructor(config: BubbleParameters): Bubble - -- init workspace - local maid: Maid = Maid.new() - local _fuse: Fuse = ColdFusion.fuse(maid) - - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Name = _import(config.Name, script.Name) - local Parent = _import(config.Parent, nil) - local Scale = _import(config.Scale, 1.25) - local BackgroundTransparency = _import(config.BackgroundTransparency, 0.6) - local FinalTransparency = _import(config.FinalTransparency, 1) - local BackgroundColor3 = _import(config.BackgroundColor3, Color3.fromHSV(0, 0, 0.7)) - - -- init internal states - local Value = _Value(0) - local ValueTween = Value:Tween(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) - local AbsoluteSize = _Value(Vector2.new(0, 0)) - local CenterPosition = _Value(UDim2.fromOffset(0, 0)) - - -- construct internal instances - local bubbleFrame = _new("Frame")({ - Name = "Bubble", - Position = CenterPosition, - AnchorPoint = Vector2.new(0.5, 0.5), - BorderSizePixel = 0, - ZIndex = 1, - BackgroundColor3 = BackgroundColor3, - Size = _Computed(function(val: number, size: Vector2, scale: number) - local diameter = math.max(size.X, size.Y) * val * scale - return UDim2.fromOffset(diameter, diameter) - end, ValueTween, AbsoluteSize, Scale), - BackgroundTransparency = _Computed(function(val: number, background: number, max: number) - if val == 0 then - return background - else - return max - end - end, Value, BackgroundTransparency, FinalTransparency):Tween(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), - Children = { - _new("UICorner")({ - CornerRadius = UDim.new(0.5, 0), - }), - } :: { Instance }, - }) - maid:GiveTask(bubbleFrame) - - -- construct output instance - local Output: ScreenGui = EffectGui(maid)({ - Name = Name, - Parent = Parent, - } :: any) - bubbleFrame.Parent = Output - Util.cleanUpPrep(maid, Output) - - -- bind states to attributes - maid:GiveTask(Output:GetAttributeChangedSignal("AbsoluteSize"):Connect(function() - AbsoluteSize:Set(Output:GetAttribute("AbsoluteSize") or Vector2.new(0, 0)) - end)) - AbsoluteSize:Set(Output:GetAttribute("AbsoluteSize") or Vector2.new(0, 0)) - maid:GiveTask(Output:GetAttributeChangedSignal("CenterPosition"):Connect(function() - CenterPosition:Set(Output:GetAttribute("CenterPosition") or UDim2.fromOffset(0, 0)) - end)) - CenterPosition:Set(Output:GetAttribute("CenterPosition") or UDim2.fromOffset(0, 0)) - - -- bind functions to output - Util.bindFunction(Output, maid, "Fire", function() - Value:Set(1) - task.delay(0.4, function() - pcall(function() - Output:Destroy() - end) - end) - end) - Util.bindFunction(Output, maid, "Enable", function() - Value:Set(1) - end) - Util.bindFunction(Output, maid, "Disable", function() - Value:Set(0) - task.delay(0.4, function() - pcall(function() - Output:Destroy() - end) - end) - end) - - return Output -end - -return function(maid: Maid?) - return function(params: BubbleParameters): Bubble - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/Button/demo.story.lua b/src/Button/demo.story.lua deleted file mode 100644 index 418bc37b..00000000 --- a/src/Button/demo.story.lua +++ /dev/null @@ -1,28 +0,0 @@ ---!strict - -return function(coreGui) - - local object: Instance - task.spawn(function() - local module = require(script.Parent) - local demo = { - Text = "Button *Time*", - BackgroundTransparency = 1, - BorderTransparency = 0, - TextSize = 20, - Padding = UDim.new(0, 8), - IconScale = 1, - TextOnly = false, - Position = UDim2.fromScale(0.5, 0.5), - AnchorPoint = Vector2.new(0.5, 0.5), - Parent = coreGui, - LeftIcon = "star", - RightIcon = "accessibility", - } - object = module()(demo) - end) - - return function() - object:Destroy() - end -end diff --git a/src/Button/init.lua b/src/Button/init.lua deleted file mode 100644 index 1cbb4932..00000000 --- a/src/Button/init.lua +++ /dev/null @@ -1,456 +0,0 @@ ---!strict -local SoundService = game:GetService("SoundService") -local RunService = game:GetService("RunService") -local TweenService = game:GetService("TweenService") - -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local Util = require(Package:WaitForChild("Util")) -local Types = require(Package:WaitForChild("Types")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -local Signal = require(Packages:WaitForChild("Signal")) - -local TextLabel = require(Package:WaitForChild("TextLabel")) - -export type ButtonParameters = Types.FrameParameters & { - Padding: CanBeState?, - CornerRadius: CanBeState?, - TextSize: CanBeState?, - IconScale: CanBeState?, - TextColor3: CanBeState?, - Font: CanBeState?, - SelectedTextColor3: CanBeState?, - HoverTextColor3: CanBeState?, - BorderTransparency: CanBeState?, - BackgroundTransparency: CanBeState?, - SelectedBackgroundColor3: CanBeState?, - HoverBackgroundColor3: CanBeState?, - TextTransparency: CanBeState?, - TextXAlignment: CanBeState?, - TextYAlignment: CanBeState?, - Text: CanBeState?, - LeftIcon: CanBeState?, - RightIcon: CanBeState?, - ClickSound: CanBeState?, - TextOnly: CanBeState?, - IsSelected: CanBeState?, -} - -export type Button = Frame - -function Constructor(config: ButtonParameters): Button - -- init workspace - local maid: Maid = Maid.new() - local _fuse: Fuse = ColdFusion.fuse(maid) - - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Name = _import(config.Name, script.Name) - local Padding = _import(config.Padding, UDim.new(0, 2)) - local CornerRadius = _import(config.CornerRadius, UDim.new(0, 4)) - local TextSize = _import(config.TextSize, 14) - local Size: State = _import(config.Size, nil :: Vector2?) - local IconScale = _import(config.IconScale, 1.25) - local BorderSizePixel = _import(config.BorderSizePixel, 3) - local TextColor3 = _import(config.TextColor3, Color3.new(0.2, 0.2, 0.2)) - local FontFace = _import(config.Font, Font.fromEnum(Enum.Font.GothamBold)) - local SelectedTextColor3 = _import(config.SelectedTextColor3, Color3.new(1, 1, 1)) - local HoverTextColor3 = _import(config.HoverTextColor3, Color3.new(0.2, 0.2, 0.2)) - local BackgroundColor3 = _import(config.BackgroundColor3, Color3.fromHSV(0.7, 0, 1)) - local BorderColor3 = _import(config.BorderColor3, Color3.fromHSV(0.7, 0, 0.3)) - local SelectedBackgroundColor3 = _import(config.SelectedBackgroundColor3, Color3.fromHSV(0.7, 0.7, 1)) - local HoverBackgroundColor3: State = _import( - config.HoverBackgroundColor3, - _Computed(function(sCol: Color3, bCol: Color3): Color3 - local h1, s1, v1 = sCol:ToHSV() - local _, s2, v2 = bCol:ToHSV() - return Color3.fromHSV(h1, s1 + (s2 - s1) * 0.5, v1 + (v2 - v1) * 0.5) - end, SelectedBackgroundColor3, BackgroundColor3) - ) :: any - local BackgroundTransparency: State = _import(config.BackgroundTransparency, 0) :: any - local TextTransparency = _import(config.TextTransparency, 0) - local TextXAlignment = _import(config.TextXAlignment, Enum.TextXAlignment.Center) - local TextYAlignment = _import(config.TextYAlignment, Enum.TextYAlignment.Center) - local Text = _import(config.Text, "") - local LeftIcon = _import(config.LeftIcon, "") - local RightIcon = _import(config.RightIcon, "") - local TextOnly = _import(config.TextOnly, false) - local IsSelected: ValueState = if config.IsSelected then if typeof(config.IsSelected) == "table" then config.IsSelected else _Value(config.IsSelected) else _Value(false) :: any - local ClickSound = _import(config.ClickSound, nil) - - -- init signals - local Activated = Signal.new() - maid:GiveTask(Activated) - local MouseButton1Down = Signal.new() - maid:GiveTask(MouseButton1Down) - local MouseButton1Up = Signal.new() - maid:GiveTask(MouseButton1Up) - local InputBegan = Signal.new() - maid:GiveTask(InputBegan) - local InputEnded = Signal.new() - maid:GiveTask(InputEnded) - - -- init internal states - local IsHovering = _Value(false) - local IsRippling = _Value(false) - local ClickCenter = _Value(0.5) - local ClickTick = _Value(0) - local MaxRippleDuration = _Value(0.4) - local TimeSinceLastClick = _Value(tick()) - local ActiveBorderColor3 = _Computed(function(trans, border, background) - if trans == 0 then - return background - else - return border - end - end, BackgroundTransparency, BorderColor3, BackgroundColor3) - local ActiveBorderTransparency = _Computed(function(backTrans) - if backTrans == 0 then - return 1 - else - return 0 - end - end, BackgroundTransparency) - local RippleAlpha = _Computed(function(timeSince: number, dur: number) - return math.clamp(timeSince / dur, 0, 1) - end, TimeSinceLastClick, MaxRippleDuration) - local bump = 0.01 - local LeftRippleAlpha = _Computed(function(alpha: number, center: number) - return math.clamp(center - alpha, bump * 2, 1 - bump * 2) - end, RippleAlpha, ClickCenter) - local RightRippleAlpha = _Computed(function(alpha: number, center: number) - return math.clamp(center + alpha, bump * 2, 1 - bump * 2) - end, RippleAlpha, ClickCenter) - local eDir = Enum.EasingDirection.InOut - local eSty = Enum.EasingStyle.Quad - local TimeKeys = _Computed(function(centerAlpha: number, leftAlpha: number, rightAlpha: number) - leftAlpha = math.clamp(TweenService:GetValue(leftAlpha, eSty, eDir), bump, math.max(centerAlpha - bump, bump * 2)) - rightAlpha = math.clamp(TweenService:GetValue(rightAlpha, eSty, eDir), math.min(centerAlpha + bump, 1 - bump * 2), 1 - bump) - return { - 0, - math.clamp(leftAlpha - bump, bump, math.clamp(centerAlpha - bump * 2, bump * 2, 1 - bump * 5)), - math.clamp(leftAlpha, bump * 2.5, math.clamp(centerAlpha - bump, bump * 3, 1 - bump * 4)), - math.clamp(rightAlpha, math.clamp(centerAlpha + bump, bump * 4, 1 - bump * 3), 1 - bump * 2), - math.clamp(rightAlpha + bump, math.clamp(centerAlpha + bump * 2, bump * 5, 1 - bump * 2), 1 - bump), - 1, - } - end, ClickCenter, LeftRippleAlpha, RightRippleAlpha) - local LabelAbsoluteSize = _Value(Vector2.new(0, 0)) - local ButtonSize = _Computed(function(padding: UDim, absSize: Vector2, size: Vector2?): UDim2 - if size then - return UDim2.fromOffset(size.X, size.Y) - end - absSize = absSize or Vector2.new(0, 0) - local fullSize = absSize + Vector2.new(1, 1) * padding.Offset * 2 - return UDim2.fromOffset(fullSize.X, fullSize.Y) - end, Padding, LabelAbsoluteSize, Size) - local ActiveBackgroundColor = _Computed(function(isPressing: boolean, isRippling: boolean, isHovering: boolean, backgroundColor: Color3, hoverColor: Color3, selColor: Color3) - if isHovering or isRippling then - return hoverColor - elseif isPressing then - return selColor - else - return backgroundColor - end - end, IsSelected, IsRippling, IsHovering, BackgroundColor3, HoverBackgroundColor3, SelectedBackgroundColor3):Tween(0.15) - local ActiveFillColor = _Computed(function(isPressing, isRipple, hoverColor, selectedColor) - if isPressing or isRipple then - return selectedColor - else - return hoverColor - end - end, IsSelected, IsRippling, ActiveBackgroundColor, SelectedBackgroundColor3):Tween(0.1) - - -- bind signals - maid:GiveTask(Activated:Connect(function() - local clickSound = ClickSound:Get() - if clickSound then - SoundService:PlayLocalSound(clickSound) - end - end)) - - -- construct sub-instances - local ButtonTextLabel = TextLabel(maid)({ - BackgroundTransparency = 1, - TextTransparency = TextTransparency, - ZIndex = 2, - FontFace = FontFace, - Padding = Padding, - TextSize = TextSize, - TextColor3 = _Computed(function(hover, press, ripple, textColor3, hoverColor, selColor) - if press or ripple then - return selColor - elseif hover then - return hoverColor - end - return textColor3 - end, IsHovering, IsSelected, IsRippling, TextColor3, HoverTextColor3, SelectedTextColor3):Tween(0.2), - TextXAlignment = TextXAlignment, - TextYAlignment = TextYAlignment, - - Text = Text, - IconScale = IconScale, - LeftIcon = LeftIcon, - RightIcon = RightIcon, - AnchorPoint = Vector2.new(0.5, 0.5), - Position = UDim2.fromScale(0.5, 0.5), - }) - maid:GiveTask(RunService.RenderStepped:Connect(function(deltaTime: number) - LabelAbsoluteSize:Set(ButtonTextLabel.AbsoluteSize) - end)) - - local TextButton: TextButton = _fuse.new("TextButton")({ - RichText = true, - TextColor3 = TextColor3, - LayoutOrder = 2, - ZIndex = 3, - Size = UDim2.fromScale(1, 1), - Position = UDim2.fromScale(0.5, 0.5), - AnchorPoint = Vector2.new(0.5, 0.5), - TextTransparency = TextTransparency, - Text = "", - Events = { - Activated = function() - Activated:Fire() - end, - MouseButton1Down = function(x: any) - MouseButton1Down:Fire() - - if not IsSelected:Get() and TimeSinceLastClick:Get() > 0.8 then - ClickTick:Set(tick()) - IsRippling:Set(true) - task.delay(MaxRippleDuration:Get() + 0.2, function() - pcall(function() - IsRippling:Set(false) - end) - end) - if IsSelected.Set then - local ValSelect: any = IsSelected - ValSelect:Set(true) - end - -- IsSelected:Set(true) - end - end, - MouseButton1Up = function() - MouseButton1Up:Fire() - if IsSelected.Set then - local ValSelect: any = IsSelected - ValSelect:Set(false) - end - end, - InputChanged = function() - IsHovering:Set(true) - end, - MouseLeave = function() - IsHovering:Set(false) - end, - }, - - BackgroundTransparency = 1, - AutomaticSize = Enum.AutomaticSize.XY, - }) :: any - - -- assemble final parameters - local parameters: any = { - Name = Name, - Size = ButtonSize, - BackgroundColor3 = Color3.new(1, 1, 1), - BackgroundTransparency = _Computed(function(textOnly) - if textOnly then - return 1 - else - return 0 - end - end, TextOnly), - Children = { - _fuse.new("UICorner")({ - CornerRadius = CornerRadius, - }), - _fuse.new("UIPadding")({ - PaddingBottom = Padding, - PaddingTop = Padding, - PaddingLeft = Padding, - PaddingRight = Padding, - }), - _fuse.new("UIStroke")({ - Transparency = ActiveBorderTransparency, - ApplyStrokeMode = Enum.ApplyStrokeMode.Border, - Thickness = _Computed(function(textOnly, bSizePix) - if textOnly then - return 0 - else - return bSizePix - end - end, TextOnly, BorderSizePixel), - Color = _Computed(function(border, fill, back, hover, press) - if press then - return fill - elseif hover then - return back - else - return border - end - end, ActiveBorderColor3, ActiveFillColor, ActiveBackgroundColor, IsHovering, IsSelected), - }), - _fuse.new("UIGradient")({ - Transparency = _Computed(function(hover: boolean, press: boolean, ripple: boolean, defTrans: number, timeKeys: { number }) - local fill = math.min(0.7, defTrans) - if ripple then - local startTrans = defTrans - local finishTrans = defTrans - - if timeKeys[5] < 0.99 then - finishTrans = defTrans - else - finishTrans = fill - end - - if timeKeys[2] > 0.01 then - startTrans = defTrans - else - startTrans = fill - end - -- print(timeKeys) - local k1 = NumberSequenceKeypoint.new(timeKeys[1], startTrans) - local k2 = NumberSequenceKeypoint.new(timeKeys[2], startTrans) - local k3 = NumberSequenceKeypoint.new(timeKeys[3], fill) - local k4 = NumberSequenceKeypoint.new(timeKeys[4], fill) - local k5 = NumberSequenceKeypoint.new(timeKeys[5], finishTrans) - local k6 = NumberSequenceKeypoint.new(timeKeys[6], finishTrans) - return NumberSequence.new({ k1, k2, k3, k4, k5, k6 }) - elseif press then - return NumberSequence.new({ - NumberSequenceKeypoint.new(0, fill), - NumberSequenceKeypoint.new(1, fill), - }) - elseif hover then - return NumberSequence.new({ - NumberSequenceKeypoint.new(0, defTrans), - NumberSequenceKeypoint.new(1, defTrans), - }) - end - return NumberSequence.new({ - NumberSequenceKeypoint.new(0, defTrans), - NumberSequenceKeypoint.new(1, defTrans), - }) - end, IsHovering, IsSelected, IsRippling, BackgroundTransparency, TimeKeys), - Color = _Computed(function(hover, press, ripple, backColor, selColor, timeKeys) - if ripple then - local beginColor = backColor - local finishColor = backColor - - if timeKeys[5] < 0.99 then - finishColor = backColor - else - finishColor = selColor - end - - if timeKeys[2] > 0.01 then - beginColor = backColor - else - beginColor = selColor - end - -- print(timeKeys) - local k1 = ColorSequenceKeypoint.new(timeKeys[1], beginColor) - local k2 = ColorSequenceKeypoint.new(timeKeys[2], beginColor) - local k3 = ColorSequenceKeypoint.new(timeKeys[3], selColor) - local k4 = ColorSequenceKeypoint.new(timeKeys[4], selColor) - local k5 = ColorSequenceKeypoint.new(timeKeys[5], finishColor) - local k6 = ColorSequenceKeypoint.new(timeKeys[6], finishColor) - return ColorSequence.new({ k1, k2, k3, k4, k5, k6 }) - elseif press then - return ColorSequence.new({ - ColorSequenceKeypoint.new(0, selColor), - ColorSequenceKeypoint.new(1, selColor), - }) - elseif hover then - return ColorSequence.new({ - ColorSequenceKeypoint.new(0, backColor), - ColorSequenceKeypoint.new(1, backColor), - }) - end - return ColorSequence.new({ - ColorSequenceKeypoint.new(0, backColor), - ColorSequenceKeypoint.new(1, backColor), - }) - end, IsHovering, IsSelected, IsRippling, ActiveBackgroundColor, ActiveFillColor, TimeKeys), - }), - TextButton, - ButtonTextLabel, - } :: { Instance }, - } - config.BorderTransparency = nil - config.Padding = nil - config.CornerRadius = nil - config.TextSize = nil - config.IconScale = nil - config.TextColor3 = nil - config.FontFace = nil - config.SelectedTextColor3 = nil - config.HoverTextColor3 = nil - config.SelectedBackgroundColor3 = nil - config.HoverBackgroundColor3 = nil - config.TextTransparency = nil - config.TextXAlignment = nil - config.TextYAlignment = nil - config.Text = nil - config.IsSelected = nil - config.LeftIcon = nil - config.RightIcon = nil - config.ClickSound = nil - config.TextOnly = nil - - for k, v in pairs(config) do - if parameters[k] == nil then - parameters[k] = v - end - end - - maid:GiveTask(RunService.RenderStepped:Connect(function(dt) - TimeSinceLastClick:Set(tick() - ClickTick:Get()) - end)) - - -- construct output instance - local Output: Frame = _fuse.new("Frame")(parameters) :: any - Util.bindSignal(Output, maid, "MouseButton1Down", MouseButton1Down) - Util.bindSignal(Output, maid, "MouseButton1Up", MouseButton1Up) - Util.bindSignal(Output, maid, "Activated", Activated) - - maid:GiveTask(TextButton.MouseButton1Down:Connect(function(x: number) - local xWidth = Output.AbsoluteSize.X - local xPos = Output.AbsolutePosition.X - local clickCenter = (x - xPos) / xWidth - ClickCenter:Set(clickCenter) - end)) - - Util.cleanUpPrep(maid, Output) - - return Output -end - -return function(maid: Maid?) - return function(params: ButtonParameters): Button - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/Checkbox/demo.story.lua b/src/Checkbox/demo.story.lua deleted file mode 100644 index f447b98d..00000000 --- a/src/Checkbox/demo.story.lua +++ /dev/null @@ -1,39 +0,0 @@ ---!strict - -return function(coreGui) - local Module = script.Parent - assert(Module) - local Package = Module.Parent - assert(Package) - local Packages = Package.Parent - assert(Packages) - local module = require(Module) - local Maid = require(Packages:WaitForChild("Maid")) - local ColdFusion = require(Packages:WaitForChild("ColdFusion")) - - local maid = Maid.new() - local _fuse = ColdFusion.fuse(maid) - - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - local demo: module.CheckboxParameters = { - Scale = 2, - BackgroundColor3 = Color3.fromHSV(0.75, 0.5, 1), - BorderColor3 = Color3.fromHSV(0, 0, 0.4), - Position = UDim2.fromScale(0.5, 0.5), - AnchorPoint = Vector2.new(0.5, 0.5), - Parent = coreGui, - Value = _Value(false), - } :: any - - local object = module()(demo) - return function() - maid:Destroy() - object:Destroy() - end -end diff --git a/src/Checkbox/init.lua b/src/Checkbox/init.lua deleted file mode 100644 index ed8d79f5..00000000 --- a/src/Checkbox/init.lua +++ /dev/null @@ -1,209 +0,0 @@ ---!strict -local SoundService = game:GetService("SoundService") - -local Package = script.Parent -assert(Package) -local Packages = Package.Parent -assert(Packages) - -local Util = require(Package:WaitForChild("Util")) - -local Types = require(Package:WaitForChild("Types")) - -local ColdFusion = require(Packages:WaitForChild("ColdFusion")) -type Fuse = ColdFusion.Fuse -type State = ColdFusion.State -type ValueState = ColdFusion.ValueState -type CanBeState = ColdFusion.CanBeState - -local Maid = require(Packages:WaitForChild("Maid")) -type Maid = Maid.Maid - -local Signal = require(Packages:WaitForChild("Signal")) - -local Bubble = require(Package:WaitForChild("Bubble")) - -export type CheckboxParameters = Types.FrameParameters & { - Scale: CanBeState?, - Value: ValueState, - EnableSound: CanBeState?, - DisableSound: CanBeState?, - TextColor3: CanBeState?, -} - -export type Checkbox = Frame - -function Constructor(config: CheckboxParameters): Checkbox - -- init workspace - local maid: Maid = Maid.new() - local _fuse: Fuse = ColdFusion.fuse(maid) - - local _new = _fuse.new - local _bind = _fuse.bind - local _import = _fuse.import - local _Value = _fuse.Value - local _Computed = _fuse.Computed - - -- unload config states - local Name = _import(config.Name, script.Name) - local Scale = _import(config.Scale, 1) - local BorderColor3 = _import(config.BorderColor3, Color3.fromHSV(0, 0, 0.4)) - local TextColor3 = _import(config.TextColor3, Color3.fromHSV(0, 0, 0.4)) - local BackgroundColor3 = _import(config.BackgroundColor3, Color3.fromHSV(0.6, 1, 1)) - local Value = config.Value :: any - local EnableSound: State = _import(config.EnableSound, nil :: Sound?) - local DisableSound: State = _import(config.DisableSound, nil :: Sound?) - - -- construct signals - local Activated = Signal.new() - maid:GiveTask(Activated) - - -- init internal states - local BubbleEnabled = _Value(false) - local Padding = _Computed(function(scale: number) - return math.round(6 * scale) - end, Scale) - local Width = _Computed(function(scale: number) - return math.round(scale * 20) - end, Scale) - local TweenColor = _Computed(function(val, borderColor3, backgroundColor3) - if not val then - return borderColor3 - else - return backgroundColor3 - end - end, Value, BorderColor3, BackgroundColor3):Tween() - - -- bind signals - maid:GiveTask(Activated:Connect(function() - if not (Value:Get() == true) then - local clickSound = EnableSound:Get() - if clickSound then - SoundService:PlayLocalSound(clickSound) - end - else - local clickSound = DisableSound:Get() - if clickSound then - SoundService:PlayLocalSound(clickSound) - end - end - if Value.Set then - Value:Set(not Value:Get()) - end - if BubbleEnabled:Get() == false then - BubbleEnabled:Set(true) - task.wait(0.2) - BubbleEnabled:Set(false) - end - end)) - - -- assemble final parameters - local Output: Frame - local parameters = { - Name = Name, - Size = _Computed(function(width: number) - return UDim2.fromOffset(width * 2, width * 2) - end, Width), - BackgroundTransparency = 1, - Children = { - _new("ImageButton")({ - Name = "Button", - ZIndex = 3, - BackgroundTransparency = 1, - ImageTransparency = 1, - Position = UDim2.fromScale(0.5, 0.5), - Size = UDim2.fromScale(1, 1), - AnchorPoint = Vector2.new(0.5, 0.5), - Events = { - Activated = function() - Activated:Fire() - if BubbleEnabled:Get() then - local bubble = Bubble(maid)({ - Parent = Output, - }) - local fireFunction: Instance? = bubble:WaitForChild("Fire") - assert(fireFunction ~= nil and fireFunction:IsA("BindableFunction")) - fireFunction:Invoke() - -- maid._bubble = bubble - end - end, - }, - }), - _new("ImageLabel")({ - Name = "ImageLabel", - ZIndex = 2, - Image = "rbxassetid://3926305904", - ImageRectOffset = Vector2.new(312, 4), - ImageRectSize = Vector2.new(24, 24), - ImageColor3 = TextColor3, - ImageTransparency = _Computed(function(val) - if val then - return 0 - else - return 1 - end - end, Value):Tween(), - Position = UDim2.fromScale(0.5, 0.5), - AnchorPoint = Vector2.new(0.5, 0.5), - BackgroundColor3 = TweenColor, - BackgroundTransparency = _Computed(function(val) - if val then - return 0 - else - return 0.999 - end - end, Value):Tween(), - Size = _Computed(function(width: number, padding: number) - return UDim2.fromOffset(width - padding, width - padding) - end, Width, Padding), - BorderSizePixel = 0, - Children = { - _new("UICorner")({ - CornerRadius = _Computed(function(padding: number) - return UDim.new(0, math.round(padding * 0.5)) - end, Padding), - }), - _new("UIStroke")({ - ApplyStrokeMode = Enum.ApplyStrokeMode.Border, - Thickness = _Computed(function(padding: number) - return math.round(padding * 0.25) - end, Padding), - Transparency = 0, - Color = TweenColor, - }), - } :: { Instance }, - }), - } :: { Instance }, - } - - config.Scale = nil - config.Value = nil :: any - config.EnableSound = nil - config.DisableSound = nil - config.TextColor3 = nil - - for k, v in pairs(config) do - if parameters[k] == nil then - parameters[k] = v - end - end - - -- Construct final gui - Output = _new("Frame")(parameters :: any) :: Frame - - -- Bind gui's life to maid - Util.cleanUpPrep(maid, Output) - Util.bindSignal(Output, maid, "Activated", Activated) - - return Output -end - -return function(maid: Maid?) - return function(params: CheckboxParameters): Checkbox - local inst = Constructor(params) - if maid then - maid:GiveTask(inst) - end - return inst - end -end diff --git a/src/Component/Bar/Bottom/cfusion-theme.story.luau b/src/Component/Bar/Bottom/cfusion-theme.story.luau new file mode 100644 index 00000000..166278ef --- /dev/null +++ b/src/Component/Bar/Bottom/cfusion-theme.story.luau @@ -0,0 +1,134 @@ +--!strict +local _Package = script.Parent.Parent.Parent.Parent +local _Packages = _Package.Parent +-- Services +-- Packages +local Maid = require(_Packages:WaitForChild("Maid")) +local MaterialIcons = require(_Packages:WaitForChild("MaterialIcons")) + +-- Modules +local Types = require(_Package:WaitForChild("Types")) +local Style = require(_Package:WaitForChild("Style")) +local Enums = require(_Package:WaitForChild("Enums")) + +-- Types +type ButtonData = Types.ButtonData +-- Constants +-- Variables +-- References +local Icons = MaterialIcons.default.dp_48.scale_1 + +-- Class +return function(frame: Frame) + local maid = Maid.new() + task.spawn(function() + local function makeHalfFrame(isDarkMode: boolean, color: Color3): Frame + local style = + Style.new(1, "Source Sans", if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light, color) + + local halfFrame = maid:GiveTask(Instance.new("Frame")) + halfFrame.BackgroundColor3 = style:GetColor(Enums.ColorRoleType.Background) + halfFrame.BorderSizePixel = 0 + + local listLayout = maid:GiveTask(Instance.new("UIListLayout")) + listLayout.FillDirection = Enum.FillDirection.Vertical + listLayout.Padding = UDim.new(0, 10) + listLayout.VerticalAlignment = Enum.VerticalAlignment.Center + listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center + listLayout.HorizontalFlex = Enum.UIFlexAlignment.Fill + listLayout.Parent = halfFrame + + local Module = require(script.Parent) + + do + local button = maid:GiveTask(Module.ColdFusion.primary( + style, + { + Types.newButtonData(function() + print("click 1") + end, Icons.gamepad, nil, true), + Types.newButtonData(function() + print("click 2") + end, Icons.waves, nil, true), + Types.newButtonData(function() + print("click 3") + end, Icons.work_off, nil, true), + }, + Types.newButtonData(function() + print("click fab") + end, Icons.plus_one, nil, true) + )) + button.Parent = halfFrame + end + + do + local button = maid:GiveTask(Module.ColdFusion.secondary( + style, + { + Types.newButtonData(function() + print("click 1") + end, Icons.gamepad, nil, true), + Types.newButtonData(function() + print("click 2") + end, Icons.waves, nil, true), + Types.newButtonData(function() + print("click 3") + end, Icons.work_off, nil, true), + }, + Types.newButtonData(function() + print("click fab") + end, Icons.plus_one, nil, true) + )) + button.Parent = halfFrame + end + do + local button = maid:GiveTask(Module.ColdFusion.tertiary( + style, + { + Types.newButtonData(function() + print("click 1") + end, Icons.gamepad, nil, true), + Types.newButtonData(function() + print("click 2") + end, Icons.waves, nil, true), + Types.newButtonData(function() + print("click 3") + end, Icons.work_off, nil, true), + }, + Types.newButtonData(function() + print("click fab") + end, Icons.plus_one, nil, true) + )) + button.Parent = halfFrame + end + + return halfFrame + end + + local COLORS: { [number]: Color3 } = { + -- Color3.fromHSV(0, 0.25, 0.8), + -- Color3.fromHSV(0, 0.9, 0.5), + Color3.fromHSV(0.6, 0.9, 0.7), + -- Color3.fromHSV(0.35, 0.9, 0.7), + -- Color3.fromHSV(0.1, 0.9, 0.7), + } + + for i, color in ipairs(COLORS) do + local x = (i - 1) / #COLORS + local width = 1 / #COLORS + local dark = makeHalfFrame(true, color) + + dark.Size = UDim2.fromScale(1, width * 0.5) + dark.Position = UDim2.fromScale(0, x) + dark.Parent = frame + + local bright = makeHalfFrame(false, color) + bright.Size = UDim2.fromScale(1, width * 0.5) + bright.Position = UDim2.fromScale(0, x + width * 0.5) + bright.Parent = frame + end + end) + return function() + maid:Destroy() + end +end diff --git a/src/Component/Bar/Bottom/cfusion.story.luau b/src/Component/Bar/Bottom/cfusion.story.luau new file mode 100644 index 00000000..8e5028e8 --- /dev/null +++ b/src/Component/Bar/Bottom/cfusion.story.luau @@ -0,0 +1,124 @@ +--!strict +local _Package = script.Parent.Parent.Parent.Parent +local _Packages = _Package.Parent +-- Services +-- Packages +local Maid = require(_Packages:WaitForChild("Maid")) +local MaterialIcons = require(_Packages:WaitForChild("MaterialIcons")) + +-- Modules +local Types = require(_Package:WaitForChild("Types")) +local Style = require(_Package:WaitForChild("Style")) +local Enums = require(_Package:WaitForChild("Enums")) + +-- Types +type ButtonData = Types.ButtonData +-- Constants +-- Variables +-- References +local Icons = MaterialIcons.default.dp_48.scale_1 + +-- Class +return function(frame: Frame) + local maid = Maid.new() + task.spawn(function() + local function makeHalfFrame(isDarkMode: boolean, color: Color3): Frame + local style = + Style.new(1, "Source Sans", if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light, color) + + local halfFrame = maid:GiveTask(Instance.new("Frame")) + halfFrame.BackgroundColor3 = style:GetColor(Enums.ColorRoleType.Background) + halfFrame.BorderSizePixel = 0 + + local listLayout = maid:GiveTask(Instance.new("UIListLayout")) + listLayout.FillDirection = Enum.FillDirection.Vertical + listLayout.Padding = UDim.new(0, 10) + listLayout.VerticalAlignment = Enum.VerticalAlignment.Center + listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center + listLayout.HorizontalFlex = Enum.UIFlexAlignment.Fill + listLayout.Parent = halfFrame + + local Module = require(script.Parent) + + do + local button = maid:GiveTask( + Module.ColdFusion.new( + { + Types.newButtonData(function() + print("click 1") + end, Icons.gamepad, nil, true), + Types.newButtonData(function() + print("click 2") + end, Icons.waves, nil, true), + Types.newButtonData(function() + print("click 3") + end, Icons.work_off, nil, true), + }, + Types.newButtonData(function() + print("click fab") + end, Icons.plus_one, nil, true), + style:GetColor(Enums.ColorRoleType.Primary), + style:GetColor(Enums.ColorRoleType.OnPrimary), + style:GetColor(Enums.ColorRoleType.OnSurface), + style:GetColor(Enums.ColorRoleType.PrimaryContainer), + 1, + style + ) + ) + button.Parent = halfFrame + end + + do + local button = maid:GiveTask( + Module.ColdFusion.new( + { + Types.newButtonData(function() + print("click 1") + end, Icons.gamepad, nil, true), + Types.newButtonData(function() + print("click 2") + end, Icons.waves, nil, false), + }, + nil, + style:GetColor(Enums.ColorRoleType.Primary), + style:GetColor(Enums.ColorRoleType.OnPrimary), + style:GetColor(Enums.ColorRoleType.OnSurface), + style:GetColor(Enums.ColorRoleType.PrimaryContainer), + 1, + style + ) + ) + button.Parent = halfFrame + end + + return halfFrame + end + + local COLORS: { [number]: Color3 } = { + Color3.fromHSV(0, 0.9, 0.8), + -- Color3.fromHSV(0, 0.25, 0.8), + -- Color3.fromHSV(0, 0.9, 0.5), + Color3.fromHSV(0.6, 0.9, 0.7), + -- Color3.fromHSV(0.35, 0.9, 0.7), + -- Color3.fromHSV(0.1, 0.9, 0.7), + } + + for i, color in ipairs(COLORS) do + local x = (i - 1) / #COLORS + local width = 1 / #COLORS + local dark = makeHalfFrame(true, color) + + dark.Size = UDim2.fromScale(1, width * 0.5) + dark.Position = UDim2.fromScale(0, x) + dark.Parent = frame + + local bright = makeHalfFrame(false, color) + bright.Size = UDim2.fromScale(1, width * 0.5) + bright.Position = UDim2.fromScale(0, x + width * 0.5) + bright.Parent = frame + end + end) + return function() + maid:Destroy() + end +end diff --git a/src/Component/Bar/Bottom/init.luau b/src/Component/Bar/Bottom/init.luau new file mode 100644 index 00000000..acb1ac91 --- /dev/null +++ b/src/Component/Bar/Bottom/init.luau @@ -0,0 +1,322 @@ +--!strict +local _Package = script.Parent.Parent.Parent +local _Packages = _Package.Parent +-- Services +-- Packages +local Maid = require(_Packages:WaitForChild("Maid")) +local ColdFusion = require(_Packages:WaitForChild("ColdFusion")) +local MaterialIcons = require(_Packages:WaitForChild("MaterialIcons")) + +-- Modules +local Types = require(_Package:WaitForChild("Types")) +local IconButton = require(_Package:WaitForChild("Component"):WaitForChild("Button"):WaitForChild("IconButton")) +local FAB = require(_Package:WaitForChild("Component"):WaitForChild("Button"):WaitForChild("FAB")) +local Style = require(_Package:WaitForChild("Style")) +local Enums = require(_Package:WaitForChild("Enums")) + +-- Types +type Maid = Maid.Maid +type State = ColdFusion.State +type ValueState = ColdFusion.ValueState +type CanBeState = ColdFusion.CanBeState +type RenderData = Types.RenderData +type ImageData = Types.ImageData +type OptionData = Types.OptionData +type ButtonData = Types.ButtonData +type Style = Style.Style + +-- Constants +local MAX_BUTTONS = 4 +local ICONS = MaterialIcons.default.dp_48.scale_1 +local ERROR_ICON = ICONS.error +local BUTTON_SEPARATION_DP = 10 +local BAR_TOP_BOTTOM_PADDING_DP = 6 +local BAR_LEFT_RIGHT_PADDING_DP = 10 +-- Variables +-- References +-- Private Functions + +-- Class +local Interface = {} + +function newThemedComponent( + style: CanBeState