-- Compiled with roblox-ts v3.0.0 local TS = _G[script] local _vide = TS.import(script, TS.getModule(script, "@rbxts", "vide").src) local Vide = _vide local derive = _vide.derive local read = _vide.read local px = TS.import(script, script.Parent.Parent.Parent, "hooks", "use-px").px local Group = TS.import(script, script.Parent, "group").Group local function ceilEven(n) return math.ceil(n / 2) * 2 end local function blend(...) local transparencies = { ... } local result = 1 for _, transparency in transparencies do result *= 1 - transparency end return 1 - result end local DEFAULT_INNER_COLOR = Color3.new(1, 1, 1) local DEFAULT_OUTER_COLOR = Color3.new(0, 0, 0) local function Outline(_param) local outlineTransparency = _param.outlineTransparency if outlineTransparency == nil then outlineTransparency = 0 end local innerColor = _param.innerColor if innerColor == nil then innerColor = DEFAULT_INNER_COLOR end local outerColor = _param.outerColor if outerColor == nil then outerColor = DEFAULT_OUTER_COLOR end local innerTransparency = _param.innerTransparency if innerTransparency == nil then innerTransparency = 0.9 end local outerTransparency = _param.outerTransparency if outerTransparency == nil then outerTransparency = 0.85 end local innerThickness = _param.innerThickness local outerThickness = _param.outerThickness local cornerRadius = _param.cornerRadius local children = _param.children local properties = derive(function() local _object = {} local _left = "innerThickness" local _condition = innerThickness if _condition == nil then _condition = px(3) end _object[_left] = _condition local _left_1 = "outerThickness" local _condition_1 = outerThickness if _condition_1 == nil then _condition_1 = px(1.5) end _object[_left_1] = _condition_1 _object.cornerRadius = cornerRadius or UDim.new(0, px(8)) return _object end) local innerStyle = derive(function() local outlineProps = properties() local thickness = read(outlineProps.innerThickness) local size = UDim2.new(1, ceilEven(-2 * thickness), 1, ceilEven(-2 * thickness)) local position = UDim2.new(0, thickness, 0, thickness) local _exp = read(outlineProps.cornerRadius) local _uDim = UDim.new(0, thickness) local radius = _exp - _uDim local transparency = math.clamp(blend(read(outlineTransparency), read(innerTransparency)), 0, 1) return { size = size, position = position, radius = radius, transparency = transparency, } end) local outerStyle = derive(function() local transparency = math.clamp(blend(read(outlineTransparency), read(outerTransparency)), 0, 1) return { transparency = transparency, } end) return Vide.jsx(Vide.Fragment, nil, Vide.jsx(Group, { size = function() return innerStyle().size end, position = function() return innerStyle().position end, }, Vide.jsx("uicorner", { CornerRadius = function() return innerStyle().radius end, }), Vide.jsx("uistroke", { Color = innerColor, Transparency = function() return innerStyle().transparency end, Thickness = innerThickness, }, children)), Vide.jsx(Group, nil, Vide.jsx("uicorner", { CornerRadius = cornerRadius, }), Vide.jsx("uistroke", { Color = outerColor, Transparency = function() return outerStyle().transparency end, Thickness = outerThickness, }, children))) end return { blend = blend, Outline = Outline, }