{"id":"lum-s/ui-blur","name":"ui-blur","scope":"lum-s","platform":"roblox","description":"Use to generate a blur effect behind GUI Frames","version":"0.1.2","latest":"0.1.2","versions":["0.1.0","0.1.1","0.1.2"],"license":"Apache-2.0","licenseRating":"safe","licenseCaveats":["Modified files must carry a notice of changes. If the package ships a NOTICE file, its attributions must be preserved."],"licenseVerified":true,"dependencies":{},"integrity":"30bb8a994ad7e520060e58009012867beee98077c55a84e6a082eabb62aefa78","likes":0,"downloads":0,"install":"forest install lum-s/ui-blur","url":"https://forest.dev/p/roblox/lum-s/ui-blur","files":"https://api.forest.dev/ai/package/roblox/lum-s/ui-blur/files","readme":"# UIBlur\n\nA strictly typed, client-side Roblox UI blur library. Blur geometry follows UI position, size, rotation, rounded corners, ancestor visibility, viewport changes, and camera movement. Instances clean themselves up when their target UI is destroyed.\n\n## Usage\n\n```luau\nlocal ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\n\nlocal UIBlur = require(ReplicatedStorage.Packages.UIBlur)\n\nlocal blur = UIBlur.new(script.Parent, {\n\tIntensity = 0.8,\n\tStrokeSize = 1,\n\tFragmented = false,\n\tInverted = false,\n})\n\nblur:SetIntensity(0.45)\nblur:SetEnabled(false)\nblur:SetEnabled(true)\n\n-- Optional. Destruction is automatic when the target GuiObject is destroyed.\nblur:Destroy()\n```\n\n`Intensity` is clamped to `0–1`. It controls one blur independently. The shared depth-of-field strength can also be changed:\n\n```luau\nUIBlur.SetGlobalIntensity(0.75)\n```\n\n## Typed API\n\n```luau\nexport type BlurOptions = {\n\tFragmented: boolean?,\n\tInverted: boolean?,\n\tStrokeSize: number?,\n\tIntensity: number?,\n\tEnabled: boolean?,\n}\n\nUIBlur.new(guiObject: GuiObject, options: BlurOptions?): Blur\nUIBlur.SetGlobalIntensity(intensity: number)\nUIBlur.GetGlobalIntensity(): number\nUIBlur.DestroyAll()\n\nblur:SetIntensity(intensity: number)\nblur:GetIntensity(): number\nblur:SetStrokeSize(strokeSize: number)\nblur:GetStrokeSize(): number\nblur:SetEnabled(enabled: boolean)\nblur:GetEnabled(): boolean\nblur:SetCornered(cornered: boolean)\nblur:Destroy()\n```\n\nConsumers can import the exported types directly from the module:\n\n```luau\ntype Blur = UIBlur.Blur\ntype BlurOptions = UIBlur.BlurOptions\n```\n\n## Automatic integration\n\nSet the module's `AutoAddEnabled` attribute to `true` to create blur instances for `BlurEffect` children found under GuiObjects in `PlayerGui`. Runtime additions and removals are tracked automatically.\n\nThe marker supports these attributes:\n\n- `Intensity: number`\n- `StrokeSize: number`\n- `Fragmented: boolean`\n- `Inverted: boolean`\n- `Enabled: boolean`\n\nChanging one of these attributes rebuilds that automatic blur with the new configuration. The marker's native `Enabled` property also controls whether its blur renders.\n\n## Animation and lifecycle behavior\n\nAll blur instances share one `PreRender` connection. Each frame checks the UI and camera state, but geometry is only rewritten when a relevant value changes. This keeps tweens and continuously animated UI synchronized while avoiding repeated property writes for static UI.\n\nThe library handles:\n\n- Position, size, and rotation animation\n- Animated `UICorner.CornerRadius`\n- Ancestor movement and visibility changes\n- Reparenting between ScreenGuis\n- CurrentCamera and viewport changes\n- GuiObject and marker destruction\n\n## Building\n\n```bash\nargon build ui-blur.project.json\n```\n\nBuild the Moonwave documentation site with:\n\n```bash\nnpx moonwave build\n```\n","readmeTruncated":false}