{"id":"sqzee1/confetti","name":"confetti","scope":"sqzee1","platform":"roblox","description":"Lightweight UI confetti and particle effects library for Roblox, featuring ready-made presets and a customizable emitter with simple one-line usage, performance-friendly pooling, and full effect control.","version":"2.0.2","latest":"2.0.2","versions":["1.0.0","1.0.1","1.0.2","2.0.2"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"20d88549e75c3d0d738c62ea7005e1ce5a4142286bef7848617f30422c7eb048","likes":0,"downloads":0,"install":"forest install sqzee1/confetti","url":"https://forest.dev/p/roblox/sqzee1/confetti","files":"https://api.forest.dev/ai/package/roblox/sqzee1/confetti/files","readme":"# 🎉 Confetti\r\n\r\nA lightweight library for creating confetti effects on Roblox UI. Designed to be simple: one line triggers the effect, the Handle gives you full control.\r\n\r\n## Installation\r\n\r\nInstall via [Wally] = \"sqzee1/confetti@1.0.2\"\r\n\r\n```toml\r\n[dependencies]\r\nConfetti = \"sqzee1/confetti@1.0.2\"\r\n```\r\n\r\nInstall via [Roblox Studio] = https://create.roblox.com/store/asset/87040144615726/Confetti\r\n\r\n---\r\n\r\n## Basic Usage\r\n\r\n```luau\r\nlocal handle = Confetti.explosion(gui)\r\n```\r\n\r\n### Waiting for the effect to finish\r\n\r\n```luau\r\nlocal handle = Confetti.rain(gui)\r\nhandle.Wait() -- yields the current thread until the effect is done\r\n```\r\n\r\n### Cancelling at any time\r\n\r\n```luau\r\nlocal handle = Confetti.sides(gui)\r\ntask.delay(1, function()\r\n    handle.Cancel()\r\nend)\r\n```\r\n\r\n---\r\n\r\n## Example\r\n\r\n```luau\r\n-- explosion inside a frame with blur and camera shake, then wait for it to finish\r\nlocal explosion = Confetti.explosion(confettiGui, {\r\n    Container = confettiFrame,\r\n    Clip = true,\r\n    Blur = 24,\r\n    CameraShake = true,\r\n    Shape = \"Circle\",\r\n})\r\nexplosion.Wait()\r\n\r\n-- cannon from the center of the screen, cancelled after 1 second\r\nlocal cannon = Confetti.cannon(confettiGui, UDim2.fromScale(0.5, 0.5), {\r\n    Blur = 30,\r\n    CameraShake = true,\r\n    Size = NumberRange.new(5, 10),\r\n})\r\ntask.wait(1)\r\ncannon.Cancel()\r\n```\r\n\r\n---\r\n\r\n## Options\r\n\r\nAll functions accept an optional `Options` table as their last parameter:\r\n\r\n```luau\r\nConfetti.explosion(gui, {\r\n    Blur = 20,           -- applies a BlurEffect to Lighting during the effect (size, <= 0 disables)\r\n    CameraShake = true,  -- quick punch zoom at the start\r\n    Container = frame,   -- confetti is spawned inside the given GuiObject\r\n    Clip = true,         -- clips particles to the container bounds (default: true)\r\n    Shape = \"Square\",    -- \"Square\" | \"Circle\" | \"Rectangle\" | \"Random\"\r\n    Colors = { Color3 }, -- custom color palette\r\n    Size = NumberRange.new(6, 14), -- particle size range (px)\r\n})\r\n```\r\n\r\nWhen `Clip = false`, particles can visually escape the container and are destroyed when they leave the screen bounds instead.\r\n\r\n---\r\n\r\n## Custom Effect\r\n\r\n```luau\r\nConfetti.create(gui, {\r\n    Count = 80,                             -- total number of particles\r\n    EmitTime = 2,                           -- how long the emitter spawns particles (seconds)\r\n    Colors = { Color3.fromRGB(255, 0, 0) }, -- color palette\r\n    Size = NumberRange.new(6, 14),          -- particle size range (px)\r\n    Gravity = 600,                          -- downward acceleration (px/s²)\r\n    Drag = 0.01,                            -- velocity damping per frame [0..1]\r\n    Rotation = true,                        -- whether particles spin\r\n    Shape = \"Random\",                       -- \"Square\" | \"Circle\" | \"Rectangle\" | \"Random\"\r\n    SpawnRate = 40,                         -- particles per second (0 = instant burst)\r\n    Lifetime = NumberRange.new(0.8, 1.6),   -- how long each particle lives (seconds)\r\n})\r\n```\r\n\r\n---\r\n\r\n## Available Presets\r\n\r\n| Function | Description |\r\n|---|---|\r\n| `Confetti.rain(gui, options?)` | Particles fall from the top |\r\n| `Confetti.sides(gui, options?)` | Particles shoot in from the sides |\r\n| `Confetti.rainbow(gui, options?)` | Particles arc up from the bottom corners |\r\n| `Confetti.cannon(gui, origin, options?)` | Shoots from a given UDim2 origin point |\r\n| `Confetti.explosion(gui, options?)` | Instant burst from the center |\r\n| `Confetti.spark(gui, options?)` | Fast ember-like sparks from the center |\r\n| `Confetti.golden(gui, options?)` | Slow golden shimmer falling from the top |\r\n| `Confetti.bubble(gui, options?)` | Pastel bubbles floating upward |\r\n| `Confetti.parade(gui, options?)` | Dense colorful shower from the top |\r\n| `Confetti.create(gui, config, options?)` | Fully custom effect |\r\n\r\n---\r\n\r\n## Handle\r\n\r\nEvery function returns a `Handle`:\r\n\r\n```luau\r\nexport type Handle = {\r\n    Cancel: () -> (), -- immediately stops the effect and cleans up\r\n    Wait: () -> (),   -- yields the current thread until the effect finishes\r\n}\r\n```\r\n\r\n---\r\n\r\n*Made by sqzee1*","readmeTruncated":false}