local ____lualib = require("lualib_bundle")
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__Generator = ____lualib.__TS__Generator
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____storyteller = require("code.engine.storyteller")
local STScreen = ____storyteller.STScreen
local function screen()
    local objects, screen
    local function object(tag)
        return objects(tag):next().value
    end
    objects = __TS__Generator(function(tag)
        local generator = screen:scan(function(container)
            if type(container.metadata) ~= "table" then
                return false
            end
            local tags = container.metadata.tags
            if type(tags) ~= "table" then
                return false
            end
            return __TS__ArrayIncludes(tags, tag)
        end)
        while true do
            local next = generator:next()
            if next.done then
                break
            else
                local container = next.value
                coroutine.yield({
                    self = container,
                    destroy = function(self)
                        local ____opt_0 = container.parent
                        if ____opt_0 ~= nil then
                            ____opt_0:detach(container)
                        end
                    end
                })
            end
        end
    end)
    screen = __TS__New(STScreen)
    return {object = object, objects = objects, screen = screen}
end
____exports.default = screen
return ____exports