local ____lualib = require("lualib_bundle")
local __TS__Promise = ____lualib.__TS__Promise
local __TS__New = ____lualib.__TS__New
local __TS__AsyncAwaiter = ____lualib.__TS__AsyncAwaiter
local __TS__Await = ____lualib.__TS__Await
local ____exports = {}
____exports.waitFrames = function(frames) return __TS__New(
    __TS__Promise,
    function(____, resolve)
        Wait.frames(
            function() return resolve(nil) end,
            frames
        )
    end
) end
____exports.waitTime = function(time) return __TS__AsyncAwaiter(function(____awaiter_resolve)
    return ____awaiter_resolve(
        nil,
        __TS__New(
            __TS__Promise,
            function(____, resolve)
                Wait.time(
                    function() return resolve(nil) end,
                    time
                )
            end
        )
    )
end) end
____exports.waitCondition = function(condition, timeout) return __TS__AsyncAwaiter(function(____awaiter_resolve)
    return ____awaiter_resolve(
        nil,
        __TS__New(
            __TS__Promise,
            function(____, resolve, reject)
                Wait.condition(
                    function() return resolve(nil) end,
                    condition,
                    timeout,
                    function() return reject(nil, "Timeout reached") end
                )
            end
        )
    )
end) end
____exports.waitUntilLoaded = function(object)
    return __TS__AsyncAwaiter(function(____awaiter_resolve)
        local ____self_0 = ____exports.waitCondition(function()
            return not object.loading_custom and not object.UI.loading
        end)
        __TS__Await(____self_0["then"](
            ____self_0,
            function() return ____exports.waitFrames(30) end
        ))
        if object:hasTag("Signal Loading") then
            __TS__Await(____exports.waitCondition(function() return object:call("isOnLoadFinished") end))
        end
        return ____awaiter_resolve(nil, object)
    end)
end
return ____exports
