local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____reconciler = require("reconciler")
local ClassComponent = ____reconciler.ClassComponent
local scheduleUpdate = ____reconciler.scheduleUpdate
____exports.i = 0
____exports.createContext = function(defaultValue)
    local ctx
    local ____exports_0, ____i_1 = ____exports, "i"
    local ____exports_i_2 = ____exports_0[____i_1]
    ____exports_0[____i_1] = ____exports_i_2 + 1
    ctx = {
        id = ____exports_i_2,
        Consumer = function(props, contexts)
            local ____props_6 = props
            local ____props_children_7 = props.children
            local ____contexts_ctx_id_props_value_3 = contexts[ctx.id]
            if ____contexts_ctx_id_props_value_3 ~= nil then
                ____contexts_ctx_id_props_value_3 = ____contexts_ctx_id_props_value_3.props.value
            end
            local ____contexts_ctx_id_props_value_3_5 = ____contexts_ctx_id_props_value_3
            if ____contexts_ctx_id_props_value_3_5 == nil then
                ____contexts_ctx_id_props_value_3_5 = defaultValue
            end
            return ____props_children_7(____props_6, ____contexts_ctx_id_props_value_3_5)
        end,
        defaultValue = defaultValue
    }
    local Provider = __TS__Class()
    Provider.name = "Provider"
    __TS__ClassExtends(Provider, ClassComponent)
    function Provider.prototype.____constructor(self, props)
        ClassComponent.prototype.____constructor(self, props)
        self.subs = __TS__New(Set)
        self.lastValue = props.value
    end
    function Provider.prototype.sub(self, instance)
        self.subs:add(instance)
        local component = instance.component
        if component then
            local oldComponentWillUnmount = component.componentWillUnmount
            component.componentWillUnmount = function()
                self.subs:delete(instance)
                component.componentWillUnmount = oldComponentWillUnmount
                local ____oldComponentWillUnmount_result_8 = oldComponentWillUnmount
                if ____oldComponentWillUnmount_result_8 ~= nil then
                    ____oldComponentWillUnmount_result_8 = ____oldComponentWillUnmount_result_8(nil)
                end
            end
        end
    end
    function Provider.prototype.render(self, ____bindingPattern0)
        local children
        local value
        value = ____bindingPattern0.value
        children = ____bindingPattern0.children
        if value ~= self.lastValue then
            self.lastValue = value
            self.subs:forEach(function(____, instance) return scheduleUpdate(instance) end)
        end
        return children
    end
    Provider.context = ctx
    ctx.Provider = Provider
    return ctx
end
return ____exports
