local x=require("\064\112\107\103\047\064\106\115\100\111\116\108\117\097\047\114\101\097\099\116")local s=require("\064\112\107\103\047\064\106\115\100\111\116\108\117\097\047\114\101\097\099\116-\114\111\098\108\111\120")local F=require("\064\112\107\103\047\064\106\115\100\111\116\108\117\097\047\115\104\097\114\101\100")local z=require("\046\047\082\111\097\099\116\084\114\101\101")return{Component=x.Component,PureComponent=x.PureComponent,createElement=x.createElement,createRef=x.createRef;forwardRef=x.forwardRef;createContext=x.createContext,None=x.None,mount=z.mount,update=z.update,unmount=z.unmount,createFragment=require("\046\047\099\114\101\097\116\101\070\114\097\103\109\101\110\116"),oneChild=require("\046\047\111\110\101\067\104\105\108\100");setGlobalConfig=require("\046\047\115\101\116\071\108\111\098\097\108\067\111\110\102\105\103"),Portal=require("\046\047\080\111\114\116\097\108"),Ref="\114\101\102",Children="\099\104\105\108\100\114\101\110",Event=F.Event;Change=F.Change,createBinding=x.createBinding;joinBindings=x.joinBindings,act=s.act}
--!strict
--[[
	* Copyright (c) Roblox Corporation. All rights reserved.
	* Licensed under the MIT License (the "License");
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	*
	*     https://opensource.org/licenses/MIT
	*
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
]]
local React = require("@pkg/@jsdotlua/react")
local ReactRoblox = require("@pkg/@jsdotlua/react-roblox")
local Shared = require("@pkg/@jsdotlua/shared")

local RoactTree = require("./RoactTree")

return {
	-- Overlapping contents of public `React` interface
	Component = React.Component,
	PureComponent = React.PureComponent,
	createElement = React.createElement,
	createRef = React.createRef,
	forwardRef = React.forwardRef,
	createContext = React.createContext,
	-- This public interface is aligned but is a deviation in React. It's
	-- necessary to accommodate lua table semantics when merging state
	None = React.None,

	-- Compatibility layer for top-level interface, stands in for `createRoot`
	-- and similar APIs
	mount = RoactTree.mount,
	update = RoactTree.update,
	unmount = RoactTree.unmount,

	-- API compatibility layers to accommodate old interfaces
	createFragment = require("./createFragment"),
	oneChild = require("./oneChild"),
	setGlobalConfig = require("./setGlobalConfig"),
	Portal = require("./Portal"),

	-- Compatibility layer for special symbol keys which will be replaced with
	-- reserved prop names in Roact 17
	Ref = "ref",
	-- FIXME: React actually _does_ have a `.Children`, which has different
	-- behavior (none of which overlaps with Roact). Should we keep this as is
	-- and accept that React.Children and RoactCompat.Children will be totally
	-- different things?
	Children = "children",

	-- Event/Change keys for Roact-specific event subscription behavior
	Event = Shared.Event,
	Change = Shared.Change,

	-- Binding interface entry-point for Roact-specific 'bindings' feature
	createBinding = React.createBinding,
	joinBindings = React.joinBindings,

	act = ReactRoblox.act,
}
